- A+
宝塔面板是很多网站管理员喜爱的服务器管理工具,它提供了商用的Nginx防火墙插件,带有丰富的WAF(Web Application Firewall)功能。然而,一些攻击者可以轻松地利用CC攻击对宝塔面板进行攻击,导致无法正常使用。
为了更好地保护你的网站,你可以使用ngx_waf插件加强宝塔WAF防护。与商用插件不同的是,ngx_waf插件并没有任何费用,并且非常易于使用。它可以轻松地设置防CC攻击,配置简单方便,使你的网站实现更高效的防护。
通过配置 ngx_waf ,你可以开启5秒盾,轻松防止 CC 攻击。该插件不仅适用于宝塔面板,还可以应用于其他Web应用程序。另外,它的防护能力也相当不错,要比一些老旧的防火墙插件效果更好。
安装教程
运行环境
CentOS 7
Nginx 1.21.0
宝塔 7.6.0
ngx_waf v7.0.0 Current
如果您的环境与我相同,以下安装指令可以照抄,反之请自行检查相关指令。
1.首先创建临时的工作目录,并将项目拷贝到本地。
2.nginx 提供两种安装模块的方式,即「静态链接」和「动态加载」,通过两种方式安装的模块也分别称为「静态模块」和「动态模块」。
3.你可以通过运行脚本 assets/guide.sh 来选择使用静态模块还是动态模块。
sh assets/guide.sh # It is recommended that you use dynamic modules. # 如果输出上面这行则建议使用动态模块。 # It is recommended that you use static modules. # 如果输出上面这行则建议使用静态模块。
4.在宝塔环境下得到的推荐是静态模块,实际在折腾过文章介绍的动态模块后均会出现奇怪的错误,于是在后文介绍的是静态模块安装。
5.到这一步我们需要开始进行编译,这里可能会涉及各种依赖问题如gcc等,由于不同环境的依赖问题不一样,这里就不再赘述,请自行通过搜索引擎解决。
6.在搞定依赖问题后需要获取当前nginx的configure 脚本的参数,在宝塔环境下输入以下指令即可获得。
/www/server/nginx/sbin/nginx -V
7.得到以下内容,这里将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.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.1.1k 25 Mar 2021 TLS SNI support enabled configure 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
8.接下来开始编译ngx_waf模块与nginx,以下代码会用到上述处理好的编译参数。
cd /root/nginx/ngx_waf make cd /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' make mv ../sbin/nginx ../sbin/nginx.bak cp ./objs/nginx ../sbin/nginx chmod +x /www/server/nginx/sbin/nginx
9.到这里就已经替换原有的Nginx程序,接下来在宝塔中启动Nginx即可!
若您出现如下报错:
nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok nginx: 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页面将html内容保存到/www/wwwroot/defence.html即可。
为什么选择 ngx_waf
1.功能齐全:「网络应用防火墙」的基本功能都有。
2.安装方便:大多数情况下你可以直接下载使用预构建的模块,而不是编译代码。
3.使用方便:配置指令简单易懂,不用看文档都能猜到大概是什么意思。
4.规则灵活:提供高级规则,将动作(如拦截或放行)和多个条件表达式组合起来。
5.高性能:经过较为极限的测试,启动本模块后 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 黑白名单。
高级规则,将动作(如拦截或放行)和多个条件表达式组合起来。
GitHub和文档
- 我的微信公众号
- 扫一扫关注
- 我的新浪微博号
- 扫一扫关注