Fail2ban beschermt je Linux-VPS door IP's te bannen waarvandaan pogingen worden gedaan om je VPS binnen te dringen. Fail2ban scant de logbestanden van je VPS om te bepalen welke IP's gebannen worden (e.g. /var/log/apache/error_log). Er wordt gescand op te veel foutieve password-pogingen, zoeken naar exploits, etcetera.
Daarnaast is het ook mogelijk om automatisch een rapport naar jezelf en de eigenaar van het aanvallende IP te laten sturen. Fail2ban komt met filters voor verscheidene services (Apache, Courier, SSH, etcetera).
Fail2ban installeren
sudo dnf -y update
sudo dnf -y install epel-release
sudo dnf -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo yum -y update
sudo yum -y install epel-release
sudo yum -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo apt -y update
sudo apt -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo apt -y update
sudo apt -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Fail2ban configureren
Standaard gebruikt Fail2ban /etc/fail2ban/jail.conf om vast te stellen welke acties het wanneer uitvoert. Eventuele aanpassingen die je in jail.conf maakt worden echter overschreven bij updates van Fail2ban. Dit is niet het geval bij het bestand /etc/fail2ban/jail.local. Daarnaast krijgt de inhoud van jail.local voorrang op die van jail.conf. Je gebruikt dan ook het bestand jail.local om een configuratie voor Fail2ban op te zetten.
Gebruik alleen de delen uit de configuratie hieronder die van toepassing zijn op jouw VPS! Gebruik je geen Exim, voeg dat deel dan niet toe. Hetzelfde geld voor het Postfix-deel. Het SASL-deel gebruik je alleen als je gebruikmaakt van onze mailservice.
Stap 1
Maak eerst het bestand jail.local aan:
sudo nano /etc/fail2ban/jail.local
Stap 2
Voeg onderstaande code toe en pas de waardes aan naar eigen behoefte. Een toelichting van de opties vind je onder de code (tip: gebruik Putty en copy-paste de inhoud hieronder). Let vooral op dat je de banaction aanpast waar nodig (het voorbeeld beschrijft CentOS 7.4+, CentOS 8 en AlmaLinux).
Pas onderstaande gegevens (sender, destemail en ignoreip) aan naar je eigen gegevens en gebruik enkel de jails van software die je daadwerkelijk op je VPS gebruikt (e.g. Exim of Postfix, maar niet beide. Je kunt controleren welke je gebruikt op je VPS met het commando systemctl status exim / postfix).
Gebruik je onze VPS mailservice? Voeg dan het stukje onder '[sasl]' toe en zie stap 5 verder hieronder.
[DEFAULT]
# Ban for X amount of time
bantime = 604800
findtime = 3600
sender = fail2ban@voorbeeld.nl
destemail = admin@voorbeeld.nl
action = %(action_mwl)s
banaction = iptables-multiport
maxretry = 3
ignoreip = jeipadres
[sshd]
enabled = true
port = ssh
# vervang hierboven ssh door je ingestelde SSH poort nummer.
[exim]
enabled = true
filter = exim
logpath = /var/log/exim/mainlog
# gebruik je cPanel? Vervang dan bovenstaande regel door logpath = /var/log/exim_mainlog
# voor debian, gebruik je /var/log/exim4/mainlog
[postfix]
enabled = true
port = smtp, ssmtp
filter = postfix
failregex = \[<HOST>]: 535 Incorrect authentication data
logpath = /var/log/maillog
[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
filter = dovecot
logpath = /var/log/maillog
[sasl]
enabled = true
port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter = sasl
logpath = /var/log/maillog
Stap 3
Gebruik je Exim (e.g. bij onze DirectAdmin en cPanel images), dan breid je de bestaande Exim configuratie eerst uit. Zo niet, ga dan door naar stap 7.
sudo nano /etc/fail2ban/filter.d/exim.conf
Stap 4
Voeg onderstaande inhoud aan het failregex-deel toe en sla de wijzigingen op door achtereenvolgens op ctrl + x > y > enter te drukken:
\[<HOST>\]: 535 Incorrect authentication data
Het geheel zou er dan onder [Definition] ongeveer als volgt uit moeten zien:
[Definition]
failregex = ^%(pid)s %(host_info)ssender verify fail for <\S+>: (?:Unknown user|Unrouteable address|all relevant MX records point to non-existent hosts)\s*$
^%(pid)s \w+ authenticator failed for (?:[^\[\( ]* )?(?:\(\S*\) )?\[\](?::\d+)?(?: I=\[\S+\](:\d+)?)?: 535 Incorrect authentication data( \(set_id=.*\)|: \d+ Time\(s\))?\s*$
^%(pid)s %(host_info)srejected RCPT [^@]+@\S+: (?:relay not permitted|Sender verify failed|Unknown user|Unrouteable address)\s*$
^%(pid)s SMTP protocol synchronization error \([^)]*\): rejected (?:connection from|"\S+") %(host_info)s(?:next )?input=".*"\s*$
^%(pid)s SMTP call from \S+ %(host_info)sdropped: too many nonmail commands \(last was "\S+"\)\s*$
^%(pid)s SMTP protocol error in "AUTH \S*(?: \S*)?" %(host_info)sAUTH command used when not advertised\s*$
^%(pid)s no MAIL in SMTP connection from (?:[^\[\( ]* )?(?:\(\S*\) )?%(host_info)sD=\d\S+s(?: C=\S*)?\s*$
^%(pid)s (?:[\w\-]+ )?SMTP connection from (?:[^\[\( ]* )?(?:\(\S*\) )?%(host_info)sclosed by DROP in ACL\s*$
\[<HOST>\]: 535 Incorrect authentication data
ignoreregex =
Stap 5
Gebruik je de VPS mailservice, maak dan nog een configuratiebestand aan voor de SASL jail. Zo niet, ga dan door naar stap 7.
sudo nano /etc/fail2ban/filter.d/sasl.conf
Stap 6
Voeg onderstaande inhoud aan het bestand toe en sla de wijzigingen op door achtereenvolgens op ctrl + x > y > entete drukken:
# Fail2Ban configuration file
#
# $Revision$
[Definition]
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P[\w\-.^_]+)
# Values: TEXT
#
failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [A-Za-z0-9+/ ]*)?$
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Herstart Fail2ban om de wijzigingen te verwerken:
sudo systemctl restart fail2ban
Geavanceerd / optioneel: oplopende Fail2ban-bantijd
Om te voorkomen dat Fail2ban erg fanatiek optreed en permanent een legitieme gebruiker blokkeert die even niet op zijn wachtwoord komt, is het mogelijk om als alternatief in te stellen om eerst een uur te blokkeren, vervolgens een dag, een week, etcetera.
Stap 1
Maak eerst het bestand /etc/fail2ban/filter.d/f2b-repeat.conf aan:
sudo nano /etc/fail2ban/filter.d/f2b-repeat.conf
Stap 2
Voeg de volgende inhoud toe:
[INCLUDES]
before = common.conf
[Definition]
failregex = \]\s+ban\s+<HOST>
ignoreregex = \[f2b-repeat.*\]\s+ban\s+<HOST>
Stap 3
Voeg in je jail.local bestand tussen de '[Default]' en '[SSHD]' passage de '[f2b-repeat]' passages uit het voorbeeld hieronder toe. Let op dat je in jouw configuratie in de [DEFAULT] passage alleen de bantime en findtime aanpast (optioneel ook de maxretry) maar verder niets:
[DEFAULT]
# Ban for X amount of time
bantime = 3600
findtime = 86400
sender = fail2ban@voorbeeld.nl
destemail = admin@voorbeeld.nl
action = %(action_mwl)s
banaction = iptables-multiport
maxretry = 3
ignoreip = jeipadres
[f2b-repeat2]
enabled = true
filter = f2b-repeat
bantime = 86400
findtime = 604800
logpath = /var/log/fail2ban.log
maxretry = 3
[f2b-repeat3]
enabled = true
filter = f2b-repeat
bantime = 604800
findtime = 2592000
logpath = /var/log/fail2ban.log
maxretry = 3
[f2b-repeat4]
enabled = true
filter = f2b-repeat
bantime = 2592000
findtime = 15552000
logpath = /var/log/fail2ban.log
maxretry = 3
Je verhoogt de findtime zodat Fail2ban verder terugkijkt bij nieuwe pogingen. Zo zorg je ervoor dat Fail2ban herhalende aanvangers herkent, maar ook steeds strenger controleert.
Stap 4
Geef je zoals hierboven de directory van het logbestand van Fail2ban op, dan zal Fail2ban niet starten. Dit kun je oplossen door eerst het Fail2ban.log-bestand aan te maken:
sudo touch /var/log/fail2ban.log
Stap 5
Vervolgens kun je Fail2ban (her)starten:
sudo systemctl restart fail2ban
Geavanceerd / optioneel: extra filters / jails
Fail2ban komt met een aantal filters/jails die je terugvindt in /etc/fail2ban/filter.d/ :
Stap 1
Bekijk de standaard filters/jails met:
ls /etc/fail2ban/filter.d/
Je ziet een overzicht zoals hieronder:
Kies de naam van het filter dat je wilt gebruiken, bijvoorbeeld apache-auth.conf
Stap 2
Open je jail opnieuw:
sudo nano /etc/fail2ban/jail.local
Stap 3
Je voegt nu het filter jail toe aan met de volgende syntax:
[jailname]
enabled = true
filter = jailname
logpath = /var/log/jelogbestand
- [jailname]: Vervang deze naam door een naam naar keuze zodat je deze eenvoudig herkent als je de status van Fail2ban controleert.
- enabled: Moet altijd true zijn, anders staat je jail niet aan.
- filter: Geef hier de naam op van de jail die je gekozen hebt. Heb je bijvoorbeeld bij Stap 1 apache-auth.conf uitgekozen, vul hier dan apache-auth in.
- logpath: Hier geef je op welk bestand Fail2ban scant om te zoeken naar aanvallen op je VPS.
Aanvullende tips en commando's:
De status van Fail2ban controleer je met het commando:
sudo fail2ban-client status
De logs van Fail2ban bekijk je met een van de volgende commando's:
sudo nano /var/log/fail2ban.log
sudo vi /var/log/fail2ban.log
sudo cat /var/log/fail2ban.log
Wil je controleren of Fail2ban nog aan staat, gebruik dan:
sudo systemctl status fail2ban
Je herstart Fail2ban na een wijziging met:
sudo systemctl restart fail2ban
Handmatig bannen / unbannen
Handmatig bannen
Als iemand heel geduldig is en één keer per uur probeert in te loggen, kun je er ook voor kiezen zijn/haar IP handmatig te bannen. Kies hiervoor eerst een jail, die je terugziet in de output van het commando:
sudo fail2ban-client status
Gebruik daarna het volgende commando om een IP te bannen, waarbij je 'JAIL' vervangt door de gekozen jail en xxx.xxx.xxx.xxx door het aanvallende IP-adres:
sudo fail2ban-client -vvv set JAIL banip xxx.xxx.xxx.xxx
Handmatig unbannen
Het kan gebeuren dat iemand onbedoelt geband wordt, bijvoorbeeld na meerdere keren een verkeerd wachtwoord te hebben opgegeven voor het verbinden via SSH (gebruik de VPS-console als je zelf geband bent). Je kunt in dat geval een IP-adres weer unbannen met het commando:
sudo fail2ban-client set JAIL unbanip xxx.xxx.xxx.xxx
Vervang 'JAIL' door de jail waar het IP-adres voor geband is en xxx.xxx.xxx.xxx door het aanvallende IP-adres.
Weet je niet zeker in welke jail het IP-adres is opgenomen? Bekijk dan je fail2ban log, bijvoorbeeld met het commando:
sudo nano /var/log/fail2ban.log
Zoek het specifieke IP-adres in het geopende logbestand door achtereenvolgens ctrl + w (whereis in nano) in te drukken en daarna het IP-adres op te geven waar je op wil zoeken.
De installatie en configuratie van Fail2ban op je VPS is hiermee voltooid. Je VPS is nu beveiligd tegen bruteforce-aanvallen!
Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.