Instalar Fail2Ban para Bloquear Ataques SSH em VPS

10 min de leitura Segurança
Instalar Fail2Ban para Bloquear Ataques SSH em VPS

O que é Fail2Ban e por que ele é essencial para sua VPS?

A segurança de um servidor Linux, especialmente quando hospedado em uma VPS (Virtual Private Server) acessível pela internet pública, é uma prioridade absoluta. Um dos vetores de ataque mais comuns e persistentes contra servidores SSH (Secure Shell) são os ataques de força bruta (brute-force). Esses ataques consistem em tentativas automatizadas e massivas de login, onde scripts iteram milhares de combinações de usuário e senha por segundo, na esperança de acertar uma credencial válida.

O Fail2Ban é uma ferramenta de segurança baseada em software que atua como um firewall dinâmico. Ele monitora os arquivos de log do sistema (como /var/log/auth.log ou /var/log/secure) e, ao detectar padrões suspeitos — como múltiplas tentativas de falha de autenticação no serviço SSH —, ele executa ações automáticas para mitigar a ameaça. A ação padrão é adicionar uma regra temporária ao firewall (iptables ou nftables) para bloquear o endereço IP do atacante.

Diferente de um firewall estático que permite ou nega tráfego com base em regras fixas, o Fail2Ban é proativo e adaptativo. Ele "aprende" com o comportamento malicioso em tempo real, oferecendo uma camada extra de defesa que reduz drasticamente a carga no seu servidor e protege suas credenciais contra varreduras automáticas.

Pré-requisitos para Instalação

Antes de prosseguir com a configuração, certifique-se de atender aos seguintes pré-requisitos:

  • Acesso Root ou Sudo: Você precisa ter privilégios administrativos no seu servidor Linux.
  • Sistema Operacional: O tutorial é compatível com distribuições baseadas em Debian/Ubuntu e RHEL/CentOS/Rocky/AlmaLinux.
  • Acesso SSH Funcionando: Atenção crítica: Não feche sua sessão atual enquanto configura o Fail2Ban pela primeira vez. Se você bloquear a si mesmo, precisará de acesso via console da nuvem (VNC/Web Console) para corrigir.
  • Firewall Básico: É recomendado ter o ufw (Ubuntu/Debian) ou firewalld/iptables (CentOS/RHEL) configurado, embora o Fail2Ban possa gerenciar as regras de bloqueio diretamente.

Passo 1: Instalação do Fail2Ban

A instalação varia ligeiramente dependendo da sua distribuição Linux. Abaixo estão os comandos para os ambientes mais comuns.

Para Debian e Ubuntu

No terminal, execute os seguintes comandos para atualizar o índice de pacotes e instalar o serviço:

sudo apt update
sudo apt install fail2ban

Após a instalação, o serviço geralmente é iniciado automaticamente. Você pode verificar o status com:

sudo systemctl status fail2ban

Para CentOS, Rocky Linux, AlmaLinux e RHEL

Utilize o gerenciador de pacotes yum ou dnf:

sudo yum install epel-release
sudo yum install fail2ban

Ou, em sistemas mais recentes com DNF:

sudo dnf install fail2ban

Iniciar e Ativar o Serviço

Independentemente da distribuição, garanta que o serviço esteja ativo e configurado para iniciar na inicialização do sistema:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Passo 2: Configurando as Ações de Bloqueio (Jails)

O Fail2Ban utiliza o conceito de jails. Um "jail" é uma configuração que define qual serviço monitorar, quais logs analisar e quais ações tomar quando uma violação for detectada.

Criando o Arquivo de Configuração Local

Nunca edite diretamente os arquivos em /etc/fail2ban/. Eles podem ser sobrescritos durante atualizações do pacote. A boa prática é criar um arquivo local que sobrescreve apenas as configurações desejadas.

Copie o arquivo de configuração padrão para a localização local:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Agora, abra o arquivo jail.local para edição. Você pode usar o editor de texto nano ou vi:

sudo nano /etc/fail2ban/jail.local

Ajustando as Configurações Globais

No topo do arquivo, você verá a seção [DEFAULT]. Aqui, definimos o comportamento padrão para todos os jails. Recomenda-se ajustar os seguintes parâmetros:

  1. Bloqueio de IP Local: Garanta que seu próprio IP não seja bloqueado se houver um erro de configuração.
  2. Duração do Banimento: Defina por quanto tempo o IP será banido (em segundos). 86400 equivale a 24 horas.
  3. Política de Busca: Definir como match para evitar falsos positivos em buscas excessivas nos logs.

Exemplo de configuração recomendada na seção [DEFAULT]:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
bantime = 3600
findtime = 600
maxretry = 3
backend = auto

Explicação dos valores:

  • ignoreip: Lista de IPs que serão sempre ignorados (seu IP local, loopback).
  • bantime: Tempo em segundos que o IP fica bloqueado. 3600 é 1 hora.
  • findtime: Janela de tempo (em segundos) na qual as tentativas falhas devem ocorrer para acionar o banimento. 600 é 10 minutos.
  • maxretry: Número máximo de tentativas falhas permitidas dentro da janela findtime. Após 3 tentativas, o IP é banido.

Passo 3: Configurando o Jail Específico para SSH

