# 更新日志(2.x.x)
本文件的格式基于如何维护更新日志 (opens new window), 并且本项目遵守语义化版本 (opens new window)。
何为「不兼容的修改」?
- 原有的配置文件可能无法使用,比如删除或者重命名了某个配置项。
- 可能需要更新编译环境,比如安装新的依赖。
# [2.1.1] - 2020-12-10
# 新增
# 改动
# 修复
- 修复了模块启动失败的 bug。此 bug 的报错信息为
nginx: [alert] could not open error log file: open() "ngx_waf: /logs/error.log" failed (2: No such file or directory)
(0dfc46f (opens new window))。
# [2.1.0] - 2020-12-09
# 新增
- 兼容了 Mainline 版本的 nginx(f31f906 (opens new window) & 65277d1 (opens new window))。
# 改动
# 修复
# [2.0.2] - 2020-12-07
# 新增
# 改动
# 修复
修复了一个 CC 防御失效的 bug。此 bug 会导致当
waf_mult_mount
未启用时,CC 防御会失效(048fe5c (opens new window))。修复了一个因错误的
#include
指令而导致编译失败的 bug(3fa298c (opens new window))。
# [2.0.1] - 2020-12-03
# 新增
# 改动
- 不再手动下载 uthash 依赖,改用 system library。可以使用
yum install uthash-devel
或apt-get install uthash-dev
安装 system library(7cfc94b (opens new window))。
# 修复
- 修复了因为宏的重定义导致的在 CentOS/RHEL 6 or 7 下编译失败的错误(28e1c8a (opens new window) & 566ae4a (opens new window))。
# [2.0.0] - 2020-09-29
# 新增
- 支持以动态模块安装到 nginx 上,感谢 dvershinin (opens new window)的 PR(https://github.com/ADD-SP/ngx_waf/pull/4)。
# 改动
- 配置指令合并 (ba92cfd (opens new window))。这些配置指令将被合并:
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 (opens new window))。 - 现在可以正确处理规则文件中的空行了(955cf2d (opens new window))。
# [1.0.1] - 2020-08-22
# 新增
- 增加了新的配置项(3214fc8 (opens new window))
- 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 (opens new window))。- waf_mult_mount:
- 配置语法:
waf_mult_mount [ on | off ];
- 默认值:
off
- 配置段: server
- 作用:进行多阶段检查,当
nginx.conf
存在地址重写的情况下(如rewrite
配置)建议启用,反之建议关闭。
- 配置语法:
- waf_mult_mount:
- 更改现有的配置项关键字,删除了
ngx_
前缀(8b3e416 (opens new window))。- 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 (opens new window))。
# 修复
- 修复 CC 防御功能检测逻辑的错误,该错误会导致实际的频率限制要远小于用户指定的限制,容易将正常访问识别为 CC 攻击(9cb51bb (opens new window))(171721c (opens new window))。
- 现在会检查 rules/ipv4 和 rules/white-ipv4 这两个文件中的 IPV4 地址或地址块是否合法(fc09f04 (opens new window))(2e7f624 (opens new window))。
# [1.0.0] - 2020-08-18
# 新增
- 改进日志格式(bd112ec (opens new window))。基本格式为
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 (opens new window))
$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 (opens new window))。
- 新配置项
ngx_waf_mult_mount
用于增加拦截面(e1b500d (opens new window)),典型的应用场景是存在rewrite
的情况下重写前后均会对 URL 进行一次检测。 - 支持 CC 防御功能(3a93e19 (opens new window))。
# 改动
- 增加默认的 POST 过滤规则(68dd102 (opens new window))
- 更新默认规则(55f0a48 (opens new window))。
- 修改规则优先级(3c388c8 (opens new window))(248958d (opens new window))(b46641e (opens new window))((92447a3)[https://github.com/ADD-SP/ngx_waf/commit/92447a39d6a36ab027b0ead0daa0fe2b3b74ff29]),现在的优先级为(靠上的优先生效):
- IP 白名单
- IP 黑名单
- CC 防御
- URL 白名单
- URL 黑名单
- Args 黑名单
- UserAgent 黑名单
- Referer 白名单
- Referer 黑名单
- Cookie 黑名单
- POST 黑名单
# 修复
- IPV4 黑白名单功能失效(231f94a (opens new window))。
- 当 User-agent 为空时会触发 segmentation fault(bf33b36 (opens new window))。
- 启用 CC 防御后会有内存泄漏(be58d18 (opens new window))。