Fail2Ban installeren en instellen op CentOS 8 en Fedora 33

Fail2Ban is een hulpprogramma voor het parseren van logbestanden dat logbestanden van verschillende processen scant en IP adressen verbant die te veel mislukte wachtwoordpogingen doen. Wanneer een poging tot inloggen wordt gelokaliseerd, voegt Fail2Ban een nieuwe regel toe aan iptables om het IP adres van de aanvaller te blokkeren, tijdelijk of permanent. Het kan je ook waarschuwen via e-mail voor hetzelfde.

Het is in de eerste plaats gericht op het opsporen van inbraken via SSH, maar het kan ingesteld worden om te werken met elke dienst die logbestanden gebruikt.

Vereisten

  1. Een Fedora 33 of een CentOS 8 gebaseerde server met een niet-root gebruiker met sudo privileges.

  2. Installeer Nano editor want dat is wat we zullen gebruiken.

    $ sudo dnf install nano -y
    

Installeer Fail2Ban

Om Fail2Ban op CentOS 8 te installeren, moet je eerst de EPEL Yum repository installeren.

$ sudo dnf install epel-release

Fedora 33 wordt geleverd met Fail2Ban.

Voer het volgende commando uit om Fail2Ban te installeren op zowel Fedora 33 als CentOS 8.

$ sudo dnf install fail2ban

Eenmaal geïnstalleerd moeten we de dienst inschakelen.

$ sudo systemctl enable fail2ban

Start vervolgens de fail2ban dienst.

$ sudo systemctl start fail2ban

Je kunt nu de status van de dienst controleren om te zien of hij goed werkt.

$ sudo systemctl status fail2ban
? fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
     Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago
       Docs: man:fail2ban(1)
    Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
   Main PID: 19032 (f2b/server)
      Tasks: 3 (limit: 1125)
     Memory: 11.0M
        CPU: 96ms
     CGroup: /system.slice/fail2ban.service
             ??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start

Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service...
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service.
Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready

Configureer Fail2Ban

De Fail2Ban dienst bewaart zijn configuratiebestanden in de map /etc/fail2ban. Je zult er een bestand jail.conf in tegenkomen. Dit bestand wordt meestal overschreven tijdens pakket-upgrades, dus het wordt beter niet bewerkt.

In plaats daarvan moeten alle configuraties gebeuren in een nieuw bestand dat we jail.local zullen noemen. Instellingen in deze 2 bestanden kunnen verder overschreven worden via bestanden uit de /etc/fail2ban/jail.d/ directory.

