Abusive HTTP Watch to lekki daemon OpenBSD, który śledzi access-log webserwera w czasie rzeczywistym, wykrywa złośliwe HTTP-probes na podstawie kuratowanego zbioru tokenów i przenosi źródłowe IP do pliku, który może być bezpośrednio konsumowany przez firewall (np. pf). W produkcyjnym użyciu do zabezpieczania webshopów.
| Cecha | Wartość |
|---|---|
| Wersja | 2.1.2 |
| Platforma | OpenBSD (integracja RC-Script) |
| Język | Perl 5 (tylko moduły standardowe) |
| Obszar użycia | Hardening webshopów |
| Status | Produkcyjnie w użyciu |
flowchart LR
A[Logi webserwera] --> B[Pattern-Match]
B --> C{"Próg osiągnięty?"}
C -->|Tak| D[Reguła blokująca PF]
C -->|Nie| A
D --> E[(Tabela blokad)]
E -->|TTL wygasł| F[Auto-Release]
Webshopy i produkcyjne strony internetowe są nieustannie automatycznie skanowane pod kątem podatności — exploity PHP, login-probes WordPress, lookupy /etc/passwd, path-traversal, SQLi, null-byte-injections. Te probes pozostawiają wyraźny wzorzec tokenów w access-logu, niezależnie od kodu HTTP-status.
Abusive HTTP Watch czyta log ciągle, sprawdza każdą linię przeciwko precyzyjnemu zbiorowi tokenów i zapisuje IP z powtórnymi trafieniami do append-only blocklisty, która może być bezpośrednio podpięta do tabel pf OpenBSD, dyrektyw Apache Require lub list deny nginx.
Zbiór tokenów adresuje klasy ataków, które udowodniono występują w produkcyjnych logach — celowo konserwatywne, aby uniknąć false-positives.
allow_url_include, auto_prepend_file, php://input, eval(wp-admin, wp-login.php i warianty../.. oraz częste kodowania.env, .git, .svn, id_rsa, /etc/passwdcgi-bin, ?cmd=, =shell, eval(or 1=1 i konserwatywne wariantyback=, także URL-encoded%00 w URIpos > size) i czysto przejmuje bez utraty danych.203.0.113.0/24, 2001:db8::/32).request, user-agent i opcjonalnie referrer. Referrer-scope jest domyślnie wyłączony, by zapobiec drive-by-blocks przez obce strony.flock(LOCK_EX) przy zapisie, in-memory-dedup zapobiega duplikatom również po restarcie./etc/abusive_http_whitelist z pojedynczymi IP lub CIDR, które zawsze są przepuszczane.MIN_HITS trafieniach (domyślnie 3) IP jest zapisywane do blocklisty — chroni przed przypadkowymi singletonami.tag, facility, prio konfigurowalne przez Env) dla akcji added i komunikatów diagnostycznych.W pełni sterowane przez zmienne środowiskowe — bez konieczności zmian w kodzie.
| Zmienna | Cel | Domyślne |
|---|---|---|
ABUSIVE_FAMILY | Filtrowanie rodziny IP (v4/v6/any) | any |
ABUSIVE_MIN_HITS | Próg trafień przed blokadą | 3 |
ABUSIVE_SCOPE | Pola do matchingu (request,ua,referrer) | request,ua |
ABUSIVE_REFERRER_DOMAINS | Dozwolone hosty referrera | — |
ABUSIVE_SYSLOG_TAG | Tag syslog | abusive_http_watch |
ABUSIVE_SYSLOG_FACILITY | Facility syslog | daemon |
ABUSIVE_SYSLOG_PRIO | Priorytet syslog | notice |
ABUSIVE_DEBUG | Aktywacja outputów debug | 0 |
Celowo minimalistyczny — tylko narzędzia OpenBSD bordmittel i moduły standardowe Perla.
| Komponent | Rola |
|---|---|
OpenBSD rc.d | Daemon-Lifecycle (start/stop/reload) |
| Perl 5 | Runtime — stdlib-only (Fcntl, IO::Handle, Sys::Syslog, Socket) |
pf | Konsument firewall blocklisty (tabela <abusive>) |
syslogd | Centralna agregacja eventów |
newsyslog | Log-rotation — transparentnie obsługiwana przez watcher |
Abusive HTTP Watch — Wersja 2.1.2 · daemon OpenBSD rc.d · w produkcyjnym użyciu u webshopów · ~380 SLOC Pure Perl