Acest ghid trece prin configurarea Abusive HTTP Watch împotriva unui access log real pe un sistem OpenBSD. Același flux funcționează cu mici adaptări și pe FreeBSD și Linux.

1. Instalează scriptul

Pune scriptul într-o cale de sistem și fă-l executabil.

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

Daemonul nu are dependențe externe de Perl — doar biblioteca standard (Fcntl, IO::Handle, Sys::Syslog, Socket). Dacă perl este pe sistem, scriptul rulează.

2. Creează directorul de runtime

Daemonul scrie blocklista într-un singur fișier. Alege o cale din care va citi firewallul.

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

Fișierul de blocklistă (/var/www/run/abusive_http_hosts implicit) este creat la prima rulare dacă nu există.

3. Testează împotriva unui log actual

Înainte să cuplezi daemonul în sistem, lasă-l să ruleze direct împotriva unui access log pentru a-i vedea comportamentul.

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

Output-ul de debug ([dbg] ip=…, [dbg] token match ip=…, [dbg] count ip=… N/3) arată matcherul în timp real. Când un IP depășește pragul de hit-uri (implicit 3), vezi [added] <ip> -> /var/www/run/abusive_http_hosts.

Ctrl-C pentru a opri. Verifică blocklista:

cat /var/www/run/abusive_http_hosts

Ar trebui să vezi o listă scurtă de IP-uri — cei mai gălăgioși prober din fereastra de observare.

4. Atașează firewallul la blocklistă

Pe OpenBSD adaugă un tabel <abusive> care încarcă din fișier:

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

Reîncarcă pf:

doas pfctl -f /etc/pf.conf

Tabelul blochează acum tot din aceste IP-uri la firewall — nu se mai pierde CPU de server web pe ele.

Pentru ca intrările noi să fie preluate automat, reîncarcă tabelul la intervale scurte. Un cron simplu:

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

Pe Linux echivalentul este un set nftables sau ipset, reîncărcat printr-un cron similar din același fișier.

5. Pornește ca daemon

Instalează scriptul rc.d (vezi Operare pentru script). Activează și pornește:

doas rcctl enable abusive_http_watch
doas rcctl start abusive_http_watch

Daemonul urmărește acum logul continuu și scrie blocklista. tail -f /var/log/daemon (sau facility-ul syslog configurat) arată evenimentele added în timp real.

6. Verifică

Așteaptă câteva minute, apoi verifică:

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

Numerele ar trebui să se potrivească. Dacă da, ai terminat — daemonul rulează, blocklista crește, firewallul filtrează.

Dacă fișierul de blocklistă rămâne gol după o oră-două pe un server web public, fie access logul tău este neobișnuit de curat (felicitări), fie daemonul nu citește calea pe care o crezi. Vezi Operare pentru troubleshooting.