Abusive HTTP Watch
Abusive HTTP Watch este un daemon OpenBSD ușor care urmărește access-log-ul serverului web în timp real, detectează sondele HTTP rău intenționate pe baza unui set curat de tokenuri și transferă IP-urile sursă într-un fișier care poate fi consumat direct de firewall (de exemplu pf). În utilizare productivă pentru protejarea magazinelor web.
| Caracteristică | Valoare |
|---|---|
| Versiune | 2.1.2 |
| Platformă | OpenBSD (integrare cu RC-script) |
| Limbaj | Perl 5 (doar module standard) |
| Zonă de utilizare | Hardening magazine web |
| Status | Productiv în utilizare |
flowchart LR
A[Loguri server web] --> B[Pattern match]
B --> C{"Prag atins?"}
C -->|Da| D[Regulă PF de block]
C -->|Nu| A
D --> E[(Tabel de block)]
E -->|TTL expirat| F[Auto-release]
Despre ce este vorba
Magazinele web și site-urile productive sunt permanent verificate automat pentru vulnerabilități — exploituri PHP, sonde de login WordPress, lookup-uri /etc/passwd, path traversal, SQLi, injecții de null-byte. Aceste sonde lasă un pattern clar de tokenuri în access-log, independent de codul de status HTTP.
Abusive HTTP Watch citește log-ul continuu, verifică fiecare linie împotriva unui set precis de tokenuri și scrie IP-urile cu trafic repetat într-o blocklistă append-only care se poate cupla direct în tabelele pf OpenBSD, directivele Require Apache sau listele deny nginx.
Categorii de detecție
Setul de tokenuri adresează clase de atac care apar dovedit în loguri productive — deliberat conservator pentru a evita false-positives.
- Exploatare PHP —
allow_url_include,auto_prepend_file,php://input,eval( - Sonde WordPress —
wp-admin,wp-login.phpși variante - Path traversal —
../..plus encoding-uri frecvente - Căi sensibile —
.env,.git,.svn,id_rsa,/etc/passwd - Tentative RCE / CGI —
cgi-bin,?cmd=,=shell,eval( - SQL injection —
or 1=1și variante conservatoare - Sonde login-loop — parametri
back=cascadați de mai multe ori, inclusiv URL-encoded - Null-byte injection —
%00în URI
Funcționalități operaționale
- 🔄 Rezistent la log rotation — recunoaște atât rotate (schimb inode) cât și copytruncate (
pos > size) și preia curat, fără pierderi de date. - 🌍 Dual-stack — suport nativ pentru IPv4 și IPv6 inclusiv whitelist CIDR (de exemplu
203.0.113.0/24,2001:db8::/32). - 🛡️ Doar IP public — adresele RFC1918, link-local, loopback, multicast și shared-address-space sunt sărite automat.
- 🎯 Matching scoped — per cerere, matching-ul este restricționat la
request,user-agentși opționalreferrer. Scope-ul referrer este implicit oprit pentru a preveni drive-by blocks prin pagini străine. - 🔒 Update-uri atomice ale blocklistei —
flock(LOCK_EX)la scriere, dedup in-memory previne intrările duplicate inclusiv la restart. - 📋 Whitelist cu prioritate — fișierul
/etc/abusive_http_whitelistcu IP-uri individuale sau CIDR-uri care sunt mereu lăsate să treacă. - ⏳ Prag de hit-uri — abia după
MIN_HITShituri (default 3) IP-ul este scris pe blocklistă — protejează împotriva singletons accidentale. - 📡 Integrare syslog — evenimente structurate (
tag,facility,prioconfigurabile prin env) pentru acțiuniaddedși mesaje de diagnoză. - 🛑 Shutdown curat — SIGTERM este prins, daemon-ul încheie iterația curentă și închide handle-urile ordonat.
Configurație
Complet controlabil prin variabile de environment — fără modificare de cod.
| Variabilă | Scop | Default |
|---|---|---|
ABUSIVE_FAMILY | filtrare familie IP (v4/v6/any) | any |
ABUSIVE_MIN_HITS | prag de hit-uri înainte de block | 3 |
ABUSIVE_SCOPE | câmpuri de potrivit (request,ua,referrer) | request,ua |
ABUSIVE_REFERRER_DOMAINS | hosts referrer permiși | — |
ABUSIVE_SYSLOG_TAG | tag syslog | abusive_http_watch |
ABUSIVE_SYSLOG_FACILITY | facility syslog | daemon |
ABUSIVE_SYSLOG_PRIO | prioritate syslog | notice |
ABUSIVE_DEBUG | activează output debug | 0 |
Fundament tehnologic
Deliberat minimalist — doar resursele de bord OpenBSD și module standard Perl.
| Componentă | Rol |
|---|---|
OpenBSD rc.d | lifecycle daemon (start/stop/reload) |
| Perl 5 | runtime — doar stdlib (Fcntl, IO::Handle, Sys::Syslog, Socket) |
pf | consumator firewall al blocklistei (tabelul <abusive>) |
syslogd | agregare centrală de evenimente |
newsyslog | log rotation — manipulat transparent de watcher |
De ce este o temă de CEO
- 🏷️ Amprentă mică de compliance — instrumentul accesează doar loguri publice de server, scrie o singură listă, fără cloud, fără telemetrie. Conform RGPD out-of-the-box.
- 💰 Cost operațional ~0 € — script într-un singur fișier, fără containere, fără dependențe. Mentenanța se limitează la setul de tokenuri, care se schimbă rar.
- 🔐 Reducerea suprafeței de atac — IP-urile repetat suspecte dispar în secunde din pool — majoritatea atacatorilor încearcă doar 3–10 căi înainte ca următorul IP să fie la rând.
- 📊 Auditabil — 381 de linii de Perl, fără dependențe externe, fiecare regulă de token vizibilă ca regex comentat. Code review posibil într-o singură sesiune.
- 🛠️ Nimeni nu e blocat din greșeală — whitelist cu CIDR IPv4/IPv6 și pragul de 3 hituri asigură că nici boții de motoare de căutare, nici sondele accidentale nu cauzează daună.
Abusive HTTP Watch — Versiune 2.1.2 · daemon OpenBSD rc.d · productiv în utilizare la magazine web · ~380 SLOC Pure Perl