Een van de eerste problemen waar je mee te maken gaat hebben als je een server online zet, hetzij een VPS of een dedicated server, is dat je systeem direct wordt aangevallen door een hele hoop IP adressen uit Rusland, China en Thailand, dit zijn de voornaamste. Je zou jezelf kunnen afvragen waarom ze dit doen. De redenen zijn nogal uiteenlopend maar vaak komt het neer op de verspreiding van mallware en virussen. Deze hackers weten enorm goed dat het verspreiden van virussen zeer snel kan gaan als ze duizenden websites infecteren die elk honderden of duizenden unieke bezoekers per dag hebben. Naast het verspreiden van mallware gebruiken ze natuurlijk ook graag je SMTP server om spam te versturen naar mensen. Kortom, de beveiliging van je server, hetzij een VPS, hetzij een dedicated server is enorm belangrijk en is het eerste wat je moet doen na de installatie van je server.

Hoe kan ik zien of ze mijn server proberen te hacken?

bekijk even je logs via de command-line interface of via het directadmin controlepaneel (cd /var/log). Afhankelijk van de manier waarom je server is opgebouwd is het belangrijk om de volgende logbestanden te checken. Als er nummers achter het bestand staan, dan zijn dit de oude logs die na een tijd zijn vervangen door een nieuw log zodat de logs niet te groot worden.

SSH: /var/log/secure

FTP: /var/log/secure

Mail: /var/log/maillog

Minder belangrijk maar ook verstandig om even na te kijken

Apache: /http/error_log (veel content scrapers)

Vergeet niet dat ook de Google bot een content scraper is, pas dus enorm op met het handmatig bannen van IP adressen en doe dit alleen als je er 100% zeker van bent dat het hier om een scraper gaat en niet de google bot. Als je het IP van Google per ongeluk hebt geblokkeerd dan krijg je van google webmasters de melding dat Google je website niet meer kan bereiken. Meld je website dus zeker aan op de Google webmaster tools.

Meer informatie over de logbestanden kan je hier vinden.

Via Fail2ban automatisch IP adressen blokkeren van hackers

Normaal gezien kan je via de firewall van Linux, IPTABLES, handmatig IP adressen blokkeren. Het is echter onmogelijk om zelf handmatig keer op keer de logs van je server na te kijken op spammers en hackers en deze dan zelf te bannen via IPTABLES. Dankzij Fail2ban worden de bovenstaande logs automatisch nagelezen en worden spammers en hackers automatisch in IPTABLES geplaatst zodat ze geblokkeerd worden via het DROP statement.

Hoe werkt fail2ban?

Zoals we al zeiden leest Fail2ban de logs uit en scanned naar bepaalde teksten zoals ” Failed password for invalid user”, “Failed password for root”, ” no such user found”. Nadat Fail2ban de regel heeft gevonden gaat het kijken welk IP er aan verbonden is en plaatst het deze in IPTABLES zodat het IP gebanned wordt op de server. Dankzij deze simpele manier van werken kan je dus ook voor zelf geschreven programma’s/scripts die met een log werken Fail2ban inschakelen om IP adressen te blokkeren van je server. Heb je een gameserver waar iemand wilt inloggen als admin? toon Fail2ban waar de logs worden bijgehouden en gebruik de juiste syntax om het IP adres te bannen. Dit zou bijvoorbeeld kunnen zijn “error, user tried to login with wrong password” om maar even een simpel voorbeeldje te geven.

Fail2ban installeren op je server

Als je CentOS gebruikt als Linux besturingssysteem dan moet je de EPEL repository downloaden om Fail2ban via yum te kunnen installeren. Nadat je dit gedaan hebt installeer je Fail2ban via de command yum install fail2ban.

Configuratiebestanden instellen

In de laatste versie van Fail2ban zijn de meeste programma die een webserver nodig heeft verwerkt zoals Apache, SSH, Dovecot, Exim, Proftpd en vsftpd. Fail2ban is echter niet gelimiteerd tot deze programma’s, zolang je de syntax van foutmeldingen kent kan je elk programma dat werkt met logs toevoegen.

De configuratiebestanden kun je vinden in /etc/fail2ban. Jail.conf zal eerst worden gebruikt maar de instellingen zullen worden overruled door jail.local. Het wordt dus aangeraden om alles aan te passen in jail.local.

Bovenaan het configuratiebestand zal je de default instellingen vinden die van toepassing zullen zijn indien deze niet per programma zijn ingesteld.

bantime  = 86400 (tijd van IP ban in seconden)
ignoreip = 127.0.0.1 (handig als je jezelf niet wilt bannen)
findtime  = 86400 (bantijd krijgt een reset als het IP terug probeert in te loggen binnen de findtime)
maxretry = 6 (het aantal keer dat iemand mag proberen in te loggen met de verkeerde gegevens)

Als voorbeeldje bekijken we de instellingen voor SSH

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=you@mail.com, sender=fail2ban@mail.com]
logpath  = /var/log/secure
maxretry = 6

Fail2ban zal IP adressen bannen die voorkomen in var/log/secure met een error syntax. De error syntax voor SSH kan je bekijken of wijzigen in /etc/fail2ban/filter.d. In deze directorey vind je tevens alle programma’s terug die standaard zijn geïntegreerd in Fail2ban.

De syntax van SSH

failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from <HOST>s*$
^%(__prefix_line)sFailed [-/w]+ for .* from <HOST>(?: port d*)?(?: sshd*)?$
^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>s*$
^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>s*$
^%(__prefix_line)sUser S+ from <HOST> not allowed because not listed in AllowUsers$
^%(__prefix_line)sauthentication failure; logname=S* uid=S* euid=S* tty=S* ruser=S* rhost=<HOST>(?:s+user=.*)?s*$
^%(__prefix_line)srefused connect from S+ (<HOST>)s*$
Nadat je alles hebt ingesteld volstaat het om een een restart te geven aan fail2ban via de command service fail2ban restart. Daarna kan je bekijken of fail2ban werkt via service fail2ban status en IPTABLES -L waarin je de geblokkeerde IP adressen per jail (programma) kan bekijken.

service fail2ban status
|- Number of jail:      4
`- Jail list:           proftpd-iptables, apache-badbots, dovecot-pop3imap, ssh-iptables

IPTABLES -L

iptables fail2ban server beveiligen

Comments

comments