Pular para conteúdo

security: Conector ModSecurity v3 para Nginx

Instalação

CentOS/RHEL/RockyLinux/etc. e Amazon Linux são suportados e requerem uma assinatura.

Fedora Linux é suportado gratuitamente e não requer uma assinatura.

Guias de instalação e configuração completas específicas para o SO disponíveis:

Outros sistemas operacionais suportados

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

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_modsecurity_module.so;

Este documento descreve o nginx-module-security v1.0.4 lançado em 21 de maio de 2025.


O conector ModSecurity-nginx é o ponto de conexão entre o nginx e a libmodsecurity (ModSecurity v3). Em outras palavras, este projeto fornece um canal de comunicação entre o nginx e a libmodsecurity. Este conector é necessário para usar o LibModSecurity com o nginx.

O conector ModSecurity-nginx assume a forma de um módulo nginx. O módulo simplesmente serve como uma camada de comunicação entre o nginx e o ModSecurity.

Observe que este projeto depende da libmodsecurity em vez do ModSecurity (versão 2.9 ou inferior).

Qual é a diferença entre este projeto e o antigo complemento ModSecurity para nginx?

A versão antiga usa o ModSecurity de forma independente, que é um wrapper para internos do Apache para vincular o ModSecurity ao nginx. Esta versão atual está mais próxima do nginx, consumindo a nova libmodsecurity que não depende mais do Apache. Como resultado, esta versão atual tem menos dependências, menos bugs e é mais rápida. Além disso, algumas novas funcionalidades também são fornecidas - como a possibilidade de uso de configuração de regras globais com personalizações por diretório/localização (por exemplo, SecRuleRemoveById).

Uso

O ModSecurity para nginx estende suas diretivas de configuração do nginx. Ele adiciona quatro novas diretivas e elas são:

modsecurity

sintaxe: modsecurity on | off

contexto: http, server, location

padrão: off

Ativa ou desativa a funcionalidade do ModSecurity. Observe que esta diretiva de configuração não está mais relacionada ao estado do SecRule. Em vez disso, agora serve apenas como uma flag do nginx para habilitar ou desabilitar o módulo.

modsecurity_rules_file

sintaxe: modsecurity_rules_file <caminho para o arquivo de regras>

contexto: http, server, location

padrão: no

Especifica a localização do arquivo de configuração do modsecurity, por exemplo:

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

modsecurity_rules_remote

sintaxe: modsecurity_rules_remote <chave> <URL para regras>

contexto: http, server, location

padrão: no

Especifica de onde (na internet) um arquivo de configuração do modsecurity será baixado. Também especifica a chave que será usada para autenticar nesse servidor:

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

modsecurity_rules

sintaxe: modsecurity_rules <regra do modsecurity>

contexto: http, server, location

padrão: no

Permite a inclusão direta de uma regra do ModSecurity na configuração do nginx. O seguinte exemplo carrega regras de um arquivo e injeta configurações específicas por diretório/alias:

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

sintaxe: modsecurity_transaction_id string

contexto: http, server, location

padrão: no

Permite passar o ID da transação do nginx em vez de gerá-lo na biblioteca. Isso pode ser útil para fins de rastreamento, por exemplo, considere esta configuração:

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 / {
        ...
    }
}

Usando uma combinação de log_format e modsecurity_transaction_id você será capaz de encontrar correlações entre entradas de log de acesso e log de erro usando o mesmo identificador único.

A string pode conter variáveis.

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-security.