lnmp安装ngx_waf模块

ngx_waf是一款方便且高性能的ng­inx防火墙模块,功能齐全,「网络应用防火墙」的基本功能都有。安装方便,大多数情况下你可以直接下载使用预构建的模块。使用便捷,配置指令简单易懂。规则灵活,提供高级规则,将动作(如拦截或放行)和多个条件表达式组合起来。
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.confhttp块内加入以下代码

# 声明一块共享内存
waf_zone name=waf size=20m;

编辑主机配置文件/usr/local/nginx/conf/vhost/2dan.cc.confserver块内加入以下代码

# 启用模块
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

更多使用姿势请访问 -> 官方文档

标签:Nginx, 安装, 防火墙, lnmp, waf, 编译, 攻击, 防护, 名单

添加新评论