lnmp安装ngx_waf模块
ngx_waf是一款方便且高性能的nginx防火墙模块,功能齐全,「网络应用防火墙」的基本功能都有。安装方便,大多数情况下你可以直接下载使用预构建的模块。使用便捷,配置指令简单易懂。规则灵活,提供高级规则,将动作(如拦截或放行)和多个条件表达式组合起来。
Github项目地址:https://github.com/ADD-SP/ngx_waf
功能特性
兼容 ModSecurity。
SQL 注入防护。
XSS 攻击防护。
支持 IPV4 和 IPV6。
支持开启验证码(CAPTCHA),支持hCaptcha、reCAPTCHAv2和reCAPTCHAv3。
支持识别友好爬虫(如 BaiduSpider)并自动放行(基于User-Agent和IP的识别)。
CC防御,超出限制后自动拉黑对应IP一段时间或者使用验证码做人机识别。
IP黑白名单,同时支持类似192.168.0.0/16和fe80::/10,即支持点分十进制和冒号十六进制表示法和网段划分。
POST 黑名单。
URL 黑白名单
查询字符串(Query String)黑名单。
UserAgent 黑名单。
Cookie 黑名单。
Referer 黑白名单。
⚠️ 本教程基于军哥的lnmp一键包环境!
lnmp = v1.8
nginx version = 1.20.2
gcc version = 4.8.5
一、安装依赖
yum install gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel pcre-devel git libtool libcurl libcurl-devel
二、编译安装current版本的ngx_waf模块
cd /usr/local/src \
&& git clone -b current https://github.com/ADD-SP/ngx_waf.git \
&& cd ngx_waf \
&& make
cd /usr/local/src \
&& git clone https://github.com/libinjection/libinjection.git lib/libinjection
cd /usr/local/src/ngx_waf \
&& git clone https://github.com/DaveGamble/cJSON.git lib/cjson
cd /usr/local/src/ngx_waf \
&& git clone https://github.com/libinjection/libinjection.git inc/libinjection
# 安装libsodium
cd /usr/local/src \
&& git clone https://github.com/jedisct1/libsodium.git --branch stable libsodium-src \
&& cd libsodium-src \
&& ./configure --prefix=/usr/local/libsodium --with-pic \
&& export LIB_SODIUM=/usr/local/libsodium \
&& make -j$(nproc) && make check -j $(nproc) && make install
cd /usr/local/src \
&& git clone https://github.com/troydhanson/uthash.git \
&& mv uthash /usr/local \
&& export LIB_UTHASH=/usr/local/uthash
# 安装libmaxminddb
cd /usr/local/src \
&& wget https://github.com/maxmind/libmaxminddb/releases/download/1.6.0/libmaxminddb-1.6.0.tar.gz -O libmaxminddb.tar.gz \
&& mkdir libmaxminddb
&& tar -zxf "libmaxminddb.tar.gz" -C libmaxminddb --strip-components=1 \
&& cd libmaxminddb \
&& ./configure --prefix=/usr/local/libmaxminddb \
&& make -j$(nproc) && make install
# 安装ModSecurity v3
cd /usr/local/src \
&& git clone -b v3.0.6 https://github.com/SpiderLabs/ModSecurity.git \
&& cd ModSecurity \
&& chmod +x build.sh \
&& ./build.sh \
&& git submodule init \
&& git submodule update \
&& ./configure --prefix=/usr/local/modsecurity --with-maxmind=/usr/local/libmaxminddb \
&& export LIB_MODSECURITY=/usr/local/modsecurity \
&& make -j$(nproc) && make install
进入lnmp1.8所在目录,编辑nginx升级脚本
vi ~/lnmp1.8/include/upgrade_nginx.sh
找到else
后面的./configure
这行(大概第63行),在这串编译参数末端追加--add-module=/usr/local/src/ngx_waf --with-cc-opt='-std=gnu99 -Wno-sign-compare -Wno-error'
升级并编译nginx
cd ~/lnmp1.8
./upgrade.sh nginx
输入版本号,回车,耐心等待编译完成。
三、配置 waf 防火墙
编辑nginx配置文件/usr/local/nginx/conf/nginx.conf
在http
块内加入以下代码
# 声明一块共享内存
waf_zone name=waf size=20m;
编辑主机配置文件/usr/local/nginx/conf/vhost/2dan.cc.conf
在server
块内加入以下代码
# 启用模块
waf on;
# 指定规则文件所在目录
waf_rule_path /usr/local/src/ngx_waf/assets/rules/;
# 防火墙工作模式,STD 表示标准模式。
waf_mode STD;
# CC防御参数,每分钟请求次数上限1000,超出上限后封禁对应ip 60分钟。
waf_cc_deny on rate=1000r/m duration=60m zone=waf:cc;
# 最多缓存50个检测目标的检测结果,对除了IP黑白名单检测、CC防护和POST检测以外的所有检测生效。
waf_cache capacity=50;
如果要对所有网站启用刚将上面代码添加到/usr/local/nginx/conf/nginx.conf
文件的http
块内即可
修改完成后,重启nginx使配置生效。
/usr/local/nginx/sbin/nginx -s reload
更多使用姿势请访问 -> 官方文档