Configuraties worden in de volgende volgorde toegepast:

  1. /etc/fail2ban/jail.conf
  2. etc/fail2ban/jail.d/*.conf, alfabetisch
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, alfabetisch

jail.conf bevat een sectie [DEFAULT] gevolgd door secties voor afzonderlijke diensten. Elk van deze secties kan overschreven worden door ze te definiëren in .local bestanden.

Configureer jail.local

We maken een vers jail.local bestand.

$ sudo nano /etc/fail2ban/jail.local

Plak er de volgende code in.

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override backend=auto in /etc/fail2ban/jail.conf
backend = systemd

[sshd]
enabled = true

Druk op Ctrl + X om de editor te sluiten en druk op Y als gevraagd wordt om het bestand op te slaan. Dit stelt een nieuwe standaard bantime in voor alle diensten, verandert de backend in systemd en schakelt de `sshd jail in.

Herstart Fail2ban om de nieuwe veranderingen door te voeren.

$ sudo systemctl restart fail2ban

We kunnen de nieuw aangebrachte instellingen bevestigen met fail2ban-client utility.

$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

We kunnen ook de gedetailleerde status van elke jail specifiek opvragen op de volgende manier.

$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

Meer instellingen

jail.conf geeft nog veel meer instellingen die met het /jail.local bestand kunnen worden aangepast. We overlopen hierna enkele instellingen.

Witmaken van IP

Je kunt IP's whitelisten/ignore maken zodat ze niet geblokkeerd worden door Fail2ban met de volgende code.

[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89

Als je IP's alleen voor bepaalde jails wilt whitelisten, kun je dat doen via fail2ban-client.

$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89

Vervang JAIL in het bovenstaande commando door de naam van de gevangenis, waarvoor je de instelling wilt wijzigen.

Ban Tijd en Herhaal bedrag

Er zijn 3 instellingen waarmee je de tijd en het aantal herhalingen voor een ban kunt instellen.

bantime - is de tijdsduur in seconden waarvoor een IP verbannen wordt. Om een permanente ban in te stellen stel je deze waarde in op een negatief getal. De standaardwaarde is 10 minuten of 600 seconden.

findtime - is de lengte van de tijd tussen aanmeldpogingen voordat een ban ingesteld wordt. Deze waarde is altijd een aantal seconden. Bijvoorbeeld, als Fail2ban ingesteld is om een IP te bannen na 5 mislukte aanmeldpogingen, dan moeten die 5 pogingen binnen de ingestelde 10 minuten bantime grens gebeuren.

maxretry - is het aantal herhalingspogingen van een enkel IP adres voordat een ban wordt opgelegd. De standaardwaarde is 3.

Om deze instellingen aan te passen plak je de volgende regels in het \etc\fail2ban\jail.local bestand onder de sectie [DEFAULT].

bantime = 3600
findtime = 300
maxretry = 4

E-mail waarschuwingen

Om e-mail waarschuwingen te sturen, moet je eerst een Mail Transfer Agent(MTA) installeren. Voor ons doel installeren we sendmail.

$ sudo dnf install sendmail

Om de e-mail te ontvangen voeg je de volgende code toe in \etc\fail2ban\jail.local bestand onder [DEFAULT] sectie.

destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s

destemail verwijst naar de Destination email Id, dat is de id waar je de mails op wilt ontvangen, sendername verwijst naar de naam van de afzender, waarvoor we Fail2Ban gebruiken. mta verwijst naar de Mail Transfer Agent die gebruikt wordt, hier is dat sendmail. Als je Postfix gebruikt, gebruik dan de waarde mail voor de variabele mta.

action verwijst naar de standaard actie die ondernomen wordt zodra een inbraak ontdekt wordt. De standaardwaarde is %(action_)s die alleen de gebruiker een ban oplegt. %(action_mw)s verbant en stuurt een e-mail met een Whois rapport; terwijl %(action_mwl)s verbant en een e-mail stuurt met het Whois rapport samen met informatie uit de relevante logbestanden. Dit kan ook per gevangenis veranderd worden.

Instellingen voor individuele gevangenissen

Omdat we al weten dat het [DEFAULT] gedeelte voor alle Jails geldt, is het nu tijd om enkele specifieke Jails en hun instellingen te bekijken.

SSHD gevangenis

We hebben [sshd] al eerder gedefinieerd in ons jail.local bestand. We kunnen het nog wat meer aanpassen met de volgende code.

[sshd]

enabled = true
port = ssh
logpath = %(ssh_log)s

In dit geval gebruiken we een voorgedefinieerde variabele ssh voor de poort, die de standaard SSH poort is. Als je een andere SSH poort gebruikt, moet je die veranderen. logpath verwijst naar de plaats van het logbestand dat bewaakt moet worden. %(ssh_log)s gebruikt een waarde die in Fail2ban's standaard configuratiebestand is gedefinieerd (/etc/fail2ban/paths-common.conf).

Nginx gevangenis

Nginx heeft verschillende Jails die in Fail2Ban gebruikt kunnen worden. Als bijvoorbeeld een met wachtwoord beveiligd deel van je site herhaaldelijk wordt aangevallen, kun je daarvoor een sectie [nginx-http-auth] in het bestand jail.local gebruiken.

[nginx-http-auth]
enabled = true

We kunnen ook een sectie genaamd [nginx-botsearch] toevoegen om verzoeken tegen te houden naar mappen of locaties die niet bestaan.

[nginx-badbots]
enabled  = true

Er zijn ook andere Nginx jails, maar die worden niet voorgeconfigureerd met Fail2Ban geleverd. Ze moeten handmatig aangemaakt worden en de meeste kunnen gebaseerd zijn op de Apache jails waar Fail2Ban mee geleverd wordt.

Fail2Ban Filters en Failregexs

Er is nog een instelling in de Fail2Ban configuratie die filters heet. Filters bepalen of een regel in het logbestand wijst op een mislukte authenticatie.

De filterwaarde in het configuratiebestand is een verwijzing naar een bestand in de map /etc/fail2ban/filter.d waarvan de extensie .conf verwijderd is.

Je kunt zien wat voor filters er zijn door de directory te bekijken.

$ ls /etc/fail2ban/filter.d

Je ziet er 2 logbestanden voor Nginx in staan; nginx-badbots.conf en nginx-http-auth.conf.

Deze configuratiebestanden gebruiken Reguliere uitdrukkingen(regex) om logbestanden te ontleden. Deze worden Failregexs genoemd. Je kunt ze aanpassen of nieuwe filters maken door je eigen reguliere expressies te schrijven. We zullen deze reguliere expressies niet diepgaand behandelen omdat ze buiten het bereik van deze tutorial vallen.

Controleer Fail2Ban Logs en Firewall

Je kunt de status van Fail2Ban controleren door systemctl te gebruiken zoals eerder vermeld.

$ sudo systemctl status fail2ban

Om iets meer details te krijgen, kun je het journalctl commando gebruiken.

$ sudo journalctl -b -u fail2ban

Je kunt ook fail2ban-client gebruiken om de status van fail2ban-server of en individuele jail op te vragen.

$ sudo fail2ban-client status
$ sudo fail2ban-client status jail_name

Je kunt ook het logbestand van Fail2ban opvragen.

$ sudo tail -F /var/log/fail2ban.log

Je kunt een lijst maken van de huidige regels die voor iptables zijn ingesteld.

$ sudo iptables -L

Je kunt ook de iptables regels opnoemen in een formaat dat de commando's weergeeft die nodig zijn om die regels in te schakelen.

$ sudo iptables -S

Conclusie

Dit is het einde van onze handleiding over het installeren en instellen van Fail2Ban op een Fedora 33 of CentOS 8 gebaseerde server. Als je vragen hebt, stel ze dan in de reacties hieronder.