Option reverse proxy en frontal : IP réelle des clients (poc_trusted_proxies), exemple Traefik
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
0e5426b7c3
commit
17d9ff4b29
3 files changed
+33
No files matched your search
@@ -248,6 +248,29 @@ poc_allowed_sources: ["203.0.113.10"] # IP autorisées sur les sites de poc_re
|
||||
|
||||
La restriction par IP est une règle ModSecurity par site (id 10002) qui laisse passer le challenge ACME. Le client de test est toujours autorisé. Ajoutez `shop` à `poc_restricted_sites` pour ne pas exposer Juice Shop à tout Internet.
|
||||
|
||||
### Derrière un reverse proxy existant (Traefik)
|
||||
|
||||
Si 80/443 sont déjà pris par un Traefik, il termine le TLS public (ses propres certificats Let's Encrypt) et relaie vers le WAF en HTTPS (certificat auto-signé du PoC) : garder `poc_tls: selfsigned` et déclarer son IP dans `poc_trusted_proxies` pour que BunkerWeb voie l'IP réelle des clients (sinon un bannissement viserait Traefik, donc tout le monde). Exemple de configuration dynamique Traefik (fichier) :
|
||||
|
||||
```yaml
|
||||
http:
|
||||
routers:
|
||||
bwpoc:
|
||||
rule: "Host(`www.lab.naoned.net`) || Host(`shop.lab.naoned.net`) || Host(`api.lab.naoned.net`) || Host(`bwui.lab.naoned.net`)"
|
||||
entryPoints: [websecure]
|
||||
service: bwpoc
|
||||
tls: { certResolver: letsencrypt }
|
||||
services:
|
||||
bwpoc:
|
||||
loadBalancer:
|
||||
passHostHeader: true
|
||||
serversTransport: bwpoc-insecure
|
||||
servers: [{ url: "https://192.168.200.155:443" }]
|
||||
serversTransports:
|
||||
bwpoc-insecure:
|
||||
insecureSkipVerify: true
|
||||
```
|
||||
|
||||
## Exploitation
|
||||
|
||||
```bash
|
||||
|
||||
@@ -16,6 +16,11 @@ poc_tls: selfsigned
|
||||
poc_letsencrypt_email: ""
|
||||
poc_letsencrypt_staging: false # true pour tester sans consommer les quotas Let's Encrypt
|
||||
|
||||
# Reverse proxy en frontal (Traefik, HAProxy...) qui termine le TLS public et relaie vers
|
||||
# le WAF (https://<waf>:443, certificat auto-signé à accepter côté proxy) : ses IP, pour
|
||||
# que BunkerWeb prenne l'IP réelle du client dans X-Forwarded-For (bans, limites, listes).
|
||||
poc_trusted_proxies: [] # ex. ["192.168.200.10"]
|
||||
|
||||
# --- Exposition publique ------------------------------------------------
|
||||
# Sites réservés à certaines IP sources (403 pour les autres, sauf challenge ACME).
|
||||
# Le client de test du PoC est toujours autorisé. Liste vide = pas de restriction.
|
||||
|
||||
@@ -28,6 +28,11 @@ bw_global_settings:
|
||||
LETS_ENCRYPT_CHALLENGE: "http"
|
||||
USE_LETS_ENCRYPT_STAGING: "{{ 'yes' if poc_letsencrypt_staging | bool else 'no' }}"
|
||||
AUTO_REDIRECT_HTTP_TO_HTTPS: "yes"
|
||||
# IP réelle du client derrière un reverse proxy (poc_trusted_proxies)
|
||||
USE_REAL_IP: "{{ 'yes' if poc_trusted_proxies | length > 0 else 'no' }}"
|
||||
REAL_IP_FROM: "{{ poc_trusted_proxies | join(' ') if poc_trusted_proxies | length > 0 else '192.168.0.0/16 172.16.0.0/12 10.0.0.0/8' }}"
|
||||
REAL_IP_HEADER: "X-Forwarded-For"
|
||||
REAL_IP_RECURSIVE: "yes"
|
||||
# WAF : ModSecurity + OWASP CRS v4 actifs partout (défaut BunkerWeb)
|
||||
USE_MODSECURITY: "yes"
|
||||
USE_MODSECURITY_CRS: "yes"
|
||||
|
||||
Reference in new issue
Block a user