Debian server beheer

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 Date: 4 juni 2013 21:15:08 CEST To: Jan Weijers Subject: [Fail2Ban] ssh: banned 10.11.12.13 Hi, The IP 10.11.12.13 has just been banned by Fail2Ban after 3 attempts against ssh. Here are more information about 10.11.12.13: % This is the RIPE Database query service. % The objects are in RPSL format. % etc, etc, etc % This query was served by the RIPE Database Query Service version 1.66 (WHOIS2) Lines containing IP:10.11.12.13 in /var/log/auth.log Jun 4 19:14:59 versio1 sshd[11519]: Failed password for root from 10.11.12.13 port 57945 ssh2 Jun 4 19:15:04 versio1 sshd[11519]: Failed password for root from 10.11.12.13 port 57945 ssh2 Jun 4 19:15:07 versio1 sshd[11519]: Failed password for root from 10.11.12.13 port 57945 ssh2 etc, etc, etc, Regards, 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=(?PS*),.* ignoreregex =

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