Αυτός ο οδηγός περιγράφει την εκτέλεση του Abusive HTTP Watch έναντι ενός πραγματικού access log σε σύστημα OpenBSD. Η ίδια ροή λειτουργεί σε FreeBSD και Linux με μικρές προσαρμογές.

1. Εγκατάσταση του script

Τοποθέτηση του script σε μια θέση συστήματος και κάνε το εκτελέσιμο.

doas install -m 0755 abusive_http_watch.pl /usr/local/sbin/abusive_http_watch

Ο daemon δεν έχει εξωτερικές Perl εξαρτήσεις — μόνο τη standard library (Fcntl, IO::Handle, Sys::Syslog, Socket). Αν το perl είναι στο σύστημα, το script τρέχει.

2. Δημιουργία καταλόγου runtime

Ο daemon γράφει τη blocklist σε ένα μόνο αρχείο. Διάλεξε μια διαδρομή που θα διαβάζει το firewall σου.

doas mkdir -p /var/www/run
doas chown _www:_www /var/www/run

Το αρχείο blocklist (/var/www/run/abusive_http_hosts ως προεπιλογή) δημιουργείται κατά την πρώτη εκτέλεση αν δεν υπάρχει.

3. Δοκιμή σε πρόσφατο log

Πριν συνδεθεί ο daemon στο σύστημα, τρέξε τον απευθείας ενάντια σε ένα access log για να δεις τη συμπεριφορά του.

ABUSIVE_DEBUG=1 abusive_http_watch /var/www/logs/access.log

Η debug έξοδος ([dbg] ip=…, [dbg] token match ip=…, [dbg] count ip=… N/3) επιτρέπει την παρατήρηση του matcher σε πραγματικό χρόνο. Όταν μια IP υπερβεί το κατώφλι hits (default 3), εμφανίζεται [added] <ip> -> /var/www/run/abusive_http_hosts.

Ctrl-C για παύση. Έλεγξε τη blocklist:

cat /var/www/run/abusive_http_hosts

Θα έπρεπε να δεις μια σύντομη λίστα IP — τους πιο θορυβώδεις ανιχνευτές στο παρατηρούμενο παράθυρο.

4. Σύνδεση firewall με τη blocklist

Στο OpenBSD, πρόσθεσε έναν πίνακα <abusive> που φορτώνει από το αρχείο:

table <abusive> persist file "/var/www/run/abusive_http_hosts"
block in quick on egress from <abusive> label abusive

Επαναφόρτωση pf:

doas pfctl -f /etc/pf.conf

Ο πίνακας μπλοκάρει τώρα τα πάντα από αυτές τις IP στο firewall — καμία CPU web server δεν ξοδεύεται πια γι’ αυτές.

Για να εισάγονται νέες εγγραφές αυτόματα, επαναφόρτωσε τον πίνακα σε σύντομο διάστημα. Απλή προσέγγιση cron:

*/2 * * * * /sbin/pfctl -t abusive -T replace -f /var/www/run/abusive_http_hosts

Στο Linux, το αντίστοιχο είναι ένα nftables set ή ipset που επαναφορτώνεται από το ίδιο αρχείο μέσω παρόμοιου cron.

5. Εκτέλεση ως daemon

Εγκατάσταση του rc.d script (βλ. Λειτουργία για το script). Ενεργοποίηση και εκκίνηση:

doas rcctl enable abusive_http_watch
doas rcctl start abusive_http_watch

Ο daemon παρακολουθεί τώρα συνεχώς το log και γράφει τη blocklist. Το tail -f /var/log/daemon (ή η διαμορφωμένη facility syslog) δείχνει τα added events ζωντανά.

6. Επαλήθευση

Περίμενε λίγα λεπτά, μετά έλεγξε:

wc -l /var/www/run/abusive_http_hosts
doas pfctl -t abusive -T show | wc -l

Οι αριθμοί πρέπει να συμφωνούν. Αν συμφωνούν, τελείωσες — ο daemon τρέχει, η blocklist μεγαλώνει, το firewall φιλτράρει.

Αν το αρχείο blocklist παραμείνει άδειο μετά από μία ή δύο ώρες σε δημόσιο web server, το access log σου είναι ασυνήθιστα καθαρό (συγχαρητήρια) ή ο daemon δεν διαβάζει τη διαδρομή που νομίζεις. Δες Λειτουργία για troubleshooting.