NGINX的WAF模块-Naxsi 配置白名单 (2)
上回讲到 Naxsi的 简介和安装 ,这回我们主要讲的是 配置白名单 的方法和技巧。
配置白名单
如果你的服务器安装的是Wordpress或者ruTorrent或者dokuwiki或者drupal,可以直接在 naxsi-rules 下面找到 Naxsi官方 制作的白名单哦~~
如果都没有找到适合的白名单,就只能自己去配置白名单了(/(ㄒoㄒ)/~~ 好桑心)。下面会讲白名单的基础规则的语法哦。
基础规则(BasicRule) 是用来创建白名单的记录。它的语法是
| 1 | BasicRule wl:ID [negative] [mz:[$URL:target_url]|[match_zone]|[$ARGS_VAR:varname]|[$BODY_VARS:varname]|[$HEADERS_VAR:varname]|[NAME]] | 
wl:ID (White List ID)
哪些拦截规则会进入白名单. 正确的语法是 :
- wl:0 : 把所有拦截规则加入白名单
- wl:42 : 把ID为42的拦截规则加入白名单
- wl:42,41,43 : 把ID为42, 41 和 43的拦截规则加入白名单
- wl:-42 : 把所有拦截规则加入白名单,除了ID为42的拦截规则
mz: (Match Zones)
指定的区域会生效本条白名单:
- ARGS:  GET的整个参数,如:foo=bar&in=%20
- $ARGS_VAR: GET参数的参数名, 如foo=bar&in=%20中的foo和in。
- $ARGS_VAR_X: 正则匹配的GET参数的参数名
- HEADERS: 整个HTTP协议头
- $HEADERS_VAR: HTTP协议头的名字
- $HEADERS_VAR_X: 正则匹配的HTTP协议头的名字
- BODY: POST的整个参数内容
- $BODY_VAR: POST参数的参数名
- $BODY_VAR_X: 正则匹配的POST参数的参数名
- URL: URL(?前的)
- $URL_X: 正则匹配的URL(?前的)
- FILE_EXT: 文件名 (POST上传文件时上传的文件名)
例子
已知拦截规则
#1000是过滤包含select|union|update|delete|insert|table|from|ascii|hex|unhex之类SQL关键字的规则
1
在本子规则中完全禁用拦截规则 #1000。==因为没有指定区域,所以全部加入白名单。==
| 1 | BasicRule wl:1000; | 
2
在全部GET参数名为foo的值中禁用拦截规则 #1000 (即不用#1000规则检查GET中参数名为foo中的值):
| 1 | BasicRule wl:1000 "mz:$ARGS_VAR:foo"; | 
所以, http://127.0.0.1/?foo=select * from a 不会被过滤。
3
在URL为/bar的GET请求中参数名为foo的值中禁用拦截规则 #1000:
| 1 | BasicRule wl:1000 "mz:$ARGS_VAR:foo|$URL:/bar"; | 
所以, http://127.0.0.1/bar?foo=select * from a 不会被过滤。
4
在URL为/bar的GET请求中的参数禁用拦截规则 #1000:
| 1 | BasicRule wl:1000 "mz:$URL:/bar|ARGS"; | 
所以, http://127.0.0.1/bar?my=select * from a 不会被过滤。http://127.0.0.1/bar?from=weibo 也不会被过滤。
5
在全部GET请求中对**所有参数名(只是名,不包含参数值)**中禁用拦截规则 #1000:
| 1 | BasicRule wl:1000 "mz:ARGS|NAME"; | 
所以, http://127.0.0.1/bar?from=weibo 不会被过滤。
但是, http://127.0.0.1/bar?foo=select 会被过滤(因为 select属于参数值,不在白名单范围内)。
6
在全部请求中对符合^/upload/(.*)\.(.*)$正则规则的URL禁用全部拦截规则:
| 1 | BasicRule wl:0 "mz:$URL_X:^/upload/(.*)\.(.*)$|URL"; | 
所以, http://127.0.0.1/upload/select.db 不会被过滤 (原本会触发 #1000 拦截规则)。
ASP.NET常用白名单
ASP.NET简直受够了,下面总结几个常见的会触发WAF但是理论上没有安全隐患的白名单规则。
1
| 1 | BasicRule wl:2; # request too big | 
原因: __viewstate太大了,会导致请求太大。因为一般这个是防御Apache请求超长导致的漏洞的,所以可以给#2加入白名单。
2
| 1 | BasicRule wl:0 "mz:$BODY_VAR:__viewstate"; | 
原因: 现在看到这个就头痛。经常性触发各种规则。但是一定要注意,ASPX开发人员要过滤直接在__viewstate中取得的数据。
3
| 1 | BasicRule wl:16; # Empty POST | 
原因: 有特殊情况 POST 没有传数据,会触发这个规则。建议设计时都带上data,避免触发该规则。
下一节将会讲Naxsi的核心规则中 拦截规则 的语法。
除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。
