Segurança · 6 min read · Dec 03, 2025

Prevenindo Ataques de Força Bruta Com Fail2ban No Mandriva 2008.1

Prevenindo Ataques de Força Bruta Com Fail2ban No Mandriva 2008.1

Versão 1.0
Autor: Falko Timme

Neste artigo, mostrarei como instalar e configurar o fail2ban em um sistema Mandriva 2008.1. O Fail2ban é uma ferramenta que observa tentativas de login em vários serviços, por exemplo, SSH, FTP, SMTP, Apache, etc., e se encontrar tentativas de login falhadas repetidamente do mesmo endereço IP ou host, o fail2ban interrompe novas tentativas de login desse endereço IP/host bloqueando-o com uma regra de firewall iptables.

Este documento vem sem garantia de qualquer tipo! Quero dizer que esta não é a única maneira de configurar um sistema desse tipo. Existem muitas maneiras de alcançar esse objetivo, mas este é o caminho que eu sigo. Não dou nenhuma garantia de que isso funcionará para você!

1 Nota Preliminar

O Fail2ban é semelhante ao DenyHosts, que abordei neste tutorial: https://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts, mas ao contrário do DenyHosts, que se concentra no SSH, o fail2ban pode ser configurado para monitorar qualquer serviço que escreva tentativas de login em um arquivo de log, e em vez de usar apenas /etc/hosts.deny para bloquear endereços IP/hosts, o fail2ban pode usar iptables e /etc/hosts.deny.

Neste exemplo, configurarei o fail2ban para monitorar tentativas de login no servidor SSH, no servidor Proftpd, tentativas de login em sites protegidos por .htaccess/.htpasswd, no Courier POP3 e Courier IMAP, e no SASL (para envio de e-mails). Instalarei o pacote fail2ban que está disponível para Mandriva 2008.1. Ele vem com uma configuração padrão, mas, infelizmente, essa configuração não funciona muito bem para a maioria dos serviços mencionados. Portanto, criarei uma configuração personalizada do fail2ban que testei e que funciona para mim.

2 Instalando o fail2ban

Antes de instalarmos qualquer pacote, devemos habilitar os repositórios main, main_updates, contrib e contrib_updates. Vá para http://easyurpmi.zarb.org/ - isso deve fornecer os comandos que você precisa executar para habilitar esses repositórios. No meu caso, executei

urpmi.addmedia contrib ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/release with media_info/hdlist.cz
urpmi.addmedia --update contrib_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/updates with media_info/hdlist.cz
urpmi.addmedia main ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/release with media_info/hdlist.cz
urpmi.addmedia --update main_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/updates with media_info/hdlist.cz

O Fail2ban pode ser instalado da seguinte forma:

urpmi fail2ban

Em seguida, iniciamos o fail2ban:

/etc/init.d/fail2ban start

Você encontrará todos os arquivos de configuração do fail2ban no diretório /etc/fail2ban.

3 Configurando o fail2ban

O comportamento padrão do fail2ban é configurado no arquivo /etc/fail2ban/jail.conf. Dê uma olhada nele, não é difícil de entender. Há uma seção [DEFAULT] que se aplica a todas as outras seções, a menos que as opções padrão sejam substituídas nas outras seções.

Eu explico algumas das opções de configuração aqui:

  • ignoreip: Esta é uma lista separada por espaços de endereços IP que não podem ser bloqueados pelo fail2ban. Por exemplo, se o computador do qual você está se conectando ao servidor tiver um endereço IP estático, você pode querer listá-lo aqui.
  • bantime: Tempo em segundos que um host é bloqueado se for pego pelo fail2ban (600 segundos = 10 minutos).
  • maxretry: Máx. número de tentativas de login falhadas antes que um host seja bloqueado pelo fail2ban.
  • filter: Refere-se ao arquivo de filtro apropriado em /etc/fail2ban/filter.d.
  • action: Refere-se ao arquivo de ação apropriado em /etc/fail2ban/action.d.
  • logpath: O arquivo de log que o fail2ban verifica em busca de tentativas de login falhadas.

É assim que meu arquivo /etc/fail2ban/jail.conf se parece:

vi /etc/fail2ban/jail.conf

