Fail2ban ntfy Benachrichtigung einrichten: Push statt E-Mail
Wenn du Fail2ban ntfy Benachrichtigung einrichten möchtest, bist du vermutlich an demselben Punkt angekommen wie ich: E-Mail-Benachrichtigungen funktionieren zwar, aber so richtig hübsch ist das im Alltag nicht. Gerade wenn ein Dienst eine IP sperrt, möchte ich das direkt als Push sehen und nicht erst irgendwann zwischen Newslettern, Monitoring-Mails und dem üblichen Postfach-Rauschen finden.
Deshalb zeige ich dir hier, wie du Fail2ban mit ntfy verbindest. Sobald Fail2ban eine IP bannt oder wieder freigibt, bekommst du eine Benachrichtigung auf dein Smartphone, deinen Desktop oder wohin auch immer du ntfy auslieferst. Kurz gesagt: weniger E-Mail-Gewühle, mehr direkte Rückmeldung. Gefällt mir.
🧩 Voraussetzungen
Ich gehe davon aus, dass Fail2ban bei dir bereits läuft und mindestens ein Jail aktiv ist, zum Beispiel sshd. Falls du Fail2ban noch gar nicht eingerichtet hast, solltest du zuerst mit der Basisinstallation starten und danach hier weitermachen.
Zusätzlich brauchst du auf dem Server curl, weil Fail2ban die Nachricht damit an ntfy schickt.
apt update apt install -y curl fail2ban
Für ntfy brauchst du außerdem eine Ziel-URL. Das kann ein eigenes ntfy-Setup sein oder ein Topic auf einem bestehenden Server. Wenn dein Topic geschützt ist, brauchst du zusätzlich einen Access Token. Und ja, den solltest du später nicht versehentlich in irgendein öffentliches Repository werfen. Frag nicht, warum ich das extra erwähne.
🔔 Fail2ban ntfy Benachrichtigung als Action anlegen
Fail2ban arbeitet für Benachrichtigungen mit sogenannten Actions. Eine Action beschreibt, was bei bestimmten Ereignissen passieren soll. Für ntfy legen wir daher eine eigene Datei unter /etc/fail2ban/action.d/ an.
nano /etc/fail2ban/action.d/ntfy.conf
In diese Datei kommt folgende Konfiguration. Die Platzhalter DEINE_NTFY_URL und DEIN_NTFY_TOKEN ersetzt du natürlich durch deine eigenen Werte.
# Fail2ban ntfy notification action.
# Die Datei sollte nur root lesen können, weil hier ein Token stehen kann.
[Definition]
norestored = 1
actionstart = printf '%%b' "Fail2ban Jail gestartet auf <fq-hostname>\n---\nJail: <name>" | curl -fsS -m 10 \
-H "Authorization: Bearer <ntfy_token>" \
-H "Title: Fail2ban" \
-H "Priority: low" \
--data-binary @- \
"<ntfy_url>" >/dev/null
actionstop = printf '%%b' "Fail2ban Jail gestoppt auf <fq-hostname>\n---\nJail: <name>" | curl -fsS -m 10 \
-H "Authorization: Bearer <ntfy_token>" \
-H "Title: Fail2ban" \
-H "Priority: low" \
--data-binary @- \
"<ntfy_url>" >/dev/null
actionban = printf '%%b' "Fail2ban Ban auf <fq-hostname>\n---\nIP: <ip>\nJail: <name>\nVersuche: <failures>\nSperrdauer: <bantime>s\n\nAbuseIPDB: https://www.abuseipdb.com/check/<ip>" | curl -fsS -m 10 \
-H "Authorization: Bearer <ntfy_token>" \
-H "Title: Fail2ban" \
-H "Priority: high" \
--data-binary @- \
"<ntfy_url>" >/dev/null
actionunban = printf '%%b' "Fail2ban Unban auf <fq-hostname>\n---\nIP: <ip>\nJail: <name>" | curl -fsS -m 10 \
-H "Authorization: Bearer <ntfy_token>" \
-H "Title: Fail2ban" \
-H "Priority: low" \
--data-binary @- \
"<ntfy_url>" >/dev/null
[Init]
ntfy_url = https://ntfy.example.tld/dein-topic
ntfy_token = DEIN_NTFY_TOKEN
Wenn dein ntfy-Topic ohne Authentifizierung läuft, kannst du die Zeilen mit Authorization: Bearer entfernen. Ich würde ein Sicherheits-Topic aber grundsätzlich schützen. Sonst kann dir theoretisch jeder Nachrichten schicken. Das ist selten hilfreich und meistens nur laut.
🔐 Rechte der Action-Datei setzen
Da in der Datei ein Token stehen kann, setze ich die Rechte bewusst restriktiv. Root darf lesen, alle anderen schauen freundlich in die Röhre.
chown root:root /etc/fail2ban/action.d/ntfy.conf chmod 600 /etc/fail2ban/action.d/ntfy.conf
Das ist kein Hexenwerk, aber genau solche Kleinigkeiten machen später den Unterschied. Gerade Tokens gehören nicht unnötig lesbar auf ein System.
⚙️ ntfy in Fail2ban aktivieren
Jetzt muss Fail2ban die neue Action noch verwenden. Ich mache das gerne zentral über eine Datei in /etc/fail2ban/jail.d/. So bleibt die eigentliche Standardkonfiguration unangetastet und du findest deine Anpassungen später wieder.
nano /etc/fail2ban/jail.d/00-notifications.local
Dort ergänzt du im Bereich [DEFAULT] die Action. Wichtig: Wenn du schon eigene Actions nutzt, überschreibe sie nicht blind, sondern übernimm die zusätzliche ntfy-Zeile in deine bestehende Action-Liste.
[DEFAULT]
banaction = nftables
action = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
ntfy[name=%(__name__)s]
Auf neueren Debian- und Ubuntu-Systemen ist nftables oft die passende Wahl. Wenn dein Setup noch mit iptables arbeitet, kannst du bei deiner bestehenden banaction bleiben. Der entscheidende Teil für die Benachrichtigung ist hier die zusätzliche Zeile ntfy[name=%(__name__)s].
🧪 Fail2ban neu laden und testen
Nach der Änderung lädst du Fail2ban neu. Ich prüfe danach immer kurz den Status, damit ich nicht erst beim nächsten echten Ban merke, dass ich mich irgendwo vertippt habe.
fail2ban-client reload fail2ban-client status
Wenn du ein konkretes Jail testen möchtest, kannst du dir zuerst die vorhandenen Jails anzeigen lassen und dann eine Test-IP sperren. Ich nehme dafür gerne eine Dokumentations-IP, damit nicht versehentlich irgendein echter Client ausgesperrt wird.
fail2ban-client status sshd fail2ban-client set sshd banip 203.0.113.10 fail2ban-client set sshd unbanip 203.0.113.10

