编译安装nginx+Modsecurity
字数 1375 2025-08-12 11:33:54

Nginx + ModSecurity 编译安装与配置指南

0x01 前言

本指南详细介绍了如何从源码编译安装Nginx并集成ModSecurity Web应用防火墙(WAF)。通过此配置,可以为网站提供强大的安全防护,有效抵御各类Web攻击。

0x02 准备工作

2.1 系统要求

  • Linux操作系统(本指南以CentOS为例)
  • root权限
  • 稳定的网络连接

2.2 所需软件包

需要下载以下源码包:

  1. 核心组件:

    • nginx-1.18.0.tar.gz - Nginx主程序
    • OpenSSL_1_1_1c.tar.gz - 加密库
  2. 安全模块:

    • ModSecurity - Web应用防火墙核心
    • ModSecurity-nginx - Nginx连接器
    • owasp-modsecurity-crs - OWASP核心规则集
  3. 功能模块:

    • lua-nginx-module - Lua脚本支持
    • headers-more-nginx-module - HTTP头控制
    • nginx-ct - 证书透明度支持

2.3 依赖安装

执行以下命令安装所有必要的依赖:

yum install -y libxml2 libxslt-devel gperftools pcre-devel libuuid-devel \
libxslt* libblkid-devel libudev-devel fuse-devel libedit-devel perl-ExtUtils-Embed \
at gcc-c++ python subversion gperf make rpm-build git curl bzip2-devel \
libcurl-devel gd gd-devel t1lib t1lib-devel libmcrypt libmcrypt-devel \
libtidy libtidy-devel GeoIP-devel libatomic_ops-devel zlib-devel unzip \
libstdc++* net-snmp net-snmp* gmp gmp-devel openldap openldap-devel \
libpcap-devel glib2-devel GeoIP-devel libxml2-devel redis vim wget git \
htop iftop libtool make automake mlocate pam-devel unzip gcc screen \
iptables-services bash-completion* pcre-devel libxslt* perl-ExtUtils-Embed \
at python subversion gperf make rpm-build git curl bzip2-devel libcurl-devel \
gd t1lib t1lib-devel libmcrypt libmcrypt-devel libtidy libtidy-devel \
GeoIP-devel zlib-devel unzip libstdc++* net-snmp net-snmp* gmp gmp-devel \
openldap openldap-devel net-tools luajit

2.4 源码下载

创建工作目录并下载所有必要的源码:

mkdir /opt/nginx
cd /opt/nginx/

# 下载各模块
git clone https://github.com/openresty/headers-more-nginx-module.git
git clone https://github.com/openresty/lua-nginx-module.git
git clone https://github.com/grahamedgecombe/nginx-ct.git
wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1c.tar.gz
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
wget https://nginx.org/download/nginx-1.18.0.tar.gz
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git

# 解压压缩包
tar -zxvf nginx-1.18.0.tar.gz && rm -f nginx-1.18.0.tar.gz
tar -zxvf OpenSSL_1_1_1c.tar.gz && rm -f OpenSSL_1_1_1c.tar.gz

0x03 编译安装

3.1 OpenSSL安装

cd openssl-OpenSSL_1_1_1c
./config --prefix=/usr
make && make install
ldconfig

# 验证安装
openssl version

3.2 ModSecurity编译安装

cd /opt/nginx/ModSecurity

# 初始化子模块
git submodule init
git submodule update

# 构建
./build.sh

# 配置、编译和安装
./configure && make && make install

3.3 Nginx编译安装

cd /opt/nginx/nginx-1.18.0/

# 配置编译参数
./configure \
--prefix=/usr/local/nginx/nginx \
--with-cc-opt=-O2 \
--with-ld-opt='-Wl,-rpath,/usr/local/nginx/luajit/lib -Wl,-E' \
--sbin-path=/usr/sbin/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--lock-path=/var/lock/nginx.lock \
--with-http_gunzip_module \
--with-pcre --with-pcre-jit \
--with-http_perl_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-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-select_module \
--with-poll_module \
--with-file-aio \
--with-http_degradation_module \
--with-libatomic \
--http-client-body-temp-path=/var/tmp/nginx/client_body \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--add-dynamic-module=/opt/nginx/ModSecurity-nginx \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--add-module=/opt/nginx/headers-more-nginx-module

# 编译和安装
make && make install

# 创建临时目录
mkdir -p /var/tmp/nginx/client_body

# 验证安装
nginx -V

0x04 ModSecurity配置

4.1 配置文件准备

mkdir /usr/local/nginx/modsecurity
cp /opt/nginx/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/modsecurity/modsecurity.conf
cp /opt/nginx/owasp-modsecurity-crs/crs-setup.conf.example /usr/local/nginx/modsecurity/crs-setup.conf
cp -r /opt/nginx/owasp-modsecurity-crs/rules/ /usr/local/nginx/modsecurity/
cp /opt/nginx/ModSecurity/unicode.mapping /usr/local/nginx/modsecurity/unicode.mapping

# 创建包含文件
vim /usr/local/nginx/modsecurity/modsec_includes.conf

modsec_includes.conf中添加以下内容:

