Instalação
Servidor exposto sem rate limit em SSH é convite a bots. Fail2ban lê logs e bloqueia IPs no firewall.
sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
Jail local para SSH
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime = 1h
findtime = 10m
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
CUIDADO Não se auto-banque: tenha console ou IP allowlist se o acesso for crítico.
Comandos e opções explicados
Cada linha do artigo tem uma função. A tabela abaixo explica o comando ou a opção e o que ela muda na prática.
| Comando ou opção | O que faz |
|---|---|
sudo apt update | Atualiza a lista de pacotes disponíveis antes de instalar. |
sudo apt install fail2ban -y | Instala o Fail2ban. O -y responde "sim" às confirmações. |
sudo systemctl enable --now fail2ban | enable liga o serviço no boot e --now também o inicia agora. |
[sshd] | Nome da jail, o conjunto de regras que vigia um serviço, aqui o SSH. |
enabled = true | Liga a jail. Sem isso ela existe, mas não age. |
port = ssh | Porta a bloquear para o IP banido. ssh equivale à 22; se você mudou a porta, escreva o número. |
filter = sshd | Filtro com as expressões regulares que reconhecem falhas de login no log. |
logpath = /var/log/auth.log | Arquivo de log que o Fail2ban lê. |
maxretry = 4 | Quantas falhas são toleradas dentro da janela findtime. |
findtime = 10m | Janela em que as falhas são contadas. |
bantime = 1h | Por quanto tempo o IP fica bloqueado. |
sudo systemctl restart fail2ban | Reinicia o serviço para ler o jail.local. |
sudo fail2ban-client status sshd | Mostra falhas atuais, total de bloqueios e a lista de IPs banidos. |
Lendo as opções juntas: um IP que errar o login 4 vezes em 10 minutos fica bloqueado por 1 hora.
Exemplo: como fica a saída de um IP bloqueado
Com o serviço ativo, fail2ban-client status sshd mostra algo parecido com isto (o IP é fictício):
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 37
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 3
`- Banned IP list: 203.0.113.45| Para… | Comando |
|---|---|
| desbloquear um IP | sudo fail2ban-client set sshd unbanip 203.0.113.45 |
| nunca bloquear o seu IP | adicione ignoreip = 127.0.0.1/8 ::1 SEU_IP na seção [DEFAULT] do jail.local |
| recarregar sem reiniciar | sudo fail2ban-client reload |
Erros comuns e como resolver
| Sintoma | Causa provável | Solução |
|---|---|---|
| Mensagem "Have not found any log file for sshd jail" | O logpath não existe, o que acontece em sistemas sem rsyslog (sem auth.log). | Use backend = systemd na jail e remova o logpath, ou instale o rsyslog. |
| Você mesmo foi bloqueado | Muitas tentativas de login erradas dentro da janela. | Entre pelo console do provedor e use unbanip. Depois inclua seu IP no ignoreip. |
| A configuração sumiu após uma atualização | A edição foi feita no jail.conf, que o pacote pode sobrescrever. | Mantenha suas regras no jail.local ou em jail.d/*.local. |
| Nenhum IP é bloqueado | A porta do SSH foi alterada e a jail ainda aponta para a 22. | Ajuste port para o número usado no sshd_config. |