2026-01-19 15:06:34 +03:00
|
|
|
# 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:
|
|
|
|
|
|
2026-01-19 21:00:14 +03:00
|
|
|
- OWASP CRS
|
2026-01-19 15:06:34 +03:00
|
|
|
- Multisite (cavec configuration des CRS par site)
|
|
|
|
|
- Redirection vers nom canonique
|
|
|
|
|
- Rediction HTTP vers HTTPS
|
2026-01-19 21:00:14 +03:00
|
|
|
- Certificats SSL (automatiques via Let's Encrypt et customs)
|
2026-01-19 15:06:34 +03:00
|
|
|
- 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
|
2026-01-19 21:00:14 +03:00
|
|
|
- Mieux tester le configuration des CRS
|
|
|
|
|
- Mode détection sans blocage
|
|
|
|
|
- Filtrage par:
|
|
|
|
|
- méthode HTTP
|
2026-01-19 15:06:34 +03:00
|
|
|
|
2026-01-19 21:00:14 +03:00
|
|
|
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
|
2026-01-19 15:06:34 +03:00
|
|
|
|
|
|
|
|
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
|
2026-01-19 21:00:14 +03:00
|
|
|
- Anti DDoS
|
2026-01-19 15:06:34 +03:00
|
|
|
- Greylist
|
|
|
|
|
- HTML injection
|
|
|
|
|
- Metrics (Elasticsearch + Metabase)
|
|
|
|
|
- Static files et FastCGI pour PHP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Ressources
|
|
|
|
|
|
|
|
|
|
- [Documentation officielle Caddy](https://caddyserver.com/docs/)
|
|
|
|
|
- [Site Officiel de Coraza](https://coraza.io)
|
|
|
|
|
- [Coraza WAF Caddy module](https://github.com/corazawaf/coraza-caddy)
|
|
|
|
|
- [Documentation AWOSP CRS](https://coreruleset.org/docs/)
|
2026-01-19 21:00:14 +03:00
|
|
|
- https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v3.x)
|
2026-01-19 15:06:34 +03:00
|
|
|
|
|
|
|
|
Modules
|
|
|
|
|
- []()
|
|
|
|
|
- []()
|