Mudanças entre as edições de "ModSecurity e Fail2ban"
(→Passo 4: Instalação do Plugin de Exclusão do WordPress) |
(→Passo 6: Integração Automatizada com o Fail2Ban) |
||
| Linha 128: | Linha 128: | ||
<pre> | <pre> | ||
[DEFAULT] | [DEFAULT] | ||
| − | ignoreip = 127.0.0.1/8 ::1 | + | ignoreip = 127.0.0.1/8 ::1 200.145.117.0/24 200.145.118.0/24 200.145.119.128/25 200.145.120.0/22 |
</pre> | </pre> | ||
Edição atual tal como às 17h11min de 31 de agosto de 2026
Índice
- 1 Implementação de WAF com ModSecurity (OWASP CRS v4) e Fail2Ban no Debian Linux
- 1.1 Passo 1: Atualização do Sistema e Instalação dos Pacotes
- 1.2 Passo 2: Configuração e Ativação do ModSecurity
- 1.3 Passo 3: Instalação do OWASP Core Rule Set (v4)
- 1.4 Passo 4: Instalação do Plugin de Exclusão do WordPress
- 1.5 Passo 5: Vinculação das Regras no Apache
- 1.6 Passo 6: Integração Automatizada com o Fail2Ban
- 1.7 Passo 7: Comandos de Auditoria, Testes e Operação
Implementação de WAF com ModSecurity (OWASP CRS v4) e Fail2Ban no Debian Linux
Este guia fornece o passo a passo completo para instalar, configurar e hardening de um servidor web Apache rodando WordPress utilizando o ModSecurity v2 (WAF), o OWASP Core Rule Set (CRS) v4 com o plugin oficial de exclusões para WordPress, e a integração com o Fail2Ban para bloqueio automático de atacantes a nível de firewall.
Passo 1: Atualização do Sistema e Instalação dos Pacotes
Primeiramente, atualize os repositórios do sistema operacional Debian e instale os módulos necessários do Apache e o Fail2Ban.
sudo apt update && sudo apt upgrade -y sudo apt install libapache2-mod-security2 fail2ban unzip -y
Passo 2: Configuração e Ativação do ModSecurity
Por padrão, o ModSecurity é instalado no modo de simulação (DetectionOnly). É necessário criar o arquivo de configuração de produção e ativar o motor de regras.
1. Duplique o arquivo de configuração recomendado:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
2. Edite o arquivo principal:
sudo nano /etc/modsecurity/modsecurity.conf
3. Altere a seguinte diretiva no início do arquivo para ativar o bloqueio (mude de DetectionOnly para On):
SecRuleEngine On
Passo 3: Instalação do OWASP Core Rule Set (v4)
O Debian traz por padrão regras antigas. Para garantir a segurança moderna e suporte a plugins isolados, instalamos a versão estável atualizada do OWASP CRS v4 direto da fonte.
1. Crie o diretório de destino e acesse-o:
sudo mkdir -p /etc/modsecurity/owasp-crs cd /etc/modsecurity/owasp-crs
2. Faça o download da última release estável do repositório oficial da OWASP:
baixar o release em https://github.com/coreruleset/coreruleset
3. Extraia o conteúdo baixado e limpe os arquivos temporários:
tar -xvf v4.9.0.tar.gz mv coreruleset-4.9.0/* ./ rm -rf coreruleset-4.9.0 v4.9.0.tar.gz
4. Crie o arquivo base de parametrização do CRS:
sudo cp crs-setup.conf.example crs-setup.conf
Passo 4: Instalação do Plugin de Exclusão do WordPress
Para evitar falsos positivos no WordPress (erros como o Gutenberg falhar ao salvar posts ou problemas na API REST), deve-se usar o plugin oficial da OWASP para CRS v4.
1. Acesse o diretório de plugins do WAF:
cd /etc/modsecurity/owasp-crs/plugins
2. Baixe o código fonte estável diretamente do repositório específico da OWASP:
baixar o release em https://github.com/coreruleset/wordpress-rule-exclusions-plugin
3. Extraia os arquivos e posicione-os na pasta raiz de plugins:
sudo unzip master.zip sudo cp wordpress-rule-exclusions-plugin-master/plugins/wordpress-rule-exclusions-config.conf ./ sudo cp wordpress-rule-exclusions-plugin-master/plugins/wordpress-rule-exclusions-before.conf ./ sudo rm -rf wordpress-rule-exclusions-plugin-master master.zip
Passo 5: Vinculação das Regras no Apache
Configure o Apache para carregar todos os módulos e os arquivos criados rigorosamente na ordem correta exigida pela arquitetura de plugins do CRS v4.
1. Abra o arquivo de configuração do módulo de segurança do Apache:
sudo nano /etc/apache2/mods-enabled/security2.conf
2. Substitua integralmente o bloco interno da tag <IfModule security2_module> pelo código abaixo:
<IfModule security2_module>
# Diretório de dados e arquivo base do ModSecurity
SecDataDir /var/cache/modsecurity
Include /etc/modsecurity/modsecurity.conf
# 1. Configuração base do OWASP CRS
Include /etc/modsecurity/owasp-crs/crs-setup.conf
# 2. Configurações dos Plugins (Carregados ANTES das regras gerais)
Include /etc/modsecurity/owasp-crs/plugins/*-config.conf
Include /etc/modsecurity/owasp-crs/plugins/*-before.conf
# 3. Regras de Ataque Gerais do OWASP CRS
Include /etc/modsecurity/owasp-crs/rules/*.conf
# 4. Plugins que rodam DEPOIS das regras básicas
Include /etc/modsecurity/owasp-crs/plugins/*-after.conf
</IfModule>
3. Valide se a sintaxe estrutural do Apache não possui erros:
sudo apache2ctl configtest
- Certifique-se de que o comando retorne apenas a mensagem: Syntax OK.*
4. Reinicie o serviço do Apache se o teste passar com sucesso:
sudo systemctl restart apache2
Passo 6: Integração Automatizada com o Fail2Ban
O ModSecurity enviará os alertas de segurança para o arquivo de erros do Apache. O Fail2Ban lerá esse arquivo e bloqueará o IP do atacante diretamente no firewall do Linux após seguidas tentativas de ataque.
1. Abra o arquivo de configuração global do Fail2Ban para definir uma Whitelist e evitar o seu próprio banimento:
sudo nano /etc/fail2ban/jail.local
2. Localize a seção [DEFAULT] e certifique-se de que a linha ignoreip contenha o IP da sua rede administrativa:
[DEFAULT] ignoreip = 127.0.0.1/8 ::1 200.145.117.0/24 200.145.118.0/24 200.145.119.128/25 200.145.120.0/22
3. Crie um arquivo isolado para a "Jail" (jaula) do ModSecurity:
sudo nano /etc/fail2ban/jail.d/apache-modsecurity.conf
4. Insira a seguinte regra:
[apache-modsecurity] enabled = true port = http,https filter = apache-modsecurity logpath = /var/log/apache2/error.log maxretry = 3 findtime = 600 bantime = 3600
5. Reinicie o serviço do Fail2Ban para aplicar a nova jaula:
sudo systemctl enable fail2ban sudo systemctl restart fail2ban
Passo 7: Comandos de Auditoria, Testes e Operação
- Simular um ataque (WAF e Fail2Ban): Execute o comando abaixo a partir de uma máquina externa para validar se o servidor retorna erro 403. Se executado 3 vezes seguidas dentro de 10 minutos, seu IP externo será completamente banido do servidor.
curl -I "http://seu-dominio-wordpress.com"
- Monitorar logs do ModSecurity em tempo real:
sudo tail -f /var/log/apache2/error.log
- Verificar os IPs banidos atualmente pelo Fail2Ban:
sudo fail2ban-client status apache-modsecurity
- Remover o banimento (Unban) de um IP legítimo pego por engano:
sudo fail2ban-client set apache-modsecurity unbanip IP_DO_USUARIO