Abusive HTTP Watch ist ein leichter OpenBSD-Daemon, der den
Webserver-Access-Log in Echtzeit verfolgt, bösartige HTTP-Probes anhand
eines kuratierten Token-Sets erkennt und die Quell-IPs in eine Datei
überführt, die direkt von der Firewall (z. B. pf) konsumiert werden
kann. Im produktiven Einsatz zur Absicherung von Webshops.
| Eigenschaft | Wert |
|---|---|
| Version | 2.1.2 |
| Plattform | OpenBSD (RC-Script-Integration) |
| Sprache | Perl 5 (nur Standardmodule) |
| Einsatzgebiet | Webshop-Hardening |
| Status | Produktiv im Einsatz |
flowchart LR
A[Webserver-Logs] --> B[Pattern-Match]
B --> C{"Schwelle erreicht?"}
C -->|Ja| D[PF-Block-Regel]
C -->|Nein| A
D --> E[(Block-Tabelle)]
E -->|TTL abgelaufen| F[Auto-Release]
Web-Shops und produktive Webseiten werden permanent automatisiert nach
Schwachstellen abgeklopft — PHP-Exploits, WordPress-Login-Probes,
/etc/passwd-Lookups, Path-Traversal, SQLi, Null-Byte-Injektionen.
Diese Probes hinterlassen ein klares Token-Muster im Access-Log,
unabhängig vom HTTP-Status-Code.
Abusive HTTP Watch liest den Log fortlaufend, prüft jede Zeile gegen
ein präzises Token-Set und schreibt IPs mit wiederholten Treffern in
eine Append-Only-Blocklist, die sich direkt in OpenBSDs pf-Tabellen,
Apache-Require-Direktiven oder nginx-deny-Listen einhängen lässt.
Das Token-Set adressiert Angriffsklassen, die in produktiven Logs nachweislich vorkommen — bewusst konservativ, um False-Positives zu vermeiden.
allow_url_include, auto_prepend_file, php://input, eval(wp-admin, wp-login.php und Varianten../.. sowie häufige Encodings.env, .git, .svn, id_rsa, /etc/passwdcgi-bin, ?cmd=, =shell, eval(or 1=1 und konservative Variantenback=-Parameter, auch URL-encoded%00 in URIpos > size) und übernimmt sauber ohne Datenverlust.203.0.113.0/24, 2001:db8::/32).request, user-agent und optional referrer beschränkt. Referrer-Scope ist standardmäßig aus, um Drive-by-Blocks über fremde Seiten zu verhindern.flock(LOCK_EX) beim Schreiben, In-Memory-Dedup verhindert Doppeleinträge auch bei Neustart./etc/abusive_http_whitelist mit einzelnen IPs oder CIDRs, die immer durchgelassen werden.MIN_HITS Treffern (Standard 3) wird die IP in die Blocklist geschrieben — schützt vor versehentlichen Singletons.tag, facility, prio per Env konfigurierbar) für added-Aktionen und Diagnose-Meldungen.Vollständig über Umgebungsvariablen steuerbar — keine Code-Änderung nötig.
| Variable | Zweck | Default |
|---|---|---|
ABUSIVE_FAMILY | IP-Familie filtern (v4/v6/any) | any |
ABUSIVE_MIN_HITS | Treffer-Schwelle vor Blocken | 3 |
ABUSIVE_SCOPE | Felder zum Matchen (request,ua,referrer) | request,ua |
ABUSIVE_REFERRER_DOMAINS | Erlaubte Referrer-Hosts | — |
ABUSIVE_SYSLOG_TAG | Syslog-Tag | abusive_http_watch |
ABUSIVE_SYSLOG_FACILITY | Syslog-Facility | daemon |
ABUSIVE_SYSLOG_PRIO | Syslog-Priorität | notice |
ABUSIVE_DEBUG | Debug-Ausgaben aktivieren | 0 |
Bewusst minimalistisch — nur OpenBSD-Bordmittel und Perl-Standardmodule.
| Komponente | Rolle |
|---|---|
OpenBSD rc.d | Daemon-Lifecycle (start/stop/reload) |
| Perl 5 | Runtime — stdlib-only (Fcntl, IO::Handle, Sys::Syslog, Socket) |
pf | Firewall-Konsument der Blocklist (Tabelle <abusive>) |
syslogd | Zentrale Event-Aggregation |
newsyslog | Log-Rotation — vom Watcher transparent gehandhabt |
Abusive HTTP Watch — Version 2.1.2 · OpenBSD-rc.d-Daemon · Produktiv im Webshop-Einsatz · ~380 SLOC Pure Perl