Fail2Ban : Bloqueando ataques em ambiente Web

Alguns servidores ficam abertos para a internet quando consumimos serviços de cloud e algumas atenções às vezes tem que ser tomada para não recebermos nenhuma surpresa desagradável.

Em nosso exemplo usaremos como configurar o Fail2Ban para proteger o WordPress, uma vez que tenho percebido que cada vez mais é comum o ataque à servidores hospedados em cloud e em específico os que usam WordPress devido suas vulnerabilidades.

Fail2ban trabalha realizando um filtro com expressões regulares em arquivos de logs e uma reação é realizada de acordo com os filtros configurados na ferramenta .

Uma informação complementar à este post são os links :

Script de configuração para regras padrões de IPTABLES :

http://fajlinux.com.br/scripts/script-regras-padrao-iptables/

Configuração do SELINUX :

http://fajlinux.com.br/linux/rhce-selinux-portas-e-booleanos/

1) Requisitos:

Usaremos um RHEL/CentOS 7 para instalar a ferramenta

yum install fail2ban 
cd /etc/fail2ban/
cp jail.conf jail.local

2) Configurando filtros e bloqueios para WordPress :

Baixando os arquivos de configuração para ler os logs do WordPress :

$ cd /etc/fail2ban/filter.d
$ wget http://plugins.svn.wordpress.org/wp-fail2ban/trunk/wordpress.conf

Crie o arquivo de bloqueio em /etc/fail2ban/action.d/

vi /etc/fail2ban/action.d/wordpress.conf

[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/auth.log
port = http,https

Restart o serviço :

RHEL 6
service fail2ban restart

RHEL 7 :
systemctl restart fail2ban

3) Configurando bloqueios para Apache :

vi /etc/fail2ban/action.d/apache.conf

# detect password authentication failures
[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/httpd/*error_log
maxretry = 6
 
# detect spammer robots crawling email addresses
[apache-badbots]
enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/httpd/*access_log
bantime  = 172800
maxretry = 1
 
# detect potential search for exploits and php
[apache-noscript]
enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/httpd/*error_log
maxretry = 6
 
# detect Apache overflow attempts
[apache-overflows]
enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/httpd/*error_log
maxretry = 2
 
# detect failures to find a home directory on a server
[apache-nohome]
enabled  = true
port     = http,https
filter   = apache-nohome
logpath  = /var/log/httpd/*error_log
maxretry = 2
 
# detect failures to execute non-existing scripts that
# are associated with several popular web services
# e.g. webmail, phpMyAdmin, WordPress
port     = http,https
filter   = apache-botsearch
logpath  = /var/log/httpd/*error_log
maxretry = 2

Restart o serviço :

RHEL 6
service fail2ban restart

RHEL 7 :
systemctl restart fail2ban

4) Gerenciando o serviço :

Para verificar o status das regras

 $ sudo fail2ban-client status 

Para verificar o status de uma regra especifica :

 $ sudo fail2ban-client status [name-of-jail] 

Captura de Tela 2015-09-27 às 19.29.44

Para banir um ip para uma regra particular

 $ sudo fail2ban-client set [name-of-jail] banip [ip-address]

Para remover um configuração de banimento

 $ sudo fail2ban-client set [name-of-jail] unbanip [ip-address]