Introducing Laravel Teapot
Vor ein paar Jahren habe ich über eine einfache Idee geschrieben: Statt riesige fail2ban-RegEx-Filter für jeden obskuren Scanner-Pfad zu pflegen, lässt man die Laravel-Anwendung bei eindeutigem Probe-Traffic einen sehr spezifischen HTTP-Statuscode zurückgeben. fail2ban kann dann anhand dieses Statuscodes die IP bannen.
Jetzt gibt es diesen Ansatz als Paket: aureola/laravel-teapot
Die Idee in einem Absatz
Vulnerability Scanner klopfen oft immer wieder an denselben Türen an: .env, .git, wp-admin und ähnliche Pfade. Das Paket lässt Dich eine Liste von Pfad-Mustern definieren. Wenn eine Anfrage darauf passt, antwortet Laravel mit HTTP 418. Dieser Response landet im Webserver-Log, und fail2ban bannt die IP, sobald es wiederholt 418 sieht.
Wie Laravel Teapot funktioniert
Du definierst Pfad-Muster in
config/teapot.php.Wenn der Request-Pfad passt, antwortet die App mit 418 - umgesetzt über einen Fallback für nicht gematchte URLs.
fail2ban überwacht Dein Access-Log auf 418 und bannt die IP.
Das ist im Kern derselbe Mechanismus wie in meinem Artikel von 2021 - nur eben als wiederverwendbares, testbares Paket statt als Copy-Paste-Anwendungslogik.
Installation und Setup
Installation:
composer require aureola/laravel-teapotConfig veröffentlichen:
php artisan vendor:publish --tag=teapot-configDann trägst Du Deine Muster ein, zum Beispiel:
\.env\.git\/wp-admin
Für fail2ban liegen im Repo fertige Konfigurationen für Nginx und Apache unter fail2ban/ (Filter und Jail-Dateien nach /etc/fail2ban/ kopieren und fail2ban neu starten).
Wann dieser Ansatz sinnvoll ist
Nutze Laravel Teapot, wenn:
Du mehrere Sites auf einem Server betreibst und pro Anwendung unterschiedliche "Trap-Pfade" pflegen willst, ohne eine riesige globale fail2ban-RegEx-Hölle.
Du das Verhalten versioniert, testbar und deploybar haben willst: einmal sauber konfigurieren, dann einfach über App-Updates ausrollen.
Du App-Level-Konfigurationen bevorzugst, statt immer komplexere fail2ban-Filter zu warten.
Nutze (oder priorisiere) klassisches fail2ban, wenn:
Du Standardfälle wie SSH-Bruteforce, Login-Fails, Rate-Limits und ähnliche Muster abdecken willst - dafür gibt es sehr gute, bewährte Jails.
Du Schutz möchtest, der unabhängig von der Anwendungsschicht ist (zum Beispiel, wenn Du schon bannen willst, bevor PHP überhaupt läuft).
Vorteile
Funktioniert sehr gut mit mehreren Sites auf einem Server (unterschiedliche Configs pro Projekt).
Testbar und deploybar: einmal einrichten, dann über die Anwendung aktualisieren.
Einfacher zu warten als komplizierte fail2ban-Filter.
Nachteile und Caveats
Du kannst aus Versehen Googlebot (oder andere legitime Crawler) bannen, wenn auf der Domain früher WordPress lief und alte Links wie
wp-adminnoch angefragt werden. Sei bei breiten Mustern vorsichtig und nutze im Zweifel Allowlisting auf Webserver- oder fail2ban-Ebene.Ein ungewöhnlicher HTTP-Code wie 418 kann manche CDNs, WAFs oder Monitoring-Tools irritieren. Stelle sicher, dass Deine Edge-Schicht damit sauber umgeht und trotzdem korrekt loggt.
Kleine praktische Tipps
Starte mit sehr eindeutigen Mustern wie
\.envund\.git\/, bevor Du breitere Sachen wiewp-admindazu nimmst.Behalte die Access-Logs 1 bis 2 Tage nach dem Rollout im Blick und passe die Muster danach an.
Wenn Du Statamic einsetzt, integriert sich das Paket automatisch, indem es seine Check-Middleware an die Statamic-Web-Middleware-Group hängt.
Noch keine Kommentare vorhanden.