corazawaf/coraza-apache
GitHub: corazawaf/coraza-apache
Apache 与 Coraza WAF 引擎的实验性集成模块,利用 libcoraza 提供 WAF 防护能力。
Stars: 2 | Forks: 1
# Coraza Apache 连接器
**实验性** —— 尚未准备好用于生产环境。
用于 Coraza WAF 引擎的 Apache HTTPD 模块,使用 libcoraza(C 绑定)。
与 coraza-nginx 相同的依赖链:coraza(Go) -> libcoraza(C 绑定) -> 本模块。
## 构建
编译时需要 libcoraza >= 1.4.0 头文件,运行时需要共享库。
该模块未链接 libcoraza —— 它在 fork 之后通过 dlopen() 加载,以避免 Go 运行时死锁。
```
make
make install
```
或者使用自定义 apxs 路径:
```
make APXS=/path/to/apxs
```
## Docker
从源代码构建所有内容(libcoraza + 模块):
```
docker build --no-cache -t coraza-apache-test .
docker run --rm -d --name coraza-apache-test -p 8888:80 coraza-apache-test
./test.sh http://localhost:8888
docker stop coraza-apache-test
```
要使用特定的 MPM 测试(默认是 event):
```
docker build --no-cache --build-arg MPM=prefork -t coraza-test-prefork .
docker run --rm -d --name coraza-test-prefork -p 8889:80 coraza-test-prefork
./test.sh http://localhost:8889 --mpm=prefork
docker stop coraza-test-prefork
```
`--mpm` 标志会通过 `server-info` 端点验证服务器是否正在运行预期的 MPM。
## 配置示例
所有标准的 modsecurity `Sec*` 指令都已原生注册,因此现有的
modsecurity 配置(包括 CRS)可以直接通过 Apache 的 `Include` 使用:
```
LoadModule coraza_module modules/mod_coraza.so
Coraza On
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess Off
# OWASP CRS — use CorazaRulesFile so that relative data file paths
# (e.g. @pmFromFile scanners-user-agents.data) resolve correctly
CorazaRulesFile /etc/coraza/coraza-waf.conf
# Custom exclusions for a specific path
SecRuleRemoveById 920420
SecRequestBodyLimit 52428800
# Disable inspection entirely for health checks
Coraza Off
# Directory-based custom rule
SecRule FILES_NAMES "\.php$" "id:10001,phase:2,deny,status:403"
# Disable via .htaccess (requires AllowOverride All)
# In .htaccess: Coraza Off
```
### 指令
**Sec\*** —— 所有标准的 modsecurity 指令(`SecRuleEngine`、`SecRule`、
`SecAction`、`SecRequestBodyAccess`、`SecAuditEngine` 等)都已原生注册,
可以直接在 Apache 配置文件中用于以下上下文:服务器配置、``、``、``、`.htaccess`。
**Coraza** On|Off —— 启用或禁用模块。上下文:服务器配置、``、``、``、`.htaccess`。
**CorazaRules** "..." —— 内联规则或指令。上下文:服务器配置、``、``、``、`.htaccess`。
**CorazaRulesFile** /path —— 从文件加载规则。请用于 CRS 及其他引用相对数据文件路径的规则文件。上下文:服务器配置、``、``、``、`.htaccess`。
**CorazaTransactionId** "..." —— 自定义事务 ID。上下文:服务器配置、``、``、``、`.htaccess`。
在服务器级别定义的规则会被 ``、``、`` 和 `.htaccess` 继承。
在任何上下文中将 `Coraza Off` 设置为关闭会禁用该作用域的检查。
## 工作原理
该模块挂钩到 Apache 的请求处理流程:
- **阶段 1**(修复钩子):连接信息、URI、请求头
- **阶段 2**(修复钩子):请求主体 —— 通过 ap_get_client_block() 主动读取
- **阶段 3-4**(输出过滤器):响应头和响应体,带头部延迟
- **阶段 5**(事务日志钩子):审计日志记录
规则在配置解析期间(主进程)以字符串形式收集,
并在每次 dlopen 后于每个子进程中重放。这是因为
libcoraza 内部的 Go 运行时无法在 fork 之前加载。
## 限制
- 已在 prefork 和 event MPM 上测试通过
## 许可证
Apache License 2.0
标签:Apache模块, Coraza, C绑定, Docker, HTTP安全, ModSecurity, OWASP CRS, SecRule, WAF, Web安全防护, 云计算, 入侵防护, 动态加载, 安全配置, 安全防御评估, 实验性功能, 客户端加密, 开源WAF, 日志审计, 生产环境不适用, 编译安装, 规则引擎, 请求体限制, 请求拦截, 运行时依赖