Como desativar o ModSecurity num domínio pelo cPanel, liberar só a regra que causa o falso positivo com SecRuleRemoveById e o que evitar no servidor.
O ModSecurity às vezes bloqueia uma ação legítima do site: salvar um post no WordPress, finalizar uma compra, enviar um formulário com código. O sintoma típico é um erro 403 Forbidden só naquela ação. A tentação é desligar tudo, mas o certo é desligar o mínimo possível. Esta é a ordem recomendada:
- Remover só a regra que dispara, só no domínio afetado.
- Desativar o ModSecurity no domínio afetado.
- Desativar a regra no servidor inteiro.
Desligar o ModSecurity no servidor inteiro não está na lista: deixa todos os sites sem proteção contra ataques automatizados.
Antes de começar: descubra o ID da regra
Toda regra do ModSecurity tem um número. Sem ele, você está chutando.
- No WHM: Security Center » ModSecurity™ Tools » Hits List. Cada linha mostra o domínio, o endereço acessado e o ID da regra.
- No cPanel da conta: Métricas » Erros mostra as últimas linhas do log de erros do site, onde aparecem as mensagens do ModSecurity.
- Pelo SSH:
Procure o trechogrep -i modsecurity /etc/apache2/logs/error_log | grep seudominio.com.br | tail -n 5[id "949110"]em cada linha.
949110 e 959100 são as que somam a pontuação de anomalia e fazem o bloqueio final. Elas quase nunca são a causa. Olhe as linhas anteriores, da mesma requisição: lá está a regra que deu a pontuação (por exemplo, uma da família 942xxx, de injeção de SQL).Opção 1: remover só uma regra num domínio (o mais seguro)
Exige acesso root. No cPanel, isso é feito com um arquivo de inclusão no virtual host do domínio, que sobrevive às atualizações do painel.
- Crie as pastas do domínio, trocando
usuariopelo usuário cPanel e o domínio pelo seu. A pastastdvale para HTTP e asslpara HTTPS:mkdir -p /etc/apache2/conf.d/userdata/std/2_4/usuario/seudominio.com.br mkdir -p /etc/apache2/conf.d/userdata/ssl/2_4/usuario/seudominio.com.br - Crie o arquivo com a exceção nas duas pastas, por exemplo
modsec.conf:
Para mais de uma regra, separe os IDs por espaço:<IfModule security2_module> SecRuleRemoveById 942100 </IfModule>SecRuleRemoveById 942100 942200. - Recompile a configuração e reinicie o Apache:
/usr/local/cpanel/scripts/rebuildhttpdconf /usr/local/cpanel/scripts/restartsrv_httpd - Teste a ação que estava bloqueada. Se outro ID aparecer na Hits List, repita com ele.
Para aplicar a exceção a todos os domínios de uma conta, grave o arquivo um nível acima, em .../2_4/usuario/modsec.conf.
Opção 2: desativar o ModSecurity num domínio pelo cPanel
Funciona para o próprio cliente da hospedagem, sem acesso root, desde que o administrador tenha liberado o recurso.
- Entre no cPanel e abra Segurança » ModSecurity.
- Localize o domínio na lista e mude a chave para Off.
- Teste a ação que estava bloqueada.
- Volte para On assim que identificar a regra (opção 1). Deixar desligado de vez tira a proteção do site contra ataques automatizados.
Se o item não aparece no cPanel, o administrador precisa instalar o módulo pelo EasyApache 4 e liberar o recurso ModSecurity Domain Manager no Feature Manager do WHM.
Opção 3: desativar uma regra no servidor inteiro
Em WHM » Security Center » ModSecurity™ Tools, na Hits List, clique no ID da regra e depois em Disable. Use só quando a regra causa falso positivo em muitos sites, como uma regra que bloqueia o painel de um CMS popular. Para grupos inteiros de regras, use o botão Edit do fornecedor em ModSecurity™ Vendors.
Servidores sem cPanel (Apache 2.4)
No Apache 2.4 com ModSecurity 2, as diretivas vão no bloco <VirtualHost> do site, não no arquivo htaccess (o ModSecurity 2 ignora as diretivas antigas SecFilterEngine do ModSecurity 1, que não existe mais):
<VirtualHost *:443>
ServerName seudominio.com.br
# ... resto da configuração ...
<IfModule security2_module>
SecRuleRemoveById 942100
</IfModule>
</VirtualHost>
Para desligar o ModSecurity só nesse site, use SecRuleEngine Off no lugar de SecRuleRemoveById. Depois teste e recarregue: apachectl configtest && systemctl reload httpd (no Ubuntu e no Debian, systemctl reload apache2).
Problemas comuns
Removi a regra e o 403 continua
Confira se o arquivo foi para a pasta certa (ssl para sites em HTTPS), se o rebuildhttpdconf rodou sem erro e se a Hits List agora mostra outro ID. Também pode não ser o ModSecurity: permissões de arquivo e regras no arquivo htaccess também geram 403.
O 403 parou, mas o IP do cliente continua bloqueado
Com o CSF, cada disparo do ModSecurity conta para o bloqueio no firewall (LF_MODSEC). Depois de corrigir a regra, desbloqueie o IP com csf -dr IP ou csf -tr IP.