Skip to main content

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 打包工程目录

要继续吗?