Prevenindo Ataques de ‘Força Bruta’ com Fail2ban
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.