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]
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.
Setul de tokenuri adresează clase de atac care apar dovedit în loguri productive — deliberat conservator pentru a evita false-positives.
allow_url_include, auto_prepend_file, php://input, eval(wp-admin, wp-login.php și variante../.. plus encoding-uri frecvente.env, .git, .svn, id_rsa, /etc/passwdcgi-bin, ?cmd=, =shell, eval(or 1=1 și variante conservatoareback= cascadați de mai multe ori, inclusiv URL-encoded%00 în URIpos > size) și preia curat, fără pierderi de date.203.0.113.0/24, 2001:db8::/32).request, user-agent și opțional referrer. Scope-ul referrer este implicit oprit pentru a preveni drive-by blocks prin pagini străine.flock(LOCK_EX) la scriere, dedup in-memory previne intrările duplicate inclusiv la restart./etc/abusive_http_whitelist cu IP-uri individuale sau CIDR-uri care sunt mereu lăsate să treacă.MIN_HITS hituri (default 3) IP-ul este scris pe blocklistă — protejează împotriva singletons accidentale.tag, facility, prio configurabile prin env) pentru acțiuni added și mesaje de diagnoză.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 |
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 |
Abusive HTTP Watch — Versiune 2.1.2 · daemon OpenBSD rc.d · productiv în utilizare la magazine web · ~380 SLOC Pure Perl