fail2ban
Deze pagina is vertaald door PageTurner AI (beta). Niet officieel goedgekeurd door het project. Een fout gevonden? Probleem melden →
Fail2ban is een softwareframework voor inbraakpreventie dat servers beschermt tegen brute-force-aanvallen. Het werkt door logbestanden (bijv. /var/log/auth.log, /var/log/apache/access.log, etc.) te monitoren op specifieke vermeldingen en op basis daarvan scripts uit te voeren.
Jellyfin genereert logbestanden die door Fail2ban kunnen worden gemonitord om brute-force-aanvallen op je systeem te voorkomen.
Vereisten
-
Jellyfin toegankelijk via extern netwerk
-
Fail2ban geïnstalleerd en actief
-
Weten waar de Jellyfin-logbestanden zijn opgeslagen: standaard
/var/log/jellyfin/voor desktop en/config/log/voor dockercontainers. -
Logniveau van Jellyfin ingesteld op
Info(mislukte authenticatiepogingen worden niet gelogd bijError). Deze instelling vind je inlogging.json
Stap één: de jail aanmaken
Je moet een jail voor Fail2ban aanmaken. Als je Ubuntu gebruikt en nano als editor, voer dan uit:
sudoedit /etc/fail2ban/jail.d/jellyfin.local
Voeg dit toe aan het nieuwe bestand, waarbij je /path_to_logs vervangt door het pad naar bovenstaande logbestanden, bijv. /var/log/jellyfin/:
[jellyfin]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = jellyfin
maxretry = 3
bantime = 86400
findtime = 43200
logpath = /path_to_logs/log_*.log
Sla op en verlaat nano.
Let op:
-
Als Jellyfin in een dockercontainer draait, voeg dan het volgende toe aan het
jellyfin.local-bestand:action = iptables-allports[name=jellyfin, chain=DOCKER-USER] -
Als je Jellyfin op een niet-standaardpoort draait, verander dan de poort van
80,443naar de relevante poort, bijvoorbeeld8096,8920
Stap twee: het filter aanmaken
Het filter bevat regels die Fail2ban gebruikt om mislukte authenticatiepogingen te identificeren. Maak het filter aan door uit te voeren:
sudoedit /etc/fail2ban/filter.d/jellyfin.conf
Plak:
[Definition]
failregex = ^.*Authentication request for .* has been denied \(IP: "<ADDR>"\)\.
Sla op en sluit af, laad vervolgens Fail2ban opnieuw:
sudo systemctl restart fail2ban
Controleer of fail2ban actief is:
sudo systemctl status fail2ban
Stap drie: testen
Als je minstens één mislukte authenticatiepoging hebt, kun je deze nieuwe jail testen met fail2ban-regex:
sudo fail2ban-regex /path_to_logs/log_*.log /etc/fail2ban/filter.d/jellyfin.conf --print-all-matched
Geavanceerde Fail2Ban-installatie: Doorsturen en beheren van bans op een upstream proxyserver
Voor verbeterde beveiliging kan Fail2Ban IP-bans op een upstream reverse proxyserver beheren in plaats van rechtstreeks op de Jellyfin-server. Deze opstelling blokkeert kwaadwillende IP's dichter bij het netwerkingangspunt, wat ook andere services via dezelfde proxy ten goede kan komen.
Deze handleiding biedt een configuratie om Fail2Ban in te stellen voor het beheren van IP-bans op een upstream reverse proxyserver via Dynamic Chains, waarbij elke Fail2Ban-jail zijn eigen iptables-keten op de upstream-server aanmaakt en beheert.
Veronderstellingen
-
Fail2Ban is geïnstalleerd op je lokale server (waar Jellyfin draait).
-
iptables is geconfigureerd op de upstream-server.
Stap één: SSH-sleutelauthenticatie instellen
Zorg dat de Fail2Ban-server via SSH kan inloggen op de upstream-server zonder wachtwoord. Dit is essentieel voor het automatiseren van het IP-ban- en unban-proces.
Vervang <upstream-server-ip> door het daadwerkelijke IP-adres van je upstream-server.
-
Genereer SSH-sleutel (indien nog niet gebeurd):
ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa -
Kopieer de SSH-sleutel naar de upstream-server:
ssh-copy-id -i /root/.ssh/id_rsa.pub root@<upstream-server-ip> -
SSH-toegang testen:
Controleer of de SSH-verbinding werkt zonder wachtwoordinvoer:
ssh -i /root/.ssh/id_rsa root@<upstream-server-ip>
Stap twee: Fail2Ban configureren voor dynamische ketens
-
Het Fail2Ban-actiebestand aanmaken:
Maak op de Fail2Ban-server een nieuw actiebestand aan:
sudo nano /etc/fail2ban/action.d/proxy-iptables-dynamic.confPlak de volgende configuratie, die dynamisch
iptables-ketens op de upstream-server per jail aanmaakt, beheert en verwijdert:Vergeet niet
<upstream-server-ip>te vervangen door het daadwerkelijke IP-adres van je upstream-server.[Definition]
# Option: actionban
# 1. Create the chain if it doesn't exist
# 2. Add the banned IP to the dynamic chain based on the jail name
# 3. Log the event
actionban = ssh -i /root/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@<upstream-server-ip> \
'iptables -N f2b-<name> 2>/dev/null || true; \
iptables -C INPUT -j f2b-<name> 2>/dev/null || iptables -I INPUT -j f2b-<name>; \
iptables -I f2b-<name> 1 -s <ip> -j DROP' && \
echo "Banned <ip> from jail <name> via upstream proxy" >> /var/log/fail2ban.log
# Option: actionunban
# 1. Remove the banned IP from the dynamic chain
# 2. Remove the chain if it becomes empty (cleanup)
# 3. Log the event
actionunban = ssh -i /root/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@<upstream-server-ip> \
'iptables -D f2b-<name> -s <ip> -j DROP; \
if ! iptables -L f2b-<name> | grep -q "DROP"; then \
iptables -D INPUT -j f2b-<name>; \
iptables -F f2b-<name>; \
iptables -X f2b-<name>; \
fi' && \
echo "Unbanned <ip> from jail <name> via upstream proxy and cleaned up chain if empty" >> /var/log/fail2ban.logSla na wijzigingen het bestand op en sluit het.
-
Fail2Ban-jails updaten voor dynamische ketenactie:
Open je jail-configuratiebestand (doorgaans
/etc/fail2ban/jail.local):sudo nano /etc/fail2ban/jail.localVoeg voor elke jail die je via de upstream-proxy wilt beheren de actieregel toe of wijzig deze naar proxy-iptables-dynamic. Voorbeeldconfiguratie voor twee jails:
[jellyfin]
enabled = true
filter = jellyfin
logpath = /path/to/jellyfin/log
maxretry = 3
bantime = 3600
action = proxy-iptables-dynamic
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
action = proxy-iptables-dynamicSla na wijzigingen het bestand op en sluit het.
Stap drie: Proxy-IP's toevoegen aan Jellyfin
-
Proxy-IP's verzamelen
Omdat je een proxyserver gebruikt, moet Jellyfin de juiste IP-adressen in logs registreren voor fail2ban.
Afhankelijk van je hostingopstelling kunnen deze IP-reeksen komen van interne Docker-IP's, HAProxy of andere services.
Jellyfin accepteert IP's met subnetmaskers zoals
172.18.0.1/24. Je hebt een komma-gescheiden lijst hiervan nodig. -
Proxies toevoegen aan Jellyfin
Open je Jellyfin-dashboard, ga naar
Advanced->Networkingen scroll naarKnown proxies.Voer je komma-gescheiden lijst met proxy-IP-reeksen in. Herstart de Jellyfin-server zoals aangegeven.
Stap vier: Fail2Ban opnieuw opstarten en de configuratie testen
-
Fail2Ban opnieuw opstarten:
Na het aanbrengen van de configuratiewijzigingen start je Fail2Ban opnieuw op om de nieuwe instellingen toe te passen:
sudo systemctl restart fail2ban -
Controleer de status van de jail:
Verifieer de status van je jails om zeker te weten dat ze correct werken:
sudo fail2ban-client status jellyfin -
Test een ban:
Activeer een ban door ongeldige inlogpogingen uit te voeren of door handmatig een IP te verbannen. Bijvoorbeeld:
sudo fail2ban-client set jellyfin banip 192.168.1.100 -
Controleer op de upstream-server:
Controleer of het IP verbannen is in de bijbehorende jail-keten ('f2b-jail-name') op de upstream-server:
ssh root@<upstream-server-ip> "iptables -L f2b-jellyfin" -
Test het opheffen van de ban:
Om het opheffen van de ban te testen, hef je handmatig het IP-verbod op:
sudo fail2ban-client set jellyfin unbanip 192.168.1.100 -
Deblokkering verifiëren:
Controleer of het IP verwijderd is uit de bijbehorende jail-keten ('f2b-jail-name'):
ssh root@<upstream-server-ip> "iptables -L f2b-jellyfin"
Stap vijf: Logs monitoren
Houd het Fail2Ban-logboek in de gaten om er zeker van te zijn dat acties correct worden uitgevoerd:
tail -f /var/log/fail2ban.log
Dit logboek toont berichten wanneer een IP wordt verbannen of vrijgegeven, zodat je kunt bevestigen dat de configuratie werkt zoals verwacht.