开源WAF--ModSecurity编译安装教程(Ubuntu20.04,Nginx)_modsecurity安装
前言
官网介绍如下:
ModSecurity是目前世界上使用最多的开源WAF产品,可谓是WAF界的鼻祖,很多其他WAF产品都或多或少受其影响,如OpenWAF。
ModSecurity目前被景安网络(www.zzidc.com)所使用,用于对20万个网站进行基础的网站漏洞入侵防护,本站中文手册由原景安网络产品经理-王子,通过对比原版英文帮助文档,以及加上个人使用ModSecurity的经验进行翻译,尽量让阅读者可以通顺的理解相关说明。中文手册将由其本人定期(每月一次)检查,确保与原版英文帮助文档保持一致。
ModSecurity功能介绍
- SQL Injection (SQLi):阻止SQL注入
- Cross Site Scripting (XSS):阻止跨站脚本攻击
- Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击
- Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击
- Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击
- PHP Code Injectiod:阻止PHP代码注入
- HTTP Protocol Violations:阻止违反HTTP协议的恶意访问
- HTTPoxy:阻止利用远程代理感染漏洞进行攻击
- Sshllshock:阻止利用Shellshock漏洞进行攻击
- Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击
- Scanner Detection:阻止黑客扫描网站
- Metadata/Error Leakages:阻止源代码/错误信息泄露
- Project Honey Pot Blacklist:蜜罐项目黑名单
- GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断
项目的 Github 地址:https://github.com/owasp-modsecurity/ModSecurity
编译安装教程
本文的教程是在 Ubuntu 20.04 系统上,通过 nginx 来使用 ModSecurity。先是通过 ModSecurity 源码编译得到 ModSecurity 的库文件,然后通过 Nginx源码、ModSecurity-Nginx-master 连接器来编译安装集成了 ModSecurity 的 Nginx,接着配置使用 CoreRuleSet 规则集(一个开源的 Web 应用防火墙规则集),最后设置 Nginx 为系统服务。
一、更新软件包
sudo apt update -ysudo apt upgrade -y
二、安装相关依赖包
sudo apt install g++ flex bison curl apache2-dev doxygen libyajl-dev ssdeep liblua5.2-dev \\libgeoip-dev libtool dh-autoreconf libcurl4-gnutls-dev libxml2 libpcre++-dev libxml2-dev \\git liblmdb-dev libpkgconf3 lmdb-doc pkgconf zlib1g-dev libssl-dev \\libpcre2-dev libmaxminddb-dev libfuzzy-dev -y
三、下载资源文件
# ①下载 coreruleset(我这里用的是 4.4.0 版本)# https://github.com/coreruleset/coreruleset/releases# ②下载 ModSecurity-nginx-master(我这里用的是 1.0.3 版本)(最后一个版本)# https://objects.githubusercontent.com/github-production-release-asset-2e65be/37931803/bb867f56-6622-4715-aaea-9bfa8840fc83?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250425%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250425T072051Z&X-Amz-Expires=300&X-Amz-Signature=8e06a89a1eb060581afa41a8cb1f15a994beb6d7c9bf73ada72be2b58b30d30c&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dmodsecurity-nginx-v1.0.3.tar.gz&response-content-type=application%2Foctet-stream# ③下载 nginx-1.20.1.tar.gz# http://nginx.org/download/nginx-1.20.1.tar.gz
四、编译 ModSecurity
Clone ModSecurity
的 Github 项目
# clone modsecurity 项目git clone https://github.com/owasp-modsecurity/ModSecurity.git modsecurity# 网络问题,可以通过设置临时代理来解决(本机需要挂节点,clash 系一般是 7897 端口)export http_proxy=http://127.0.0.1:7897export https_proxy=http://127.0.0.1:7897# 设置后验证一下curl -v https://www.google.com# 再次 git clone 项目git clone https://github.com/owasp-modsecurity/ModSecurity.git modsecurity
初始化并更新 git
子模块
git submodule initgit submodule update
进入到 modsecurity
子目录,然后运行 build.sh
./build.sh
运行 configure
./configure
执行 make
命令
make
make
执行完后( make
需要一些时间),执行 make install
进行安装
sudo make install
编译得到的相关库应该是在 /usr/local/modsecurity/lib/
目录里
添加 modsecurity
相关库文件的路径到环境变量中
sudo sh -c \'echo \"/usr/local/modsecurity/lib\" > /etc/ld.so.conf.d/modsecurity.conf\'sudo ldconfig
五. 编译安装支持 ModSecurity 的 Nginx
解压缩 Modsecurity-nginx-master.zip
、nginx-1.20.1.tar.gz
unzip resources/ModSecurity-nginx-master.zip -d .# 解压 ModSecurity-nginx-master.zip(连接器)tar -zxvf resources/nginx-1.20.1.tar.gz -C .# 解压 nginx-1.20.1.tar.gz
现在的目录结构图
创建 Nginx
用户和组
# 创建nginx组(如果还没有)sudo groupadd -r nginx# 创建nginx用户sudo useradd -r -g nginx -s /sbin/nologin -d /usr/local/nginx nginx
配置 Nginx
# 进入到 nginx 目录cd nginx-1.20.1# 配置 Nginxsudo ./configure \\ --user=nginx \\ --group=nginx \\ --with-pcre-jit \\ --with-debug \\ --with-compat \\ --with-http_ssl_module \\ --with-http_realip_module \\ --add-module=../ModSecurity-nginx-master \\ --http-log-path=/var/log/nginx/access.log \\ --error-log-path=/var/log/nginx/error.log \\ --with-cc-opt=\"-Wno-deprecated-declarations\"
编译 nginx
sudo make
安装 nginx
sudo make install
确保日志目录具有正确的权限
sudo mkdir -p /var/log/nginxsudo chown -R nginx:nginx /var/log/nginx
创建 Nginx
二进制文件的符号链接
sudo ln -sf /usr/local/nginx/sbin/nginx /usr/sbin/nginx
验证 Nginx
是否安装成功
nginx -V
六、使用 ModSecurity 配置 Nginx
复制 modsecurity.conf-recommended
和 unicode.mapping
文件到 /usr/local/nginx/conf
文件夹下
(modsecurity.conf-recommended 和 unicode.mapping 都位于 modsecurity 文件夹下)
执行以下两条命令
sudo cp modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.confsudo cp modsecurity/unicode.mapping /usr/local/nginx/conf/
修改 Nginx
配置文件
# 备份sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak# 编辑 /usr/local/nginx/conf/nginx.conf 文件,添加两行内容(如下图)
解压缩 coreruleset.zip
到 /usr/local/nginx/conf
文件夹下
sudo unzip resources/coreruleset.zip -d /usr/local/nginx/conf/
重命名 coreruleset/crs-setup.conf.example
为 coreruleset/crs-setup.conf
sudo mv /usr/local/nginx/conf/coreruleset/crs-setup.conf.example /usr/local/nginx/conf/coreruleset/crs-setup.conf
修改 modsecurity.conf
文件
# SecRuleEngine为on,并在末尾增加如下配置(注意修改路径):Include /usr/local/nginx/conf/coreruleset/crs-setup.confInclude /usr/local/nginx/conf/coreruleset/rules/*.conf
验证 nginx
配置有没有问题
sudo nginx -t
启动 nginx
sudo nginx
验证是否成功配置并启动
curl localhost?doc=/bin/ls
七、设置 Nginx 为系统服务
编辑文件 /etc/systemd/system/nginx.service
# sudo nano /etc/systemd/system/nginx.service# 添加以下内容[Unit]Description=The NGINX HTTP and reverse proxy server with ModSecurityAfter=network.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStartPre=/usr/local/nginx/sbin/nginx -tExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target
然后启用并启动服务
sudo systemctl daemon-reloadsudo systemctl enable nginxsudo systemctl start nginx
你可以使用以下命令管理 Nginx
sudo systemctl start nginx # 启动sudo systemctl stop nginx # 停止sudo systemctl restart nginx # 重启sudo systemctl reload nginx # 重新加载配置sudo systemctl status nginx # 查看状态