一. 实验目标
基于Nginx(本机实装)安装并配置 ModSecurity 模块,搭建WAF,实现以下安全功能:
1.对 SQL 注入攻击进行阻断并报警。
2.对特定扫描器或发包工具(paros、w3af 等)的 User-Agent 进行检测和报警
二. 实验过程
1. 配置环境
sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev libssl-dev zlib1g zlib1g-dev build-essential
git clone --depth 1 -b v3/master --single-branch
https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
git submodule init
git submodule update
./build.sh
./configure
make
sudo make install
耐心等待编译完成。
2. 安装ModSecurity-nginx 连接器
git clone --depth 1
https://gitclone.com/github.com/SpiderLabs/ModSecurity-nginx.git
安装过nginx1.18.0版本,所以下载同版本源码重新编译,链接这个模块。
链接完毕后,将objs/ngx_http_modsecurity_module.so复制到nginx的实装目录,供配置文件链接。我选择了modsecurity/aaa.so.
3. 下载并部署 OWASP ModSecurity CRS 规则库
Nginx/modsecurity文件夹下需要有这四项。打开其中的rules文件夹,去除900和999规则后的example后缀,这是后期自定义规则使用的配置文件。
然后打开/etc/nginx,编辑nginx.conf和/modsecurity/modsecurity.conf,使得nginx打开modsecurity服务。
对于:modsecurity.conf
SecRuleEngine DetectionOnly改为SecRuleEngine On
同时添加以下内容:
Include /etc/nginx/modsecurity/crs-setup.conf
Include /etc/nginx/modsecurity/rules/*.conf
将ModSecurity在记录审计日志时保存请求体IJ 改为 C
SecAuditLogParts ABCDEFHZ
重启nginx后即可开始配置自定义规则
4. 配置自定义规则
4.1 实现阻断SQL注入攻击:
这里我根据实验二里探索到的三种SQL注入攻击,进行了检测;
配置在900文件里,其命名规则为xxx文件决定了前三位,内部序号占用后三位,所以采取900-001~900-003
4.2 实现阻断扫描,以及过多同一IP访问
004可以检测用户的User-Agent,检测到带有w3af或者sqlmap就会返回403,组织发包工具,扫描工具等。。
008-012负责封禁过多访问的同一IP。
接下来进行测试
三. 测试
Modsecurity.conf记录了它的log位置,我们先尝试三种SQL注入攻击:
正常例
尝试布尔盲注入
查看报警文件,是900002规则,防止了布尔攻击。
延时攻击也被403
sqlmap工具的所有扫描也惨遭403:
报警如下:
同一IP过度访问则会被永久封禁
尝试使用火狐浏览器访问网页,无法访问:
成功完成实验目标。