Ubuntu 18.04 部署 ModSecurity(含 Nginx)安装方式
下面给你一套 Ubuntu 18.04 部署 ModSecurity(含 Nginx)最完整、最稳定、一次成功的安装方式,适合生产环境。
✅ 方案概览(推荐)
Ubuntu 18.04 上 ModSecurity 有两种方式:
方式 A:Nginx + ModSecurity v3(推荐,最新架构)
-
需要编译 ModSecurity v3 库
-
再重新编译 Nginx + ModSecurity Connector
适合需要稳定 + 高性能。
方式 B:直接用 libapache2-mod-security2(仅 Apache 生效)
不适用 Nginx,不推荐。
✅ 以下给出完整的 Nginx + ModSecurity v3 部署步骤(推荐)
1. 安装依赖
sudo apt update
sudo apt install -y git build-essential autoconf automake libtool \
libpcre3 libpcre3-dev libssl-dev libxml2 libxml2-dev \
libyajl-dev libgeoip-dev pkg-config doxygen \
libcurl4-openssl-dev liblua5.3-dev
2. 下载并编译 ModSecurity v3(库)
cd /usr/local/src
sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
sudo git submodule init
sudo git submodule update
sudo ./build.sh
sudo ./configure
sudo make
sudo make install
生成库文件:
/usr/local/modsecurity/lib/libmodsecurity.so
3. 下载并编译 Nginx + ModSecurity v3 Connector
3.1 下载 Connector
cd /usr/local/src
sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx
3.2 下载并重新编译 Nginx(必须)
(示例使用 nginx 1.18,换成你自己版本号即可)
NGINX_VERSION=1.18.0
cd /usr/local/src
sudo wget http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz
sudo tar zxvf nginx-$NGINX_VERSION.tar.gz
cd nginx-$NGINX_VERSION
3.3 导出现有 Nginx 编译参数(非常重要)
nginx -V
你会看到一大串 --with-xxx 参数
需要包含全部参数,并额外加:
--add-module=/usr/local/src/ModSecurity-nginx
例如:
sudo ./configure \
--with-http_ssl_module \
--with-http_v2_module \
--add-module=/usr/local/src/ModSecurity-nginx
然后编译并替换 nginx:
sudo make
sudo cp objs/nginx /usr/sbin/nginx
4. 添加 ModSecurity 配置
4.1 创建目录
sudo mkdir /etc/nginx/modsec
cd /etc/nginx/modsec
4.2 生成默认配置
sudo wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
sudo mv modsecurity.conf-recommended modsecurity.conf
sudo wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/unicode.mapping
4.3 修改配置
sudo nano /etc/nginx/modsec/modsecurity.conf
修改:
SecRuleEngine On # 开启防护模式
5. 加载 OWASP CRS 规则集(强烈推荐)
cd /etc/nginx/modsec
sudo git clone https://github.com/coreruleset/coreruleset.git
sudo mv coreruleset rules
sudo cp rules/crs-setup.conf.example rules/crs-setup.conf
6. Nginx 中启用 ModSecurity
编辑 nginx.conf 或 vhost:
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;
示例:
server {
listen 443 ssl;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;
root /var/www/html;
}
7. 检查配置并重启 Nginx
sudo nginx -t
sudo systemctl restart nginx
🚀 8. 测试是否生效
访问:
http://your_server/?id=' OR '1'='1
如返回 403 Forbidden,说明成功。
📌 若你提供当前 nginx -V 结果
我可以为你 生成一条你直接复制粘贴即可编译成功的 configure 命令,避免你手动拼接失败。
也可以根据你当前的生产环境,为你做:
✅ 自动安装脚本
✅ 自动更新规则
✅ 自动生成日志监控(fail2ban + CRS)
✅ 满足 HTTPS + WAF 一次成功的完整工程方案
你需要我为你的环境直接生成一键安装脚本吗?
下面我根据你当前环境 nginx:1.20.2 官方 Docker 镜像 的编译参数,给你一套 完全适配 Docker 环境的一键部署 ModSecurity v3 + CRS 规则 的方案。
你现在用的是:
-
nginx:1.20.2 官方镜像(Debian)
-
需要重新编译 Nginx + ModSecurity v3 Connector(因为官方镜像不带 WAF)
-
又是 Docker 环境 → 最佳方式是构建一个自定义镜像
✅ 最稳定的方式:构建一个 “支持 ModSecurity 的 Nginx 1.20.2” 镜像
下面我已经根据你的 nginx -V 的 configure 参数 自动生成了完整可直接使用的 Dockerfile。
你只需要复制即可使用。
🚀 一、创建目录
mkdir -p /home/shuncom/build/nginx-modsec
cd /home/shuncom/build/nginx-modsec
🚀 二、创建 Dockerfile(直接复制即可)
这个 Dockerfile 能构建出:
✔ Nginx 1.20.2
✔ ModSecurity v3
✔ ModSecurity-nginx Connector
✔ 完整支持 CRS 规则
✔ 与你当前 nginx 配置完全兼容
Dockerfile:
FROM debian:bullseye
# 基础依赖
RUN apt update && apt install -y \
git build-essential autoconf automake libtool \
libpcre3 libpcre3-dev libssl-dev libxml2 libxml2-dev \
libyajl-dev pkg-config doxygen curl wget \
libcurl4-openssl-dev liblua5.3-dev ca-certificates && \
apt clean
# 下载并编译 ModSecurity v3
RUN cd /usr/local/src && \
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity && \
cd ModSecurity && git submodule update --init && \
./build.sh && ./configure && make && make install
# 下载 ModSecurity-nginx connector
RUN cd /usr/local/src && \
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx
# 下载 Nginx 1.20.2 源码
RUN cd /usr/local/src && \
wget http://nginx.org/download/nginx-1.20.2.tar.gz && \
tar zxvf nginx-1.20.2.tar.gz
# 按照你当前 nginx -V 参数编译 Nginx
RUN cd /usr/local/src/nginx-1.20.2 && \
./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.20.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' \
--add-module=/usr/local/src/ModSecurity-nginx && \
make && make install
# 创建目录
RUN mkdir -p /etc/nginx/modsec /var/cache/nginx/
# 下载 ModSecurity 默认配置
RUN cd /etc/nginx/modsec && \
wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended && \
mv modsecurity.conf-recommended modsecurity.conf && \
wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/unicode.mapping
# 下载 CRS 规则
RUN cd /etc/nginx/modsec && \
git clone https://github.com/coreruleset/coreruleset.git && \
mv coreruleset rules && \
cp rules/crs-setup.conf.example rules/crs-setup.conf
CMD ["nginx", "-g", "daemon off;"]
🚀 三、构建镜像
cd /home/shuncom/build/nginx-modsec
docker build -t nginx:1.20.2-modsec .
🚀 四、修改 docker-compose.yml 使用新镜像
把你的:
image: nginx:1.20.2
改成:
image: nginx:1.20.2-modsec
🚀 五、在 nginx.conf 启用 ModSecurity
在你的 server 或 http 区块里加入:
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;
🚀 六、重启服务
docker-compose down
docker-compose up -d
🎉 成功!你的 Nginx 已成功集成 ModSecurity v3 + CRS WAF。
📌 可选:我可以帮你做以下增强
如果你需要,我可以继续为你:
✅ 自动放行健康检查和静态文件规则
✅ 自动过滤误报(特别是 CRS 默认误杀 POST JSON)
✅ 为你的业务创建豁免规则
✅ fail2ban 联动 WAF 拦截日志做自动封禁
✅ 给出完整的 /etc/nginx/modsec/modsecurity.conf 最佳实践
如果你愿意,我还可以:
👉 直接给你一个适配你环境的“完整可运行” compose.yml + Dockerfile 打包工程目录。
要继续吗?
下面我给你总结一套 Nginx + ModSecurity v3 + CRS WAF 在实际生产环境中能实现的 完整安全能力(涵盖 OWASP Top 10、常见 Web 攻击、Bot 防护、协议校验、日志与响应体系),便于你评估是否满足你的公司平台安全需求。
⭐ 总体来看:ModSecurity v3 + CRS = 企业级 Web 反向代理型 WAF
具备完整 应用层防护(L7 Security),覆盖:
-
OWASP Top 10(SQL、XSS、文件包含、权限绕过…)
-
业务层安全保护(参数校验、攻击语义分析)
-
协议校验(HTTP RFC)
-
智能启发式攻击识别
-
日志、审计、行为分析
-
与 Nginx 完美集成,性能远优于 ModSec v2
🛡 一、网络 & 协议层安全
ModSecurity v3 + CRS 对 HTTP 协议提供严格校验:
✔ HTTP RFC 规范校验
-
检查 HTTP 头是否合法
-
检查非法方法(如
TRACE、CONNECT) -
检查过长 URI、Header、Body
-
防止 Request Smuggling(请求走私)
-
防止 Response Splitting(响应拆分)
✔ 防御异常连接行为
-
FD(文件描述符)耗尽
-
无效 Content-Length
-
Chunked 伪造攻击
-
不完整的 multipart 请求
🧬 二、覆盖所有 OWASP Top 10 攻击类型
1. SQL 注入(SQLi)
CRS 能检测:
-
单引号、注释符尝试
-
UNION SELECT -
OR 1=1 -
sleep(5)/ 盲注 -
MySQL / PostgreSQL / MSSQL 语义特征
支持高级语义识别:绕过编码、空格替换、%00、HEX 编码、ASCII 编码等。
2. XSS 跨站脚本攻击
包括:
-
<script>注入 -
onload、onclick、javascript:、data:
-
DOM XSS
-
编码绕过(HTML/URL/Base64)
3. 路径遍历 / 本地文件包含(LFI)
拦截:
-
/../../etc/passwd -
php://filter/resource= -
file:///
4. 远程文件包含(RFI)
检测:
-
http://evil.com/shell.jpg -
远程 PHP 包含
-
URL 伪装/重定向攻击
5. 命令注入(CMD Injection)
识别:
-
; rm -rf / -
| cat /etc/passwd -
"
$()"、"`"反引号 -
PowerShell / Bash 命令
6. 代码注入
-
PHP、JSP、Lua、Python 注入
-
eval(), system(), exec()
7. Java 序列化漏洞攻击
-
CommonsCollections payload
-
JRMP
-
ysoserial 攻击流量特征
8. 反序列化 / JSON 注入
-
JSON 结构污染
-
注入脚本
-
流量中含反序列化特征序列
9. 可疑 UA/Referer 等异常行为
-
BurpSuite、sqlmap
-
Nmap、masscan
-
Python requests, curl
-
自写攻击脚本流量模式
🧱 三、Bot 管控能力(CRS + 规则策略)
CRS 自带 Bot 检测:
-
自动识别扫描器(sqlmap、nmap、Nikto)
-
自动识别爬虫 UA
-
识别异常访问模式
-
可选:灰名单 + 速率限制
-
与 Nginx limit_req 配合可实现 Anti-DDoS L7 防护
🗂 四、文件上传防护
拦截:
-
上传包含恶意 Payload 的文件
-
PHP 藏木马
-
伪造图片 “JPG+PHP”
-
multipart 边界异常
-
Content-Type 伪造
可限制:
-
文件类型
-
MIME / 后缀匹配
-
文件大小
-
文件内容特征匹配
🔐 五、业务参数验证 / 防数据泄露 (DLP)
CRS 能发现敏感信息:
-
身份证号
-
手机号码
-
银行卡号
-
邮箱地址泄露
-
Base64 隐写数据
-
内部系统路径泄露
🧠 六、启发式攻击检测(Heuristic Detection)
CRS 具有“语义检测”:
-
判断攻击意图,而不仅是关键字
-
多规则分段评分 → 很难绕过
-
自动组合行为判断
-
流量模式检测(多次试探攻击)
这类智能特征识别能力比传统 Web 防火墙更强。
📊 七、日志、审计、可视化、安全分析能力
ModSecurity v3 支持:
✔ 全流量审计日志(可选)
包括:
-
请求头
-
请求 Body
-
响应头、Body
-
匹配的 WAF 规则
-
攻击来源 IP & 时间
可以接入:
-
ELK(Kibana)
-
Loki / Grafana
-
SIEM(如阿里云、Wazuh 等)
🛑 八、误报处理能力(非常关键)
-
CRS 支持 “Anomaly Scoring 模式”(推荐,不会随便 403)
-
低误报、多级评分
-
业务参数豁免(白名单)
-
自定义规则(放行或增强)
ModSecurity v3 + CRS 是市场上误报处理体验最好的开源 WAF。
🚀 九、可扩展能力(强大)
你可以编写自己的规则:
-
阻止某类接口访问
-
参数只允许特定格式
-
某些 IP 禁止访问
-
某些路径强制加密
-
防止越权访问(基于 Referer / Cookie)
语法非常灵活,能满足绝大多数企业业务安全场景。
🏁 总结:ModSecurity v3 + CRS 能提供什么?
✔ 完整 OWASP Top 10 防护
✔ SQL/XSS/Upload/LFI/RFI/CMD 等注入防护
✔ Anti-Bot / Anti-Scanner
✔ 文件上传安全
✔ HTTP 协议规范校验
✔ 审计日志 / 攻击分析
✔ 灵活的业务规则扩展
✔ 企业级 Web 安全防护能力
适合:
-
企业内网平台
-
B/S 架构项目
-
Java/PHP/Python/Go 任意 Web 系统
-
API 网关安全支持
📌 如果你需要
我可以继续提供:
🔧 1)你项目的 专属 ModSecurity 配置最佳实践(降低误报)
📁 2)自动优化后的 CRS 配置
🛡 3)适合生产环境的 WAF 规则模板
🔍 4)日志分析 + 告警体系
⚙ 5)你 Nginx 环境的“一键开启 WAF/CRS”配置
需要的话告诉我你的业务接口类型(REST、表单、上传等),我可以为你生成 定制化规则。