在宝塔下使用ngx_waf增强WAF防护性能/防CC/开启5秒防御盾优知新2年前更新关注私信0410 ------正文内容展示,开始汲取新知识啦------ 前言 众所周知,宝塔面板有商用的Nginx防火墙插件(要钱),具有丰富的WAF(Web Application Firewall)功能,但是其防CC能力在面对攻击时形同虚设,使用简单的CC工具就可以轻松实现503 Page。而较老的httpguard、ngx_lua_waf等均已年久失修。偶然间在Github上发现了ngx_waf后折腾了一下发现确实不错。 NGX_WAF简介 方便且高性能的 Nginx 防火墙模块。(以下内容来自原项目介绍) 为什么选择 ngx_waf 功能齐全:「网络应用防火墙」的基本功能都有。 安装方便:大多数情况下你可以直接下载使用预构建的模块,而不是编译代码。 使用方便:配置指令简单易懂,不用看文档都能猜到大概是什么意思。 规则灵活:提供高级规则,将动作(如拦截或放行)和多个条件表达式组合起来。 高性能:经过较为极限的测试,启动本模块后 RPS(每秒请求数) 降低约 4%。测试说明和结果见使用文档。 功能 SQL 注入防护(Powered By libinjection)。 XSS 攻击防护(Powered By libinjection)。 支持 IPV4 和 IPV6。 CC 防御,超出限制后自动拉黑对应 IP 一段时间。 IP 黑白名单,同时支持类似 192.168.0.0/16 和 fe80::/10,即支持点分十进制和冒号十六进制表示法和网段划分。 POST 黑名单。 URL 黑白名单 查询字符串(Query String)黑名单。 UserAgent 黑名单。 Cookie 黑名单。 Referer 黑白名单。 高级规则,将动作(如拦截或放行)和多个条件表达式组合起来。 相关链接 使用文档:https://docs.addesp.com/ngx_waf/zh-cn/ GitHub:https://github.com/ADD-SP/ngx_waf 总结 一个用C构建的高效率Nginx防火墙,开发者积极维护(在写稿的时候就更新了3个版本导致不得不反复修改),并且支持开启5秒盾,实测抗CC性能优秀! 安装方法 以下内容源于官方文档,仅供参考! 环境 CentOS 7 Nginx 1.21.0 宝塔 7.6.0 ngx_waf v7.0.0 Current 如果您的环境相同,以下安装指令可以照抄,反之请自行检查相关指令。 安装过程 首先创建临时的工作目录,并将项目拷贝到本地。 mkdir /root/nginx #临时工作目录,这个在后面会用到cd /root/nginxgit clone https://github.com/ADD-SP/ngx_waf.git #获取最新版本的ngx_waf,也可以直接去Release找以往的版本cd ngx_wafgit clone https://github.com/libinjection/libinjection.git inc/libinjection nginx 提供两种安装模块的方式,即「静态链接」和「动态加载」,通过两种方式安装的模块也分别称为「静态模块」和「动态模块」。 你可以通过运行脚本 assets/guide.sh 来选择使用静态模块还是动态模块。 sh assets/guide.sh# It is recommended that you use dynamic modules.# 如果输出上面这行则建议使用动态模块。# It is recommended that you use static modules.# 如果输出上面这行则建议使用静态模块。 在宝塔环境下得到的推荐是静态模块,实际在折腾过文章介绍的动态模块后均会出现奇怪的错误,于是在后文介绍的是静态模块安装。 到这一步我们需要开始进行编译,这里可能会涉及各种依赖问题如gcc等,由于不同环境的依赖问题不一样,这里就不再赘述,请自行通过搜索引擎解决。 在搞定依赖问题后需要获取当前nginx的configure 脚本的参数,在宝塔环境下输入以下指令即可获得。 /www/server/nginx/sbin/nginx -V 得到以下内容,这里将 configure arguments: 后面的内容记录下来,并在结尾加上 --add-module=/usr/local/src/ngx_waf 即可得到编译参数。如果您使用的编译器是 GCC,请在 --with-cc-opt 中追加 -fstack-protector-strong, 例如 --with-cc-opt='-Werror -g' ---> --with-cc-opt='-Werror -g -fstack-protector-strong'。 nginx version: nginx/1.21.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.1.1k 25 Mar 2021TLS SNI support enabledconfigure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --with-cc-opt=-std=gnu99 接下来开始编译ngx_waf模块与nginx,以下代码会用到上述处理好的编译参数。 cd /root/nginx/ngx_wafmakecd /www/server/nginx/src./configure --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --add-module=/root/nginx/ngx_waf --with-cc-opt='-std=gnu99'makemv ../sbin/nginx ../sbin/nginx.bakcp ./objs/nginx ../sbin/nginxchmod +x /www/server/nginx/sbin/nginx 到这里就已经替换原有的Nginx程序,接下来在宝塔中启动Nginx即可! 若您出现如下报错: nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is oknginx: configuration file /www/server/nginx/conf/nginx.conf test failed 则需要先卸载宝塔的Nginx防火墙再重新安装! 到此为止,安装与编译结束。 配置 在安装完成后我们可以将配置文件加入单个站点的配置文件中以实现未不同网站定制不同的规则,配置填写位置如图: 以下介绍我的配置,内容并不完善,各参数与各模块具体功能请详见参考文档! waf on; # 是否启用模块waf_rule_path /root/nginx/ngx_waf/assets/rules/; # 模块规则waf_mode DYNAMIC; # 启用动态网站模式waf_cache capacity=100; # 设置缓存规则检查结果相关的参数,过小会导致频繁地淘汰缓存,增加内存碎片,降低性能waf_under_attack on file=/www/wwwroot/defence.html; # 对所有访问的用户开启5秒盾,file需要填写单个html的绝对路径!请仅在网站遭受大量攻击的时候打开!其中该html的作用为5秒之后刷新页面!waf_cc_deny rate=300r/m duration=10m size=20m; #每分钟请求大于300次则封禁10分钟,最多缓存20M大小的请求记录 如果使用CDN或负载均衡等反向代理程序,为获取真实的客户IP地址,需要用到http_realip_module,宝塔的Nginx已经默认编译该模块。此时我们需要在配置文件中加入: set_real_ip_from 0.0.0.0/0; #CDN节点的IP段,此项可多次申明,请根据实际情况填写,照抄危险!real_ip_header X-Forwarded-For; 以上提到了用于5秒盾跳转的HTML页面,以下是我自己的一个版本,仅供参考。 此处内容已隐藏,请评论后刷新页面查看. 将以上内容保存到/www/wwwroot/defence.html即可。 测试 访问 /www.bak,如果返回 403 状态码则表示模块成功启动。 结语 至此ngx_waf模块安装结束,在配置好一定的防御策略之后可以获得不错的防御能力。其实跟云锁的部署差不多。 温馨提示:本文最后更新于2023-08-03 00:47:45,某些文章具有时效性,若有错误或已失效,请私信客服或联系知新社长。------本文内容已结束,喜欢请分享------ 感谢您的访问,Ctrl+D收藏本站吧。 © 版权声明 相关声明 1、本站名称:知新网 2、本站永久网址:https://www.uzhix.com 3、本站部分内容源于网络和用户投稿,仅供学习与参考,如有侵权,请联系站长进行删除处理。 4、用户评论和发布内容,并不代表本站赞同其观点和对其真实性负责。 5、本站禁止以任何方式发布或转载任何违法的相关信息。 6、资源大多存储在云盘,如发现链接失效,请联系我们替换更新。 七月 30 知岛上的今时往日 2024:诺瑞亚:黄金计划/Noreya: The Gold Project (0)2024:宠物店模拟器/Pet Shop Simulator (0)2024:冠军变身/Champion Shift (0)2024:与龙共存/Living With Dragons (0)2024:永恒瀑布/Everafter Falls (0) THE END软件/使用/设置# 宝塔# 防火墙# ngx_waf 点赞0投币 分享QQ空间微博QQ好友海报分享复制链接收藏