Quickstart
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.
doas install -m 0755 abusive_http_watch.pl /usr/local/sbin/abusive_http_watchLe 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.
doas mkdir -p /var/www/run
doas chown _www:_www /var/www/runLe 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.
ABUSIVE_DEBUG=1 abusive_http_watch /var/www/logs/access.logLa 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 :
cat /var/www/run/abusive_http_hostsVous 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 :
table <abusive> persist file "/var/www/run/abusive_http_hosts"
block in quick on egress from <abusive> label abusiveRecharger pf :
doas pfctl -f /etc/pf.confLa 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 :
*/2 * * * * /sbin/pfctl -t abusive -T replace -f /var/www/run/abusive_http_hostsSur 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
pour le script). Activer et démarrer :
doas rcctl enable abusive_http_watch
doas rcctl start abusive_http_watchLe 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 :
wc -l /var/www/run/abusive_http_hosts
doas pfctl -t abusive -T show | wc -lLes 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 pour le troubleshooting.