Como posso ensinar o fail2ban a detectar e bloquear ataques de uma sub-rede inteira?

3

Instalei corretamente fail2ban em minha máquina, ativando as regras para ssh , ssh-dos e recidive ; tudo funciona bem.

Ultimamente, tenho visto um aumento nos padrões de ataques repetitivos de diferentes hosts formando as mesmas redes, que contornam a regra "recidiva" ao trocar de IP após uma proibição:

2015-01-25 11:12:11,976 fail2ban.actions: WARNING [ssh] Ban XXX.41.124.29
2015-01-25 11:12:13,165 fail2ban.actions: WARNING [ssh] Ban XXX.41.124.42
2015-01-25 11:12:16,297 fail2ban.actions: WARNING [ssh] Ban XXX.41.124.28
2015-01-25 11:12:20,446 fail2ban.actions: WARNING [ssh] Ban XXX.41.124.104

Eu gostaria de detectá-lo e criar uma regra "recidive24" que bloqueie todos esses ataques, proibindo toda a sub-rede /24 .

Encontrei uma sugestão no arquivo de erros do debian para o fail2ban, e tenho aplicado, mas:

  1. Se eu aplicar a proibição /24 completa quando a ssh jail for acionada, tenho o problema de que é fácil alguém de minha mesma rede me bloquear, apenas atacando de um IP;

  2. A recidive jail seria perfeita, mas não é acionada pela tempestade mudando de IPs ...

Então eu gostaria de mudar a especificação do filtro recidive para que ele olhe apenas os três primeiros bytes do IP, mas eu estou perdido aqui ... o regexp que faz a proibição é (de /etc/fail2ban/recidive.conf ) é

# The name of the jail that this filter is used for. In jail.conf, name the 
# jail using this filter 'recidive', or change this line!
_jailname = recidive

failregex = ^(%(__prefix_line)s|,\d{3} fail2ban.actions:\s+)WARNING\s+\[(?!%(_jailname)s\])(?:.*)\]\s+Ban\s+<HOST>\s*$

... e vai corresponder a um IP completo.

A questão : Como posso alterar este failregex para que corresponda apenas aos três primeiros bytes do IP do host?

Eu pensei em filtrar o arquivo de log do fail2ban com outro daemon e escrever um segundo arquivo onde o último byte é 0 toda vez, e disparar a cadeia recidiva usando-o, mas parece muito desajeitado ...

    
por Rmano 26.01.2015 / 13:05

2 respostas

1

Eu tentei fail2ban no Centos 7 e descobri que ele falha ao bloquear endereços IP algumas vezes. Ele continua adicionando-os à cadeia, mas eles ainda conseguiam acessar o sshd. Existe alguma incompatibilidade com o firewalld.

Eu agora uso uma abordagem diferente. Eu modifiquei /etc/hosts.deny assim:

sshd: 43.*.*.*
sshd: 58.*.*.*

Apenas não adicione suas próprias redes IP por acidente.

Para obter endereços IP do log seguro, use:

grep sshd /etc/hosts.deny

Para obter os 10 endereços IP mais ativos do log sshd com a contagem de acesso, use:

d=[0-9]{1,3}
s=[\.\-]
n=[^0-9]
ip="$d$s$d$s$d$s$d"
egrep $ip /var/log/secure | sed -r "s/^.*$n($ip).*$//g" | sed s/-/./g | sort | uniq -c | sort -g | tail -10

(fonte: link )

    
por 22.04.2015 / 21:36
1

O fail2ban realmente tem hostsdeny.conf em /etc/fail2ban/action.d , o que significa que você só precisa declarar action = hostsdeny

Um exemplo de howtoforge :

# Here we use TCP-Wrappers instead of Netfilter/Iptables. 
# "ignoreregex" is used to avoid banning the user "myuser".

[ssh-tcpwrapper]

enabled     = true
filter      = sshd
action      = hostsdeny
              sendmail-whois[name=SSH, [email protected]]
ignoreregex = for myuser from
logpath     = /var/log/messages
    
por 19.10.2016 / 22:43

Tags