Hulpartikel overzicht

Hulpartikel

Ik wil Fail2ban installeren en configureren

Fail2ban beschermt je 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

CentOS 7

Stap 1

Update eerst je VPS:

sudo yum update

Stap 2

Fail2ban is niet opgenomen in het officiële CentOS package repository. Het is wel opgenomen in Extra Packages for Enterprise Linux (EPEL). Installeer dan ook eerst de laatste EPEL-release.

sudo yum install epel-release

Tijdens de installatie wordt toestemming gevraagd om verder te gaan. Klik achtereenvolgend op 'y' en 'Enter'.


Stap 3

Installeer vervolgens Fail2ban met het commando:

sudo yum install fail2ban

Er zal tweemaal om toestemming worden gevraagd. Klik opnieuw op 'y' > 'Enter' om verder te gaan.


Stap 4

Vervolgens zorg je dat Fail2ban met je VPS automatisch start en zet je Fail2ban met onderstaande commando's aan:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Ga vervolgens verder met de configuratie van Fail2ban.

Ubuntu

Stap 1

Update eerst je VPS:

sudo apt-get update

Stap 2

Fail2ban is in tegenstelling tot CentOS standaard opgenomen in de officiële Ubuntu package repository. Je installeert Fail2ban met het commando:

sudo apt-get install fail2ban

Er zal tweemaal om toestemming worden gevraagd. Klik beide keren op 'y' > 'Enter' om verder te gaan.


Stap 3

Leeg je repository cache met het commando:

sudo apt-get clean

Stap 4

Vervolgens zorg je dat Fail2ban met je VPS automatisch start en zet je Fail2ban met onderstaande commando's aan:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Ga vervolgens verder met de configuratie van Fail2ban.

Debian

Stap 1

Update eerst je VPS:

sudo apt-get update

Stap 2

Fail2ban is in tegenstelling tot CentOS standaard opgenomen in de officiële Debian package repository. Je installeert Fail2ban met het commando:

sudo apt-get install fail2ban

Er zal eenmaal om toestemming worden gevraagd. Klik op 'y' > 'Enter' om verder te gaan.


Stap 3

Leeg je repository cache met het commando:

sudo apt-get clean

Stap 4

Vervolgens zorg je dat Fail2ban met je VPS automatisch start en zet je Fail2ban met onderstaande commando's aan:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Ga vervolgens verder met de configuratie van Fail2ban.

Fail2ban configureren

Wij raden aan enkele aanpassingen in de configuratie van Fail2ban te maken. Hiervoor gebruiken wij het bestand /etc/fail2ban/jail.local. Standaard gebruikt Fail2ban /etc/fail2ban/jail.conf maar die kan overschreven worden bij updates van Fail2ban. Dit is het het geval bij jail.local. Daarnaast krijgt de configuratie van jail.local voorrang op de configuratie van jail.conf.

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).

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 = firewallcmd-ipset 
# banaction voor firewalld,  voor iptables, zie de toelichting
maxretry = 5
ignoreip = jeipadres

[sshd]
enabled = true
port = ssh 
# vervang hierboven ssh door je ingestelde SSH poort nummer.

[exim]
enabled = true

filter = exim_auth
logpath = /var/log/exim/mainlog
# gebruik je cPanel? Vervang dan bovenstaande regel door logpath = /var/log/exim_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

Toelichting Fail2Ban jail.local configuratie

Fail2ban gebruikt zogeheten 'Jails'. Een jail kun je zien als de configuratie voor een specifiek stuk software op je VPS waarin je zaken definieert zoals welke service en poort er gebruikt wordt en welke log file gescand wordt door Fail2ban. Hierboven is bijvoorbeeld het stukje onder [Exim] een jail.

[Default]

  • bantime: Een bantime van 60 is 1 minuut, 3600 1 uur, 86400 1 dag en 604800 1 week, etcetera.
  • findtime: Hiermee defnieer je hoever in het verleden Fail2ban je logbestanden controleert. Standaard staat dit op 600 (10 minuten). Als een IP één aanval uitvoert iedere 10 minuten zou Fail2ban dit niet aanmerken omdat pas bij vijf aanvallen (zie maxretry) binnen 10 minuten actie ondernomen wordt.
  • sender (optioneel): Het e-mailadres dat notificaties van Fail2ban-acties verstuurt naar de aanvaller. Het configureren van een uitgaande mailserver en een mailadres op je VPS dat je hiervoor kunt gebruiken, valt buiten de scope van deze handleiding.
  • destemail (optioneel): Je eigen e-mailadres waar notificaties van Fail2ban-acties naar worden gestuurt. Het configureren van een uitgaande mail server en een mailadres op je VPS dat je hiervoor kunt gebruiken valt buiten de scope van deze handleiding.
  • action (optioneel): De defaultoptie %(action_)s bant het IP van de aanvaller. Daarnaast stuurt %(action_mwl)s een e-mailnotificatie inclusief WHOIS-data en logfile-data.
  • banaction: Met banaction geef je aan welke firewall je gebruikt. In CentOS is dit bijvoorbeeld firewalld. Je kunt in jail.local firewalld of iptables als volgt specificeren:
    • firewalld: banaction = firewallcmd-ipset
    • iptables: banaction = iptables-multiport
  • maxretry: Hier kun je het aantal maximale pogingen aangeven dat iemand mag doen (bijvoorbeeld foutieve aanmeldpogingen) alvorens de actie onder 'action' wordt uitgevoerd.
  • sshd enabled: Hiermee worden ssh-verbindingspogingen gemonitord en IP's gebannen wanneer zij meer pogingen doen dan onder maxretry is gedefinieerd.
  • ignoreip: Geef hier je eigen IP op. Als je je wachtwoord vergeet, dan wordt je IP na het aantal pogingen onder 'maxretry' niet direct gebannen.

