Jan 06 2010
Instalar Fail2Ban em CentOS
O programa fail2ban é um programa que previne a intrusão por “Brute Force” em sistemas Linux quase em tempo real.
Este programa monitoriza os logs SSH, FTP, Apache e outros de modo a detectar tentativas de login falhadas, geralmente causadas por programas automatizados. É uma ferramenta bastante flexível que podemos configurar para praticamente qualquer programa.
É muito fácil instalar, mas em sistemas CentOS são necessárias algumas configurações extras, é por isso que resolvi escrever este artigo. Irei fazer uma instalação a partir da fonte.
Antes da instalação certifique-se que tem python instalado (versão 2.4 ou superior).
python -VSe necessário instalamos o Python.
yum install pythonApós isto procedemos ao download e instalação do Fail2Ban. O download do programa pode ser feito aqui.
A última versão na presente data é a 8.4, no entanto verifiquem a versão quando executarem o comando de extracção.
tar xvjf fail2ban-0.8.4.tar.bz2 cd fail2ban-0.8.4
Procedemos agora à instalação.
./setup.py install
Os ficheiros de configuração, filtros e regras encontram-se em /etc/fail2ban O passo seguinte é configurar o programa segundo as nossas preferências.
/etc/fail2ban/jail.conf
nano /etc/fail2ban/jail.conf
Aqui devemos activar os serviços que queremos monitorizar. Todas as monitorizações vêm desligadas por defeito.
Antes de mais, adicionem os IP’s do vosso servidor e o vosso IP na variável ignoreip. Isto é muito importante para não bloquearem os vossos próprios IP’s. Cada IP deve ser separada por um espaço.
# "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 120.120.120 118.118.118.118
Seguem-se as configurações dos detalhes de bloqueio.
# "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
bantime é portanto o número de segundos que o IP abusivo ficará bloqueado
findtime número de segundos passados em que o Fail2Ban procura por IP’s abusivos.
maxretry é o número máximo de logins falhados que quando excedido dará direito ao bloqueio.
Todas estas variáveis contêm os valores por defeito mas que podem ser alterados individualmente para cada serviço, esse é um dos aspectos pelos quais prefiro o Fail2Ban ao BFD (Brute Force Detection).
É muito importante indicar a localização exacta dos logs dos serviços que queremos monitorizar, em CentOS (e possivelmente RedHat e Fedora) é essencial corrigir a localização que vem configurada por defeito. Nesses casos os logs SSH e FTP estão no ficheiro /var/log/messages ou /var/log/secure.
Igualmente importante é introduzirem correctamente o endereço de email para onde querem que vos sejam enviadas as notificações dos bloqueios. Se não quiserem receber esses e-mail, simplesmente retirem os parâmetros sendmail.
Configuração para o serviço SSH num sistema CentOS
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=seuemail@dominio.com, sender=abuso@dominio.com]
logpath = /var/log/messages
maxretry = 10Por defeito, o programa pure-ftpd não vem na configuração, portanto se usarem pure-ftpd é necessário adicionar esse bloco.
[pure-ftpd]
enabled = true
port = ftp
filter = pure-ftpd
action = iptables[name=PureFTPD, port=ftp, protocol=tcp]
sendmail-whois[name=PureFTPD, dest=seuemail@dominio.com, sender=abuso@dominio.com]
logpath = /var/log/messages
maxretry = 10Breve explicação de cada variável:
enabled – true para ligado, false para ignorar este serviço.
filter – é o nome do ficheiro das expressões regulares para o serviço em questão. Estes ficheiros estão localizados no directório /etc/fail2ban/filter.d
action – Comando interno do Fail2Ban a executar no bloqueio.
logpath – Localização dos logs do serviço.
maxretry – Número máximo de logins falhados que quando excedido dará direito ao bloqueio.
As restantes configuração neste ficheiro deverão ser suficientemente explanatórias, por isso mesmo não vou aprofundar a configuração dos restantes serviços.
O ficheiro fail2ban.conf
Neste ficheiro praticamente nem é preciso mexer, no entanto se quiserem alterar a localização onde vai ficar o ficheiro com os logs do fail2ban ou se pretendem alterar o nível dos logs, então este é o ficheiro que precisa de ser configurado.
nano /etc/fail2ban/fail2ban.conf
Uma coisa interessante é que podemos facilmente testar as regras de bloqueio do Fail2Ban que se encontram em /etc/fail2ban/filter.d
Se quisermos por exemplo verificar se a expressão regular para apanhar os IP’s abusadores que tentar entrar por SSH está a funcionar correctamente fazemos o seguinte:
fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf
Caso esteja correctamente configurado, o comando acima deverá retornar uma série de IP’s.
O próximo passo é mesmo adicionar o serviço para arrancar com o sistema.
echo "fail2ban-client start" >> /etc/rc.local
Posteriormente e depois de tudo devidamente configurado, podemos iniciar o serviço:
fail2ban-client start
Para confirmar se o serviço está activo:
fail2ban-client status
Para re-começar o serviço usamos:
fail2ban-client reload
Consultar em tempo real os logs do Fail2Ban:
tail -f /var/log/fail2ban.log
Para terminar, deixo-vos com uma transcrição de um dos e-mails enviados pelo Fail2Ban
[Fail2Ban] SSH: banned 109.169.2.109
Hi, The IP 109.169.2.109 has just been banned by Fail2Ban after 19 attempts against SSH. Here are more information about 109.169.2.109: [Querying whois.arin.net] [Redirected to whois.ripe.net:43] [Querying whois.ripe.net] [whois.ripe.net] % This is the RIPE Database query service. % The objects are in RPSL format. % % The RIPE Database is subject to Terms and Conditions. % See http://www.ripe.net/db/support/db-terms-conditions.pdf % Note: This output has been filtered. % To receive output for a database update, use the "-B" flag. % Information related to '109.169.2.64 - 109.169.2.127' inetnum: 109.169.2.64 - 109.169.2.127 netname: fcservers_2 descr: FCservers Server Solutions country: GB admin-c: AR1935-RIPE tech-c: AR1935-RIPE status: ASSIGNED PA mnt-by: RAPIDSWITCH-MNT source: RIPE # Filtered person: Abuse Robot address: 573 sok. No.15 address: Buca/Izmir address: Turkey phone: +90 232 4874346 abuse-mailbox: info@fcservers.com nic-hdl: AR1935-RIPE mnt-by: RAPIDSWITCH-MNT source: RIPE # Filtered % Information related to '109.169.0.0/17AS29131' route: 109.169.0.0/17 descr: RapidSwitch origin: AS29131 mnt-by: RAPIDSWITCH-MNT source: RIPE # Filtered Regards, Fail2Ban
Não perca os meus artigos! Subscreva a minha feed RSS.