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:
- OWASP CRS
- Multisite (cavec configuration des CRS par site)
- Redirection vers nom canonique
- Rediction HTTP vers HTTPS
- Certificats SSL (automatiques via Let's Encrypt et customs)
- Redirect (SSL et www et autres)
- Filtrage par:
- adresses IP
- réseaux IP
- Antibot par:
- défi JavaScript
- Passive backend checks
- Compression Gzip et zstd
- Mieux tester le configuration des CRS
- Mode détection sans blocage
- Filtrage par:
- méthode HTTP
Urgemment:
- Connexion à consul
- ACL consul
- Changement de format de configuration: Caddyfile -> JSON
- Lire doc. config JSON de Caddy
- Renommer tous les répertoires/utilisateurs caddy -> byow
- Collection Ansible
Fomctionnalités à ajouter:
- Active backend checks
- Antibot par:
- Cookie
- Captcha
- reCAPTCHA
- hCaptcha
- Turnstile
- mCaptcha
- Mise en œuvre d'un cluster Redis (ou Consul) pour le partage de informations entre les WAF d'un cluster
- 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)
- Gestion CORS
- Client cache
- Proxy cache
- Filtrage par pays
- Compression Brotli
- 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
- Reverse scan
- Robots.txt (DarkVisitors API/Community Lists/Custom URLs/Manual Rules)
- Sessions
- Whitelist
- Bad behavior
- Auth
- Anti DDoS
- Greylist
- HTML injection
- Metrics (Elasticsearch + Metabase)
- Static files et FastCGI pour PHP
Ressources
- Documentation officielle Caddy
- Site Officiel de Coraza
- Coraza WAF Caddy module
- Documentation AWOSP CRS
- https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v3.x)
Modules