Nginx下ModSecurity模块安装的实现步骤

 更新时间:2025年09月12日 10:54:57   作者:深山技术宅  
本文提供了在Nginx 1.28.0上安装ModSecurity v3的完整教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

以下是针对Nginx 1.28.0的ModSecurity v3完整安装指南,包含编译优化和最新依赖处理:

系统环境准备(Ubuntu 22.04/Debian 11为例)

# 安装编译依赖
sudo apt update
sudo apt install -y git build-essential libpcre3 libpcre3-dev libssl-dev \
     libtool autoconf automake flex bison curl libcurl4-openssl-dev \
     libxml2 libxml2-dev libyajl-dev doxygen zlib1g-dev pkg-config \
     liblmdb-dev libmaxminddb-dev libgeoip-dev libpcre++-dev

步骤1:编译安装ModSecurity库(libmodsecurity)

# 下载最新稳定版源码
cd /usr/src
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
cd ModSecurity

# 更新子模块(解决常见初始化问题)
git submodule update --init --recursive

# 编译优化参数设置
./build.sh
./configure \
  --prefix=/usr/local/modsecurity \
  --with-maxmind=/usr \
  --with-geoip \
  --with-lmdb \
  --with-yajl \
  --with-ssdeep \
  --enable-standalone-module=no \
  CXXFLAGS="-O3 -march=native -pipe"

# 编译安装
make -j$(nproc)
sudo make install

# 添加库路径
echo "/usr/local/modsecurity/lib" | sudo tee /etc/ld.so.conf.d/modsecurity.conf
sudo ldconfig

步骤2:编译Nginx 1.28.0动态模块

# 下载Nginx 1.28.0源码
cd /usr/src
wget https://nginx.org/download/nginx-1.28.0.tar.gz
tar xvzf nginx-1.28.0.tar.gz

# 下载ModSecurity-Nginx连接器
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git

# 获取当前Nginx编译参数
nginx -V 2>&1 | grep configure > nginx-config.txt

# 添加动态模块编译参数
sed -i "s/--with-compat//g" nginx-config.txt  # 移除旧兼容参数
echo --with-compat --add-dynamic-module=../ModSecurity-nginx >> nginx-config.txt

# 编译动态模块
cd nginx-1.28.0
sudo bash -c ". ../nginx-config.txt && make modules"

# 验证模块编译
ls objs/ngx_http_modsecurity_module.so  # 确认文件存在

步骤3:配置Nginx加载模块

# 创建模块目录
sudo mkdir -p /etc/nginx/modules-available
sudo mkdir -p /etc/nginx/modules-enabled

# 复制模块文件
sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules-available/

# 加载模块配置
sudo tee /etc/nginx/modules-enabled/modsecurity.conf <<EOF
load_module modules-available/ngx_http_modsecurity_module.so;
EOF

# 主配置引用
sudo sed -i '1i include /etc/nginx/modules-enabled/*.conf;' /etc/nginx/nginx.conf

# 创建ModSecurity配置目录
sudo mkdir -p /etc/nginx/modsec

步骤4:配置ModSecurity核心设置

# 复制基础配置
sudo cp /usr/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
sudo cp /usr/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

# 修改关键配置
sudo sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf
sudo sed -i 's#SecAuditLog /var/log/modsec_audit.log#SecAuditLog /var/log/nginx/modsec_audit.log#' /etc/nginx/modsec/modsecurity.conf

# 添加性能优化参数
sudo tee -a /etc/nginx/modsec/modsecurity.conf <<EOF

# 性能优化设置
SecArgumentSeparator "&"
SecAuditLogParts ABIJDEFHZ
SecAuditLogType Serial
SecAuditLogStorageDir /var/log/nginx/modsec_audit/
SecUploadDir /tmp
SecTmpDir /tmp
SecDataDir /tmp
EOF

# 创建日志目录
sudo mkdir -p /var/log/nginx/modsec_audit
sudo chown www-data:adm /var/log/nginx/modsec_audit

步骤5:安装OWASP核心规则集(CRS v4.0)

# 下载最新CRS
cd /etc/nginx/modsec
sudo git clone https://github.com/coreruleset/coreruleset
sudo mv coreruleset owasp-modsecurity-crs

# 配置规则集
cd owasp-modsecurity-crs
sudo cp crs-setup.conf.example crs-setup.conf
sudo cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
sudo cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

