O
Fail2Ban é um aplicativo escrito em Python utilizado para monitorar logs de serviços, verificando as tentativas de conexão sem sucesso e encontrando algo suspeito. Pode bloquear de forma pró-ativa os possíveis ataques adicionando regras de Firewall para proteção.
O Fail2Ban é conhecido como um ferramenta simples e segura para evitar ataques de Brute Force, onde o atacante tenta de inúmeras formas acesso a um sistema. Com o Fail2Ban monitorando estas conexões, automaticamente cria regras de Firewall temporárias para banir este tipo de acesso.
Mais informações do projeto, podem ser encontradas em:
Neste artigo, iremos abordar a instalação em um servidor
CentOS 7.
Requisitos
Como o Fail2Ban foi escrito em Python, ele depende da instalação do Python 2.3 ou superior.
O Python já vem embarcado no
Linux e para verificar a versão instalada, digite:
# python -V
Python 2.7.5
Caso não esteja instalado, o que é muito difícil, instale através do gerenciador de pacotes yum:
# yum install python
Precisamos do pacote wget, que pode ser instalado com o comando:
# yum install wget
Instalação
A instalação pode ser feita através do código fonte:
# wget https://sourceforge.net/projects/fail2ban/files/fail2ban-stable/fail2ban-0.8.11/fail2ban-0.8.11.tar.gz
Obs.: verificar se não existe alguma versão atualizada da versão stable:
Descompactando o arquivo:
# tar -xvzf fail2ban-0.8.11.tar.gz
# cd /fail2ban-0.8.11
# python setup.py install
A instalação também pode ser feita através do gerenciador de pacotes yum, apontando para o site onde possui o pacote ".rpm":
# yum localinstall http://mirror.globo.com/epel//7/x86_64/f/fail2ban-server-0.9.3-1.el7.noarch.rpm
O arquivo de configuração "fail2ban.conf", possui duas configurações importantes:
# vim /etc/fail2ban/fail2ban.conf
[Definition]
# Option: loglevel
# Notes.: Set the log level output.
# CRITICAL
# ERROR
# WARNING
# NOTICE
# INFO
# DEBUG
# Values: [ LEVEL ] Default: ERROR
#
loglevel = INFO
# Option: logtarget
# Notes.: Set the log target. This could be a file, SYSLOG, STDERR or STDOUT.
# Only one log target can be specified.
# If you change logtarget from the default value and you are
# using logrotate -- also adjust or disable rotation in the
# corresponding configuration file
# (e.g. /etc/logrotate.d/fail2ban on Debian systems)
# Values: [ STDOUT | STDERR | SYSLOG | FILE ] Default: STDERR
#
logtarget = /var/log/fail2ban.log
Obs.: o campo loglevel determina o tipo de informação que deseja no LOG. O campo logtarget determina o local onde será salvo este LOG.
O maior número de configurações encontra-se no arquivo
/etc/jail.conf, as mais importantes são:
# vim /etc/fail2ban/jail.conf
ignoreip = 127.0.0.1/8
Neste campo, você pode usar os endereços ou range de sua rede local e endereços de DNS, separados por vírgula, com o intuito de se serem ignorados pela análise do Fail2Ban.
bantime = 600
Neste campo, é definido o número em segundo em que o host será banido.
maxretry = 5
Neste campo, é definido a quantidade máxima de tentativas sem sucesso aceitas antes de banir o host.
destemail = root@localhost
sender = root@localhost
Nestes campos, caso o SMTP esteja configurado, você pode colocar o e-mail de destino e o e-mail que enviará as notificações.
banaction = iptables-multiport
Neste campo, mostra que o método padrão de configuração para realizar o bloqueio é o IPtables.
Os serviços gerenciados pelo Fail2Ban ficam no diretório
/etc/fail2ban/filter.d/ e pode ser configurado os serviços que desejar.
Exemplo de configurações instaladas por padrão:
# ls /etc/fail2ban/filter.d/
apache-auth.conf
apache-common.conf
nagios.conf
nginx-http-auth.conf
etc.
Para exemplificar, vou mostrar a configuração do bloqueio do serviço SSH.
# vim /etc/fail2ban/jail.conf
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
sendmail-whois[name=SSH, dest=renato@renato.com.br, sender=renato@renato.com.br]
Dentro do arquivo "jail.conf", existe um bloco para tratar diversos serviços e este bloco para tratar do serviço do SSH.
Explicação dos campos:
- Enable = Este campo é usado para habilitar ou desabilitar o serviço.
- Port = Este campo é usado para definir a porta que o serviço utiliza.
- Filter = Este campo define um nome para este filtro.
- Logpath = Este campo define o caminho completo de onde o LOG do serviço será salvo.
- Maxretry = Este campo define o número máximo de tentativas de tentativas de acesso.
- Sendmail-whois = Este campo define a configuração do envio de mensagens.
Após todo o processo de configuração, não se esqueça de iniciar o serviço:
# service fail2ban start
Configurar o serviço para o início automático do sistema:
# chkconfig fail2ban on
Conclusão
Este é um excelente modo de banir ataques de "brute force" e, com alguns ajustes, você pode ampliar estas configurações para diversos outros tipos de serviços.
Espero ter ajudado!