Neste artigo eu irei mostrar como instalar e configurar o fail2ban em um sistema Ubuntu 13.04 – Raring Ringtail. Fail2ban é uma ferramenta que observa tentativas de login em vários serviços, SSH, FTP, SMTP, Apache, etc., e se ele encontra várias tentativas de login vindas do mesmo ip ou host, ele impede novas tentativas deste endereço de IP/host bloqueando-o adicionando regras no firewal iptables. Este documento vem sem nenhum tipo de garantia! O que eu quero dizer é que esta não é a única maneira de configurar um sistema como este. Há diversas outras formas de obter o mesmo resultado, mas esta é a forma que eu fiz. Não posso dar garantia de que desta forma funcionará para você! É importante sempre procurar e ler a documentação antes de iniciar a instalação/configuração.

Nota preliminar

O fail2ban pode ser configurado para monitorar tentativas de login em qualquer serviço, faz registros em log usa o iptables. Neste exemplo, vou instalar o fail2ban que está disponível nos repositórios através do apt-get:

apt-cache search fail2ban

O programa pode ser instalado no Ubuntu através do seguinte comando:

sudo apt-get update && sudo apt-get install fail2ban

Configuração do Fail2ban

O padrão de comportamento fail2ban é configurado no arquivo /etc/fail2ban/jail.conf. Dando uma olhada não é difícil de entender. Há uma sessão [padrão] que se aplica a todas as outras sessões, a menos que as opções padrão sejam especificadas nas outras secções. Eu explico aqui algumas das opções de configuração aqui

  • ignoreip: Esta é uma lista de IP’s separados por espaço que não serão bloqueadas pelo fail2ban.Por exemplo, se o computador que você deseja conectar ao servidor é configurado com um ip estático, você pode listá-lo aqui.
  • bantime: Tempo em segundos que o host ficará bloqueado se for capturado pelo fail2ban (600 segundos = 10 minutos).
  • maxretry: Número máximo de tentativas de login mal sucedidas até que o host seja bloqueado pelo fail2ban.
  • filter: Refere-se ao arquivo de filtro apropriado em /etc/fail2ban/filter.d.
  • logpath: O arquivo de log que fo fail2ban irá checar por tentativas de login mal-sucedidas.

Como sugerido nos comentários no início do /etc/fail2ban/jail.conf, não modifique-o diretamente para ajustar-se às suas necessidades, mas crie um novo arquivo de configuração, ou faça um backup, por exemplo /etc/fail2ban/jail.local. Esta é a configuração sugerida pelo autor original do arquivo:

# Fail2Ban configuration file.
#
# This file was composed for Debian systems from the original one
# provided now under /usr/share/doc/fail2ban/examples/jail.conf
# for additional examples.
#
# Comments: use '#' for comment lines and ';' for inline comments
#
# To avoid merges during upgrades DO NOT MODIFY THIS FILE
# and rather provide your changes in /etc/fail2ban/jail.local
#

# The DEFAULT allows a global definition of the options. They can be overridden
# in each jail afterwards.

    [DEFAULT]

    # "ignoreip" can be an IP address, a CIDR mask or a DNS host
    ignoreip = 127.0.0.1 192.168.0.99
    bantime  = 600
    maxretry = 3

    # "backend" specifies the backend used to get files modification. Available
    # options are "gamin", "polling" and "auto".
    # yoh: For some reason Debian shipped python-gamin didn't work as expected
    #      This issue left ToDo, so polling is default backend for now
    backend = polling

    #
    # Destination email address used solely for the interpolations in
    # jail.{conf,local} configuration files.
    destemail = root@localhost

    # Default action to take: ban only
    action = iptables[name=%(__name__)s, port=%(port)s]

    [ssh]

    enabled = true
    port    = ssh
    filter  = sshd
    logpath  = /var/log/auth.log
    maxretry = 5

    [apache]

    enabled = true
    port    = http
    filter  = apache-auth
    logpath = /var/log/apache*/*error.log
    maxretry = 5

    [apache-noscript]

    enabled = false
    port    = http
    filter  = apache-noscript
    logpath = /var/log/apache*/*error.log
    maxretry = 5

    [vsftpd]

    enabled  = false
    port     = ftp
    filter   = vsftpd
    logpath  = /var/log/auth.log
    maxretry = 5

    [proftpd]

    enabled  = true
    port     = ftp
    filter   = proftpd
    logpath  = /var/log/auth.log
    failregex = proftpd: \(pam_unix\) authentication failure; .* rhost=<HOST>
    maxretry = 5

    [wuftpd]

    enabled  = false
    port     = ftp
    filter   = wuftpd
    logpath  = /var/log/auth.log
    maxretry = 5

    [postfix]

    enabled  = false
    port     = smtp
    filter   = postfix
    logpath  = /var/log/mail.log
    maxretry = 5

    [courierpop3]

    enabled  = true
    port     = pop3
    filter   = courierlogin
    failregex = courierpop3login: LOGIN FAILED.*ip=\[.*:<HOST>\]
    logpath  = /var/log/mail.log
    maxretry = 5

    [courierimap]

    enabled  = true
    port     = imap2
    filter   = courierlogin
    failregex = imapd: LOGIN FAILED.*ip=\[.*:<HOST>\]
    logpath  = /var/log/mail.log
    maxretry = 5

    [sasl]

    enabled  = true
    port     = smtp
    filter   = sasl
    failregex = warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed
    logpath  = /var/log/mail.log
    maxretry = 5

Meu computador cliente está configurado com o ip estático 192.168.0.99, e porque eu não quero que ele seja bloqueado eu adicionei este ip a lista de IP’s ignorados. Eu defini o número máximo de tentativas de login para 5 para todos os serviços e criei duas novas sessões: [courierpop3] e [courierimap], para que o fail2ban possa bloquear tentativas para meus servidores Courier-POP3 e Courier-IMAP. Como eu quero controlar as tentativas de login aos servidores ssh, apache, proftp, courierpop3, courierimap e ssl, então eu tive que ativar como verdadeiros para estes serviços e falsos para todos os outros. Se você comparar com o arquivo /etc/fail2ban/jail.conf, você também vai reparar que eu alterei alguns arquivos de registro, porque os arquivos de log em /etc/fail2ban/jail.conf não estão corretos para o Ubuntu. Além disso, adicionamos uma linha failregex para alguns serviços, porque as expressões regulares no filtro apropriado no arquivo /etc/fail2ban/filter.d, não se aplicam no meu caso. A linha failregex se sobrepõe à regra de filtro no ficheiro adequado na /etc/fail2ban/filter.d. Após fazer as devidas alterações será necessário reiniciar o fail2ban:

sudo /etc/init.d/fail2ban restart

Pronto. Os logs do fail2ban ficarão armazenados em: /var/lob/fail2ban.log, então você poderá checar o arquivo para verificar os hosts que foram bloqueados. Se algum host for bloqueado pelo fail2ban, o log terá em seus registros algo como isto:

Você também poderá verificar as regras do firewall com um simples comando:

iptables -L

Esta é uma trdução livre do artigo: Preventing Brute Force Attacks With Fail2ban On Debian Etch, escrito por: Falko Timme.