Abusive HTTP Watch est un daemon OpenBSD léger qui suit en temps
réel le journal d’accès du serveur web, détecte les probes HTTP
malveillantes à partir d’un jeu de tokens curé, et écrit les adresses
IP sources dans un fichier directement consommable par le pare-feu
(par ex. pf). En production active pour protéger des boutiques en ligne.
| Propriété | Valeur |
|---|---|
| Version | 2.1.2 |
| Plateforme | OpenBSD (intégration RC script) |
| Langage | Perl 5 (uniquement bibliothèque standard) |
| Cas d’usage | Durcissement de boutiques en ligne |
| État | En production |
flowchart LR
A[Logs serveur web] --> B[Reconnaissance de motif]
B --> C{"Seuil atteint ?"}
C -->|Oui| D[Règle PF de blocage]
C -->|Non| A
D --> E[(Table de blocage)]
E -->|TTL expiré| F[Libération auto]
Les boutiques en ligne et sites web en production sont en permanence
sondés automatiquement à la recherche de vulnérabilités — exploits PHP,
probes de connexion WordPress, lookups /etc/passwd, traversal,
SQLi, injection de null-byte. Ces probes laissent un motif de tokens
clair dans l’access log, indépendamment du code HTTP retourné.
Abusive HTTP Watch suit le log en continu, évalue chaque ligne contre
un jeu de tokens précis, et écrit les IP avec hits répétés dans une
blocklist append-only qui s’intègre directement aux tables pf
d’OpenBSD, aux directives Require d’Apache ou aux listes deny de nginx.
Le jeu de tokens cible des classes d’attaques qui apparaissent clairement dans les logs de production — délibérément conservateur pour éviter les faux positifs.
allow_url_include, auto_prepend_file, php://input, eval(wp-admin, wp-login.php et variantes../.. et encodages courants.env, .git, .svn, id_rsa, /etc/passwdcgi-bin, ?cmd=, =shell, eval(or 1=1 et variantes conservatricesback= cascadés, y compris URL-encodés%00 dans l’URIpos > size) et se rétablit sans manquer de lignes.203.0.113.0/24, 2001:db8::/32).request, user-agent et optionnellement referrer. Le scope referrer est désactivé par défaut pour éviter les blocages drive-by via des pages tierces.flock(LOCK_EX) à l’écriture, dédup en mémoire empêche les doublons après redémarrages./etc/abusive_http_whitelist accepte IPs uniques ou CIDR toujours laissés passer.MIN_HITS hits (par défaut 3) — protège contre les singletons accidentels.tag, facility, prio configurables via env) pour les actions added et le diagnostic.Entièrement pilotable via variables d’environnement — aucune modification de code requise.
| Variable | Rôle | Défaut |
|---|---|---|
ABUSIVE_FAMILY | Filtre de famille d’IP (v4/v6/any) | any |
ABUSIVE_MIN_HITS | Seuil de hits avant blocage | 3 |
ABUSIVE_SCOPE | Champs à matcher (request,ua,referrer) | request,ua |
ABUSIVE_REFERRER_DOMAINS | Hosts referrer autorisés | — |
ABUSIVE_SYSLOG_TAG | Tag syslog | abusive_http_watch |
ABUSIVE_SYSLOG_FACILITY | Facility syslog | daemon |
ABUSIVE_SYSLOG_PRIO | Priorité syslog | notice |
ABUSIVE_DEBUG | Active le debug | 0 |
Délibérément minimal — uniquement les outils de base OpenBSD et les modules standard de Perl.
| Composant | Rôle |
|---|---|
OpenBSD rc.d | Cycle de vie du daemon (start/stop/reload) |
| Perl 5 | Runtime — stdlib uniquement (Fcntl, IO::Handle, Sys::Syslog, Socket) |
pf | Consommateur firewall de la blocklist (table <abusive>) |
syslogd | Agrégation centrale des événements |
newsyslog | Rotation des logs — gérée de manière transparente par le watcher |
Abusive HTTP Watch — Version 2.1.2 · Daemon rc.d OpenBSD · En production sur des boutiques en ligne · ~380 SLOC Pure Perl