Rolf B: Gründe für meinen Hoster Fail2Ban zu untersagen

Beitrag lesen

Hallo einsiedler,

Fail2Ban scans log files like /var/log/auth.log and bans IP addresses conducting too many failed login attempts. It does this by updating system firewall rules to reject new connections from those IP addresse

Das klingt für mich so, als wäre fail2ban nur auf einem dedizierten Server einsetzbar.

Ein shared hoster hat mehr als einen VHost auf einer Kiste. Und er möchte sich vorbehalten, VHosts nach Bedarf zu verschieben, um die Auslastung des RZ balancieren zu können.

Fail2Ban schießt bei beidem quer. Die Firewall gehört zum Server, nicht zum VHost. Und Fail2Ban ist ein Daemon, der den Server überwacht, nicht einen VHost. D.h. ein Bann einer IP träfe alle VHosts auf dem Server, und der Umzug eines VHosts würde die für ihn gebannten IPs nicht automatisch mitnehmen.

Ich denke, in einer shared hosting Umgebung braucht man andere Tools. Welche auch immer das sind.

Hast Du Lust auf 2FA? Ich hab es noch nicht gemacht, aber es gibt eine TOTP[1]-Library für PHP (https://github.com/lfkeitel/php-totp), mit der Du TOTPs erzeugen kannst. Zusammen mit einer Handy-App wie Authy oder Google Authenticator (da gibt's etliche) kannst Du dann Zweifaktor-Authenfizierung betreiben.

Vorgehen:

Beim Erstellen eines Users:

  • Festlegen eines Usernamens
  • Erzeugen eines Zufallskeys für diesen User (bspw. 16 Bytes) und speichern dieses Zufallskeys für diesen User
  • In der Authenticator-App den Usernamen und Zufallskey hinterlegen.

Beim Anmelden:

  • Eingeben von Username, Passwort und TOTP von der Authenticator App.
  • Am Server:
    • Fehlt das Token, brich gleich ab.
    • Setze ZEIT auf JETZT, setze DELTA auf 0
    • Generiere TOTPs für ZEIT +- DELTA und den User, der sich anmelden will
    • Stimmt eins: Prima
    • Wenn nicht: Erhöhe DELTA um 30s
    • Wenn DELTA nicht zu groß ist, neuer Versuch.

Was "Nicht zu groß" ist, ist Dir überlassen. Heutige Server und Handys sind gut synchron, ich würde bei DELTA > 60s aufhören.

TOTPs gelten nur 30s, da hast Du mit brute force keine Chance. Die Serverlast hast Du natürlich weiterhin. Aber ich bin nicht der Apache-Experte, vielleicht kann man bereits im .htaccess sicherstellen, dass ein bestimmter POST-Parameter vorhanden ist. Das TOTP als Query-Parameter zu übermitteln (dafür wüsste ich, wie man im Apache die Parameterexistenz prüft) ist aber keine Alternative.

Ich glaube, dazu muss ich mal Versuche machen und was ins Wiki schreiben…

Rolf

--
sumpsi - posui - obstruxi

  1. Time-based One Time Password ↩︎