I was hoping Discourse could log invalid login attempts to file, even if it is something you have to configure to do so. Then I could create a custom filter and jail for discourse
I use a centralized fail2ban server. the way it works is all my Containers, Docker images, VMs have a custom ban action:
in fail2ban you specify the action to take in your jail, such as: action = iptables-allports
then all you have to do is edit that action: sudo nano /etc/fail2ban/action.d/iptables-allports.conf
With this setup your container/docker/vm will fail2ban them locally, but it will also relay this information to your central fail2ban server. The central server can also take all collected IPs and make them available as txt banlist such as: https://fail2ban.YourDomain.com/banned.txt
Then you can have your pfsense firewall subscribe to this banlist, and you can even share the list with other pfsense routers. This way if they try breaking in on one application, they get banned from everything. This has worked great for me for years.
And all that I need to implement this for discourse is for discourse to write an entry to a log file when there is an invalid login attempt
The NGINX logs
Occasionally NGINX logs may contain some extra tips, they are located at:
cd /var/discourse
./launcher enter app
cd /var/log/nginx
The files access.log and error.log will be there as well as a bunch of rotated compressed files. Running less access.log.2.gz will automatically decompress and display the logfile for you.
This directory is also available on the host at /var/discourse/shared/standalone/log/var-log/nginx .
Unfortunately, the nginx error.log and access.log files do not log any invalid login attempts.
Hallo @Falco, danke für die Antwort. Ich habe gerade die Protokolle überprüft. Ein Versuch mit korrektem Passwort und ein Versuch mit falschem Passwort sehen für mich gleich aus (200er Antwort):
(Ich habe die IP-Adresse und die Domain bereinigt, der Rest ist unverändert)
Da beide eine 200er-Antwort zurückgeben, können Sie dies nicht für fail2ban verwenden. Sie würden alle Benutzer mit gutem oder schlechtem Passwort sperren.
Twitter verwendet 400 für falsches Passwort, aber Facebook, LinkedIn, Google und Amazon geben 200 zurück. Meiner Meinung nach klingt 200 falsch, aber es scheint die „normale“ Sache zu sein?
Vielleicht können Sie mit einem Plugin beginnen, das sich in diese Methode hier einklinkt
Großartig, danke für die Antwort! Sobald ich etwas Zeit habe, werde ich versuchen, ein Plugin zu erstellen, um diese Informationen zu generieren! (Ich brauche nur die IP-Adresse, die in eine Datei protokolliert wird, wenn jemand versucht, sich mit einem falschen Passwort anzumelden, z. B. ungültiger Anmeldeversuch von IP 10.111.222.33)
Ich schreibe über die Rollen von selbstgemachten Webmastern und reinen Endbenutzern, aber…
Ungültige Anmeldungen sind per Definition ein Fehler 200. Sicher, es kann und sollte ein interner Fehler einer App sein und irgendwann etwas anderes generieren, wie z. B. Fehler 403 plus etwas anderes, wie das Senden eines Wiederherstellungslinks, aber das sollte oder kann nicht sofort passieren.
Fail2ban ist ein schönes Werkzeug, aber wirklich überbewertet. Vergessen wir Docker, weil es alles schwieriger macht, aber allein die Tatsache, dass es die iptables eines VPS umgehen kann, ist für mich wirklich verwirrend. Aber Bots neigen dazu, die IP nach jedem dritten Versuch zu ändern, und das macht Fail2ban bei reinen Brute-Force-Angriffen über die Anmeldung ziemlich zahnlos.
Script-Kiddies sind natürlich eine andere Geschichte. Sie kopieren und fügen alles ein, was sie finden, drehen es und spielen nicht mit IPs herum. Dann kann Fail2ban sie stoppen, auch wenn sie selten etwas Schaden anrichten können, aber die Last erhöhen. Das eigentliche Problem ist die Menge an Script-Kiddies, wenn es eine sofortige Flut gibt.
Aber solange ein VPS eine solche Situation bewältigen kann, spielt es keine Rolle. Jetzt ist 2023 und meistens klopfen diese Arschlöcher an alte Schwachstellen von WordPress auf Discourse-Seiten
Aber wir sollten eine Logik haben, um ständige Anmeldungen zu stoppen, auch wenn es keine alltägliche Bedrohung ist, denke ich.