Quickstart
Dieser Guide führt durch das Aufsetzen von Abusive HTTP Watch gegen ein echtes Access-Log auf einem OpenBSD-System. Derselbe Ablauf funktioniert mit kleinen Anpassungen auch auf FreeBSD und Linux.
1. Skript installieren
Skript an einen Systempfad legen und ausführbar machen.
doas install -m 0755 abusive_http_watch.pl /usr/local/sbin/abusive_http_watchDer Daemon hat keine externen Perl-Dependencies — nur die
Standardbibliothek (Fcntl, IO::Handle, Sys::Syslog, Socket).
Wenn perl auf dem System ist, läuft das Skript.
2. Runtime-Verzeichnis anlegen
Der Daemon schreibt die Blocklist in eine einzelne Datei. Wähle einen Pfad, von dem deine Firewall lesen wird.
doas mkdir -p /var/www/run
doas chown _www:_www /var/www/runDie Blocklist-Datei (/var/www/run/abusive_http_hosts per Default)
wird beim ersten Lauf angelegt, falls sie nicht existiert.
3. Gegen ein aktuelles Log testen
Bevor du den Daemon ins System einhängst, lass ihn direkt gegen ein Access-Log laufen, um sein Verhalten zu sehen.
ABUSIVE_DEBUG=1 abusive_http_watch /var/www/logs/access.logDie Debug-Ausgabe ([dbg] ip=…, [dbg] token match ip=…,
[dbg] count ip=… N/3) zeigt den Matcher in Echtzeit. Wenn eine IP
die Hit-Schwelle (Default 3) überschreitet, siehst du
[added] <ip> -> /var/www/run/abusive_http_hosts.
Ctrl-C zum Stoppen. Blocklist prüfen:
cat /var/www/run/abusive_http_hostsDu solltest eine kurze IP-Liste sehen — die lautesten Prober im Beobachtungszeitfenster.
4. Firewall an die Blocklist anhängen
Auf OpenBSD eine <abusive>-Tabelle hinzufügen, die aus der Datei
lädt:
table <abusive> persist file "/var/www/run/abusive_http_hosts"
block in quick on egress from <abusive> label abusivepf neu laden:
doas pfctl -f /etc/pf.confDie Tabelle blockt jetzt alles von diesen IPs an der Firewall — keine Webserver-CPU mehr für sie verschwendet.
Damit neue Einträge automatisch übernommen werden, die Tabelle in kurzen Intervallen neu laden. Einfacher Cron:
*/2 * * * * /sbin/pfctl -t abusive -T replace -f /var/www/run/abusive_http_hostsAuf Linux ist das Äquivalent ein nftables-Set oder ipset, das
per ähnlichem Cron aus derselben Datei neu geladen wird.
5. Als Daemon starten
rc.d-Skript installieren (siehe
Betrieb für das
Skript). Aktivieren und starten:
doas rcctl enable abusive_http_watch
doas rcctl start abusive_http_watchDer Daemon folgt dem Log nun fortlaufend und schreibt die Blocklist.
tail -f /var/log/daemon (oder die konfigurierte Syslog-Facility)
zeigt added-Events live.
6. Verifizieren
Ein paar Minuten warten, dann prüfen:
wc -l /var/www/run/abusive_http_hosts
doas pfctl -t abusive -T show | wc -lDie Zahlen sollten übereinstimmen. Wenn ja, bist du fertig — der Daemon läuft, die Blocklist wächst, die Firewall filtert.
Wenn die Blocklist-Datei nach ein, zwei Stunden auf einem öffentlichen Webserver leer bleibt, ist dein Access-Log ungewöhnlich sauber (Glückwunsch) oder der Daemon liest nicht den Pfad, den du denkst. Siehe Betrieb fürs Troubleshooting.