Fail2ban é um framework open source gratuito, desenvolvido em python. O programa opera monitorando arquivos de log, como /var/log/pwdfail, /var/log/auth.log, /var/log/secure etc. Ele também bane um determinado IP de acessar o sistema no caso de haverem muitas falhas de senha incorreta na hora de acessar o sistema. Esse artigo explicará como é possível instalar e configurar o Fail2ban no RHEL 6.3/6.2/6.1/6.0/5.8, CentOS 6.3/6.2/6.1/6.0/5.8 e Fedora 17/16/15/14/13/12. O Fail2ban é executado usando scrits de python para analisar os arquivos de log tentando encontrar tentativas de invasão no sistema.
Instalando Fail2ban em RedHat/CentOS/Fedora
Antes de começar com a instalação e configuração do Fail2Ban, é bom saber que a maioria dos hackers tentam realizar ataques via SSH. Por isso, é recomendado que você desative logins em root no SSH, e use duas chaves de autenticação.
Por padrão, o Fail2Ban não está disponível para sistemas Linux, por isso é necessário adiciona-lo e ativa-lo através de repositórios RPMForge ou EPEL. Uma vez adicionado ao repositório, a instalação pode ser feita através do comando YUM.
# yum install fail2ban
Configurando a sessão padrão do Fail2Ban
O principal arquivo de configuração do Fail2Ban fica localizado em /etc/fail2ban/jail.conf. Abra o arquivo usando o VI Editor ou qualquer outro editor que você se sinta confortável.
# vi /etc/fail2ban/jail.conf
Em seguida, você verá uma sessão com algumas regras básicas do Fail2BAN. Você também pode personalizar a seção de cada regra de acordo com suas necessidades.
[DEFAULT] # "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not # ban a host which matches an address in this list. Several addresses can be # defined using space separator. ignoreip = 127.0.0.1 # "bantime" is the number of seconds that a host is banned. bantime = 600 # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 600 # "maxretry" is the number of failures before a host get banned. maxretry = 3
O que significa cada uma dessas regras?
ignoreip : Essa regra permite que você crie um whitelist de IPs que não podem ser bloqueados. Insira seu próprio IP também. bantime : Essa regra trata do número de segundos que um host pode ficar banido do servidor. Por padrão, o tempo é de 600 segundos (10 minutos), mas pode ser aumentado. findtime : Essa regra é sobre o tempo que um host tem para tentar logar. O padrão está definido para dez minutos. Se houverem tentativas incorretas de acesso após o limite de tempo, o host é banido. maxretry : Essa regra deve ser a tentativa de logins que um host tem. Se passar o valor indicado, ele será banido.
Configurando SSH-IPTables no Fail2Ban
A sessão mostrada a seguir é a configuração de ssh-iptables padrão. Não é preciso fazer alterações nessa sessão.
[ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com] logpath = /var/log/secure maxretry = 5
Reiniciando o serviço Fail2Ban
Uma vez que você fez alterações no arquivo de configuração do Fail2Ban, você deverá reiniciar o serviço.
# chkconfig --level 23 fail2ban on # service fail2ban start Starting fail2ban: [ OK ]
Verificando a regras Fail2Ban
Verifique as regras adicionadas e se elas estão funcionando corretamente. Utilize o seguinte comando.
# iptables -L
Se alguém tentar realizar tentativas de login incorretas, isso é o que aparecerá no painel para você.
Message from syslogd@tecmint at Nov 23 13:57:53 ... fail2ban.actions: WARNING [ssh-iptables] Ban 15.13.14.40 iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-SSH tcp -- anywhere anywhere tcp dpt:ssh ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http ACCEPT tcp -- anywhere anywhere state NEW tcp multiport dports 5901:5903,6001:6003 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-SSH (1 references) target prot opt source destination DROP all -- 15.13.14.40 anywhere RETURN all -- anywhere anywhere
Verificando tentativas de login com falha
Para verificar todas as falhas, use o comando abaixo.
# cat /var/log/secure | grep 'Failed password' | sort | uniq -c 1 Nov 19 16:53:37 tecmint sshd[28185]: Failed password for root from 172.16.25.125 port 1302 ssh2 1 Nov 23 13:57:43 tecmint sshd[19079]: Failed password for root from 115.113.134.40 port 57599 ssh2 1 Nov 23 13:57:46 tecmint sshd[19079]: Failed password for root from 115.113.134.40 port 57599 ssh2 1 Nov 23 13:57:50 tecmint sshd[19079]: Failed password for root from 115.113.134.40 port 57599 ssh2 1 Oct 18 14:11:58 tecmint sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:03 tecmint sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:11 tecmint sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:16 tecmint sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:22 tecmint sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:28 tecmint sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:47 tecmint sshd[10719]: Failed password for root from 172.16.18.249 port 4774 ssh2
Removendo um IP Address do Fail2Ban
Para remover um IP banido do Fail2Ban, use o seguinte comando.
# iptables -D fail2ban-ssh 1
Para informações adicionais, visite a página oficial do Fail2Ban.