O Fail2Ban é uma ferramenta de segurança amplamente utilizada para proteger servidores contra ataques de força bruta e outras atividades maliciosas. Ele monitora os logs do sistema em tempo real e toma medidas contra IPs suspeitos, como bloquear temporariamente o acesso após várias tentativas de acesso falhadas. Neste artigo, abordaremos as principais funcionalidades do Fail2Ban e demonstraremos como configurá-lo para proteger o servidores web como Apache e NGINX, e limitar as tentativas de login via SSH. Além disso, mostraremos como configurar notificações por email para alertar o usuário quando um IP for banido.

Principais Funcionalidades

  1. Monitoramento de logs do sistema: O Fail2Ban analisa logs de serviços como Apache, SSH e outros para identificar atividades suspeitas e potencialmente maliciosas.
  2. Bloqueio de IPs: Com base nas regras de detecção, a ferramenta bloqueia IPs automaticamente, evitando ataques de força bruta e outras tentativas maliciosas.
  3. Flexibilidade: O Fail2Ban é altamente configurável, permitindo que os administradores ajustem as regras de acordo com suas necessidades e preferências.
  4. Notificações: A ferramenta pode ser configurada para enviar notificações por e-mail sempre que um IP for banido, mantendo o usuário informado sobre possíveis ameaças.

Instalando o Fail2Ban

Para instalar o Fail2Ban em seu servidor, use o gerenciador de pacotes adequado para sua distribuição Linux:

sudo apt-get install fail2ban # para Debian/Ubuntu

sudo yum install fail2ban # para CentOS/RHEL/Fedora

Em seguida, crie um arquivo de configuração personalizado, copiando o arquivo jail.conf para jail.local:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

e edite o arquivo para definir os valores padrão:

# “bantime” templo pelo o qual um host é banido (ex. 10 minutos).

bantime = 10m

# Um host é banido se gerar o número de tentativas “maxretry” durante o período “findtime”

maxretry = 5

findtime = 10m

Configurando o Fail2Ban para o servidor web Apache

Edite o arquivo /etc/fail2ban/jail.local e configure a seção [apache-auth]:

[apache-auth]

enabled = true

port = http,https

logpath = %(apache_error_log)s

maxretry = 3

findtime = 1m

Estas configurações bloquearão um IP após três tentativas mal-sucedidas de autenticação em um período de 1 minuto, pelo período padrão de 10 minutos.

Existem várias outras seções de controle do Apache que podem ser configuradas no arquivo jail.local, ex.: [apache-badbots], [apache-overflows], [apache-botsearch], etc. Habilite as que considerar úteis para o perfil do seu servidor.

Configurando o Fail2Ban para o servidor web NGINX

Edite o arquivo /etc/fail2ban/jail.local e configure as seguintes seções:

[nginx-http-auth]

enabled = true

port = http,https

logpath = %(nginx_error_log)s

[nginx-limit-req]

enabled = true

port = http,https

logpath = %(nginx_error_log)s

Em seguida, edite o arquivo /etc/nginx/nginx.conf e inclua a seguinte linha:

http {

… (outras diretivas existentes)

##

# Limit the requests for php

##

limit_req_zone $binary_remote_addr zone=limit:20m rate=10r/s;

}

Complete a configuração, editando o arquivo do site a ser protegido, ex.: /etc/nginx/sites-enabled/www.domínio.com.br:

server {

… (outras diretivas existentes)

location ~ \.php$ {

… (outras diretivas existentes)

limit_req zone=limit burst=20 nodelay;

}

Estas configurações bloquearão um IP que exceda a taxa de 10 requisições HTTP por segundo ou que ocupe mais de 20 MB de memória nos processos do PHP..

Configurando o Fail2Ban para limitar tentativas de login via SSH

Edite o arquivo /etc/fail2ban/jail.local e configure a seção [sshd]:

[sshd]

enabled = true

mode = normal

port = ssh

logpath = %(sshd_log)s

backend = %(sshd_backend)s

Configurando o Fail2Ban para notificar por email os IPs banidos

Edite o arquivo /etc/fail2ban/jail.local e configure o envio de email:

# Destinatário

destemail = conta_destino@domínio.com.br

# Remetente

sender = conta_origem@domínio.com.br

# Método de envio. Ajuste de acordo com o MTA configurado no seu servidor (sendmail ou mail)

mta = sendmail

# Ação padrão de envio

# action_: simplesmente banir

# action_mw: banir e enviar relatório com whois

# action_mwl: banir e enviar relatório com whois e logs relevantes

action = %(action_mwl)s

Após aplicar as configurações, reinicie o serviço Fail2Ban usando as diretivas do sistema operacional, ex.:

systemctl restart fail2ban.service (para e reinicia o serviço)

Ou:

systemctl reload fail2ban.service (recarrega sem interromper o serviço)

Teste o funcionamento do Fail2Ban realizando acessos que disparem. Você pode verificar os IPs banidos pelo comando:

fail2ban-client banned

Se tudo funcionar como desejado, você terá dado um grande passo para melhorar a segurança do seu servidor.

AVISO LEGAL: Os procedimentos descritos neste documento devem ser executados de acordo com o contexto de cada sistema, de forma a evitar impactos negativos à segurança, disponibilidade, integridade e privacidade de dados. A CentralServer se reserva o direito de modificar a qualquer tempo e sem aviso prévio as informações aqui apresentadas a fim de refletir o lançamento de novos serviços, atualizações físicas e operacionais, e evolução do estado-da-arte da tecnologia.