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
Een Fedora 33 of een CentOS 8 gebaseerde server met een niet-root gebruiker met sudo privileges.
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:
/etc/fail2ban/jail.conf
etc/fail2ban/jail.d/*.conf
, alfabetisch/etc/fail2ban/jail.local
/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.