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
Versiune2.1.2
PlatformăOpenBSD (integrare cu RC-script)
LimbajPerl 5 (doar module standard)
Zonă de utilizareHardening magazine web
StatusProductiv î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 PHPallow_url_include, auto_prepend_file, php://input, eval(
  • Sonde WordPresswp-admin, wp-login.php și variante
  • Path traversal../.. plus encoding-uri frecvente
  • Căi sensibile.env, .git, .svn, id_rsa, /etc/passwd
  • Tentative RCE / CGIcgi-bin, ?cmd=, =shell, eval(
  • SQL injectionor 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țional referrer. Scope-ul referrer este implicit oprit pentru a preveni drive-by blocks prin pagini străine.
  • 🔒 Update-uri atomice ale blocklisteiflock(LOCK_EX) la scriere, dedup in-memory previne intrările duplicate inclusiv la restart.
  • 📋 Whitelist cu prioritate — fișierul /etc/abusive_http_whitelist cu IP-uri individuale sau CIDR-uri care sunt mereu lăsate să treacă.
  • ⏳ Prag de hit-uri — abia după MIN_HITS hituri (default 3) IP-ul este scris pe blocklistă — protejează împotriva singletons accidentale.
  • 📡 Integrare syslog — evenimente structurate (tag, facility, prio configurabile prin env) pentru acțiuni added ș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ăScopDefault
ABUSIVE_FAMILYfiltrare familie IP (v4/v6/any)any
ABUSIVE_MIN_HITSprag de hit-uri înainte de block3
ABUSIVE_SCOPEcâmpuri de potrivit (request,ua,referrer)request,ua
ABUSIVE_REFERRER_DOMAINShosts referrer permiși
ABUSIVE_SYSLOG_TAGtag syslogabusive_http_watch
ABUSIVE_SYSLOG_FACILITYfacility syslogdaemon
ABUSIVE_SYSLOG_PRIOprioritate syslognotice
ABUSIVE_DEBUGactivează output debug0

Fundament tehnologic

Deliberat minimalist — doar resursele de bord OpenBSD și module standard Perl.

ComponentăRol
OpenBSD rc.dlifecycle daemon (start/stop/reload)
Perl 5runtime — doar stdlib (Fcntl, IO::Handle, Sys::Syslog, Socket)
pfconsumator firewall al blocklistei (tabelul <abusive>)
syslogdagregare centrală de evenimente
newsysloglog 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