Fail2Ban :: Serviço de Proteção e Jail de Serviços Contra Ataques de Força Bruta

Share:

O Fail2Ban é uma ferramenta de gerenciamento de requisições que funciona como um agente monitor de portas e serviços do sistema, gerando logs constantes de acessos aos serviços que você parametriza. Em suas configurações você determina um número de tentativas que um IP será considerado suspeito e um tempo de jail, onde todas as máquinas que tentarem forçar uma entrada após X tentativas são colocadas e automaticamente são negadas pelo firewall dinamicamente por um X período de tempo.

Essa solução é muito bacana, e detém muito do core dos ataques automatizados em vários tipos de situações. Eu mesmo já passei por algo bem parecido, onde criamos uma blacklist gigante de IP's chineses que ficavam tentando xeretar alguns roteadores.

Site do projeto: http://www.fail2ban.org/

Instalando em distribuições Debian e Ubuntu:
 root@servidor:~# sudo apt-get install fail2ban  

Instalando em distribuições Fedora, Red Hat e CentOS
 root@servidor:~# sudo yum install fail2ban  

Instalando em distribuições Slackware via SBOpkg
 root@servidor:~# sbopkg -i fail2ban  


Configurando o Monitoramento de Serviços do Fail2Ban 

Para realizar uma configuração básica que proteja sua porta SSH, vamos editar o arquivo de configurações do Fail2Ban
 root@servidor:~# vim /etc/fail2ban/jail.conf  
Procure no arquivo pela tag [DEFAULT]
Nela, iremos realizar algumas configurações de funcionamento do serviço, como Whitelists de acesso, tempo do ban e o número de tentativas que vai identificar o IP como malicioso e 'enjaular' o mesmo no Firewall.

Dentro dela, tente localizar os parâmetros abaixo e altere seus valores para:
 ignoreip =192.168.0.202  
 bantime = 3600  
 maxretry = 5  

Ajuste os parâmetros como melhor desejar, no caso:

ignoreip: Irá ignorar todos os IPs que você descrever, tornando os mesmos imunes as regras do Fail2Ban
bantime: É a quantidade de tempo descrita em segundos que a máquina ficara banida caso o Fail2Ban seja acionado
maxretry: É o número de tentativas que uma máquina poderá realizar sem ativar o serviço

Agora localize a tag [sshd] e modifique os parâmetros
 enabled = true  
 port = ssh  
 filter = sshd  
 logpath = /var/log/auth.log  

Vou realizar um teste em um ambiente de teste onde atacarei a porta 22 padrão ssh de um servidor em produção monitorando os logs de acesso. Você pode acessá-lo em tempo real dando um tail ou cat -f no arquivo fail2ban.log
 root@servidor:~# tail -f /var/log/fail2ban.log  


Realizei o teste com uma máquina com IP 192.168.0.61, e ela entrou em jail por 3600 segundos após 6 tentativas de acesso na porta ssh

Para proteger os acessos a um FTP, basta procurar o tipo de serviço que você está utilizando como ProFTPD, Pure FTPD ou WuFTPD. Vou dar um exemplo utilizando o ProFTPD, é só modificar os parâmetros para:
 [proftpd]  
 enabled = true  
 port   = ftp,ftp-data,ftps,ftps-data  
 filter  = proftpd  
 logpath = /var/log/proftpd/proftpd.log  
 maxretry = 6  

E no caso de um servidor Web
 [apache]  
 enabled = true  
 port   = http,https  
 filter  = apache-auth  
 logpath = /var/log/apache*/*error.log  
 maxretry = 60000  

No caso de um servidor Web, o numero de Max Retry tem que ser muito alto, pois normalmente a cada acesso, são várias requisições realizadas entre o cliente e o servidor. Aconselho você a ser bem generoso nesse sentido para não arrumar mais dores de cabeça com o cliente. (Dica da dor).

Visualizando a Lista de IP's Banidos 

Para visualizar a lista de IP's que entraram e sairam da Blacklist do Fail2ban, basta acessar o arquivo
 # vim /var/log/fail2ban.log

Esse aquivo tem uma lista (quase) completa de todos os IP's que entram e saem da Blacklist do Fail2ban.
Quase? Mas por que quase?? Porque quando o log passa de um tamanho x, ele é compactado  em um arquivo.gz. Caso queira consultar, eles sempre vão ficar ali ba pasta de logs do sistema.


Para visualizar os logs de autenticação do sistema, basta ler o arquivo
 # vim /var/log/auth.log  

Os serviços suportados por default pelo Fail2ban são:

[ssh-ddos], [apache] [apache-multiport] [apache-noscript] [apache-overflows] [vsftpd] [proftpd] [pure-ftpd] [wuftpd] [postfix] [couriersmtp] [courierauth] [sasl] [dovecot] [named-refused-tcp] [xinetd-fail] [pam-generic] [dropbear] [ssh]

Espero ter ajudado :)

2 comentários:

  1. Excelente cara. Poderia fazer um destes mas monitorando as requests no nginx / apache, só uma sugestão. Valeu!

    ResponderExcluir
    Respostas
    1. Boa! No Nginx é possivel especificar o rate limit direto nas configs, mas pra fins de notificação sua sugestão é ótima! Obrigado!
      http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

      Excluir