Перейти к содержанию

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.