Bloco permanente de IP após n tentativas usando fail2ban

38

Eu tenho um fail2ban configurado como abaixo:

  • bloquear o ip após 3 tentativas falhas
  • libere o IP após 300 segundos de tempo limite

Isso funciona perfeitamente e eu quero mantê-lo dessa maneira, para que um usuário válido tenha a chance de tentar novamente o logon após o tempo limite. Agora, quero implementar uma regra em que se o mesmo IP for detectado como ataque e bloqueado, desbloqueado 5 vezes, bloqueie permanentemente o IP e nunca mais o desbloqueie. Isso pode ser alcançado apenas com fail2ban ou eu preciso escrever meu próprio script para fazer isso?

Eu estou fazendo isso em centos.

BTR Naidu
fonte
2
É uma idéia bastante tola - quanto mais regras você adiciona às tabelas de ip, mais lento fica.
symcbean
14
Aprecie seu comentário, mas o que eu preciso é uma resposta e não uma sugestão. Obrigado mesmo assim.
BTR Naidu
5
Às vezes, a resposta certa para "como faço para X" é "não faça X".
ceejayoz

Respostas:

32

Antes da 0.11, não havia nenhum recurso padrão ou uma configuração no fail2ban para conseguir isso. Mas, começando com a próxima versão 0.11, o tempo de banimento é calculado automaticamente e aumenta exponencialmente a cada nova ofensa que, a longo prazo, significará um bloqueio mais ou menos permanente.

Até então, sua melhor abordagem provavelmente é configurar o fail2ban para monitorar seu próprio arquivo de log . É um processo de duas etapas ...

Passo 1

Poderíamos precisa criar um filtro para verificar se há BAN é no arquivo de log (arquivo de log do fail2ban)

Passo 2

Precisamos definir a prisão , semelhante ao seguinte ...

[fail2ban]
enabled = true
filter = fail2ban
ação = iptables-allports [nome = fail2ban]
logpath = /path/to/fail2ban.log
# findtime: 1 dia
findtime = 86400
# bantime: 1 ano
bantime = 31536000

Tecnicamente, não é um bloqueio permanente , mas apenas bloqueios por um ano (que também podemos aumentar).

Enfim, para a sua pergunta (isso pode ser alcançado apenas com fail2ban ou preciso escrever meu próprio script para fazer isso?) ... escrever o próprio script pode funcionar bem. Configurar o script para extrair os IPs freqüentemente banidos e depois colocá-los /etc/hosts.denyé o que eu recomendo.

Pothi Kalimuthu
fonte
1
Adicionando a esta excelente resposta ... Dependendo de como o log e o MaxAuthTries estão configurados sshd_config, isso pode potencialmente bloquear apenas 3 logins com falha para uma "sessão" sshd - não são fornecidos 3 logins com falha. Por exemplo, por padrão, um invasor pode tentar ['pass1', 'pass2', 'pass3'] em uma única sessão antes de o sshd se desconectar. Dependendo de como o sshd estiver definido para log, isso pode aparecer como 1, 2 ou 3 tentativas de fail2ban.
Jonathan Vanasco
5
Agora existe o filtro recidivo fail2ban para isso.
Guillermo Prandi
O que você quer dizer com o próximo lançamento do 0.11 ? O mais recente parece ser 10.3.1: github.com/fail2ban/fail2ban/releases
user5950
Espero que você tenha significado 0.10.3.1 . Você pode acompanhar o progresso de "0,11" em github.com/fail2ban/fail2ban/tree/0.11 . Basicamente, ainda não foi lançado!
Pothi Kalimuthu
29

Eu acredito que se você colocar bantime = -1nessa seção de configuração, é um bloco permanente.

J. Chin
fonte
2
Na verdade, a criação bantimede qualquer valor negativo é uma proibição permanente (a partir de Fail2Ban ver 0.6.1 (2006/03/16).)
voretaq7
3
adicionando -1 às configurações deixadas fail2ban sem resposta
Erdem Ece
13

Phil Hagen escreveu um excelente artigo sobre esse assunto. " Proibir permanentemente infratores repetidos com fail2ban ".

Sua sugestão é a mesma de Pothi, mas fornece um guia passo a passo.

Isso inclui:

  • lista de proibição separada por prisão (ip.blocklist.ssh, ip.blocklist.xxx)
  • listas de proibição carregadas automaticamente se o serviço for reiniciado (a principal vantagem deste método é imho)
  • notificação por e-mail se o repetidor estiver envolvido.
xaa
fonte
6

Para expandir a resposta de Chin, isso é bastante simples. Basta editar as 2 configurações /etc/fail2ban/jail.localpara corresponder às suas preferências.

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5
Casey Watson
fonte
4

O fail2ban já tem uma prisão para proibir reincidência. Se você assistir /etc/fail2ban/jail.conf, você encontrará:

# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
#   Make sure that your loglevel specified in fail2ban.conf/.local
#   is not at DEBUG level -- which might then cause fail2ban to fall into
#   an infinite loop constantly feeding itself with non-informative lines
[recidive]

enabled  = false
filter   = recidive
logpath  = /var/log/fail2ban.log
action   = iptables-allports[name=recidive]
           sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

Como adicionar no jail.local?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

Para fazer o check-lo LOGLEVEL você pode fazer: fail2ban-client get loglevel.

  • definir loglevel MYLEVEL : define o nível de log como MYLEVEL. Níveis: CRÍTICO, ERRO, AVISO, AVISO, INFORMAÇÃO, DEBUG
  • Mais comando no wiki .

Com a versão antiga do fail2ban, você pode obter esse bug .

A-312
fonte
0

Vá para o vim, abra /etc/fail2ban/jail.conf

e apenas modifique depois fail2ban service restart:

# "bantime" is the number of seconds that a host is banned.
bantime  = ***1296000***

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = ***60000***

# "maxretry" is the number of failures before a host get banned.
maxretry = ***3***
Tanveer Ahmad
fonte