Scratch pad with conf files to configure Fail2ban on Debian 9
This setup will configure Fail2ban to monitor SSH and keep track of the bad guys. Every time an IP gets banned, it will be stored in
/etc/fail2ban/ip.blacklist
.
This files gets processed every time Fail2ban restarts.
A cron will sanitise the file daily.
HOW TO
1) Create a custom action file:
/etc/fail2ban/action.d/iptables-allports-CUSTOM.conf
# Fail2Ban configuration file [INCLUDES] before = iptables-common.confhttps://docs.google.com/document/d/1DjP5z7tvkaMWJMZXVAnMOCgfynfQNHvRkqJyxQdEB84/edit?usp=sharing [Definition] # Option: actionstart # Notes.: command executed once at the start of Fail2Ban. # Values: CMD # actionstart = <iptables> -N f2b-<name> <iptables> -A f2b-<name> -j <returntype> <iptables> -I <chain> -p <protocol> -j f2b-<name> # Persistent banning of IPs cat /etc/fail2ban/ip.blacklist | grep -v ^\s*#|awk '{print $1}' | while read IP; do <iptables> -I f2b-<name> 1 -s $IP -j DROP; done # Option: actionstop # Notes.: command executed once at the end of Fail2Ban # Values: CMD # actionstop = <iptables> -D <chain> -p <protocol> -j f2b-<name> <iptables> -F f2b-<name> <iptables> -X f2b-<name> # Option: actioncheck # Notes.: command executed once before each actionban command # Values: CMD # actioncheck = <iptables> -n -L <chain> | grep -q 'f2b-<name>[ \t]' # Option: actionban # Notes.: command executed when banning an IP. Take care that the # command is executed with Fail2Ban user rights. # Tags: See jail.conf(5) man page # Values: CMD # actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype> # Persistent banning of IPs echo '<ip>' >> /etc/fail2ban/ip.blacklist # Option: actionunban # Notes.: command executed when unbanning an IP. Take care that the # command is executed with Fail2Ban user rights. # Tags: See jail.conf(5) man page # Values: CMD # actionunban = <iptables> -D f2b-<name> -s <ip> -j <blocktype> [Init]
2) Create
/etc/fail2ban/jail.local
# Fail2Ban custom configuration file. [DEFAULT] # "ignoreip" can be an IP address, a CIDR mask or a DNS host ignoreip = 127.0.0.1 192.168.1.0/24 192.168.2.0/24 # Ban forever => -1 #bantime=-1 # Ban 3 days => 259200 bantime = 259200 # A host is banned if it has generated "maxretry" during the last "findtime" seconds. findtime = 30 banaction = iptables-allports-CUSTOM [sshd] enabled = true filter = sshd logfile = /var/log/auth.log maxretry = 3
3) Remove the default debian jail configuration (is integrated in the above custom jail.local file):
rm -f /etc/fail2ban/jail.d/defaults-debian.conf
4) Set this cron:
# Daily rotate of ip.blacklist 0 20 * * * tail -100 /etc/fail2ban/ip.blacklist | sort | uniq > /tmp/ip.blacklist ; cat /tmp/ip.blacklist > /etc/fail2ban/ip.blacklist ; rm -f /tmp/ip.blacklist > /dev/null 2>&1
5) Run the cron manually once, just to be sure all works AND to have an empty file
6) Restart Fail2ban … and good luck 😉