security: ModSecurity v3 Nginx Connector
Установка
Поддерживаются CentOS/RHEL/RockyLinux/etc. и 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, выпущенный 21 мая 2025 года.

Коннектор ModSecurity-nginx является точкой соединения между nginx и libmodsecurity (ModSecurity v3). Другими словами, этот проект предоставляет канал связи между nginx и libmodsecurity. Этот коннектор необходим для использования LibModSecurity с nginx.
Коннектор ModSecurity-nginx принимает форму модуля nginx. Модуль просто служит слоем связи между nginx и ModSecurity.
Обратите внимание, что этот проект зависит от libmodsecurity, а не от ModSecurity (версии 2.9 или ниже).
В чем разница между этим проектом и старым дополнением ModSecurity для nginx?
Старая версия использует ModSecurity в автономном режиме, который является оберткой для внутренних механизмов Apache, чтобы связать ModSecurity с nginx. Эта текущая версия ближе к nginx, использует новый libmodsecurity, который больше не зависит от Apache. В результате эта версия имеет меньше зависимостей, меньше ошибок и работает быстрее. Кроме того, также предоставляется новая функциональность - такая как возможность использования глобальной конфигурации правил с индивидуальными настройками для каталогов/локаций (например, SecRuleRemoveById).
Использование
ModSecurity для 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 <ключ> <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 вместо его генерации в библиотеке. Это может быть полезно для целей отслеживания, например, рассмотрите эту конфигурацию:
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
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-security.
