--- # ===================================================================== # 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 : certificats auto-signés par site (pas d'ACME en labo fermé) GENERATE_SELF_SIGNED_SSL: "yes" 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"