# 创建主规则文件
sudo tee /etc/nginx/modsec/main.conf <<EOF
Include modsecurity.conf
Include owasp-modsecurity-crs/crs-setup.conf
Include owasp-modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
Include owasp-modsecurity-crs/rules/*.conf
Include owasp-modsecurity-crs/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
EOF

步骤6:Nginx站点配置

# 在目标站点配置中添加
server {
    ...
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;
    
    # 可选:特定路径禁用规则
    location /api {
        modsecurity off;
    }
    
    # 错误页面定制
    error_page 403 /403.html;
    location = /403.html {
        internal;
    }
}

步骤7:测试与启动

# 配置文件测试
sudo nginx -t

# 启动服务
sudo systemctl restart nginx

# 查看日志验证
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/modsec_audit.log

# 测试规则有效性
curl -I "http://localhost/?param=<script>alert(1)</script>"
# 应返回 403 Forbidden

性能优化建议

  1. 规则排除:在REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf中添加应用例外

    # WordPress排除示例
    SecRule REQUEST_URI "@contains /wp-admin/" \
         "id:1000,phase:1,pass,nolog,ctl:ruleEngine=DetectionOnly"
    
  2. 精简规则:仅启用必要规则集

    # 禁用不常用规则文件
    sudo mv /etc/nginx/modsec/owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf{,.disabled}
    
  3. 调整防护级别:编辑crs-setup.conf

    SecAction \
      "id:900000,\
       phase:1,\
       nolog,\
       pass,\
       t:none,\
       setvar:tx.paranoia_level=1"
    

常见问题解决

1. 模块加载失败

sudo grep "modsecurity" /var/log/nginx/error.log
  • 解决方案:确认Nginx版本匹配,重新执行步骤2

2. 规则不生效

  • 检查nginx -T输出确认模块加载
  • 验证配置文件路径权限:sudo chmod -R 755 /etc/nginx/modsec

3. 高CPU占用

# 在modsecurity.conf添加:
SecPcreMatchLimit 100000
SecPcreMatchLimitRecursion 100000
SecCollectionTimeout 600

自动更新脚本

#!/bin/bash
# ModSecurity自动更新脚本
cd /usr/src/ModSecurity
git pull
git submodule update --init --recursive
./build.sh
./configure --prefix=/usr/local/modsecurity
make -j$(nproc)
sudo make install
sudo ldconfig

cd /etc/nginx/modsec/owasp-modsecurity-crs
git pull

sudo nginx -t && sudo systemctl reload nginx

将此脚本保存为/usr/local/bin/update-modsec并添加可执行权限

完成以上步骤后,您的Nginx 1.28.0将获得企业级WAF防护。建议初次部署时使用SecRuleEngine DetectionOnly模式运行24小时,分析日志后再启用主动防护。

到此这篇关于Nginx下ModSecurity模块安装的实现步骤的文章就介绍到这了,更多相关Nginx ModSecurity安装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx和GeoIP模块读取IP所在的地域信息方法

    Nginx和GeoIP模块读取IP所在的地域信息方法

    今天小编就为大家分享一篇Nginx和GeoIP模块读取IP所在的地域信息方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • windows下nginx+tomcat配置负载均衡的方法

    windows下nginx+tomcat配置负载均衡的方法

    这篇文章主要介绍了windows下nginx+tomcat配置负载均衡的方法,需要的朋友可以参考下
    2016-09-09
  • Nginx如何安装withSSL模块

    Nginx如何安装withSSL模块

    这篇文章主要介绍了Nginx如何安装withSSL模块,Nginx 配置文件,开启ssl访问时经常报错,原因是由于nginx缺少http_ssl_module模块,编译安装的时候带上 --with-http_ssl_module 配置就行了,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • Nginx+RTMP+nginx-http-flv-module环境搭建

    Nginx+RTMP+nginx-http-flv-module环境搭建

    本文主要介绍了Nginx+RTMP+nginx-http-flv-module环境搭建,搭建方式可用于直播、视频会议等场景,同时支持HTTP-FLV,方便在浏览器中进行播放
    2024-03-03
  • Nginx 设置域名转发到指定端口的实现方法

    Nginx 设置域名转发到指定端口的实现方法

    这篇文章主要介绍了Nginx 设置域名转发到指定端口的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 借用nginx.vim工具进行语法高亮和格式化配置nginx.conf文件

    借用nginx.vim工具进行语法高亮和格式化配置nginx.conf文件

    今天小编就为大家分享一篇关于借用nginx.vim工具进行语法高亮和格式化配置nginx.conf文件,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • nginx.pid打开失败以及失效的解决方案

    nginx.pid打开失败以及失效的解决方案

    在我们平常使用nginx的时候,经常有可能会发现我们的pid找不到了,本文就介绍了nginx.pid打开失败以及失效的解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2021-12-12
  • 若依部署Nginx和Tomcat全过程

    若依部署Nginx和Tomcat全过程

    文章总结了两种部署方法:Nginx部署和Tomcat部署,Nginx部署包括打包、将dist文件拉到指定目录、配置nginx.conf等步骤,Tomcat部署包括前端打包、将文件拉到webapps目录、访问测试等步骤,文章还解决了前后端无法通信和404问题
    2024-12-12
  • Nginx的nginx.conf配置文件中文注释说明

    Nginx的nginx.conf配置文件中文注释说明

    这篇文章主要介绍了Nginx的nginx.conf配置文件中文注释说明,本文是个人注释版,在生产环境中经常使用,需要的朋友可以参考下
    2014-12-12
  • nginx中封禁ip和允许内网ip访问的实现示例

    nginx中封禁ip和允许内网ip访问的实现示例

    Nginx不仅仅只是一款反向代理和负载均衡服务器,本文主要介绍了nginx中封禁ip和允许内网ip访问的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    2022-03-03

最新评论