Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
84 lines
3.7 KiB
YAML
84 lines
3.7 KiB
YAML
---
|
|
# =====================================================================
|
|
# Réglages BunkerWeb du PoC
|
|
# Chaque site met en avant un groupe de fonctionnalités (voir README).
|
|
# Noms de paramètres vérifiés sur les plugin.json de BunkerWeb 1.6.17.
|
|
# =====================================================================
|
|
|
|
# Secrets générés au premier lancement et stockés côté contrôleur
|
|
# dans ./credentials (ignoré par git). Remplaçables par ansible-vault.
|
|
bw_db_password: "{{ lookup('ansible.builtin.password', playbook_dir ~ '/../credentials/bw_db_password', chars=['ascii_letters', 'digits'], length=24) }}"
|
|
bw_ui_admin_user: admin
|
|
# La politique de l'UI impose majuscule, minuscule, chiffre et caractère spécial.
|
|
bw_ui_admin_password: "{{ lookup('ansible.builtin.password', playbook_dir ~ '/../credentials/bw_ui_admin_password', chars=['ascii_letters', 'digits'], length=20) }}!Aa9"
|
|
bw_redis_password: "{{ lookup('ansible.builtin.password', playbook_dir ~ '/../credentials/bw_redis_password', chars=['ascii_letters', 'digits'], length=24) }}"
|
|
|
|
# Bannissement court pour pouvoir rejouer les tests (défaut BunkerWeb : 1d)
|
|
bw_ban_time: 5m
|
|
|
|
# Réglages globaux (contexte global ou valeurs par défaut de tous les sites)
|
|
bw_global_settings:
|
|
MULTISITE: "yes"
|
|
DISABLE_DEFAULT_SERVER: "yes" # Host inconnu = connexion fermée (444)
|
|
SERVE_FILES: "no"
|
|
# TLS : auto-signé (labo fermé) ou Let's Encrypt (domaine public), voir poc_tls
|
|
GENERATE_SELF_SIGNED_SSL: "{{ 'yes' if poc_tls == 'selfsigned' else 'no' }}"
|
|
AUTO_LETS_ENCRYPT: "{{ 'yes' if poc_tls == 'letsencrypt' else 'no' }}"
|
|
EMAIL_LETS_ENCRYPT: "{{ poc_letsencrypt_email }}"
|
|
LETS_ENCRYPT_CHALLENGE: "http"
|
|
USE_LETS_ENCRYPT_STAGING: "{{ 'yes' if poc_letsencrypt_staging | bool else 'no' }}"
|
|
AUTO_REDIRECT_HTTP_TO_HTTPS: "yes"
|
|
# WAF : ModSecurity + OWASP CRS v4 actifs partout (défaut BunkerWeb)
|
|
USE_MODSECURITY: "yes"
|
|
USE_MODSECURITY_CRS: "yes"
|
|
MODSECURITY_CRS_VERSION: "4"
|
|
# Bad behavior : 10 codes 4xx en 1 min = bannissement
|
|
USE_BAD_BEHAVIOR: "yes"
|
|
BAD_BEHAVIOR_THRESHOLD: "10"
|
|
BAD_BEHAVIOR_COUNT_TIME: "1m"
|
|
BAD_BEHAVIOR_BAN_TIME: "{{ bw_ban_time }}"
|
|
# Listes noires : listes communautaires + un User-Agent maison, testable à coup sûr
|
|
USE_BLACKLIST: "yes"
|
|
BLACKLIST_USER_AGENT: "PoC-EvilBot"
|
|
# Compression
|
|
USE_GZIP: "yes"
|
|
USE_BROTLI: "yes"
|
|
# Redis : bans et sessions partagés (prêt pour ajouter une 2e instance)
|
|
USE_REDIS: "yes"
|
|
REDIS_HOST: "bw-redis"
|
|
REDIS_PASSWORD: "{{ bw_redis_password }}"
|
|
SEND_ANONYMOUS_REPORT: "no"
|
|
|
|
# Un dictionnaire par site. "upstream" = clé de apps_ports (ou URL complète).
|
|
bw_sites:
|
|
# Vitrine statique : antibot (challenge JavaScript), en-têtes de sécurité, compression
|
|
www:
|
|
upstream: www
|
|
settings:
|
|
USE_ANTIBOT: "javascript"
|
|
LIMIT_REQ_RATE: "10r/s"
|
|
# OWASP Juice Shop : appli volontairement vulnérable, terrain de jeu du WAF CRS
|
|
shop:
|
|
upstream: shop
|
|
settings:
|
|
REVERSE_PROXY_WS: "yes" # socket.io
|
|
LIMIT_REQ_RATE: "30r/s" # SPA Angular, beaucoup d'assets
|
|
COOKIE_FLAGS: "* SameSite=Lax" # l'appli lit certains cookies en JS
|
|
# go-httpbin : API de test pour méthodes, tailles, limites, bad behavior, règle maison
|
|
api:
|
|
upstream: api
|
|
settings:
|
|
ALLOWED_METHODS: "GET|POST|HEAD"
|
|
MAX_CLIENT_SIZE: "1m"
|
|
LIMIT_REQ_RATE: "5r/s"
|
|
# Règle ModSecurity maison : ?poc=attack => 403
|
|
custom_confs:
|
|
MODSEC_poc-rule: >-
|
|
SecRule ARGS:poc "@streq attack"
|
|
"id:10001,phase:2,deny,status:403,log,msg:'PoC BunkerWeb : regle maison'"
|
|
# Interface d'administration de BunkerWeb
|
|
bwui:
|
|
upstream: "http://bw-ui:7000"
|
|
settings:
|
|
USE_TEMPLATE: "ui"
|