Private
Public Access
2
0
Files
bgwaf/README.md
2026-01-20 15:16:28 +03:00

4.0 KiB

BYOW - Build Your Own WAF

Ce rôle Ansible déploie un WAF basé sur Caddy, Coraza et les OWASP Core Security Rules.

Principes

Go

Caddy, Coraza, le module Coraza pour Caddy et l'outil xcaddy sont développés avec le langage Go.

L'outil xcaddy a besoin d'une version récente des outils de développement Go. C'est pourquoi le rôle installe Go depuis le site de téléchargement officiel et non via le gestionnaire de paquets de la distribution Linux.

Go est installé dans le répertoire /usr/local/go-1.25.5/go et un lien symbolique est créé de /usr/local/bin/go vers /usr/local/go-1.25.5/go/bin/go.

Caddy

Caddy est un serveur Web et reverse proxy HTTP puissant et versatile.

Étant développé en Go, son déploiement prend la forme d'un simble binaire exécutable qui contient toutes les librairies requises. Ce programme est construit avec l'outil xcaddy puis copié dans le fichier /usr/local/bin/caddy. La ligne de commande utilisée pour construire ce binaire est enregsitrée dans le fichier /usr/local/bin/.caddy.buil.

Le fichier de configuration de caddy utilise le format Caddyfile. Il est généré automatiquement à partir des paramètres du rôle puis enregistré sous /etc/caddy/Caddyfile.

Coraza

Coraza est directement inclus dans le binaire caddy

Module Coraza pour Caddy

xcaddy

qui permet de lier tous les modules Go requis pour le WAF

Plugins OWASP CRS

(À ne pas confondre avec les plugins Coraza.)

Voir: https://github.com/coreruleset/plugin-registry

  • name: "drupal-rule-exclusions"
  • name: "wordpress-rule-exclusions"
  • name: "nextcloud-rule-exclusions"
  • name: "dokuwiki-rule-exclusions"
  • name: "phpmyadmin-rule-exclusions"
  • name: "roundcube-rule-exclusions"
  • name: "sogo-rule-exclusions"

Paramètres du rôle Ansible

TODO

Fonctionnalités déjà implémentées:

  • Déploiement et configuration avec Ansible
  • Serveurs transient
  • VIP (avec Keepalived)
  • DNS dynamique (via Nomad)
  • Cluster via Nomad
  • OWASP CRS
  • Multisite (avec configuration complète des CRS par site)
  • Alias avec redirection optionnelle vers nom canonique
  • Redirection HTTP vers HTTPS
  • Certificats SSL (personnalisés automatiques via Let's Encrypt)
  • Filtrage (blacklists) par:
    • adresses IP
    • réseaux IP
  • Antibot par:
    • défi JavaScript
  • Passive backend checks
  • Compression Gzip et zstd
  • Mode détection sans blocage par les CRS
  • Filtrage par:
    • méthode HTTP
  • En-têtes de sécurité:
    • HSTS
    • CSP
    • X-Frame-Options
    • X-Content-Type-Options
    • Referrer Policy
    • Permissions Policy
    • Keep Headers
    • Cookie Flags
    • Custom headers
    • suppression d'en-têtes
  • Collecte des logs via OVH LDP

Urgemment:

  • Connexion à consul, ACL consul
  • Collection Ansible
  • Revérifier gestion CORS
  • Active backend checks
  • Correction de la collecte des logs via OVH LDP

Fomctionnalités à ajouter:

  • Rate limiting distribué
  • Antibot par:
    • Cookie
    • Captcha
    • reCAPTCHA
    • hCaptcha
    • Turnstile
    • mCaptcha
  • Filtrage par:
    • rDNS
    • DNSBL
    • ASN
    • User-Agent (robots, crawlers, IA bots)
    • taille
    • URI patterns
    • pays
    • (ip:danmeuk-tor-exit, ua:mitchellkrogza-bad-user-agents, /etc/hapee-1.9/blacklist.acl)
  • Client cache
  • Proxy cache
  • Compression Brotli
  • Reverse scan
  • Robots.txt (DarkVisitors API/Community Lists/Custom URLs/Manual Rules)
  • Gestion des sessions
  • Whitelist
  • Bad behavior
  • Authentification
  • Anti DDoS
  • Greylist
  • HTML injection
  • Metrics (Elasticsearch + Metabase)
  • Static files et FastCGI pour PHP (est-ce une bonne idée ?!)
  • Crowdsec
  • https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list

Ressources

Modules