Fail2ban avançado: SSH, Nginx e APIs
A configuração padrão do fail2ban protege apenas SSH. Com filtros customizados, você protege Nginx, endpoints de login da sua API e qualquer serviço que gere logs. Este artigo vai além do básico: filtros para sua aplicação, proteção contra scanning de vulnerabilidades e operação do dia a dia.
Configuração base: jail.local
Nunca edite jail.conf — crie jail.local que sobrescreve as configurações padrão:
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600 # ban por 1 hora
findtime = 600 # janela de 10 minutos
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 SEU_IP_FIXO/32
backend = auto
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3
bantime = 86400 # 24h para SSHProteger Nginx: bots e brute force
Adicione jails para monitorar logs do Nginx:
# /etc/fail2ban/jail.local — adicionar:
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 2
bantime = 86400
# /etc/fail2ban/filter.d/nginx-botsearch.conf:
# [Definition]
# failregex = <HOST> .* "(GET|POST) .*\.(php|asp|aspx|cgi|env|git)
# ignoreregex =
[nginx-limit-req]
enabled = true
port = http,https
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10Filtro customizado para sua aplicação
Crie filtros para proteger endpoints específicos da sua API:
# /etc/fail2ban/filter.d/minha-api.conf
[Definition]
failregex = ^.*"ip":"<HOST>".*"event":"login_failed".*$
^.*"remoteAddr":"<HOST>".*"status":401.*$
ignoreregex =
# /etc/fail2ban/jail.local:
[minha-api]
enabled = true
port = http,https
filter = minha-api
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 300
# Testar o filtro sem ban real:
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/minha-api.confComandos de operação
Gerenciar bans, ver status e desbanir IPs legítimos:
# Status geral
fail2ban-client status
# Status de uma jail (com IPs banidos)
fail2ban-client status sshd
# Desbanir IP
fail2ban-client set sshd unbanip 203.0.113.10
# Banir manualmente
fail2ban-client set sshd banip 198.51.100.5
# Logs em tempo real
tail -f /var/log/fail2ban.log
# Recarregar após mudanças
fail2ban-client reload
# IPs banidos hoje
grep "Ban " /var/log/fail2ban.log | grep "$(date +%Y-%m-%d)" | wc -lJail recidive: aumentar ban para reincidentes
A jail recidive bane por muito mais tempo IPs que voltam após o ban inicial:
# /etc/fail2ban/jail.local — adicionar:
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime = 604800 # 7 dias
findtime = 86400 # janela de 1 dia
maxretry = 5 # 5 bans em 1 dia → 7 dias banido
# Verificar IPs em recidive
fail2ban-client status recidive$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.
Perguntas frequentes
Conteúdos relacionados