Quickstart
Ten przewodnik prowadzi przez ustawienie Abusive HTTP Watch wobec prawdziwego access-loga na systemie OpenBSD. Ten sam przebieg działa z drobnymi adaptacjami także na FreeBSD i Linux.
1. Zainstalować skrypt
Umieścić skrypt w ścieżce systemowej i nadać prawa wykonywania.
doas install -m 0755 abusive_http_watch.pl /usr/local/sbin/abusive_http_watchDaemon nie ma żadnych zewnętrznych zależności Perl — tylko standardowa biblioteka (Fcntl, IO::Handle, Sys::Syslog, Socket). Jeśli perl jest w systemie, skrypt działa.
2. Utworzyć katalog runtime
Daemon pisze blocklistę do pojedynczego pliku. Wybierz ścieżkę, z której twój firewall będzie czytał.
doas mkdir -p /var/www/run
doas chown _www:_www /var/www/runPlik blocklisty (/var/www/run/abusive_http_hosts domyślnie) jest tworzony przy pierwszym uruchomieniu, jeśli nie istnieje.
3. Test wobec aktualnego logu
Zanim podpniesz daemona do systemu, uruchom go bezpośrednio wobec access-loga, aby zobaczyć jego zachowanie.
ABUSIVE_DEBUG=1 abusive_http_watch /var/www/logs/access.logDebug-output ([dbg] ip=…, [dbg] token match ip=…, [dbg] count ip=… N/3) pokazuje matcher w czasie rzeczywistym. Gdy jakieś IP przekroczy próg trafień (domyślnie 3), zobaczysz [added] <ip> -> /var/www/run/abusive_http_hosts.
Ctrl-C, aby zatrzymać. Sprawdzić blocklistę:
cat /var/www/run/abusive_http_hostsPowinieneś zobaczyć krótką listę IP — najgłośniejsze prober-y w obserwowanym oknie czasowym.
4. Podpiąć firewall pod blocklistę
Na OpenBSD dodać tabelę <abusive>, która ładuje się z pliku:
table <abusive> persist file "/var/www/run/abusive_http_hosts"
block in quick on egress from <abusive> label abusivePrzeładować pf:
doas pfctl -f /etc/pf.confTabela teraz blokuje wszystko od tych IP na firewallu — żadne CPU serwera web nie jest już na nie marnowane.
Aby nowe wpisy były automatycznie przejmowane, przeładowywać tabelę w krótkich odstępach. Prosty cron:
*/2 * * * * /sbin/pfctl -t abusive -T replace -f /var/www/run/abusive_http_hostsNa Linuksie odpowiednikiem jest set nftables lub ipset, przeładowywany przez podobny cron z tego samego pliku.
5. Uruchomić jako daemon
Zainstalować skrypt rc.d (patrz
Operacje po skrypt). Aktywować i uruchomić:
doas rcctl enable abusive_http_watch
doas rcctl start abusive_http_watchDaemon teraz ciągle podąża za logiem i pisze blocklistę. tail -f /var/log/daemon (lub skonfigurowana facility syslog) pokazuje na żywo eventy added.
6. Weryfikacja
Poczekać kilka minut, potem sprawdzić:
wc -l /var/www/run/abusive_http_hosts
doas pfctl -t abusive -T show | wc -lLiczby powinny się zgadzać. Jeśli tak, jesteś gotowy — daemon działa, blocklista rośnie, firewall filtruje.
Jeśli plik blocklisty pozostaje pusty po godzinie-dwóch na publicznym serwerze web, twój access-log jest niezwykle czysty (gratulacje) lub daemon nie czyta tej ścieżki, którą myślisz. Patrz Operacje po troubleshooting.