Setup Fail2ban for Debian and Ubuntu

My Notes Only taken from various sources. There are other much more complete guides for Fail2ban available.

Install Fail2ban

sudo apt-get install fail2ban

filter definitions located in /etc/fail2ban/filter.d
action definitions located in /etc/fail2ban/action.d

The following is a minimal setup.

Configure Fail2ban

sudo vi /etc/fail2ban/jail.conf

Configuration for jail.conf

destemail = # Email of where alerts should be sent to
ignoreip = # Your IPs that should not be jailed
findtime = 3600 # add this line - timespan to watch an IP / attacker
bantime = 604800 # jail time for an IP in seconds = 1 week
maxretry = 3
action = %(action_mw)s

Add the following option to /etc/conf.d/fail2ban to prevent socket problem
The -x option will force fail2ban to overwrite the old socket

sudo service fail2ban restart


sudo /etc/init.d/fail2ban restart

Watch logs

tail -f /var/log/auth.log -f /var/log/fail2ban.log

Achtung! The documentation does not mention that all commands must be run as root (sudo) – you will get error messages with no answers otherwise

start		 starts the server and the jails
reload		 reloads the configuration
stop		 stops all jails and terminate the server
status		 gets the current status of the server
ping		 tests if the server is alive

sudo fail2ban-client -i

-c <DIR> configuration directory
-s <FILE> socket path
-d dump configuration. For debugging
-i interactive mode
-v increase verbosity
-q decrease verbosity
-x force execution of the server (remove socket file)
-h, –help display this help message
-V, –version print the version

Full list of Fail2ban Commands

Fail2ban Tools

My compilation of the most excellent The Art of Web

iptables -L

Test a filter against results

fail2ban-regex /var/log/apache2/error.log /etc/fail2ban/filter.d/apache-auth.conf

Montior Fail2ban

iptables -vnL –line-numbers
watch -d ‘iptables -vnL –line-numbers’
fail2ban-client status ssh

Report Fail2Ban

awk ‘($(NF-1) = /Ban/){print $NF}’ /var/log/fail2ban.log | sort | uniq -c | sort -n
zgrep -h “Ban ” /var/log/fail2ban.log* | awk ‘{print $NF}’ | sort | uniq -c
awk ‘($(NF-1) = /Ban/){print $NF,”(“$NF”)”}’ /var/log/fail2ban.log | sort | logresolve | uniq -c | sort -n
grep “Ban ” /var/log/fail2ban.log | awk -F[\ \:] ‘{print $10,$8}’ | sort | uniq -c | sort -n
grep “Ban ” /var/log/fail2ban.log | grep `date +%Y-%m-%d` | awk ‘{print $NF}’ | sort | awk ‘{print $1,”(“$1″)”}’ | logresolve | uniq -c | sort -n
zgrep -h “Ban ” /var/log/fail2ban.log* | awk ‘{print $5,$1}’ | sort | uniq -c

How To Ban IPs Using iptables

You may also like...