I have correctly installed fail2ban
in my machine, activating the rules for ssh
, ssh-dos
and recidive
; it all works ok.
Lately, I have seen an increasing patterns of repetitive attacks from different hosts form the same networks, which circumvent the "recidive" rule by switching IP after a ban:
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
I would like to detect it and make a "recidive24" rule that blocks all these kind of attacks banning the whole /24
block.
I found a suggestion in the debian bug archive for fail2ban, and I have applied it, but:
If I apply the full
/24
ban when thessh
jail is triggered, I have the problem that it is easy from someone on my same network to block me out, by just attacking from ONE IP;The
recidive
jail would be perfect, but it is not triggered by the storm changing IPs...
So I would like to change the recidive
filter specification so that it just look at the first three bytes of the IP, but I am at a loss here... the regexp that do the ban is (from /etc/fail2ban/recidive.conf
) is
# 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*$
...and it will match a complete IP.
The question: How can I change this failregex so that it matches just the first three bytes of the host IP?
Please notice that a problem is not blocking the whole subnet when the spamming IP is detected --- this is relatively easy. The problem is triggering a kind of subnet-recidive
when there are, for example, five or more recidive
hits for the same subnetwork...
I though about filtering the fail2ban log file with another daemon and writing a second file where the last byte is 0 every time, and trigger the recidive jail using it, but it seems really clumsy...