在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
功能描述: http{ ...... white_black_list_conf conf/white.list zone=white:4m; white_black_list_conf conf/black.list zone=black:4m; ...... server{ ....... } ....... } 二、黑白名单作用范围 http{ ...... white_black_list_conf conf/white.list zone=white1:4m; white_black_list_conf conf/black.list zone=black1:4m; white_list white1 on; #白名单 white1 在整个http{} 中都开启 black_list black1 on; #黑名单 black1 在整个http{} 中都开启 server{ ....... } ....... } http{ ...... white_black_list_conf conf/white.list zone=white2:4m; white_black_list_conf conf/black.list zone=black2:4m; server{ ....... white_list white2 on; #白名单 white1 在整个server{} 中都开启 black_list black2 on; #黑名单 black1 在整个server{} 中都开启 ....... } ....... } http{ ...... white_black_list_conf conf/white.list zone=white3:4m; white_black_list_conf conf/black.list zone=black3:4m; white_black_list_conf conf/black.list zone=black2:4m; white_black_list_conf conf/white.list zone=white2:4m; server{ ....... location /do { ........ white_list white3 on; #白名单 white3 在location /do{} 中开启 black_list black3 on; #黑名单 black3 在location /do{} 中开启 ........ } location /do1{ white_list white2 on; #白名单 white2 在整个server{} 中都开启 black_list black2 on; #黑名单 black2 在整个server{} 中都开启 } ....... } ....... } 4.http配置接口说明: http{ ....... server{ ...... location /sec_config{ sec_config on; } ...... } ....... } (2)配置方法: { "version": "nginx/1.3.0", "code": "0", "item": { "conf_type": "white_black_list_conf", "zone_name": "white", "list_path": "/home/john/nginx/conf/white.list" }, "item": { "conf_type": "white_black_list_conf", "zone_name": "black", "list_path": "/home/john/nginx/conf/black.list" }, "item": { "conf_type": "white_black_list_conf", "zone_name": "ex", "list_path": "/home/john/nginx/conf/status_ex" } } b. http://xxx/sec_config?zone_name=white 查看zone_name 为white 的 list_path中的具体内容 2.2.2.2 192.168.141.1 3.3.3.3 4.4.4.5 2.3.4.4 四、动态黑名单 " if (rc == NGX_BUSY) { ngx_log_error(lrcf->limit_log_level, r->connection->log, 0, "limiting requests, excess: %ui.%03ui by zone \"%V\"", excess / 1000, excess % 1000, &limit->shm_zone->shm.name); " 在其下面增加: ngx_black_add_item_interface(r, 1); 配备关键字: http{ .... white_black_list_conf conf/black.list zone=black:4m; limit_req_zone $binary_remote_addr zone=one:8m rate=4r/s; ... server { location / { black_list black on; limit_req zone=one burst=6; dyn_black black 60; //禁止访问60秒,60秒后自动解除 ... } location /xxx { sec_config on; } ... } ... } PS:基于lua-nginx-module的ngx_lua_waf防火墙 项目地址:https://github.com/loveshell/ngx_lua_waf?utm_source=tuicool&utm_medium=referral 推荐使用lujit2.1做lua支持 ngx_lua如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。 使用说明: nginx安装路径假设为:/usr/local/nginx/conf/ 把ngx_lua_waf下载到conf目录下,解压命名为waf 在nginx.conf的http段添加 lua_package_path "/usr/local/nginx/conf/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /usr/local/nginx/conf/waf/init.lua; access_by_lua_file /usr/local/nginx/conf/waf/waf.lua; 配置config.lua里的waf规则目录(一般在waf/conf/目录下) RulePath = "/usr/local/nginx/conf/waf/wafconf/" 绝对路径如有变动,需对应修改 然后重启nginx即可 配置文件详细说明: RulePath = "/usr/local/nginx/conf/waf/wafconf/" 检查规则是否生效 部署完毕可以尝试如下命令: curl http://xxxx/test.php?id=../etc/passwd 返回"Please go away~~"字样,说明规则生效。 规则更新: 考虑到正则的缓存问题,动态规则会影响性能,所以暂没用共享内存字典和redis之类东西做动态管理。 规则更新可以把规则文件放置到其他服务器,通过crontab任务定时下载来更新规则,nginx reload即可生效。以保障ngx lua waf的高性能。 只记录过滤日志,不开启过滤,在代码里在check前面加上--注释即可,如果需要过滤,反之 一些说明: 过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割
默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分--注释即可 日志文件名称格式如下:虚拟主机名_sec.log |
请发表评论