Fail2ban

De LinuxPédia
Ir para: navegação, pesquisa

Fail2ban é um software escrito em python que tem por objetivo evitar Ataque de força bruta, esses bloqueios são feitos normalmente via iptables, mas qualquer ação pode ser disparada quando um ataque é detectado.

O Fail2ban executa esse bloqueio monitorando os arquivos de login dos serviços, se um número de tentativas por tempo for atingido uma ação é tomada e o IP ofensor é "banido". Após um tempo que também pode ser configurado o IP é habilitado a entrar em contato novamente com o servidor. O Fail2ban é muito flexível podendo monitorar a tentativa de login nos serviços SSH, PAM, xinetd, Apache, vsftpd, proftpd, wuftpd, postfix, couriersmtp, courierauth, sasl, asterisk e named, e em uma ação pró-ativa bloquear o possível ataque, adicionando uma regra no firewall.


Uma coisa muito boa do Fail2ban é que normalmente ele já vem com filtros para várias aplicações populares.


  • principais arquivos de configuração do Fail2ban:


/etc/fail2ban/jail.conf

/etc/fail2ban/filter.d/servico.conf


Funcionamento básico:

O Fail2ban monitora no arquivo de log de uma aplicação e verifica se encontrou o padrão descrito no arquivo servico.conf na pasta filter.d. Uma vez que esse padrão é encontrado o programa procede com as ações que estão configuradas no arquivo jail.conf. O mais comum é o programa criar uma cadeia iptables no topo do INPUT e colocar os IPs banidos lá. Normalmente depois de um tempo definido a regra é removida do firewall.


Exemplo de configuração no arquivo jail.conf:


[ssh]

enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 3 


Nesse arquivo temos a seção [DEFAULT] que é o padrão por omissão do Fail2ban e abaixo deles normalmente temos as seções dos serviços que desejamos proteger.


Configurações no arquivo jail.conf:

Opções que podem ser DEFAULT ou por serviço:


ignoreip = CIDR -- você usará este parâmetro caso deseja ignorar as falhas de uma determinada faixa de IP, ou seja, a faixa de IP ou o IP que definir nestes parâmetros serão ignorados para bloqueio.

exemplo:

ignoreip = 127.0.0.1/8 192.168.1.0/24


bantime = segundos -- aqui você define quanto tempo (em segundos) um Host ficará bloqueado caso ele seja banido.


maxretry = segundos -- aqui você define o máximo de tentativas que é permitido


findtime = segundos -- Tempo em que as tentativas tem que acontecer para que o Host seja banido. Se essa variável for 60 por exemplo o número de tentativas do maxretry tem que acontecer nesses 60 segundos para ser considerado um ataque.


action = acao -- Ação a ser tomada no caso do máximo de tentativas no findtime for atingido.


Opções válidas só para serviços:


enable -- habilita o monitoramento do serviço

port = porta -- Porta utilizada também para bloquear na ação.

filter = filtro -- Identifica qual arquivo será utilizado dentro da pasta filter.d para filtrar os logs.


Exemplo no caso dessa opção ser filter = ssh, significa que o filtro para arquivos de logs do ssh estará na pasta /etc/fail2ban/filter.d/ssh.conf.

logpath = /pasta/arquivo -- Identifica o caminho do arquivo de log a ser monitorado.



Exemplo de filtro (asterisk.conf):


failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>'  - Wrong password
            NOTICE.* .*: Registration from '.*' failed for '<HOST>'  - No matching peer found
            NOTICE.* .*: Registration from '.*' failed for '<HOST>'  - Username/auth name mismatch


Onde o <HOST> é o IP que será bloqueado. Se esses filtros forem detectados será considerado uma tentativa.


Desvantagens:

  • O Fail2ban não consegue detectar ataques de força bruta distribuídos (Onde as tentativas não são do mesmo host. Para melhorar um pouco isso podemos até usar um limit do iptables).
  • Não suporta IPv6.


Fontes

Fil2ban site Oficial Acessado em 19/11/2016 Help Ubuntu Acessado em 19/11/2016 Asteriskdocs.com Fail2ban com asterisk Acessado em 19/11/2016 vivaolinux.com fail2ban em servidor SSH Acessado em 19/11/2016