Fail2ban

Naar aanleiding van de Problemen Arkon (4) heb ik vandaag een volautomatisch blockprogramma geinstalleerd. De keuze is gevallen op fail2ban. Waarom zul je denken? Ik had het namelijk de vorige keer over snort en snortblock. Snort is inderdaad een intrusion detection systeem wat al een behoorlijke tijd aan de weg timmert. Blokkeer mogelijkheden zitten er niet in en snortblock was een shell script wat iemand van het Freesco support forum in elkaar geknutseld heeft. In hoevere dit bijgehouden wordt weet ik niet, dus vandaar dat ik op zoek ben gegaan naar een vervanger. Uiteindelijk kwam ik uit op fail2ban als enkel pakket wat zowel het detecteren als het blokkeren voor zijn rekening neemt.

Arkon:~# apt-get install fail2ban
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
  python python-central python-minimal python2.4 python2.4-minimal
Suggested packages:
  python-gamin python-doc python-tk python-profiler python2.4-doc
The following NEW packages will be installed:
  fail2ban python python-central python-minimal python2.4 python2.4-minimal
0 upgraded, 6 newly installed, 0 to remove and 1 not upgraded.
Need to get 3998kB of archives.
After unpacking 14.1MB of additional disk space will be used.
Do you want to continue [Y/n]? y

Vervolgens het configureren van fail2ban. De default instellingen staan in /etc/fail2ban/jail.conf en zoals ook in dat bestand aangeraden wordt maken we een 2e configuratiebestand wat de defaults gaat overschrijven. Hiervoor kopieren we dit bestand naar /etc/fail2ban/jail.local en deze strippen we naar hetgene we veranderen willen:

Arkon:~# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Arkon:~# nano /etc/fail2ban/jail.local

Hier zetten we ook alvast het stukje voor pureftpd in en dan wordt de inhoud van het bestand als volgt:

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1 192.168.0.1
bantime  = 600
maxretry = 5

# "backend" specifies the backend used to get files modification. Available
# options are "gamin", "polling" and "auto".
# yoh: For some reason Debian shipped python-gamin didn't work as expected
#      This issue left ToDo, so polling is default backend for now
backend = polling

#
# Destination email address used solely for the interpolations in
# jail.{conf,local} configuration files.
destemail = root@localhost

# Default action to take: ban only
action = iptables[name=%(__name__)s, port=%(port)s]

#
# FTP servers
#

[pureftpd]

enabled  = true
port     = ftp
filter   = pureftpd
logpath  = /var/log/syslog
maxretry = 5

Zoals je kunt zien heb ik mijn interne ip-adres toegevoegd omdat ikzelf niet geblockt wil worden. De tijd staat op 300 seconden, na 5 minuten geblockt te zijn moeten ze toch de poging gestaakt hebben. Eventueel kan die tijd nog opgeschroefd worden. Ook heb ik de max-retry’s naar 5 gezet. En als laatste natuurlijk het stuk over pureftpd.

Hiermee zijn we nog niet klaar want daarvoor moet een regex filter voor aangemaakt worden. Dit doen we het bestand /etc/fail2ban/filter.d/pureftpd.conf en dit geven we de volgende inhoud:

[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =

Dan als laatste nog het (her)starten van fail2ban en we zouden resultaten moeten kunnen genereren:

Arkon:~# /etc/init.d/fail2ban restart
Restarting authentication failure monitor: fail2ban.
Arkon:~#

Uiteraard zal je na elke wijziging of toevoeging van de configuratie een herstart van fail2ban moeten doen.

Dit stukje heb ik geschreven naar aanleiding van een stuk op Howtoforge, bij deze dus de bronvermelding.

Geef een reactie