Jan 06 2010

Instalar Fail2Ban em CentOS

Categoria: Linux=IceBurn= @ 02:35

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 -V

Se necessário instalamos o Python.

yum install python

Apó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 = 10

Por 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 = 10

Breve explicação de cada variável:

enabledtrue 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
Certamente também irá gostar destes artigos

RSS 2.0 Não perca os meus artigos! Subscreva a minha feed RSS.

Etiquetas: , , , , , ,

Comentar Este Artigo