Protéger vos applications web avec Caddy et Coraza WAF

Introduction
Un WAF (Web Application Firewall) est un outil essentiel pour protéger vos applications web des attaques courantes comme les injections SQL, les scripts intersites (XSS) ou les attaques par force brute.
Dans ce tutoriel, nous allons configurer Caddy, un serveur web moderne et facile à utiliser, avec le Coraza WAF, basé sur les règles OWASP Core Rule Set (CRS). Vous apprendrez à compiler et configurer Caddy avec Coraza pour une sécurité optimale.
Pourquoi choisir Caddy et Coraza ?
- Caddy : Simple à configurer, gère automatiquement le HTTPS, et permet une intégration rapide avec Coraza.
- Coraza WAF : Puissant et conforme à l’OWASP CRS, il offre une protection avancée contre les vulnérabilités.
- Support en production : À ce jour, Caddy est le seul serveur web compatible avec Coraza en mode production. Les alternatives comme HAProxy, Nginx, Apache ou Traefik sont encore en mode expérimental, preview ou en développement. Pour plus d’information, se référer à la documentation ici.
Ensemble, ils constituent une solution robuste et moderne pour sécuriser vos applications web.
Étape 1 : Installer Caddy
L’installation de la version disponible dans le dépôt Copr n’est pas strictement nécessaire, car elle n’intègre pas le WAF. Cependant, elle crée automatiquement les répertoires par défaut, configure les autorisations nécessaires et met en place le service systemd pour gérer Caddy, ce qui nous évite de le faire manuellement.
Activez le dépôt Copr pour Caddy :
sudo dnf install -y 'dnf-command(copr)' sudo dnf copr enable @caddy/caddyInstallez Caddy
sudo dnf install -y caddyVérifiez l’installation :
caddy version
Étape 2 : Compiler Caddy avec Coraza
Installez Golang et xcaddy :
sudo dnf install -y golang go install github.com/caddyserver/xcaddy/cmd/xcaddy@latestCompilez Caddy avec le module Coraza :
./go/bin/xcaddy build --with github.com/corazawaf/coraza-caddy/v2Remplacez la version installée depuis le dépôt Copr (qui n’intègre pas le WAF) par celle compilée avec Coraza :
sudo cp /usr/bin/caddy /usr/bin/caddy.orig sudo cp -f ./caddy /usr/bin/caddyVérifiez l’intégration de Coraza :
caddy list-modules | grep http.handlers | grep wafExemple de sortie :
http.handlers.waf
Étape 3 : Configurer Coraza
Pour cet exemple, nous définissons une règle de sécurité qui bloque l’accès à la page /admin et renvoie un statut HTTP 403 à chaque tentative. Cela permet de tester les fonctionnalités de Coraza en mode bloquant ici.
Créez le fichier de configuration Coraza :
sudo mkdir /etc/caddy/coraza sudo tee /etc/caddy/coraza/coraza.conf > /dev/null << 'EOF' # Activer les logs d'audit SecAuditEngine On SecAuditLog "/var/log/caddy/coraza.log" # Activer le moteur de règles SecRuleEngine On SecRequestBodyAccess On SecDefaultAction "phase:1,log,deny,status:403" # Règle de test : Bloquer l'accès à /admin SecRule REQUEST_URI "@rx ^/admin" "id:1,phase:1,deny,status:403,log,msg:'Access to admin is forbidden'" EOFCréer les fichiers de log nécessaires :
sudo mkdir -p /var/log/caddy sudo touch /var/log/caddy/coraza.log sudo chown caddy:caddy /var/log/caddy/ -R
Étape 4 : Configurer Caddy avec Coraza
Modifiez le fichier
Caddyfile:sudo tee /etc/caddy/Caddyfile > /dev/null << 'EOF' { debug auto_https off # Cette ligne est nécessaire pour que Coraza fonctionne. order coraza_waf first } https://caddy.systems-it.net { tls /etc/caddy/certs/server.crt /etc/caddy/certs/server.key # Ajouter le plugin Coraza coraza_waf { directives ` # Ajouter la règle que nous avons créé précédemment pour renvoyer un code 403 chaque fois que quelqu'un tente d'accéder au path /admin Include /etc/caddy/coraza/coraza.conf ` } reverse_proxy 127.0.0.1:8080 } EOFFormatez et validez la configuration :
sudo caddy fmt --overwrite /etc/caddy/Caddyfile sudo caddy validate --config /etc/caddy/Caddyfile
Étape 5 : Tester et Dépanner
Redémarrez Caddy :
sudo systemctl restart caddyTestez avec
curl:curl -I -k https://caddy.systems-it.net/adminEn cas de problème SELinux, corrigez les contextes :
sudo semanage fcontext -a -t httpd_log_t "/var/log/caddy(/.*)?" sudo restorecon -R /var/log/caddy
Conclusion
En suivant ce guide, vous avez configuré un reverse proxy sécurisé avec Caddy et Coraza WAF. Cette solution protège efficacement vos applications web tout en restant simple à maintenir. Pour plus de sécurité, surveillez régulièrement les logs et mettez à jour vos outils.
Partagez vos expériences dans les commentaires et rejoignez notre communauté dédiée à la cybersécurité et au DevOps !