O Fail2Ban já vem com um jail pré-configurado para SSH na seção [sshd]. Verifique se ele está ativo e ajustado conforme sua necessidade.

Dentro do arquivo jail.local, localize a seção:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Se você alterou a porta padrão do SSH (por exemplo, para a porta 2222) por segurança, é crucial atualizar a linha port:

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = %(sshd_log)s

Se você estiver usando uma distribuição RHEL/CentOS, o caminho do log pode ser diferente. Verifique se logpath aponta para /var/log/secure em vez de /var/log/auth.log.

Ação de Banimento: iptables vs Firewalld

Por padrão, o Fail2Ban usa iptables para bloquear IPs. Se você estiver usando firewalld (comum em CentOS/RHEL), pode ser necessário especificar a ação correta para garantir a compatibilidade.

Adicione ou modifique a linha de ação no final do arquivo jail.local ou dentro do jail específico:

[sshd]
...
action = iptables-multiport[name=sshd, port="ssh", protocol=tcp]

Para sistemas modernos que suportam nftables, você pode usar:

action = nftables-multiport[name=sshd, port="ssh", protocol=tcp]

Passo 4: Aplicando as Configurações

Após salvar o arquivo jail.local, você precisa reiniciar o serviço Fail2Ban para carregar as novas configurações.

sudo systemctl restart fail2ban

Verifique se não houve erros de sintaxe na inicialização:

sudo systemctl status fail2ban

O output deve indicar que o serviço está active (running).

Passo 5: Verificando o Status e Testando a Configuração

Agora, vamos confirmar que o jail SSH está ativo e funcionando corretamente.

Verificando os Jails Ativos

Use o comando fail2ban-client para listar todos os jails monitorados:

sudo fail2ban-client status

Você deve ver uma lista contendo sshd. Para detalhes específicos do SSH, execute:

sudo fail2ban-client status sshd

O retorno será semelhante a este:

Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	12
|  `- Journal matches:	-3 ...
`- Actions
   |- Currently banned:	1
   |- Total banned:	5
   `- Banned IP list:	192.168.1.100

Neste exemplo, o servidor já detectou e bloqueou um IP suspeito (192.168.1.100). Se Currently banned for 0, significa que nenhum ataque foi detectado recentemente ou que a configuração ainda está fresca.

Testando Manualmente (Opcional e Cuidado)

Você pode simular uma falha de autenticação para testar o bloqueio. Faça isso apenas se tiver acesso de recuperação via console da nuvem.

  1. Tente fazer login SSH com uma senha incorreta várias vezes (mais que maxretry) em um curto período.
  2. Aguarde alguns segundos.
  3. Verifique o status novamente:
sudo fail2ban-client status sshd

O IP da sua máquina cliente deve aparecer na lista Banned IP list. Se isso acontecer, a configuração está funcionando perfeitamente.

Passo 6: Monitoramento e Logs

Para manter a segurança do seu servidor, é importante monitorar os logs do Fail2Ban. Eles ficam localizados em /var/log/fail2ban.log.

Você pode visualizar os logs em tempo real usando:

sudo tail -f /var/log/fail2ban.log

Procure por mensagens como Found (quando uma violação é detectada) e Ban (quando o IP é bloqueado).

Habilitando Notificações por E-mail

O Fail2Ban pode enviar e-mails de notificação quando um IP é banido. Para configurar isso, edite a seção [DEFAULT] no arquivo jail.local:

[DEFAULT]
destemail = [email protected]
sender = [email protected]
mta = postfix
action = %(action_mw)s

Isso enviará um resumo das ações de banimento. Certifique-se de ter um agente de transferência de correio (MTA) como postfix ou sendmail instalado e configurado no servidor.

Boas Práticas Adicionais de Segurança SSH

O Fail2Ban é uma camada poderosa, mas não deve ser sua única defesa. Combine-o com as seguintes práticas:

  1. Desativar Login como Root: Configure o /etc/ssh/sshd_config com PermitRootLogin no.
  2. Usar Chaves SSH: Desative a autenticação por senha (PasswordAuthentication no) e use chaves públicas/privadas. Isso torna ataques de força bruta inúteis.
  3. Mudar a Porta Padrão: Mover o SSH para uma porta não padrão (ex: 2222) reduz drasticamente o ruído de varreduras automáticas, embora não seja segurança por obscuridade absoluta, ajuda na limpeza dos logs.
  4. Atualizações Regulares: Mantenha o sistema operacional e o Fail2Ban atualizados para corrigir vulnerabilidades conhecidas.

Conclusão

A instalação e configuração do Fail2Ban é um passo fundamental para a hardening de qualquer servidor Linux exposto à internet. Ao automatizar o bloqueio de IPs maliciosos, você protege seus recursos, economiza largura de banda e reduz o risco de comprometimento por ataques de força bruta.

Lembre-se sempre de testar suas configurações em um ambiente seguro ou ter um plano de recuperação de acesso antes de aplicar regras de bloqueio rigorosas. A segurança é um processo contínuo de monitoramento e ajuste.

Com o Fail2Ban ativo e configurado corretamente, sua VPS estará muito mais resiliente contra as ameaças comuns que circulam na internet diariamente.

Compartilhar: Link copiado!
Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000