fail2ban: bescherm je server tegen brute force attacks
Bij een brute force attack probeert een aanvaller je systeem binnen te komen door met heel veel verschillende wachtwoorden pogen in te loggen. De eerste bescherming daartegen is een goed wachtwoord gebruiken. Als tweede bescherming heb je de firewall en hosts.deny/hosts.allow. Als derde bescherming kun je fail2ban installeren. Fail2ban bewaakt je logfiles, stuurt een mail als er te veel mislukte pogingen zijn om in te loggen en kan zonodig het ip-adres van de aanvaller blokkeren.
Als eerste installeren we fail2ban:
apt-get install fail2ban
Daarna gaan we de configuratie aanpassen:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local nano /etc/fail2ban/jail.local
Om te beginnen kijk je naar de regel ignoreip. Je kunt daar je eigen ip-adressen aan toevoegen:
ignoreip = 127.0.0.1 10.11.12.13 10.11.12.14
Je kunt echter ook overwegen je eigen ip-adres niet toe te voegen. Stel dat iemand toegang heeft to jouw netwerk en op die manier jouw ip-adres gebruikt. Dan zou fail2ban zo'n aanval niet herkennen. De volgende regel waar we naar kijken is destemail:
destemail = jan@ergensanders.nl
Dit is het e-mailadres waar fail2ban meldingen naar toe stuurt. Het is aan te raden een account te gebruiken die niet op deze server gehost wordt. Immers, als je zelf geblokkeerd wordt of de server ligt zwaar onder vuur, dan is er een kans dat je de melding nooit krijgt.
Tenslotte moet je nog de action
regel aanpassen. Het makkelijkst kun je de regel 'action_mwl' kopiëren naar de regel 'action'.
action = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s] %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]
Daardoor krijg je een uitgebreide mail met informatie over het ip-adres als er een ip-adres geblokkeerd wordt. Zie hieronder een voorbeeld van de mail (ik heb heel veel regels weggelaten omwille van de ruimte):
From: Fail2Ban
In de rest van het bestand vind je een aantal diensten die je wel of niet kunt bewaken. Elk filter begint met de naam van de dienst tussen rechte haakjes, bijvoorbeeld [ssh], je ziet daarna enabled=true of enabled=false. Alleen ssh staat bij default aan. Dat is ook zeker de belangrijkste. Als je een dienst wilt blokkeren die er niet al in staat kun je zelf een filter toevoegen.
Als je klaar bent met jail.local moet je fail2ban herstarten:
/etc/init.d/fail2ban restart
Restarting authentication failure monitor: fail2ban.
Als het goed is krijg je nu ook een aantal e-mails van fail2ban met daarin informatie over de poorten die nu bewaakt worden.
Testen
Heb je jouw eigen ip adres niet aan jail.conf toegevoegd dan is de test simpel. Probeer in te loggen, bijvoorbeeld met ssh, en gebruik opzettelijk een verkeerd wachtwoord. Na het maximaal aantal pogingen dat je in jail.conf ingesteld hebt zou je geblokkeerd moeten worden.
Als je via een ander ip-adres in kunt loggen kun je in iptables controleren of je inderdaad geblokkerd bent:
iptables -L
Chain fail2ban-ssh (1 references) target prot opt source destination DROP all -- jouw.hostnaam.nl anywhere RETURN all -- anywhere anywhere
Je kunt ook kijken in /var/log/fail2ban.log
tail /var/log/fail2ban.log
2013-06-03 20:38:10,662 fail2ban.actions: WARNING [ssh] Ban 10.11.12.13
De ultieme test is dan of je na 10 minuten weer toegang krijgt tot je server. Als dat niet zo is kun je de server herstarten, iptables laadt dan weer de default regels en elke blokkade door fail2ban is weg.
Meer filters
In jail.local kun je de filters [apache] en [postfix] ook activeren door enabled=false te veranderen in enabled=true. Als je proftpd geïnstalleerd hebt kun je die filter ook aanzetten. Gebruik je pure-ftpd dan kun je de volgende filter toevoegen aan jail.local:
[pure-ftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = pure-ftpd logpath = /var/log/messages maxretry = 3
Als je Dovecot ook wilt beschermen moet je eerst een filter voor Dovecot aanmaken
nano /etc/fail2ban/filter.d/dovecot.conf
in dat bestand plaats je:
[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login (auth failed|Aborted login (tried to use disabled|Disconnected (auth failed).*rip=(?P
Daarna voeg je het volgende filter toe aan jail.local:
[dovecot] enabled = true port = pop3,pop3s,imap,imaps filter = dovecot logpath = /var/log/mail.log maxretry = 3
Na elke aanpassing van jail.local moet je fail2ban herstarten:
/etc/init.d/fail2ban restart
Restarting authentication failure monitor: fail2ban.
SASL authentication failures niet ontdekt
Fail2ban heeft zonder een aanpassing moeite om mislukte pogingen om in te loggen in postfix/sasl te ontdekkingen. Je kunt dit verifiëren door:
grep failed /var/log/mail.log
Als je een hoop van dit soort regels ziet zonder dat fail2ban dat ip-adres geblokkeerd heeft , heb je een probleem:
Aug 20 00:03:31 server1 postfix/smtpd[2895]: warning: unknown[118.213.88.25]: SASL LOGIN authentication failed: authentication failure Aug 20 00:03:36 server1 postfix/smtpd[2897]: warning: unknown[118.213.88.25]: SASL LOGIN authentication failed: authentication failure Aug 20 00:03:41 server1 postfix/smtpd[2898]: warning: unknown[118.213.88.25]: SASL LOGIN authentication failed: authentication failure Aug 20 00:03:46 server1 postfix/smtpd[2899]: warning: unknown[118.213.88.25]: SASL LOGIN authentication failed: authentication failure
Hier probeert iemand in te loggen om via jouw server mail te versturen. Je kunt ook fail2ban-regex gebruiken om te testen:
fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/sasl.conf
als je in de uitvoer de tekst Sorry, no match
ziet moet je inderdaad je filter aanpassen:
mv /etc/fail2ban/filter.d/sasl.conf nano /etc/fail2ban/filter.d/sasl.conf.backup1 nano /etc/fail2ban/filter.d/sasl.conf
Zoek de regel die begint met failregex
en verander het einde van:
authentication failed(: [A-Za-z0-9+/]*={0,2})?$
in:
authentication failed: w
Je kunt nu weer testen met fail2ban-regex en zien of het filter nu wel goed werkt. Als het nu goed is moet je tenslotte fail2ban herstarten:
/etc/init.d/fail2ban restart
fail2ban logfile
Naast de e-mails die fail2ban je stuurt kun je ook de logfiles bekijken. Je vindt die in /var/log/fail2ban.log.
tail /var/log/fail2ban.log
2013-06-09 08:05:36,751 fail2ban.filter : INFO Log rotation detected for /var/log/mail.log 2013-06-12 20:58:02,638 fail2ban.actions: WARNING [postfix] Ban 212.48.64.242 2013-06-12 21:08:03,176 fail2ban.actions: WARNING [postfix] Unban 212.48.64.242