Spätestens beim manuellen Ban sollte eine ntfy-Benachrichtigung ankommen. Wenn nicht, lohnt sich ein Blick in die Logs.
journalctl -u fail2ban --no-pager -n 100 tail -n 100 /var/log/fail2ban.log
Typische Fehler sind falsche ntfy-URL, ein abgelaufener Token, fehlendes curl oder ein Tippfehler in der Action-Datei. Also die Klassiker. Technik bleibt bodenständig.
🚦 Was du danach erwarten kannst
Mit dieser Konfiguration bekommst du Benachrichtigungen, wenn ein Jail startet oder stoppt, wenn eine IP gebannt wird und wenn sie wieder freigegeben wird. Besonders nützlich finde ich die Ban-Meldung, weil sie direkt die IP, das Jail, die Anzahl der Fehlversuche und einen Link zu AbuseIPDB enthält.
Dadurch siehst du schnell, ob gerade nur das übliche Grundrauschen im Internet vorbeischaut oder ob ein Dienst auffällig viel Aufmerksamkeit bekommt. Und genau dafür mag ich diese Lösung: Sie ist simpel, direkt und macht keine große Show daraus.
🧩 Fazit
Fail2ban und ntfy passen ziemlich gut zusammen. Fail2ban kümmert sich um die Sperren, ntfy bringt dir die Information schnell dahin, wo du sie wirklich bemerkst. Für mich ist das angenehmer als klassische Mail-Benachrichtigungen, vor allem auf Servern, bei denen ich nur kurz wissen möchte: Wurde gerade etwas gebannt? Ja oder nein?
Die Einrichtung ist überschaubar, die Datei bleibt gut lesbar und du kannst das Ganze später problemlos erweitern. Zum Beispiel mit anderen Prioritäten, zusätzlichen Tags oder eigenen Texten pro Jail. Aber für den Anfang reicht diese Variante völlig aus.
👥 Techniverse Community
Lust auf Austausch rund um Matrix, Selfhosting und andere smarte IT-Lösungen?
In der Techniverse Community triffst du Gleichgesinnte, kannst Fragen stellen oder einfach nerdigen Talk genießen. 🚀
👉 Jetzt der Gruppe auf Matrix beitreten
~ Direkte Raumadresse: #community:techniverse.net
👉 Für lockere Gespräche abseits der Kernthemen komm in den Talkraum
~ Direkte Raumadresse: #talk:techniverse.net
Wir freuen uns, wenn du dabei bist!


