# QuickstartZainstalować, uruchomić, obserwować — w mniej niż dziesięć minut od pierwszej komendy do zablokowanych IP.

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.

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

Daemon 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ł.

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

Plik 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.

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

Debug-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ę:

```sh
cat /var/www/run/abusive_http_hosts
```

Powinieneś 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:

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

Przeładować `pf`:

```sh
doas pfctl -f /etc/pf.conf
```

Tabela 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:

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

Na 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](../operations/) po skrypt). Aktywować i uruchomić:

```sh
doas rcctl enable abusive_http_watch
doas rcctl start abusive_http_watch
```

Daemon 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ć:

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

Liczby 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](../operations/) po troubleshooting.