[SSHD] (SSH server)

  • enabled: Schakelt de beveiliging in voor je SSH(D)-verbinding
  • port: Hier geef je op welke poort beveiligd wordt. Met de waarde 'ssh' vertel je Fail2ban de ingestelde SSH-poort te gebruiken.

[exim] (uitgaande mail)

  • enabled: Schakelt de beveiliging in voor je Exim-verbinding
  • filter: Geeft aan welk filter gebruikt wordt. Fail2ban komt met een aantal filters die in /etc/fail2ban/filter.d/ zijn opgenomen.
  • failregex: Dit zijn foutmeldingen waar de log gedefinieerd onder 'logpath' op doorzocht wordt.
  • logpath: Het logbestand dat Fail2ban doorzoekt. Let op: dit kan per systeem verschillen. cPanel en DirectAdmin hanteren bijvoorbeeld verschillende locaties voor de mail log. Controleer deze dan ook van tevoren en pas die aan naar de daadwerkelijke locatie.

[postfix] (uitgaande mail)

  • enabled: Schakelt de beveiliging in voor je Exim-verbinding
  • port: Hier geef je op welke poort beveiligd wordt. Met de waarde 'smtp, ssmtp' vertel je Fail2ban de ingestelde SMTP-poort te gebruiken.
  • filter: Geeft aan welk filter gebruikt wordt. Fail2ban komt met een aantal filters die in /etc/fail2ban/filter.d/ zijn opgenomen.
  • failregex: Dit zijn foutmeldingen waar de log gedefinieerd onder 'logpath' op doorzocht wordt.
  • logpath: Het logbestand dat Fail2ban doorzoekt.Let op: dit kan per systeem verschillen. cPanel en DirectAdmin hanteren bijvoorbeeld verschillende locaties voor de mail log. Controleer deze dan ook van tevoren en pas die aan naar de daadwerkelijke locatie.

[dovecot] (inkomende mail)

  • enabled: Schakelt de beveiliging in voor je Exim-verbinding
  • port: Hier geef je op welke poort beveiligd wordt. Met de waarde 'pop3, pop3s, imap, imaps' vertel je Fail2ban de ingestelde pop3- en imap-poorten te gebruiken.
  • filter: Geeft aan welk filter gebruikt wordt. Fail2ban komt met een aantal filters die in /etc/fail2ban/filter.d/ zijn opgenomen.
  • logpath: Het logbestand dat Fail2ban doorzoekt.

[SASL] (bij gebruik van relay, zoals onze VPS-mailservice)

  • enabled: Schakelt de beveiliging in voor je Exim-verbinding
  • port: Hier geef je op welke poort beveiligd wordt. Met de waarde 'pop3, pop3s, imap, imaps' vertel je Fail2ban de ingestelde smtp, pop3- en imap-poorten te gebruiken.
  • filter: Geeft aan welk filter gebruikt wordt. Fail2ban komt met een aantal filters die in /etc/fail2ban/filter.d/ zijn opgenomen.
  • logpath: Het logbestand dat Fail2ban doorzoekt.

 

Stap 3

Gebruik je Exim (e.g. bij onze DirectAdmin en cPanel images), maak dan nog een configuratiebestand aan voor exim_auth. Zo niet, ga dan door naar stap 7.

sudo nano /etc/fail2ban/filter.d/exim_auth.conf

 

Stap 4

Voeg onderstaande inhoud aan het bestand toe en sla de wijzigingen op door achtereenvolgens op ctrl + x > y > enter te 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 = \[<HOST>\]: 535 Incorrect authentication data

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
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 =

 

Stap 7

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

Vervang in je jail.local bestand het stuk onder '[Default]' en voor '[SSHD]' door het onderstaande:

[DEFAULT]
# Ban for X amount of time
bantime = 3600
findtime = 86400
sender = fail2ban@voorbeeld.nl
destemail = admin@voorbeeld.nl
action = %(action_mwl)s 
banaction = firewallcmd-ipset
maxretry = 5
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 = 5

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 echo " " >> /var/log/fail2ban.conf

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:

fail 2 ban jails overview

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

De installatie en configuratie van Fail2ban op je VPS is hiermee voltooid. Je VPS is nu beveiligd tegen bruteforce-aanvallen!

     

    Heb je ook een goed idee?

    Stuur jouw idee in! Met genoeg stemmen komt jouw idee op onze wishlist!

    Heeft dit artikel je geholpen?

    Maak een account aan of log in om een beoordeling achter te laten.

    Reacties

    Maak een account aan of log in om een reactie te plaatsen.

    0
    Matthijs van Beek Admin 18 juli 2018 (#1626)

    @zorgvooroverdracht

    Het deel van de Exim log heeft een kleine update gehad. Het probleem zou met de aangegeven Exim-configuratie niet nogmaals moeten voorkomen. Overigens kan een te grote logfile ook problemen veroorzaken.

    0
    zorgvooroverdracht 15 juli 2018 (#1603)

    In de fail2ban.log file zie ik staan: No 'host' group in '[]: 535 Incorrect authentication data' 2018-07-15 15:44:51,813 fail2ban.transmitter [3986]: WARNING Command ['set', 'exim', 'addfailregex', '\[\]: 535 Incorrect authentication data'] has failed. Received RegexException("No 'host' group in '\[\]: 535 Incorrect authentication data'",)

    Zo te zien iets met Exim authenticatie, welke authenticatie gaat dit exact om?

    Overigens staat er bij jail.local voor postfix, dovecot en sasl: logpath = /var/log/maillog moet dat niet mail.log zijn?

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op