Neste guia, vamos apresentar as principais funcionalidades do Fail2Ban e mostrar como configurá-lo para proteger servidores web (Apache e NGINX), limitar tentativas de login via SSH e configurar notificações por e-mail para alertar quando um IP for bloqueado.
Principais funcionalidades
- Monitoramento de logs – Analisa arquivos de log de serviços como Apache, SSH, NGINX e outros para identificar comportamentos suspeitos.
- Bloqueio automático de IPs – Bane automaticamente endereços IP que apresentarem tentativas repetidas de acesso não autorizado.
- Alta flexibilidade – Permite personalizar regras e filtros de acordo com as necessidades do servidor.
- Notificações por e-mail – Pode enviar alertas quando um IP for bloqueado, informando detalhes da ocorrência.
1. Instalando o Fail2Ban
Use o gerenciador de pacotes da sua distribuição para instalar o Fail2Ban:
# Para Debian/Ubuntu
sudo apt-get install fail2ban
# Para CentOS/RHEL/Fedora
sudo yum install fail2ban
Após a instalação, crie um arquivo de configuração personalizado copiando o modelo original:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Abra o arquivo jail.local para editar as configurações padrão:
# Tempo que o IP ficará banido
bantime = 10m
# Quantidade máxima de tentativas antes do bloqueio
maxretry = 5
# Intervalo de tempo para contar as tentativas
findtime = 10m
2. Protegendo servidores Apache
No arquivo /etc/fail2ban/jail.local, adicione ou habilite a seção:
[apache-auth]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 3
findtime = 1m
Essa configuração bloqueia um IP após 3 tentativas falhas de autenticação em 1 minuto, mantendo o bloqueio por 10 minutos.
Nota: Você também pode habilitar outras proteções como [apache-badbots], [apache-overflows] e [apache-botsearch] para ampliar a segurança.
3. Protegendo servidores NGINX
No arquivo /etc/fail2ban/jail.local, habilite:
[nginx-http-auth]
enabled = true
port = http,https
logpath = %(nginx_error_log)s
[nginx-limit-req]
enabled = true
port = http,https
logpath = %(nginx_error_log)s
No nginx.conf adicione:
http {
...
# Limitar requisições para PHP
limit_req_zone $binary_remote_addr zone=limit:20m rate=10r/s;
}
No arquivo de configuração do site (ex.: /etc/nginx/sites-enabled/www.seudominio.com.br), inclua:
server {
...
location ~ \.php$ {
...
limit_req zone=limit burst=20 nodelay;
}
}
Essa configuração bloqueia IPs que excedam 10 requisições por segundo ou ultrapassem o limite de processamento definido.
4. Protegendo o acesso SSH
No arquivo /etc/fail2ban/jail.local:
[sshd]
enabled = true
mode = normal
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Isso ajuda a prevenir ataques de força bruta contra logins SSH.
5. Configurando notificações por e-mail
Ainda no jail.local, configure o envio de alertas:
# Destinatário dos alertas
destemail = alerta@seudominio.com.br
# Remetente dos alertas
sender = fail2ban@seudominio.com.br
# Método de envio (ajuste conforme seu servidor)
mta = sendmail
# Tipo de ação
action = %(action_mwl)s # Banir, enviar relatório WHOIS e logs relevantes
6. Aplicando as configurações
Reinicie ou recarregue o Fail2Ban:
# Reiniciar
sudo systemctl restart fail2ban
# Recarregar sem interromper
sudo systemctl reload fail2ban
7. Verificando IPs banidos
Use o comando:
fail2ban-client banned
Assim, você poderá confirmar quais IPs estão atualmente bloqueados.
AVISO LEGAL: Os procedimentos descritos neste documento devem ser executados de acordo com o contexto de cada sistema, de forma a evitar impactos negativos à segurança, disponibilidade, integridade e privacidade de dados. A CentralServer se reserva o direito de modificar a qualquer tempo e sem aviso prévio as informações aqui apresentadas a fim de refletir o lançamento de novos serviços, atualizações físicas e operacionais, e evolução do estado-da-arte da tecnologia.