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
- Monitoramento de logs do sistema: O Fail2Ban analisa logs de serviços como Apache, SSH e outros para identificar atividades suspeitas e potencialmente maliciosas.
- 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.
- Flexibilidade: O Fail2Ban é altamente configurável, permitindo que os administradores ajustem as regras de acordo com suas necessidades e preferências.
- 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.