| # Arquivo de configuração do Fail2Ban # # Autor: Cyril Jaquier # # $Revision: 617 $ # # O DEFAULT permite uma definição global das opções. Elas podem ser sobrescritas # em cada prisão posteriormente. [DEFAULT] # "ignoreip" pode ser um endereço IP, uma máscara CIDR ou um host DNS. O Fail2ban não # banirá um host que corresponda a um endereço nesta lista. Vários endereços podem ser # definidos usando separador de espaço. ignoreip = 127.0.0.1 192.168.0.99 # "bantime" é o número de segundos que um host é banido. bantime = 600 # Um host é banido se ele gerou "maxretry" durante os últimos "findtime" # segundos. findtime = 600 # "maxretry" é o número de falhas antes que um host seja banido. maxretry = 3 # "backend" especifica o backend usado para obter a modificação de arquivos. As opções # disponíveis são "gamin", "polling" e "auto". Esta opção pode ser sobrescrita em # cada prisão também (use "gamin" para uma prisão e "polling" para outra). # # gamin: requer que o Gamin (um monitor de alteração de arquivos) esteja instalado. Se o Gamin # não estiver instalado, o Fail2ban usará polling. # polling: usa um algoritmo de polling que não requer bibliotecas externas. # auto: escolherá Gamin se disponível e polling caso contrário. backend = auto # Esta prisão corresponde à configuração padrão no Fail2ban 0.6. # A ação mail-whois envia um e-mail de notificação com um pedido whois # no corpo. [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected]] logpath = /var/log/auth.log maxretry = 5 [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, [email protected]] logpath = /var/log/proftpd/proftpd.log maxretry = 6 [sasl-iptables] enabled = true filter = sasl backend = polling action = iptables[name=sasl, port=smtp, protocol=tcp] sendmail-whois[name=sasl, [email protected]] logpath = /var/log/mail/info.log [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/httpd/*error_log maxretry = 6 [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail/info.log bantime = 300 [courierpop3] enabled = true port = pop3 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [courierimap] enabled = true port = imap2 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] ignoreregex = for myuser from logpath = /var/log/auth.log [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [apache-badbots] enabled = false filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] logpath = /var/www/*/logs/access_log bantime = 172800 maxretry = 1 [apache-shorewall] enabled = false filter = apache-noscript action = shorewall sendmail[name=Postfix, [email protected]] logpath = /var/log/apache2/error_log [ssh-ipfw] enabled = false filter = sshd action = ipfw[localhost=192.168.0.1] sendmail-whois[name="SSH,IPFW", [email protected]] logpath = /var/log/auth.log ignoreip = 168.192.0.1 [named-refused-udp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=udp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 [named-refused-tcp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=tcp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 |

Meu computador cliente tem o endereço IP estático 192.168.0.99, e como não quero ser bloqueado, adicionei-o à lista ignoreip.

Quero controlar tentativas de login no SSH, Apache, Proftpd, Courier-POP3, Courier-IMAP e Sasl, então defini enabled como true para esses serviços e como false para todos os outros serviços. Observe que alguns serviços, como SSH, podem ser bloqueados pelo iptables ou pelo TCPWrappers (/etc/hosts.deny). Decida por si mesmo qual método você prefere.

Certifique-se de substituir o endereço de e-mail [email protected] pelo seu próprio endereço de e-mail para que você seja notificado quando alguém for bloqueado pelo fail2ban.

Se você comparar o arquivo com o /etc/fail2ban/jail.conf padrão, também notará que eu mudei alguns arquivos de log porque os arquivos de log no /etc/fail2ban/jail.conf padrão não estão corretos para o Mandriva 2008.1.

Sempre que modificamos a configuração do fail2ban, devemos reiniciar o fail2ban, então é isso que fazemos agora:

/etc/init.d/fail2ban restart

É isso mesmo. O fail2ban registra em /var/log/fail2ban.log, então você pode verificar esse arquivo para descobrir se/quais hosts foram bloqueados. Se um host foi bloqueado pelo fail2ban, ele se parece com isso:

2008-08-12 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4  
2008-08-12 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4  
2008-08-12 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4  
2008-08-12 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4

Você também pode verificar seu firewall para ver se algum host está atualmente bloqueado. Basta executar

iptables -L

Para serviços que usam TCPWrappers para bloquear hosts, dê uma olhada em /etc/hosts.deny.

Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.