# QuickstartInstaller, lancer, observer — moins de dix minutes entre la première commande et les IP bloquées.

Ce guide accompagne le lancement d'Abusive HTTP Watch sur un
access log réel d'un système OpenBSD. Le même flux fonctionne sur
FreeBSD et Linux avec de petites adaptations.

## 1. Installer le script

Déposer le script à un emplacement système et le rendre
exécutable.

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

Le daemon n'a aucune dépendance Perl externe — seulement la
bibliothèque standard (`Fcntl`, `IO::Handle`, `Sys::Syslog`,
`Socket`). Si `perl` est sur le système, le script tourne.

## 2. Créer le répertoire runtime

Le daemon écrit la blocklist dans un fichier unique. Choisissez
un chemin que votre pare-feu va lire.

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

Le fichier blocklist (`/var/www/run/abusive_http_hosts` par
défaut) est créé au premier lancement s'il n'existe pas.

## 3. Tester sur un log récent

Avant de relier le daemon au système, le lancer directement sur
un access log pour voir son comportement.

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

La sortie debug (`[dbg] ip=…`, `[dbg] token match ip=…`,
`[dbg] count ip=… N/3`) permet d'observer le matcher en temps
réel. Quand une IP dépasse le seuil de hits (par défaut 3), vous
voyez `[added] <ip> -> /var/www/run/abusive_http_hosts`.

Ctrl-C pour arrêter. Inspecter la blocklist :

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

Vous devriez voir une courte liste d'IP — les sondeurs les plus
bruyants dans la fenêtre observée.

## 4. Câbler le pare-feu sur la blocklist

Sur OpenBSD, ajouter une table `<abusive>` chargée depuis le
fichier :

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

Recharger `pf` :

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

La table bloque maintenant tout depuis ces IP au pare-feu — plus
de CPU serveur web dépensé pour elles.

Pour reprendre les nouveaux entrées automatiquement, recharger la
table sur un intervalle court. Approche cron simple :

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

Sur Linux, l'équivalent est un set `nftables` ou `ipset` rechargé
depuis le même fichier par un cron similaire.

## 5. Lancer comme daemon

Installer le script `rc.d` (voir [Exploitation](../operations/)
pour le script). Activer et démarrer :

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

Le daemon suit maintenant le log en continu et écrit la blocklist.
`tail -f /var/log/daemon` (ou la facility syslog configurée)
montre les événements `added` en direct.

## 6. Vérifier

Attendre quelques minutes, puis :

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

Les chiffres doivent correspondre. Si c'est le cas, c'est terminé
— le daemon tourne, la blocklist croît, le pare-feu filtre.

Si le fichier blocklist reste vide après une ou deux heures sur
un serveur web public, votre access log est anormalement propre
(félicitations) ou le daemon ne lit pas le chemin que vous
pensez. Voir [Exploitation](../operations/) pour le
troubleshooting.
