- 兼容较低版本的 GCC(becbbe0)。
- 因为在
v3.0.3测试过程中新增了向下兼容的功能,所以v3.0.3被跳过。
- 增加调试日志便于排障(bac1d02)。
- 因为在
v3.0.1上有热修复,所以v3.0.2的一切测试版本作废,请不要使用这些测试版。
- 修复一个了在
Alpine Linux下的编译错误(e989aa3)。
- 修复了一个在检查 Cookie 时的段错误(8dc2b56)。
-
删除了一些无用的日志(bd279e7)。
-
友好的错误提示(d1185b2 & f2b617d)。当规则文件中 IP 地址无效或者 IP 地址块重叠的时候警告或者报错(并不能检测所有的重叠情况)。
-
更快的 IP 地址检查速度(2b9e774)。改用前缀树检查 IP,现在在常数时间内即可完成 IP 的匹配,之前是一个一个地匹配,是线性时间。
-
修复了 Cookie 检查的失效的 bug(87beed1)。
-
修改
config文件以确保执行make或make modules时最新的模块代码能够被编译(25f97f5)。在修复之前,如果仅仅inc/下的文件发生变化,编译时不会将最新的代码编译进去,因为没有检查inc/下的文件是否发生变化。 -
修复了 IPV4 网段识别错误的 bug(73a22eb)。这个 bug 可能会导致当规则中出现类似
192.168.0.0/10,即后缀不是 8 的倍数的时候无法正确生成子网掩码。
- 修复了模块启动失败的 bug。此 bug 的报错信息为
nginx: [alert] could not open error log file: open() "ngx_waf: /logs/error.log" failed (2: No such file or directory)(0dfc46f)。
-
修复了一个 CC 防御失效的 bug。此 bug 会导致当
waf_mult_mount未启用时,CC 防御会失效(048fe5c)。 -
修复了一个因错误的
#include指令而导致编译失败的 bug(3fa298c)。
- 不再手动下载 uthash 依赖,改用 system library。可以使用
yum install uthash-devel或apt-get install uthash-dev安装 system library(7cfc94b)。
- 支持以动态模块安装到 nginx 上,感谢 dvershinin的 PR(https://github.com/ADD-SP/ngx_waf/pull/4)。
- 配置指令合并 (ba92cfd)。这些配置指令将被合并:
waf_check_ipv4,waf_check_url,waf_check_args,waf_check_ua,waf_check_referer,waf_check_cookie,waf_check_post,waf_check_cookie,waf_cc_deny。合并后的新指令为waf_mode,详情见README。
- 删除一个默认的 User-Agent 规则,规则内容为
(?i)(?:Sogou web spider),原因是会拦截非恶意的网络爬虫(827d4e5)。 - 现在可以正确处理规则文件中的空行了(955cf2d)。
- 增加了新的配置项(3214fc8)
- waf_check_ipv4:
- 配置语法:
waf_check_ipv4 [ on | off ]; - 默认值:
on - 配置段: server
- 作用:是否启用 IPV4 检查。
- 配置语法:
- waf_check_url:
- 配置语法:
waf_check_url [ on | off ]; - 默认值:
on - 配置段: server
- 作用:是否启用 URL 检查。
- 配置语法:
- waf_check_args:
- 配置语法:
waf_check_args [ on | off ]; - 默认值:
on - 配置段: server
- 作用:是否启用 Args 检查。
- 配置语法:
- waf_check_ua:
- 配置语法:
waf_check_ua [ on | off ]; - 默认值:
on - 配置段: server
- 作用:是否启用 User-Agent 检查。
- 配置语法:
- waf_check_referer:
- 配置语法:
waf_check_referer [ on | off ]; - 默认值:
on - 配置段: server
- 作用:是否启用 Referer 检查。
- 配置语法:
- waf_check_cookie:
- 配置语法:
waf_check_cookie [ on | off ]; - 默认值:
on - 配置段: server
- 作用:是否启用 Cookie 检查。
- 配置语法:
- waf_check_post:
- 配置语法:
waf_check_post [ on | off ]; - 默认值:
off - 配置段: server
- 作用:是否启用 POST 检查。
- 配置语法:
- waf_cc_deny:
- 配置语法:
waf_cc_deny [ on | off ]; - 默认值:
off - 配置段: server
- 作用:是否启用 CC 防御。
- 配置语法:
- waf_check_ipv4:
waf_mult_mount现在只允许写在server段中(3214fc8)。- waf_mult_mount:
- 配置语法:
waf_mult_mount [ on | off ]; - 默认值:
off - 配置段: server
- 作用:进行多阶段检查,当
nginx.conf存在地址重写的情况下(如rewrite配置)建议启用,反之建议关闭。
- 配置语法:
- waf_mult_mount:
- 更改现有的配置项关键字,删除了
ngx_前缀(8b3e416)。- waf:
- 配置语法:
waf [ on | off ]; - 默认值:
off - 配置段: server
- 作用:是否启用本模块。
- 配置语法:
- waf_rule_path:
- 配置语法:
waf_rule_path dir; - 默认值:无
- 配置段: server
- 作用:规则文件所在目录,且必须以
/结尾。
- 配置语法:
- waf_mult_mount:
- 配置语法:
waf_mult_mount [ on | off ]; - 默认值:
off - 配置段: http
- 作用:进行多阶段检查,当
nginx.conf存在地址重写的情况下(如rewrite配置)建议启用,反之建议关闭。
- 配置语法:
- waf:
- 更新 referer 的默认规则,具体一点就是拷贝
rules/url的内容到rules/referer中(55f5e26)。
- 修复 CC 防御功能检测逻辑的错误,该错误会导致实际的频率限制要远小于用户指定的限制,容易将正常访问识别为 CC 攻击(9cb51bb)(171721c)。
- 现在会检查 rules/ipv4 和 rules/white-ipv4 这两个文件中的 IPV4 地址或地址块是否合法(fc09f04)(2e7f624)。
- 改进日志格式(bd112ec)。基本格式为
xxxxx, ngx_waf: [拦截类型][对应规则], xxxxx,具体可看下面的例子。2020/01/20 22:56:30 [alert] 24289#0: *30 ngx_waf: [BLACK-URL][(?i)(?:/\.env$)], client: 192.168.1.1, server: example.com, request: "GET /v1/.env HTTP/1.1", host: "example.com", referrer: "http:/example.com/v1/.env" 2020/01/20 22:58:40 [alert] 24678#0: *11 ngx_waf: [BLACK-POST][(?i)(?:select.+(?:from|limit))], client: 192.168.1.1, server: example.com, request: "POST /xmlrpc.php HTTP/1.1", host: "example.com", referrer: "https://example.com/" - 新增三个内置变量(92d6d84)
$waf_blocked: 本次请求是否被本模块拦截,如果拦截了则其的值为'true',反之则为'false'。$waf_rule_type:如果本次请求被本模块拦截,则其值为触发的规则类型。下面是可能的取值。若没有生效则其值为'null'。'BLACK-IPV4''BLACK-URL''BLACK-ARGS''BLACK-USER-AGENT''BLACK-REFERER''BLACK-COOKIE''BLACK-POST'
'$waf_rule_details':如果本次请求被本模块拦截,则其值为触发的具体的规则的内容。若没有生效则其值为'null'。
- 支持过滤 POST 请求(b46641e)。
- 新配置项
ngx_waf_mult_mount用于增加拦截面(e1b500d),典型的应用场景是存在rewrite的情况下重写前后均会对 URL 进行一次检测。 - 支持 CC 防御功能(3a93e19)。