mod_security: Como registrar solicitações POST para um URI específico?

1

Estou tentando configurar o mod_security para registrar a carga útil de solicitações POST para um URI específico, pois parece que uma página da Web de clientes é usada como uma retransmissão de spam e essas solicitações corrompem o cache do servidor.

Comecei a seguir esta postagem no blog mas parece bastante antigo e ultrapassado. Não está funcionando com nosso ambiente, que é o Apache 2.4 e o mod_security 2.8. Então, eu aprimorei essa configuração com essa resposta de servidor .

Dentro da configuração vhost relevante, mod_security é configurado assim:

<IfModule security2_module>
    SecRuleEngine On
    SecAuditEngine RelevantOnly
    SecAuditLog logs/audit.log
    SecRequestBodyAccess On
    SecAuditLogParts ABCFHJKZ

    SecDefaultAction "phase:2,nolog,noauditlog,pass"

    SecRule REQUEST_METHOD "^POST$" "id:'1234',phase:2,chain,allow,ctl:auditEngine=On"
    SecRule REQUEST_URI "^\/en\/us\/$"
</IfModule> 

O resultado é que toda solicitação POST é registrada no log de auditoria. Mas apenas a solicitação POST para a página inicial https://<SITE>/en/us/ deve ser registrada. No meu entender, isso deve ser feito encadeando-se ao segundo SecRule que corresponde ao URI do pedido em relação ao regex fornecido. Eu também tentei versões diferentes do regex sem sucesso.

    
por ahaertig 01.02.2016 / 19:01

1 resposta

1

É um pouco confuso, mas algumas das ações especificadas na primeira regra serão executadas para cada regra correspondida na cadeia e algumas somente se todas as regras corresponderem (o autor do ModSecurity declarou em retrospectiva que seria melhor colocar a regras sobre a última regra encadeada em vez da primeira). Veja aqui para mais detalhes: link :

Special rules control the usage of actions in chained rules:

  • Any actions that affect the rule flow (i.e., the disruptive actions, skip and skipAfter) can be used only in the chain starter. They will be executed only if the entire chain matches.
  • Non-disruptive rules can be used in any rule; they will be executed if the rule that contains them matches and not only when the entire chain matches.
  • The metadata actions (e.g., id, rev, msg) can be used only in the chain starter.

Portanto, a regra deve ser isso, portanto, o registro em log só é ativado quando a segunda e segunda regra corresponde:

SecRule REQUEST_METHOD "^POST$" "id:'1234',phase:2,chain,allow"
SecRule REQUEST_URI "^\/en\/us\/$" "ctl:auditEngine=On"

Observe também que isso permitirá a regra e ignorará todas as regras futuras. Você pode ser melhor para passar a regra. Dessa forma, ele definitivamente será registrado, mas ainda executará outras regras. No entanto, se esta é a sua única regra de acordo com a configuração que você mostrou, isso realmente não importa, mas ainda é uma boa prática.

    
por 02.02.2016 / 00:08