Neulich kam die Frage in Folge des Beitrags fail2ban: Übersichtlich? Übersichtlich! wie man eigentlich fail2ban für Jitsi (bzw. prosody) einrichtet. Die Frage ist nicht nur in Zeiten von Corona berechtigt – hat jedoch derzeit gerade aufgrund der häufig genutzten Webmeetings eine ganz besondere Wichtigkeit erlangt. Nun gut, dann mal eben rasch drauf geschaut.
Das ganze läuft bei mir hier auf Ubuntu 20.04. Ggf. muss man den ein oder anderen Pfad anpassen. Wie gehabt ändert das aber nichts am Wesen der ganzen Sache hier.
Somit Datei Nummer 1 die bearbeitet werden muss: /etc/fail2ban/filter.d/prosody-auth.local
[Definition] failregex = Failed authentication attempt \(not-authorized\) for user .* from IP: <HOST> ignoreregex =
Datei Nummer 2 ist /etc/fail2ban/jail.d/prosody.local
# Prosody/Jitsi [prosody] enabled = true filter = prosody-auth logpath = /var/log/prosody/prosody.log maxretry = 5
Fail2ban ist soweit eigentlich ganz übersichtlich. Der Filter besteht lediglich aus einem einfachen regulären Ausdruck, die Definition des Jails führt wie gewohnt Filter und Logdatei zusammen. Die meisten sonst noch benötigten Einstellungen stammen bei mir aus der globalen Vorlage.
Fehlt noch einer: Jitsi bzw. prosody muss man dazu bringen genau diese Informationen tatsächlich ins Log zu schreiben. Das tut er normalerweise nicht. Somit Datei Nummer 3 die zu bearbeiten ist: /etc/prosody/prosody.cfg.lua
modules_enabled = { -- Hier die ganzen Module wie gehabt stehen lassen und lediglich dafür sorgen, dass folgende Zeile darin zusätzlich vorkommt: "log_auth"; }
Das war es. Nachdem beide Dienste neu gestartet wurden bzw. Ihre Konfig neu eingelesen haben schreibt Jitsi bzw. prosody in einem für fail2ban verständlichen Format auf sobald die Authentifizierung des Moderators gescheitert ist. Der Rest ist gewohnt leichtes Spiel für fail2ban.
Wie ich auf die Idee gekommen bin dies auf diese Art und Weise zu lösen? Naja, steht im Handbuch von prosody drin: https://modules.prosody.im/mod_log_auth.html. Hier sollte man halt darauf achten, dass das für prosody ohne Jitsi gilt. Ggf. muss man die Ports anpassen. Oder so wie ich in der [DEFAULT]
Sektion banaction = route
setzen. Dann sind die Ports egal 😉