POP HOSTING

Como proteger o SSH com fail2ban no Debian, Ubuntu e AlmaLinux imprimir

  • fail2ban, ssh, força bruta, jail.local, debian 12, ubuntu 24.04, almalinux
  • 0

Veja como instalar e configurar o fail2ban para proteger o SSH contra ataques de força bruta no Debian 12, Ubuntu 24.04 e AlmaLinux 9.

  • Tempo: 15 min
  • Nível: Intermediário
  • Vale para: Debian 12, Ubuntu 22.04 e 24.04, AlmaLinux e Rocky Linux 9
  • Atualizado: outubro de 2026

Todo servidor com SSH aberto na internet recebe milhares de tentativas de senha por dia. O fail2ban lê os registros de login e, quando um IP erra a senha várias vezes seguidas, bloqueia esse IP no firewall por um tempo. Ele não substitui uma senha forte ou o login por chave, mas tira a maior parte do ruído e dificulta muito os ataques automáticos.

Antes de começar

  • Acesso root ao servidor. Os comandos abaixo são executados como root.
  • O seu IP, para colocar na lista de exceções e não bloquear a si mesmo. Descubra em pophosting.com.br/meu-ip.
  • A porta do SSH, se você a mudou da 22.
  • Um acesso de emergência (console do servidor), caso você se bloqueie.
Servidor com cPanel/WHM: não instale o fail2ban. O firewall CSF, com o serviço LFD, e o cPHulk do WHM já fazem esse trabalho. Usar os dois ao mesmo tempo gera conflito de regras.

Como instalar o fail2ban

Debian 12 e Ubuntu:

apt update
apt install fail2ban python3-systemd nftables

AlmaLinux e Rocky Linux 9 (o pacote vem do EPEL e já traz a integração com o firewalld):

dnf install epel-release
dnf install fail2ban

Como configurar o fail2ban para o SSH

Nunca edite o arquivo jail.conf: ele é substituído nas atualizações. Toda a sua configuração vai no /etc/fail2ban/jail.local. Crie o arquivo com este conteúdo, trocando 203.0.113.50 pelo seu IP:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.50
bantime  = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
bantime.maxtime = 1w

[sshd]
enabled = true
port    = ssh
backend = systemd

Na prática: quem errar a senha 5 vezes em 10 minutos fica bloqueado por 1 hora. Com o bantime.increment, quem volta a atacar depois de liberado recebe bloqueios cada vez maiores, até o limite de 1 semana. O backend = systemd faz o fail2ban ler os logins direto do journal do sistema, que existe em todas as distribuições atuais.

Se o SSH usa outra porta, informe o número em vez de ssh, por exemplo port = 2222. Se a porta estiver errada, o fail2ban registra o bloqueio, mas o atacante continua entrando pela porta real.

Ajuste extra no Debian 12

No Debian 12, o pacote vem configurado para bloquear com o iptables, que nem sempre está instalado. Acrescente estas duas linhas na seção [DEFAULT] do jail.local para usar o nftables:

banaction = nftables-multiport
banaction_allports = nftables-allports

No Ubuntu 24.04 o nftables já é o padrão do pacote, e no AlmaLinux o bloqueio é feito pelo firewalld. Nesses dois, não acrescente essas linhas.

Como iniciar e conferir

systemctl enable --now fail2ban
systemctl restart fail2ban
fail2ban-client status
fail2ban-client status sshd

O último comando mostra quantas falhas foram detectadas, quantos IPs estão bloqueados agora e a lista desses IPs. Em servidores expostos, é comum ver IPs bloqueados poucos minutos depois de ativar.

Para ver o que o fail2ban está fazendo em tempo real:

tail -f /var/log/fail2ban.log

Como desbloquear um IP no fail2ban

fail2ban-client set sshd unbanip 203.0.113.50

Para liberar um IP de todas as jails de uma vez, use fail2ban-client unban 203.0.113.50. Se o IP for seu ou de alguém da equipe, acrescente-o ao ignoreip e rode systemctl restart fail2ban para não acontecer de novo.

Problemas comuns

Have not found any log file for sshd jail

Aparece no Debian 12, que não grava mais o /var/log/auth.log por padrão. A solução é a linha backend = systemd na seção [sshd] e o pacote python3-systemd instalado, como mostrado acima.

O IP aparece como bloqueado, mas continua tentando

Duas causas comuns: a porta do SSH no jail.local não é a porta real, ou a ação de bloqueio não funciona no sistema (no Debian 12, use o ajuste do nftables). Confira se as regras foram criadas com nft list ruleset (Debian e Ubuntu) ou firewall-cmd --list-rich-rules (AlmaLinux).

ModuleNotFoundError: No module named 'asynchat'

Problema da versão do fail2ban que saiu no lançamento do Ubuntu 24.04 com o Python 3.12. Atualize o pacote com apt update && apt install --only-upgrade fail2ban.

Bloqueei meu próprio IP

Entre por outro IP (celular roteando internet, por exemplo) ou pelo console do servidor e rode o unbanip. Depois inclua o seu IP no ignoreip.

Como testar se o filtro reconhece as falhas

fail2ban-regex systemd-journal /etc/fail2ban/filter.d/sshd.conf

O resultado mostra quantas linhas do journal casaram com o filtro do SSH. Se der zero e houver tentativas de login no servidor, revise o backend.

Perguntas frequentes

O fail2ban substitui a chave SSH?

Não. Ele reduz o volume de ataques. A proteção de verdade é login por chave, senha forte e, se possível, SSH liberado só para IPs conhecidos.

Posso proteger outros serviços?

Sim. O fail2ban traz filtros prontos para Nginx, Apache, Postfix, Dovecot e outros. Basta criar uma seção para cada um no jail.local com enabled = true.

Quer um servidor Linux com acesso root e suporte de verdade? Conheça os servidores dedicados da POP Hosting.

Esta resposta lhe foi útil?
« Retornar