Alexsandro Felix

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

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.

Sair da versão mobile