Το Abusive HTTP Watch είναι ένας ελαφρύς daemon για OpenBSD που
παρακολουθεί σε πραγματικό χρόνο το access log του web server,
ανιχνεύει κακόβουλες HTTP probes με βάση ένα επιμελημένο σύνολο
tokens και γράφει τις IP-διευθύνσεις πηγής σε ένα αρχείο που μπορεί να
καταναλωθεί απευθείας από το firewall (π.χ. pf). Σε ενεργή
παραγωγική χρήση για την προστασία online καταστημάτων.
| Ιδιότητα | Τιμή |
|---|---|
| Έκδοση | 2.1.2 |
| Πλατφόρμα | OpenBSD (ενσωμάτωση RC script) |
| Γλώσσα | Perl 5 (μόνο standard library) |
| Σενάριο χρήσης | Σκλήρυνση online καταστημάτων |
| Κατάσταση | Σε παραγωγή |
flowchart LR
A[Logs webserver] --> B[Pattern match]
B --> C{"Όριο επιτεύχθηκε;"}
C -->|Ναι| D[Κανόνας PF block]
C -->|Όχι| A
D --> E[(Block table)]
E -->|TTL έληξε| F[Auto release]
Τα online καταστήματα και οι παραγωγικοί ιστότοποι ανιχνεύονται
συνεχώς αυτόματα για ευπάθειες — PHP exploits, WordPress login probes,
αναζητήσεις /etc/passwd, path traversal, SQLi, null-byte injection.
Αυτές οι probes αφήνουν ένα ξεκάθαρο μοτίβο tokens στο access log,
ανεξάρτητα από τον HTTP κωδικό κατάστασης.
Το Abusive HTTP Watch ακολουθεί συνεχώς το log, αξιολογεί κάθε γραμμή
έναντι ενός ακριβούς συνόλου tokens και γράφει IPs με επαναλαμβανόμενα
hits σε μια append-only blocklist που συνδέεται απευθείας σε
πίνακες pf του OpenBSD, σε οδηγίες Require του Apache ή σε λίστες
deny του nginx.
Το σύνολο tokens στοχεύει κλάσεις επιθέσεων που αποδεδειγμένα εμφανίζονται στα παραγωγικά logs — σκόπιμα συντηρητικό για αποφυγή ψευδώς θετικών.
allow_url_include, auto_prepend_file, php://input, eval(wp-admin, wp-login.php και παραλλαγές../.. και συνηθισμένα encodings.env, .git, .svn, id_rsa, /etc/passwdcgi-bin, ?cmd=, =shell, eval(or 1=1 και συντηρητικές παραλλαγέςback= parameters, συμπεριλαμβανομένων URL-encoded%00 στο URIpos > size) και ανακάμπτει χωρίς να χάνει γραμμές.203.0.113.0/24, 2001:db8::/32).request, user-agent και προαιρετικά referrer. Το referrer scope είναι απενεργοποιημένο εξ ορισμού για αποφυγή drive-by blocks μέσω τρίτων σελίδων.flock(LOCK_EX) κατά τη γραφή, in-memory dedup αποτρέπει διπλότυπα μετά από επανεκκινήσεις./etc/abusive_http_whitelist δέχεται μεμονωμένες IPs ή CIDRs που πάντα περνούν.MIN_HITS hits (default 3) — προστατεύει από τυχαίες μεμονωμένες περιπτώσεις.tag, facility, prio ρυθμιζόμενα μέσω env) για ενέργειες added και διαγνωστικά.Πλήρως ελεγχόμενη μέσω μεταβλητών περιβάλλοντος — χωρίς αλλαγές κώδικα.
| Μεταβλητή | Σκοπός | Default |
|---|---|---|
ABUSIVE_FAMILY | Φίλτρο οικογένειας IP (v4/v6/any) | any |
ABUSIVE_MIN_HITS | Κατώφλι hits πριν τον αποκλεισμό | 3 |
ABUSIVE_SCOPE | Πεδία προς matching (request,ua,referrer) | request,ua |
ABUSIVE_REFERRER_DOMAINS | Επιτρεπόμενοι referrer hosts | — |
ABUSIVE_SYSLOG_TAG | Tag του syslog | abusive_http_watch |
ABUSIVE_SYSLOG_FACILITY | Facility του syslog | daemon |
ABUSIVE_SYSLOG_PRIO | Προτεραιότητα syslog | notice |
ABUSIVE_DEBUG | Ενεργοποίηση debug output | 0 |
Σκόπιμα μινιμαλιστικό — μόνο εργαλεία βάσης OpenBSD και standard modules της Perl.
| Συστατικό | Ρόλος |
|---|---|
OpenBSD rc.d | Κύκλος ζωής daemon (start/stop/reload) |
| Perl 5 | Runtime — μόνο stdlib (Fcntl, IO::Handle, Sys::Syslog, Socket) |
pf | Καταναλωτής blocklist firewall (πίνακας <abusive>) |
syslogd | Κεντρική συγκέντρωση events |
newsyslog | Log rotation — διαφανής χειρισμός από τον watcher |
Abusive HTTP Watch — Έκδοση 2.1.2 · OpenBSD rc.d daemon · σε παραγωγή σε online καταστήματα · ~380 SLOC Pure Perl