跳转至

security: ModSecurity v3 Nginx Connector

安装

支持 CentOS/RHEL/RockyLinux 等以及 Amazon Linux,并且需要 订阅

Fedora Linux 免费支持,无需订阅。

特定操作系统的完整安装和配置指南:

其他支持的操作系统

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-security

通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用模块:

load_module modules/ngx_http_modsecurity_module.so;

本文档描述了 nginx-module-security v1.0.4,于 2025 年 5 月 21 日发布。


ModSecurity-nginx 连接器是 nginx 和 libmodsecurity (ModSecurity v3) 之间的连接点。换句话说,该项目提供了 nginx 和 libmodsecurity 之间的通信通道。使用 LibModSecurity 与 nginx 需要此连接器。

ModSecurity-nginx 连接器的形式是一个 nginx 模块。该模块仅作为 nginx 和 ModSecurity 之间的通信层。

请注意,该项目依赖于 libmodsecurity,而不是 ModSecurity(版本 2.9 或更低)。

这个项目与旧版 ModSecurity 附加组件的区别是什么?

旧版本使用独立的 ModSecurity,这是一个将 ModSecurity 链接到 nginx 的 Apache 内部的包装器。当前版本更接近 nginx,使用新的 libmodsecurity,不再依赖于 Apache。因此,当前版本的依赖性更少,错误更少,速度更快。此外,还提供了一些新功能,例如可以使用全局规则配置与每个目录/位置的自定义(例如 SecRuleRemoveById)。

使用

ModSecurity for nginx 扩展了您的 nginx 配置指令。 它添加了四个新指令,分别是:

modsecurity

语法: modsecurity on | off

上下文: http, server, location

默认: off

开启或关闭 ModSecurity 功能。 请注意,此配置指令不再与 SecRule 状态相关。 相反,它现在仅作为一个 nginx 标志来启用或禁用模块。

modsecurity_rules_file

语法: modsecurity_rules_file <规则文件路径>

上下文: http, server, location

默认: no

指定 modsecurity 配置文件的位置,例如:

server {
    modsecurity on;
    location / {
        root /var/www/html;
        modsecurity_rules_file /etc/my_modsecurity_rules.conf;
    }
}

modsecurity_rules_remote

语法: modsecurity_rules_remote <key> <规则的 URL>

上下文: http, server, location

默认: no

指定从哪里(互联网上)下载 modsecurity 配置文件。 它还指定将用于对该服务器进行身份验证的密钥:

server {
    modsecurity on;
    location / {
        root /var/www/html;
        modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
    }
}

modsecurity_rules

语法: modsecurity_rules <modsecurity 规则>

上下文: http, server, location

默认: no

允许将 ModSecurity 规则直接包含到 nginx 配置中。 以下示例从文件加载规则并根据目录/别名注入特定配置:

server {
    modsecurity on;
    location / {
        root /var/www/html;
        modsecurity_rules_file /etc/my_modsecurity_rules.conf;
    }
    location /ops {
        root /var/www/html/opts;
        modsecurity_rules '
          SecRuleEngine On
          SecDebugLog /tmp/modsec_debug.log
          SecDebugLogLevel 9
          SecRuleRemoveById 10
        ';
    }
}

modsecurity_transaction_id

语法: modsecurity_transaction_id string

上下文: http, server, location

默认: no

允许从 nginx 传递事务 ID,而不是在库中生成它。 这对于追踪目的可能很有用,例如,考虑以下配置:

log_format extended '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" $request_id';

server {
    server_name host1;
    modsecurity on;
    modsecurity_transaction_id "host1-$request_id";
    access_log logs/host1-access.log extended;
    error_log logs/host1-error.log;
    location / {
        ...
    }
}

server {
    server_name host2;
    modsecurity on;
    modsecurity_transaction_id "host2-$request_id";
    access_log logs/host2-access.log extended;
    error_log logs/host2-error.log;
    location / {
        ...
    }
}

通过结合 log_format 和 modsecurity_transaction_id,您将能够找到访问日志和错误日志条目之间的关联,使用相同的唯一标识符。

字符串可以包含变量。

GitHub

您可以在 nginx-module-security 的 GitHub 仓库 中找到此模块的其他配置提示和文档。