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 仓库 中找到此模块的其他配置提示和文档。