include /usr/local/nginx/modsecurity/modsecurity.conf
include /usr/local/nginx/modsecurity/crs-setup.conf
include /usr/local/nginx/modsecurity/rules/*.conf

4.2 启用拦截功能

编辑modsecurity.conf

vim /usr/local/nginx/modsecurity/modsecurity.conf

修改以下参数:

SecRuleEngine On

编辑CRS配置文件:

vim /usr/local/nginx/modsecurity/crs-setup.conf

注释掉默认的放行规则:

# SecDefaultAction "phase:1,log,auditlog,pass"
# SecDefaultAction "phase:2,log,auditlog,pass"

取消注释拦截规则:

SecDefaultAction "phase:1,log,auditlog,deny,status:403"
SecDefaultAction "phase:2,log,auditlog,deny,status:403"

4.3 审计日志配置

ModSecurity会记录详细的审计日志:

vim /var/log/modsec_audit.log

0x05 Nginx配置集成

5.1 加载ModSecurity模块

在nginx.conf顶部添加:

load_module /usr/local/nginx/nginx/modules/ngx_http_modsecurity_module.so;

5.2 启用ModSecurity

在需要保护的server或location块中添加:

modsecurity on;
modsecurity_rules_file /usr/local/nginx/modsecurity/modsec_includes.conf;

5.3 完整配置示例

load_module /usr/local/nginx/nginx/modules/ngx_http_modsecurity_module.so;

http {
    server {
        listen 80;
        server_name localhost;
        rewrite ^(.*)$ https://$host$1 permanent;
        
        location / {
            # 启用modsecurity
            modsecurity on;
            modsecurity_rules_file /usr/local/nginx/modsecurity/modsec_includes.conf;
            root html;
            index index.html index.htm;
        }
        
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
    
    server {
        listen 443 ssl;
        server_name localhost;
        
        location / {
            modsecurity on;
            modsecurity_rules_file /usr/local/nginx/modsecurity/modsec_includes.conf;
            root /home/wwwroot/www.example.com;
            index index.html index.htm index.php;
        }
    }
}

0x06 验证与测试

  1. 重启Nginx服务:
nginx -t  # 测试配置
nginx -s reload  # 重新加载配置
  1. 测试ModSecurity是否正常工作:
    • 尝试发送包含SQL注入或XSS攻击的请求
    • 检查/var/log/modsec_audit.log是否有相关拦截记录
    • 正常请求应不受影响,恶意请求应返回403状态码

0x07 维护与优化

  1. 规则更新

    • 定期更新OWASP CRS规则集
    • 根据业务需求调整规则敏感度
  2. 性能监控

    • 监控Nginx和ModSecurity的资源使用情况
    • 根据性能指标调整规则或配置
  3. 日志管理

    • 设置日志轮转,防止日志文件过大
    • 定期分析日志,发现潜在威胁

0x08 故障排除

  1. 编译问题

    • 确保所有依赖已安装
    • 检查错误日志中的具体信息
  2. 运行问题

    • 检查Nginx错误日志/var/log/nginx/error.log
    • 验证ModSecurity日志/var/log/modsec_audit.log
    • 确保所有路径和权限设置正确
  3. 性能问题

    • 调整SecRuleEngineDetectionOnly模式进行测试
    • 优化规则,减少不必要的检查

通过以上步骤,您已成功构建了一个集成了ModSecurity WAF的安全Nginx服务器,能够有效防护各类Web应用攻击。

Nginx + ModSecurity 编译安装与配置指南 0x01 前言 本指南详细介绍了如何从源码编译安装Nginx并集成ModSecurity Web应用防火墙(WAF)。通过此配置,可以为网站提供强大的安全防护,有效抵御各类Web攻击。 0x02 准备工作 2.1 系统要求 Linux操作系统(本指南以CentOS为例) root权限 稳定的网络连接 2.2 所需软件包 需要下载以下源码包: 核心组件 : nginx-1.18.0.tar.gz - Nginx主程序 OpenSSL_1_1_1c.tar.gz - 加密库 安全模块 : ModSecurity - Web应用防火墙核心 ModSecurity-nginx - Nginx连接器 owasp-modsecurity-crs - OWASP核心规则集 功能模块 : lua-nginx-module - Lua脚本支持 headers-more-nginx-module - HTTP头控制 nginx-ct - 证书透明度支持 2.3 依赖安装 执行以下命令安装所有必要的依赖: 2.4 源码下载 创建工作目录并下载所有必要的源码: 0x03 编译安装 3.1 OpenSSL安装 3.2 ModSecurity编译安装 3.3 Nginx编译安装 0x04 ModSecurity配置 4.1 配置文件准备 在 modsec_includes.conf 中添加以下内容: 4.2 启用拦截功能 编辑 modsecurity.conf : 修改以下参数: 编辑CRS配置文件: 注释掉默认的放行规则: 取消注释拦截规则: 4.3 审计日志配置 ModSecurity会记录详细的审计日志: 0x05 Nginx配置集成 5.1 加载ModSecurity模块 在nginx.conf顶部添加: 5.2 启用ModSecurity 在需要保护的server或location块中添加: 5.3 完整配置示例 0x06 验证与测试 重启Nginx服务: 测试ModSecurity是否正常工作: 尝试发送包含SQL注入或XSS攻击的请求 检查 /var/log/modsec_audit.log 是否有相关拦截记录 正常请求应不受影响,恶意请求应返回403状态码 0x07 维护与优化 规则更新 : 定期更新OWASP CRS规则集 根据业务需求调整规则敏感度 性能监控 : 监控Nginx和ModSecurity的资源使用情况 根据性能指标调整规则或配置 日志管理 : 设置日志轮转,防止日志文件过大 定期分析日志,发现潜在威胁 0x08 故障排除 编译问题 : 确保所有依赖已安装 检查错误日志中的具体信息 运行问题 : 检查Nginx错误日志 /var/log/nginx/error.log 验证ModSecurity日志 /var/log/modsec_audit.log 确保所有路径和权限设置正确 性能问题 : 调整 SecRuleEngine 为 DetectionOnly 模式进行测试 优化规则,减少不必要的检查 通过以上步骤,您已成功构建了一个集成了ModSecurity WAF的安全Nginx服务器,能够有效防护各类Web应用攻击。