Abusive HTTP Watch

Το 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 — σκόπιμα συντηρητικό για αποφυγή ψευδώς θετικών.

  • Εκμετάλλευση PHPallow_url_include, auto_prepend_file, php://input, eval(
  • WordPress probeswp-admin, wp-login.php και παραλλαγές
  • Path traversal../.. και συνηθισμένα encodings
  • Ευαίσθητα paths.env, .git, .svn, id_rsa, /etc/passwd
  • Προσπάθειες RCE / CGIcgi-bin, ?cmd=, =shell, eval(
  • SQL injectionor 1=1 και συντηρητικές παραλλαγές
  • Probes login-loop — πολλαπλά cascaded back= parameters, συμπεριλαμβανομένων URL-encoded
  • Null-byte injection%00 στο URI

Λειτουργικά χαρακτηριστικά

  • 🔄 Ανθεκτικό σε log rotation — Ανιχνεύει τόσο rotate (αλλαγή inode) όσο και copytruncate (pos > size) και ανακάμπτει χωρίς να χάνει γραμμές.
  • 🌍 Dual stack — Native υποστήριξη IPv4 και IPv6 με whitelisting CIDR (π.χ. 203.0.113.0/24, 2001:db8::/32).
  • 🛡️ Μόνο δημόσιες IPs — Ιδιωτικές διευθύνσεις RFC 1918, link-local, loopback, multicast και shared address space παραλείπονται αυτόματα.
  • 🎯 Scoped matching — Ανά αίτημα, το matching περιορίζεται σε request, user-agent και προαιρετικά referrer. Το referrer scope είναι απενεργοποιημένο εξ ορισμού για αποφυγή drive-by blocks μέσω τρίτων σελίδων.
  • 🔒 Ατομικές ενημερώσεις blocklistflock(LOCK_EX) κατά τη γραφή, in-memory dedup αποτρέπει διπλότυπα μετά από επανεκκινήσεις.
  • 📋 Whitelist με προτεραιότητα/etc/abusive_http_whitelist δέχεται μεμονωμένες IPs ή CIDRs που πάντα περνούν.
  • ⏳ Κατώφλι hits — Μια IP εισέρχεται στη blocklist μόνο μετά από MIN_HITS hits (default 3) — προστατεύει από τυχαίες μεμονωμένες περιπτώσεις.
  • 📡 Ενσωμάτωση syslog — Δομημένα events (tag, facility, prio ρυθμιζόμενα μέσω env) για ενέργειες added και διαγνωστικά.
  • 🛑 Καθαρός τερματισμός — Το SIGTERM παρακολουθείται, ο daemon ολοκληρώνει την τρέχουσα επανάληψη και κλείνει τα handles με τάξη.

Διαμόρφωση

Πλήρως ελεγχόμενη μέσω μεταβλητών περιβάλλοντος — χωρίς αλλαγές κώδικα.

ΜεταβλητήΣκοπός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_TAGTag του syslogabusive_http_watch
ABUSIVE_SYSLOG_FACILITYFacility του syslogdaemon
ABUSIVE_SYSLOG_PRIOΠροτεραιότητα syslognotice
ABUSIVE_DEBUGΕνεργοποίηση debug output0

Τεχνολογικό θεμέλιο

Σκόπιμα μινιμαλιστικό — μόνο εργαλεία βάσης OpenBSD και standard modules της Perl.

ΣυστατικόΡόλος
OpenBSD rc.dΚύκλος ζωής daemon (start/stop/reload)
Perl 5Runtime — μόνο stdlib (Fcntl, IO::Handle, Sys::Syslog, Socket)
pfΚαταναλωτής blocklist firewall (πίνακας <abusive>)
syslogdΚεντρική συγκέντρωση events
newsyslogLog rotation — διαφανής χειρισμός από τον watcher

Γιατί αυτό είναι θέμα CEO

  • 🏷️ Μικροσκοπικό αποτύπωμα συμμόρφωσης — Διαβάζει μόνο υπάρχοντα server logs, γράφει ένα μόνο αρχείο, χωρίς cloud, χωρίς telemetry. GDPR-φιλικό out-of-the-box.
  • 💰 Λειτουργικό κόστος ~0 € — Script ενός αρχείου, χωρίς containers, χωρίς εξαρτήσεις. Η συντήρηση περιορίζεται στο σύνολο tokens, που σπάνια αλλάζει.
  • 🔐 Μείωση επιφάνειας επίθεσης — Επαναλαμβανόμενα ύποπτες IPs εξαφανίζονται από το pool μέσα σε δευτερόλεπτα — οι περισσότεροι επιτιθέμενοι δοκιμάζουν μόνο 3–10 paths πριν περάσουν στην επόμενη IP.
  • 📊 Ελέγξιμο — 381 γραμμές Perl, χωρίς εξωτερικές εξαρτήσεις, κάθε κανόνας token είναι μια σχολιασμένη regex. Code review χωρά σε μία συνεδρία.
  • 🛠️ Κανείς δεν αποκλείεται κατά λάθος — Whitelist με IPv4/IPv6 CIDR και το κατώφλι των 3 hits αποτρέπουν τους bots μηχανών αναζήτησης ή τυχαίες probes από το να προκαλέσουν ζημιά.

Abusive HTTP Watch — Έκδοση 2.1.2 · OpenBSD rc.d daemon · σε παραγωγή σε online καταστήματα · ~380 SLOC Pure Perl