321 KiB
Fonctionnalités
Cette section contient la liste complĂšte des paramĂštres pris en charge par BunkerWeb. Si vous nâĂȘtes pas encore familier avec BunkerWeb, commencez par lire la section concepts de la documentation. Suivez ensuite les instructions de votre intĂ©gration pour appliquer les paramĂštres.
ParamĂštres globaux
Prise en charge STREAM â ïž
Le plugin General fournit le cadre de configuration de base de BunkerWeb, vous permettant de dĂ©finir les paramĂštres essentiels qui rĂ©gissent la protection et la distribution de vos services web. Ce plugin fondamental gĂšre des aspects clĂ©s tels que les modes de sĂ©curitĂ©, les valeurs par dĂ©faut du serveur, le comportement de journalisation et les paramĂštres opĂ©rationnels critiques pour lâensemble de lâĂ©cosystĂšme BunkerWeb.
Comment ça marche :
- Au démarrage de BunkerWeb, le plugin General charge et applique vos paramÚtres de configuration principaux.
- Les modes de sécurité sont définis globalement ou par site, déterminant le niveau de protection appliqué.
- Les paramÚtres par défaut du serveur établissent des valeurs de repli pour toute configuration multisite non spécifiée.
- Les paramÚtres de journalisation contrÎlent les informations enregistrées et leur format.
- Ces paramĂštres constituent la base sur laquelle sâappuient tous les autres plugins et fonctionnalitĂ©s de BunkerWeb.
Mode multisite
Lorsque MULTISITE vaut yes, BunkerWeb peut héberger et protéger plusieurs sites web, chacun avec sa propre configuration. Ce mode est utile notamment pour :
- Héberger plusieurs domaines aux configurations distinctes
- Exécuter plusieurs applications avec des exigences de sécurité différentes
- Appliquer des politiques de sécurité adaptées à différents services
En mode multisite, chaque site est identifié par un SERVER_NAME unique. Pour appliquer des paramÚtres spécifiques à un site, préfixez le nom du paramÚtre par le SERVER_NAME principal. Par exemple :
www.example.com_USE_ANTIBOT=captchaactive le CAPTCHA pourwww.example.com.myapp.example.com_USE_GZIP=yesactive la compression GZIP pourmyapp.example.com.
Cette approche garantit que les paramÚtres sont appliqués au bon site dans un environnement multisite.
ParamĂštres multiples
Certains paramĂštres de BunkerWeb supportent plusieurs configurations pour une mĂȘme fonctionnalitĂ©. Pour dĂ©finir plusieurs groupes de paramĂštres, ajoutez un suffixe numĂ©rique au nom du paramĂštre. Par exemple :
REVERSE_PROXY_URL_1=/subdiretREVERSE_PROXY_HOST_1=http://myhost1définissent le premier reverse proxy.REVERSE_PROXY_URL_2=/anotherdiretREVERSE_PROXY_HOST_2=http://myhost2définissent le second reverse proxy.
Ce modĂšle permet de gĂ©rer plusieurs configurations pour des fonctionnalitĂ©s comme les reverse proxies, les ports, ou dâautres paramĂštres nĂ©cessitant des valeurs distinctes selon les cas dâusage.
Modes de sécurité
Le paramÚtre SECURITY_MODE détermine la façon dont BunkerWeb gÚre les menaces détectées. Ce mécanisme flexible vous permet de choisir entre la surveillance et le blocage actif des activités suspectes, selon vos besoins :
detect: Enregistre les menaces potentielles sans les bloquer. Utile pour analyser les faux positifs sans perturber les utilisateurs légitimes.block(par défaut) : Bloque activement les menaces détectées tout en journalisant les incidents pour protéger votre application.
Passer en mode detect aide à identifier et corriger les faux positifs sans impacter les clients légitimes. Une fois ces problÚmes résolus, repassez en mode block pour une protection complÚte.
ParamĂštres de configuration
=== "ParamĂštres principaux"
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
| --------------------- | ----------------- | --------- | -------- | -------------------------------------------------------------------------------------------------------- |
| `SERVER_NAME` | `www.example.com` | multisite | Non | **Domaine principal :** Nom de domaine principal pour ce site. Requis en mode multisite. |
| `BUNKERWEB_INSTANCES` | `127.0.0.1` | global | Non | **Instances BunkerWeb :** Liste des instances BunkerWeb séparées par des espaces. |
| `MULTISITE` | `no` | global | Non | **Sites multiples :** Définir à `yes` pour héberger plusieurs sites avec des configurations différentes. |
| `SECURITY_MODE` | `block` | multisite | Non | **Niveau de sĂ©curitĂ© :** `detect` ou `block` pour contrĂŽler lâapplication de la sĂ©curitĂ©. |
| `SERVER_TYPE` | `http` | multisite | Non | **Type de serveur :** Définit si le serveur est de type `http` ou `stream`. |
=== "ParamĂštres API"
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
| ------------------ | ----------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------- |
| `USE_API` | `yes` | global | Non | **Activer lâAPI :** Active lâAPI pour piloter BunkerWeb. |
| `API_HTTP_PORT` | `5000` | global | Non | **Port de lâAPI :** NumĂ©ro de port dâĂ©coute de lâAPI. |
| `API_HTTPS_PORT` | `5443` | global | Non | **Port HTTPS de lâAPI :** NumĂ©ro de port dâĂ©coute (TLS) de lâAPI. |
| `API_LISTEN_HTTP` | `yes` | global | Non | **Ăcoute HTTP de lâAPI :** Active lâĂ©coute HTTP pour lâAPI. |
| `API_LISTEN_HTTPS` | `no` | global | Non | **Ăcoute HTTPS de lâAPI :** Active lâĂ©coute HTTPS (TLS) pour lâAPI. |
| `API_LISTEN_IP` | `0.0.0.0` | global | Non | **IP dâĂ©coute de lâAPI :** Adresse IP dâĂ©coute de lâAPI. |
| `API_SERVER_NAME` | `bwapi` | global | Non | **Nom de serveur de lâAPI :** Nom de serveur (vhost) pour lâAPI. |
| `API_WHITELIST_IP` | `127.0.0.0/8` | global | Non | **Liste blanche API :** Liste IP/rĂ©seaux autorisĂ©s Ă contacter lâAPI. |
| `API_TOKEN` | | global | Non | **Jeton dâaccĂšs API (optionnel) :** Si dĂ©fini, chaque requĂȘte API doit inclure `Authorization: Bearer <token>`. |
Remarque : pour des raisons dâamorçage, si vous activez `API_TOKEN`, vous devez le dĂ©finir dans lâenvironnement Ă la fois de lâinstance BunkerWeb et du Scheduler. Le Scheduler ajoute automatiquement lâen-tĂȘte `Authorization` quand `API_TOKEN` est prĂ©sent dans son environnement. Sâil nâest pas dĂ©fini, aucun en-tĂȘte nâest envoyĂ© et BunkerWeb nâapplique pas lâauthentification par jeton. Vous pouvez exposer lâAPI en HTTPS en dĂ©finissant `API_LISTEN_HTTPS=yes` (port : `API_HTTPS_PORT`, `5443` par dĂ©faut).
Exemple de test avec curl (remplacez le jeton et lâhĂŽte) :
```bash
curl -H "Host: bwapi" \
-H "Authorization: Bearer $API_TOKEN" \
http://<bunkerweb-host>:5000/ping
curl -H "Host: bwapi" \
-H "Authorization: Bearer $API_TOKEN" \
--insecure \
https://<bunkerweb-host>:5443/ping
```
=== "ParamÚtres réseau et ports"
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
| --------------- | ----------------- | -------- | -------- | -------------------------------------------------------- |
| `HTTP_PORT` | `8080` | global | Oui | **Port HTTP :** Numéro de port pour le trafic HTTP. |
| `HTTPS_PORT` | `8443` | global | Oui | **Port HTTPS :** Numéro de port pour le trafic HTTPS. |
| `USE_IPV6` | `no` | global | Non | **Support IPv6 :** Active la connectivité IPv6. |
| `DNS_RESOLVERS` | `127.0.0.11` | global | Non | **Résolveurs DNS :** Adresses des résolveurs à utiliser. |
=== "ParamĂštres serveur Stream"
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
| ------------------------ | ----------------- | --------- | -------- | --------------------------------------------------------------- |
| `LISTEN_STREAM` | `yes` | multisite | Non | **Ăcoute stream :** Active lâĂ©coute non-ssl (pass-through). |
| `LISTEN_STREAM_PORT` | `1337` | multisite | Oui | **Port stream :** Port dâĂ©coute pour le non-ssl (pass-through). |
| `LISTEN_STREAM_PORT_SSL` | `4242` | multisite | Oui | **Port stream SSL :** Port dâĂ©coute pour le SSL (pass-through). |
| `USE_TCP` | `yes` | multisite | Non | **Ăcoute TCP :** Active lâĂ©coute TCP (stream). |
| `USE_UDP` | `no` | multisite | Non | **Ăcoute UDP :** Active lâĂ©coute UDP (stream). |
=== "ParamĂštres des workers"
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
| ---------------------- | ----------------- | -------- | -------- | --------------------------------------------------------------------------------------- |
| `WORKER_PROCESSES` | `auto` | global | Non | **Processus workers :** Nombre de processus workers. `auto` utilise le nombre de cĆurs. |
| `WORKER_CONNECTIONS` | `1024` | global | Non | **Connexions par worker :** Nombre maximal de connexions par worker. |
| `WORKER_RLIMIT_NOFILE` | `2048` | global | Non | **Limite descripteurs :** Nombre maximal de fichiers ouverts par worker. |
=== "ParamÚtres mémoire"
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
| ------------------------------ | ----------------- | -------- | -------- | ------------------------------------------------------------------------------------- |
| `WORKERLOCK_MEMORY_SIZE` | `48k` | global | Non | **MĂ©moire workerlock :** Taille de lua_shared_dict pour lâinitialisation des workers. |
| `DATASTORE_MEMORY_SIZE` | `64m` | global | Non | **Mémoire datastore :** Taille du datastore interne. |
| `CACHESTORE_MEMORY_SIZE` | `64m` | global | Non | **Mémoire cachestore :** Taille du cache interne. |
| `CACHESTORE_IPC_MEMORY_SIZE` | `16m` | global | Non | **Mémoire cachestore IPC :** Taille du cache interne (IPC). |
| `CACHESTORE_MISS_MEMORY_SIZE` | `16m` | global | Non | **Mémoire cachestore miss :** Taille du cache interne (miss). |
| `CACHESTORE_LOCKS_MEMORY_SIZE` | `16m` | global | Non | **Mémoire cachestore locks :** Taille du cache interne (locks). |
=== "ParamĂštres de journalisation"
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `LOG_FORMAT` | `$host $remote_addr - $request_id $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\"` | global | Non | **Format des logs :** Format utilisĂ© pour les logs dâaccĂšs. |
| `LOG_LEVEL` | `notice` | global | Non | **Niveau de logs :** VerbositĂ© des logs dâerreur. Options : `debug`, `info`, `notice`, `warn`, `error`, `crit`, `alert`, `emerg`. |
| `TIMERS_LOG_LEVEL` | `debug` | global | Non | **Niveau des timers :** Niveau de log pour les timers. Options : `debug`, `info`, `notice`, `warn`, `err`, `crit`, `alert`, `emerg`. |
!!! tip "Bonnes pratiques de journalisation"
- En production, utilisez les niveaux `notice`, `warn` ou `error` pour limiter le volume de logs.
- Pour le dépannage, passez temporairement le niveau à `debug` pour obtenir plus de détails.
=== "ParamĂštres dâintĂ©gration"
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
| ----------------- | ----------------- | --------- | -------- | --------------------------------------------------------------------------------------------------------------- |
| `AUTOCONF_MODE` | `no` | global | Non | **Mode Autoconf :** Active lâintĂ©gration Docker Autoconf. |
| `SWARM_MODE` | `no` | global | Non | **Mode Swarm :** Active lâintĂ©gration Docker Swarm. |
| `KUBERNETES_MODE` | `no` | global | Non | **Mode Kubernetes :** Active lâintĂ©gration Kubernetes. |
| `USE_TEMPLATE` | | multisite | Non | **Utiliser un template :** ModÚle de configuration qui surcharge les valeurs par défaut de certains paramÚtres. |
=== "ParamĂštres Nginx"
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
| ------------------------------- | ----------------- | -------- | -------- | ---------------------------------------------------------------------------- |
| `NGINX_PREFIX` | `/etc/nginx/` | global | Non | **PrĂ©fixe Nginx :** RĂ©pertoire oĂč NGINX va chercher les configurations. |
| `SERVER_NAMES_HASH_BUCKET_SIZE` | | global | Non | **Taille du hash :** Valeur pour la directive server_names_hash_bucket_size. |
Exemples de configuration
=== "Configuration de base (production)"
Configuration standard pour un site de production avec une sécurité stricte :
```yaml
SECURITY_MODE: "block"
SERVER_NAME: "example.com"
LOG_LEVEL: "notice"
```
=== "Mode développement"
Configuration pour un environnement de développement avec journalisation détaillée :
```yaml
SECURITY_MODE: "detect"
SERVER_NAME: "dev.example.com"
LOG_LEVEL: "debug"
```
=== "Configuration multisite"
Configuration pour héberger plusieurs sites :
```yaml
MULTISITE: "yes"
# Premier site
site1.example.com_SERVER_NAME: "site1.example.com"
site1.example.com_SECURITY_MODE: "block"
# Second site
site2.example.com_SERVER_NAME: "site2.example.com"
site2.example.com_SECURITY_MODE: "detect"
```
=== "Configuration serveur Stream"
Configuration pour un serveur TCP/UDP :
```yaml
SERVER_TYPE: "stream"
SERVER_NAME: "stream.example.com"
LISTEN_STREAM: "yes"
LISTEN_STREAM_PORT: "1337"
USE_TCP: "yes"
USE_UDP: "no"
```
Anti DDoS
(PRO)
Prise en charge STREAM â
Provides enhanced protection against DDoS attacks by analyzing and filtering suspicious traffic.
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_ANTIDDOS |
no |
global | non | Enable or disable anti DDoS protection to mitigate high traffic spikes. |
ANTIDDOS_METRICS_DICT_SIZE |
10M |
global | non | Size of in-memory storage for DDoS metrics (e.g., 10M, 500k). |
ANTIDDOS_THRESHOLD |
100 |
global | non | Maximum suspicious requests allowed from a single IP before blocking. |
ANTIDDOS_WINDOW_TIME |
10 |
global | non | Time window (seconds) to detect abnormal request patterns. |
ANTIDDOS_STATUS_CODES |
429 403 444 |
global | non | HTTP status codes treated as suspicious for DDoS analysis. |
ANTIDDOS_DISTINCT_IP |
5 |
global | non | Minimum distinct IP count before enabling anti DDoS measures. |
Antibot
Prise en charge STREAM â
Les attaquants utilisent souvent des outils automatisĂ©s (bots) pour tenter dâexploiter votre site. Pour sâen protĂ©ger, BunkerWeb inclut une fonctionnalitĂ© « Antibot » qui demande aux utilisateurs de prouver quâils sont humains. Si un utilisateur rĂ©ussit le dĂ©fi, il obtient lâaccĂšs Ă votre site. Cette fonctionnalitĂ© est dĂ©sactivĂ©e par dĂ©faut.
Comment ça marche :
- Lorsquâun utilisateur visite votre site, BunkerWeb vĂ©rifie sâil a dĂ©jĂ rĂ©ussi un dĂ©fi antibot.
- Sinon, lâutilisateur est redirigĂ© vers une page de dĂ©fi.
- Lâutilisateur doit complĂ©ter le dĂ©fi (ex. rĂ©soudre un CAPTCHA, exĂ©cuter du JavaScript).
- Si le dĂ©fi est rĂ©ussi, lâutilisateur est redirigĂ© vers la page initialement demandĂ©e et peut naviguer normalement.
Comment lâutiliser
Suivez ces étapes pour activer et configurer Antibot :
- Choisir un type de défi : décidez du mécanisme à utiliser (ex. captcha, hcaptcha, javascript).
- Activer la fonctionnalité : définissez le paramÚtre
USE_ANTIBOTsur le type choisi dans votre configuration BunkerWeb. - Configurer les paramÚtres : ajustez les autres paramÚtres
ANTIBOT_*si nĂ©cessaire. Pour reCAPTCHA, hCaptcha, Turnstile et mCaptcha, crĂ©ez un compte auprĂšs du service choisi et obtenez des clĂ©s API. - Important : assurezâvous que
ANTIBOT_URIest une URL unique de votre site et quâelle nâest pas utilisĂ©e ailleurs.
!!! important "Ă propos du paramĂštre ANTIBOT_URI"
Assurezâvous que ANTIBOT_URI est une URL unique de votre site et quâelle nâest pas utilisĂ©e ailleurs.
!!! warning "Sessions en environnement cluster"
La fonction antibot utilise des cookies pour suivre si un utilisateur a complĂ©tĂ© le dĂ©fi. Si vous exĂ©cutez BunkerWeb en cluster (plusieurs instances), vous devez configurer correctement la gestion des sessions : dĂ©finissez SESSIONS_SECRET et SESSIONS_NAME avec les mĂȘmes valeurs sur toutes les instances BunkerWeb. Sinon, les utilisateurs pourront ĂȘtre invitĂ©s Ă rĂ©pĂ©ter le dĂ©fi. Plus dâinformations sur la configuration des sessions ici.
ParamĂštres communs
Les paramÚtres suivants sont partagés par tous les mécanismes de défi :
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
ANTIBOT_URI |
/challenge |
multisite | non | URL du dĂ©fi : lâURL vers laquelle les utilisateurs sont redirigĂ©s pour complĂ©ter le dĂ©fi. Veillez Ă ce que cette URL ne soit pas utilisĂ©e pour autre chose. |
ANTIBOT_TIME_RESOLVE |
60 |
multisite | non | DĂ©lai du dĂ©fi : temps maximum (en secondes) pour complĂ©ter le dĂ©fi. AuâdelĂ , un nouveau dĂ©fi est gĂ©nĂ©rĂ©. |
ANTIBOT_TIME_VALID |
86400 |
multisite | non | Validité du défi : durée (en secondes) pendant laquelle un défi réussi reste valide. Passé ce délai, un nouveau défi sera requis. |
Exclure du trafic des défis
BunkerWeb permet dâindiquer certains utilisateurs, IP ou requĂȘtes qui doivent contourner totalement le dĂ©fi antibot. Utile pour des services de confiance, rĂ©seaux internes ou des pages Ă laisser toujours accessibles :
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
ANTIBOT_IGNORE_URI |
multisite | non | URL exclues : liste dâexpressions rĂ©guliĂšres dâURI sĂ©parĂ©es par des espaces qui doivent contourner le dĂ©fi. | |
ANTIBOT_IGNORE_IP |
multisite | non | IP exclues : liste dâadresses IP ou de plages CIDR sĂ©parĂ©es par des espaces qui doivent contourner le dĂ©fi. | |
ANTIBOT_IGNORE_RDNS |
multisite | non | rDNS exclu : liste de suffixes de DNS inversés séparés par des espaces qui doivent contourner le défi. | |
ANTIBOT_RDNS_GLOBAL |
yes |
multisite | non | IP publiques uniquement : si yes, ne faire des vérifications rDNS que sur des IP publiques. |
ANTIBOT_IGNORE_ASN |
multisite | non | ASN exclus : liste de numĂ©ros dâASN sĂ©parĂ©s par des espaces qui doivent contourner le dĂ©fi. | |
ANTIBOT_IGNORE_USER_AGENT |
multisite | non | UserâAgents exclus : liste de motifs regex dâUserâAgent sĂ©parĂ©s par des espaces qui doivent contourner le dĂ©fi. | |
ANTIBOT_IGNORE_COUNTRY |
multisite | non | Pays exclus : liste de codes pays ISO 3166-1 alpha-2 séparés par des espaces qui doivent contourner le défi. | |
ANTIBOT_ONLY_COUNTRY |
multisite | non | Pays ciblés : liste de codes pays ISO 3166-1 alpha-2 qui doivent résoudre le défi. Les autres pays sont ignorés. |
!!! note "Comportement des paramÚtres basés sur le pays"
- Lorsque ANTIBOT_IGNORE_COUNTRY et ANTIBOT_ONLY_COUNTRY sont dĂ©finis, la liste dâexclusion est prioritaire : un pays prĂ©sent dans les deux listes contourne le dĂ©fi.
- Les adresses IP privĂ©es ou inconnues contournent le dĂ©fi lorsque ANTIBOT_ONLY_COUNTRY est dĂ©fini, car aucun code pays ne peut ĂȘtre dĂ©terminĂ©.
Exemples :
-
ANTIBOT_IGNORE_URI: "^/api/ ^/webhook/ ^/assets/"Exclut toutes les URI commençant par/api/,/webhook/ou/assets/. -
ANTIBOT_IGNORE_IP: "192.168.1.0/24 10.0.0.1"Exclut le rĂ©seau interne192.168.1.0/24et lâIP spĂ©cifique10.0.0.1. -
ANTIBOT_IGNORE_RDNS: ".googlebot.com .bingbot.com"Exclut les requĂȘtes provenant dâhĂŽtes dont le DNS inversĂ© se termine pargooglebot.comoubingbot.com. -
ANTIBOT_IGNORE_ASN: "15169 8075"Exclut les requĂȘtes des ASN 15169 (Google) et 8075 (Microsoft). -
ANTIBOT_IGNORE_USER_AGENT: "^Mozilla.+Chrome.+Safari"Exclut les requĂȘtes dont le User-Agent correspond au motif regex spĂ©cifiĂ©. -
ANTIBOT_IGNORE_COUNTRY: "US CA"Contourne le dĂ©fi antibot pour les visiteurs situĂ©s aux Ătats-Unis ou au Canada. -
ANTIBOT_ONLY_COUNTRY: "CN RU"Ne dĂ©fie que les visiteurs provenant de Chine ou de Russie. Les requĂȘtes dâautres pays (ou dâadresses IP privĂ©es) contournent le dĂ©fi.
Mécanismes de défi
=== "Cookie"
Le dĂ©fi Cookie est un mĂ©canisme lĂ©ger qui repose sur lâinstallation dâun cookie dans le navigateur de lâutilisateur. Lorsquâun utilisateur accĂšde au site, le serveur envoie un cookie au client. Lors des requĂȘtes suivantes, le serveur vĂ©rifie la prĂ©sence de ce cookie pour confirmer que lâutilisateur est lĂ©gitime. Cette mĂ©thode est simple et efficace pour une protection de base contre les bots sans nĂ©cessiter dâinteraction supplĂ©mentaire de lâutilisateur.
**Comment ça marche :**
1. Le serveur gĂ©nĂšre un cookie unique et lâenvoie au client.
2. Le client doit renvoyer le cookie dans les requĂȘtes suivantes.
3. Si le cookie est manquant ou invalide, lâutilisateur est redirigĂ© vers la page de dĂ©fi.
**ParamÚtres :**
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------- | ------ | --------- | -------- | ----------------------------------------------------------------- |
| `USE_ANTIBOT` | `no` | multisite | non | Activer Antibot : définir sur `cookie` pour activer ce mécanisme. |
=== "JavaScript"
Le défi JavaScript demande au client de résoudre une tùche de calcul en utilisant JavaScript. Ce mécanisme garantit que le client a activé JavaScript et peut exécuter le code requis, ce qui est généralement hors de portée de la plupart des bots.
**Comment ça marche :**
1. Le serveur envoie un script JavaScript au client.
2. Le script effectue une tùche de calcul (par exemple, un hachage) et soumet le résultat au serveur.
3. Le serveur vérifie le résultat pour confirmer la légitimité du client.
**Fonctionnalités clés :**
- Le défi génÚre dynamiquement une tùche unique pour chaque client.
- La tùche de calcul implique un hachage avec des conditions spécifiques (par exemple, trouver un hachage avec un certain préfixe).
**ParamÚtres :**
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------- | ------ | --------- | -------- | --------------------------------------------------------------------- |
| `USE_ANTIBOT` | `no` | multisite | non | Activer Antibot : définir sur `javascript` pour activer ce mécanisme. |
=== "Captcha"
Le défi Captcha est un mécanisme maison qui génÚre des défis basés sur des images, entiÚrement hébergés dans votre environnement BunkerWeb. Il teste la capacité des utilisateurs à reconnaßtre et interpréter des caractÚres aléatoires, garantissant que les bots automatisés sont bloqués efficacement sans dépendre de services externes.
**Comment ça marche :**
1. Le serveur génÚre une image CAPTCHA contenant des caractÚres aléatoires.
2. Lâutilisateur doit saisir les caractĂšres affichĂ©s dans lâimage dans un champ de texte.
3. Le serveur valide la saisie de lâutilisateur par rapport au CAPTCHA gĂ©nĂ©rĂ©.
**Fonctionnalités clés :**
- EntiĂšrement auto-hĂ©bergĂ©, Ă©liminant le besoin dâAPI tierces.
- Les dĂ©fis gĂ©nĂ©rĂ©s dynamiquement assurent lâunicitĂ© pour chaque session utilisateur.
- Utilise un jeu de caractÚres personnalisable pour la génération du CAPTCHA.
**CaractÚres pris en charge :**
Le systÚme CAPTCHA prend en charge les types de caractÚres suivants :
- **Lettres :** Toutes les lettres minuscules (a-z) et majuscules (A-Z)
- **Chiffres :** 2, 3, 4, 5, 6, 7, 8, 9 (exclut 0 et 1 pour éviter toute confusion)
- **CaractĂšres spĂ©ciaux :** ```+-/=%"'&_(),.;:?!§`^ĂĂĂĂĂ€Ă¶ĂŒĂ©''â""â```
Pour obtenir la liste complÚte des caractÚres pris en charge, consultez la [table des caractÚres de la police](https://www.dafont.com/moms-typewriter.charmap?back=theme) utilisée pour le CAPTCHA.
**ParamÚtres :**
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------------- | ------------------------------------------------------ | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `USE_ANTIBOT` | `no` | multisite | non | **Activer Antibot :** définir sur `captcha` pour activer ce mécanisme. |
| `ANTIBOT_CAPTCHA_ALPHABET` | `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ` | multisite | non | **Alphabet du Captcha :** une chaĂźne de caractĂšres Ă utiliser pour gĂ©nĂ©rer le CAPTCHA. CaractĂšres pris en charge : toutes les lettres (a-z, A-Z), les chiffres 2-9 (exclut 0 et 1), et les caractĂšres spĂ©ciaux : ```+-/=%"'&_(),.;:?!§`^ĂĂĂĂĂ€Ă¶ĂŒĂ©''â""â``` |
=== "reCAPTCHA"
reCAPTCHA de Google propose une validation des utilisateurs qui sâexĂ©cute en arriĂšreâplan (v3) pour attribuer un score basĂ© sur le comportement. Un score infĂ©rieur au seuil configurĂ© dĂ©clenchera une vĂ©rification supplĂ©mentaire ou bloquera la requĂȘte. Pour les dĂ©fis visibles (v2), les utilisateurs doivent interagir avec le widget reCAPTCHA avant de continuer.
Il existe dĂ©sormais deux maniĂšres dâintĂ©grer reCAPTCHA :
- La version classique (clés site/secret, point de terminaison de vérification v2/v3)
- La nouvelle version utilisant Google Cloud (ID de projet + clĂ© API). La version classique reste disponible et peut ĂȘtre activĂ©e avec `ANTIBOT_RECAPTCHA_CLASSIC`.
Pour la version classique, obtenez vos clĂ©s de site et secrĂšte depuis la [console dâadministration de Google reCAPTCHA](https://www.google.com/recaptcha/admin).
Pour la nouvelle version, crĂ©ez une clĂ© reCAPTCHA dans votre projet Google Cloud et utilisez lâID du projet ainsi quâune clĂ© API (voir la [console reCAPTCHA de Google Cloud](https://console.cloud.google.com/security/recaptcha)). Une clĂ© de site est toujours requise.
**ParamÚtres :**
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------------------------ | ------ | --------- | -------- | ------------------------------------------------------------------------------------------------------------------- |
| `USE_ANTIBOT` | `no` | multisite | non | Activer Antibot : définir sur `recaptcha` pour activer ce mécanisme. |
| `ANTIBOT_RECAPTCHA_CLASSIC` | `yes` | multisite | non | Utiliser reCAPTCHA classique. Mettre à `no` pour utiliser la nouvelle version basée sur Google Cloud. |
| `ANTIBOT_RECAPTCHA_SITEKEY` | | multisite | non | Clé de site reCAPTCHA. Requise pour les deux versions. |
| `ANTIBOT_RECAPTCHA_SECRET` | | multisite | non | Clé secrÚte reCAPTCHA. Requise pour la version classique uniquement. |
| `ANTIBOT_RECAPTCHA_PROJECT_ID` | | multisite | non | ID de projet Google Cloud. Requis pour la nouvelle version uniquement. |
| `ANTIBOT_RECAPTCHA_API_KEY` | | multisite | non | ClĂ© API Google Cloud utilisĂ©e pour appeler lâAPI reCAPTCHA Enterprise. Requise pour la nouvelle version uniquement. |
| `ANTIBOT_RECAPTCHA_JA3` | | multisite | non | Empreinte TLS JA3 optionnelle à inclure dans les évaluations Enterprise. |
| `ANTIBOT_RECAPTCHA_JA4` | | multisite | non | Empreinte TLS JA4 optionnelle à inclure dans les évaluations Enterprise. |
| `ANTIBOT_RECAPTCHA_SCORE` | `0.7` | multisite | non | Score minimum requis pour passer (sâapplique Ă la v3 classique et Ă la nouvelle version). |
=== "hCaptcha"
Lorsquâil est activĂ©, hCaptcha offre une alternative efficace Ă reCAPTCHA en vĂ©rifiant les interactions des utilisateurs sans reposer sur un mĂ©canisme de score. Il met les utilisateurs au dĂ©fi avec un test simple et interactif pour confirmer leur lĂ©gitimitĂ©.
Pour intĂ©grer hCaptcha avec BunkerWeb, vous devez obtenir les informations dâidentification nĂ©cessaires depuis le tableau de bord hCaptcha sur [hCaptcha](https://www.hcaptcha.com). Ces informations incluent une clĂ© de site et une clĂ© secrĂšte.
**ParamÚtres :**
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------------- | ------ | --------- | -------- | ------------------------------------------------------------------- |
| `USE_ANTIBOT` | `no` | multisite | non | Activer Antibot : définir sur `hcaptcha` pour activer ce mécanisme. |
| `ANTIBOT_HCAPTCHA_SITEKEY` | | multisite | non | Clé site hCaptcha. |
| `ANTIBOT_HCAPTCHA_SECRET` | | multisite | non | Clé secrÚte hCaptcha. |
=== "Turnstile"
Turnstile est un mĂ©canisme de dĂ©fi moderne et respectueux de la vie privĂ©e qui sâappuie sur la technologie de Cloudflare pour dĂ©tecter et bloquer le trafic automatisĂ©. Il valide les interactions des utilisateurs de maniĂšre transparente et en arriĂšre-plan, rĂ©duisant les frictions pour les utilisateurs lĂ©gitimes tout en dĂ©courageant efficacement les bots.
Pour intĂ©grer Turnstile avec BunkerWeb, assurez-vous dâobtenir les informations dâidentification nĂ©cessaires depuis [Cloudflare Turnstile](https://www.cloudflare.com/turnstile).
**ParamÚtres :**
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| --------------------------- | ------ | --------- | -------- | -------------------------------------------------------------------- |
| `USE_ANTIBOT` | `no` | multisite | non | Activer Antibot : définir sur `turnstile` pour activer ce mécanisme. |
| `ANTIBOT_TURNSTILE_SITEKEY` | | multisite | non | Clé site Turnstile (Cloudflare). |
| `ANTIBOT_TURNSTILE_SECRET` | | multisite | non | Clé secrÚte Turnstile (Cloudflare). |
=== "mCaptcha"
mCaptcha est un mĂ©canisme de dĂ©fi CAPTCHA alternatif qui vĂ©rifie la lĂ©gitimitĂ© des utilisateurs en prĂ©sentant un test interactif similaire Ă dâautres solutions antibot. Lorsquâil est activĂ©, il met les utilisateurs au dĂ©fi avec un CAPTCHA fourni par mCaptcha, sâassurant que seuls les utilisateurs authentiques contournent les contrĂŽles de sĂ©curitĂ© automatisĂ©s.
mCaptcha est conçu dans le respect de la vie privĂ©e. Il est entiĂšrement conforme au RGPD, garantissant que toutes les donnĂ©es des utilisateurs impliquĂ©es dans le processus de dĂ©fi respectent des normes strictes de protection des donnĂ©es. De plus, mCaptcha offre la flexibilitĂ© dâĂȘtre auto-hĂ©bergĂ©, permettant aux organisations de garder un contrĂŽle total sur leurs donnĂ©es et leur infrastructure. Cette capacitĂ© dâauto-hĂ©bergement amĂ©liore non seulement la confidentialitĂ©, mais optimise Ă©galement les performances et la personnalisation pour rĂ©pondre aux besoins spĂ©cifiques de dĂ©ploiement.
Pour intĂ©grer mCaptcha avec BunkerWeb, vous devez obtenir les informations dâidentification nĂ©cessaires depuis la plateforme [mCaptcha](https://mcaptcha.org/) ou votre propre fournisseur. Ces informations incluent une clĂ© de site et une clĂ© secrĂšte pour la vĂ©rification.
**ParamÚtres :**
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------------- | --------------------------- | --------- | -------- | ------------------------------------------------------------------- |
| `USE_ANTIBOT` | `no` | multisite | non | Activer Antibot : définir sur `mcaptcha` pour activer ce mécanisme. |
| `ANTIBOT_MCAPTCHA_SITEKEY` | | multisite | non | Clé site mCaptcha. |
| `ANTIBOT_MCAPTCHA_SECRET` | | multisite | non | Clé secrÚte mCaptcha. |
| `ANTIBOT_MCAPTCHA_URL` | `https://demo.mcaptcha.org` | multisite | non | Domaine Ă utiliser pour mCaptcha. |
Reportezâvous aux ParamĂštres communs pour les options supplĂ©mentaires.
Exemples de configuration
=== "Défi Cookie"
```yaml
USE_ANTIBOT: "cookie"
ANTIBOT_URI: "/challenge"
ANTIBOT_TIME_RESOLVE: "60"
ANTIBOT_TIME_VALID: "86400"
```
=== "Défi JavaScript"
```yaml
USE_ANTIBOT: "javascript"
ANTIBOT_URI: "/challenge"
ANTIBOT_TIME_RESOLVE: "60"
ANTIBOT_TIME_VALID: "86400"
```
=== "Défi Captcha"
```yaml
USE_ANTIBOT: "captcha"
ANTIBOT_URI: "/challenge"
ANTIBOT_TIME_RESOLVE: "60"
ANTIBOT_TIME_VALID: "86400"
ANTIBOT_CAPTCHA_ALPHABET: "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
```
Remarque : lâexemple ciâdessus utilise les chiffres 2â9 et toutes les lettres, frĂ©quemment utilisĂ©s pour les CAPTCHA. Vous pouvez personnaliser lâalphabet pour inclure des caractĂšres spĂ©ciaux si nĂ©cessaire.
=== "Défi reCAPTCHA Classique"
Exemple de configuration pour le reCAPTCHA classique (clés site/secret) :
```yaml
USE_ANTIBOT: "recaptcha"
ANTIBOT_RECAPTCHA_CLASSIC: "yes"
ANTIBOT_RECAPTCHA_SITEKEY: "your-site-key"
ANTIBOT_RECAPTCHA_SECRET: "your-secret-key"
ANTIBOT_RECAPTCHA_SCORE: "0.7"
ANTIBOT_URI: "/challenge"
ANTIBOT_TIME_RESOLVE: "60"
ANTIBOT_TIME_VALID: "86400"
```
=== "Défi reCAPTCHA (nouveau)"
Exemple de configuration pour le nouveau reCAPTCHA basé sur Google Cloud (ID de projet + clé API) :
```yaml
USE_ANTIBOT: "recaptcha"
ANTIBOT_RECAPTCHA_CLASSIC: "no"
ANTIBOT_RECAPTCHA_SITEKEY: "your-site-key"
ANTIBOT_RECAPTCHA_PROJECT_ID: "your-gcp-project-id"
ANTIBOT_RECAPTCHA_API_KEY: "your-gcp-api-key"
# Empreintes optionnelles pour améliorer les évaluations Enterprise
# ANTIBOT_RECAPTCHA_JA3: "<empreinte-ja3>"
# ANTIBOT_RECAPTCHA_JA4: "<empreinte-ja4>"
ANTIBOT_RECAPTCHA_SCORE: "0.7"
ANTIBOT_URI: "/challenge"
ANTIBOT_TIME_RESOLVE: "60"
ANTIBOT_TIME_VALID: "86400"
```
=== "Défi hCaptcha"
```yaml
USE_ANTIBOT: "hcaptcha"
ANTIBOT_HCAPTCHA_SITEKEY: "your-site-key"
ANTIBOT_HCAPTCHA_SECRET: "your-secret-key"
ANTIBOT_URI: "/challenge"
ANTIBOT_TIME_RESOLVE: "60"
ANTIBOT_TIME_VALID: "86400"
```
=== "Défi Turnstile"
```yaml
USE_ANTIBOT: "turnstile"
ANTIBOT_TURNSTILE_SITEKEY: "your-site-key"
ANTIBOT_TURNSTILE_SECRET: "your-secret-key"
ANTIBOT_URI: "/challenge"
ANTIBOT_TIME_RESOLVE: "60"
ANTIBOT_TIME_VALID: "86400"
```
=== "Défi mCaptcha"
```yaml
USE_ANTIBOT: "mcaptcha"
ANTIBOT_MCAPTCHA_SITEKEY: "your-site-key"
ANTIBOT_MCAPTCHA_SECRET: "your-secret-key"
ANTIBOT_MCAPTCHA_URL: "https://demo.mcaptcha.org"
ANTIBOT_URI: "/challenge"
ANTIBOT_TIME_RESOLVE: "60"
ANTIBOT_TIME_VALID: "86400"
```
Auth basic
Prise en charge STREAM â
Le plugin Auth Basic fournit une authentification HTTP Basic pour protĂ©ger votre site ou certaines ressources. Les utilisateurs doivent saisir un identifiant et un mot de passe avant dâaccĂ©der au contenu protĂ©gĂ©. Simple Ă mettre en place et largement supportĂ© par les navigateurs.
Comment ça marche :
- Sur une zone protĂ©gĂ©e, le serveur envoie un dĂ©fi dâauthentification.
- Le navigateur affiche une boĂźte de connexion.
- Lâutilisateur saisit ses identifiants, envoyĂ©s au serveur.
- Valides ? AccÚs accordé. Invalides ? Réponse 401 Unauthorized.
Comment lâutiliser
- Activer :
USE_AUTH_BASIC: yes. - Portée :
AUTH_BASIC_LOCATION=sitewide(tout le site) ou un chemin (ex./admin). - Identifiants : configurez
AUTH_BASIC_USERetAUTH_BASIC_PASSWORD(plusieurs paires possibles). - Message : optionnel, ajustez
AUTH_BASIC_TEXT.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_AUTH_BASIC |
no |
multisite | non | Activer lâauthentification Basic. |
AUTH_BASIC_LOCATION |
sitewide |
multisite | non | Portée : sitewide ou un chemin (ex. /admin). |
AUTH_BASIC_USER |
changeme |
multisite | oui | Nom dâutilisateur. Plusieurs paires peuvent ĂȘtre dĂ©finies. |
AUTH_BASIC_PASSWORD |
changeme |
multisite | oui | Mot de passe. Les mots de passe sont hachés avec bcrypt pour une sécurité maximale. |
AUTH_BASIC_TEXT |
Restricted area |
multisite | non | Message affiché dans l'invite d'authentification. |
!!! warning "SĂ©curitĂ©" Les identifiants sont encodĂ©s Base64, pas chiffrĂ©s. Utilisez toujours HTTPS avec lâauthentification Basic.
!!! tip "Plusieurs comptes"
Définissez des paires AUTH_BASIC_USER[_n]/AUTH_BASIC_PASSWORD[_n] pour gérer plusieurs utilisateurs.
Exemples
=== "Tout le site"
```yaml
USE_AUTH_BASIC: "yes"
AUTH_BASIC_LOCATION: "sitewide"
AUTH_BASIC_USER: "admin"
AUTH_BASIC_PASSWORD: "secure_password"
AUTH_BASIC_TEXT: "Admin Access Only"
```
=== "Zone spécifique"
```yaml
USE_AUTH_BASIC: "yes"
AUTH_BASIC_LOCATION: "/admin/"
AUTH_BASIC_USER: "admin"
AUTH_BASIC_PASSWORD: "secure_password"
AUTH_BASIC_TEXT: "Admin Access Only"
```
=== "Utilisateurs multiples"
```yaml
USE_AUTH_BASIC: "yes"
AUTH_BASIC_LOCATION: "sitewide"
AUTH_BASIC_TEXT: "Staff Area"
# Premier utilisateur
AUTH_BASIC_USER: "admin"
AUTH_BASIC_PASSWORD: "admin_password"
# DeuxiĂšme utilisateur
AUTH_BASIC_USER_2: "editor"
AUTH_BASIC_PASSWORD_2: "editor_password"
# TroisiĂšme utilisateur
AUTH_BASIC_USER_3: "viewer"
AUTH_BASIC_PASSWORD_3: "viewer_password"
```
Backup
Prise en charge STREAM â
Le plugin Backup fournit des sauvegardes automatisées pour protéger vos données BunkerWeb. Il crée des sauvegardes réguliÚres selon une planification définie, stockées dans un emplacement dédié, avec rotation automatique et commandes CLI pour gérer manuellement.
Comment ça marche :
- La base est sauvegardée automatiquement selon la fréquence (quotidienne, hebdomadaire, mensuelle).
- Les sauvegardes sont stockées dans un répertoire dédié.
- Les anciennes sauvegardes sont supprimées selon la politique de rétention.
- Vous pouvez créer, lister et restaurer manuellement des sauvegardes.
- Avant toute restauration, un snapshot de lâĂ©tat courant est créé automatiquement.
Comment lâutiliser
- Activation :
USE_BACKUP(activé par défaut). - Planification :
BACKUP_SCHEDULE. - Rétention :
BACKUP_ROTATION. - Emplacement :
BACKUP_DIRECTORY. - CLIÂ : utilisez
bwcli plugin backup.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_BACKUP |
yes |
global | non | Activer les sauvegardes automatiques. |
BACKUP_SCHEDULE |
daily |
global | non | Fréquence : daily, weekly, monthly. |
BACKUP_ROTATION |
7 |
global | non | RĂ©tention : nombre de fichiers Ă conserver. AuâdelĂ , suppression automatique. |
BACKUP_DIRECTORY |
/var/lib/bunkerweb/backups |
global | non | Répertoire de stockage des sauvegardes. |
Interface en ligne de commande
bwcli plugin backup list # Lister
bwcli plugin backup save # Sauvegarde manuelle
bwcli plugin backup save --directory /chemin/perso # Emplacement personnalisé
bwcli plugin backup restore # Restaurer la plus récente
bwcli plugin backup restore /chemin/backup-sqlite-YYYY-MM-DD_HH-MM-SS.zip # Restaurer via fichier
!!! tip "SĂ©curitĂ©" Avant toute restauration, un backup de lâĂ©tat courant est créé automatiquement dans un emplacement temporaire.
!!! warning "Compatibilité bases" Supporte SQLite, MySQL/MariaDB, PostgreSQL. Oracle non pris en charge pour sauvegarde/restauration.
Exemples
=== "Quotidien, rétention 7 jours" (défaut)
```yaml
USE_BACKUP: "yes"
BACKUP_SCHEDULE: "daily"
BACKUP_ROTATION: "7"
BACKUP_DIRECTORY: "/var/lib/bunkerweb/backups"
```
=== "Hebdomadaire, rétention étendue"
```yaml
USE_BACKUP: "yes"
BACKUP_SCHEDULE: "weekly"
BACKUP_ROTATION: "12"
BACKUP_DIRECTORY: "/var/lib/bunkerweb/backups"
```
=== "Mensuel, emplacement personnalisé"
```yaml
USE_BACKUP: "yes"
BACKUP_SCHEDULE: "monthly"
BACKUP_ROTATION: "24"
BACKUP_DIRECTORY: "/mnt/backup-drive/bunkerweb-backups"
```
Backup S3
(PRO)
Prise en charge STREAM â
Automatically backup your data to an S3 bucket
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_BACKUP_S3 |
no |
global | non | Enable or disable the S3 backup feature |
BACKUP_S3_SCHEDULE |
daily |
global | non | The frequency of the backup |
BACKUP_S3_ROTATION |
7 |
global | non | The number of backups to keep |
BACKUP_S3_ENDPOINT |
global | non | The S3 endpoint | |
BACKUP_S3_BUCKET |
global | non | The S3 bucket | |
BACKUP_S3_DIR |
global | non | The S3 directory | |
BACKUP_S3_REGION |
global | non | The S3 region | |
BACKUP_S3_ACCESS_KEY_ID |
global | non | The S3 access key ID | |
BACKUP_S3_ACCESS_KEY_SECRET |
global | non | The S3 access key secret | |
BACKUP_S3_COMP_LEVEL |
6 |
global | non | The compression level of the backup zip file |
Bad behavior
Prise en charge STREAM â
Le plugin Bad Behavior protĂšge votre site en dĂ©tectant et bannissant automatiquement les IP qui gĂ©nĂšrent trop dâerreurs (codes HTTP « mauvais ») sur une pĂ©riode donnĂ©e. Utile contre la force brute, les scrapers, scanners et activitĂ©s malveillantes.
Les attaquants dĂ©clenchent frĂ©quemment des codes « suspects » lors de sondes ou dâexploitation â bien plus quâun utilisateur normal sur une mĂȘme pĂ©riode. En dĂ©tectant ce comportement, BunkerWeb bannit lâIP fautive.
Comment ça marche :
- Le plugin surveille les réponses HTTP.
- Ă chaque code « mauvais » (400, 401, 403, 404, âŠ), le compteur de lâIP augmente.
- AuâdelĂ du seuil et dans la fenĂȘtre configurĂ©e, lâIP est bannie.
- Le bannissement peut ĂȘtre au niveau service (site) ou global (tous les sites).
- Les bans expirent aprÚs la durée configurée (ou sont permanents avec
0).
Comment lâutiliser
- Activation :
USE_BAD_BEHAVIOR(activé par défaut). - Codes à compter :
BAD_BEHAVIOR_STATUS_CODES. - Seuil :
BAD_BEHAVIOR_THRESHOLD. - FenĂȘtre et durĂ©e de ban :
BAD_BEHAVIOR_COUNT_TIME,BAD_BEHAVIOR_BAN_TIME. - Portée :
BAD_BEHAVIOR_BAN_SCOPE(serviceouglobal).
!!! tip "Mode stream"
En mode stream, seul 444 est considéré comme « mauvais ».
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_BAD_BEHAVIOR |
yes |
multisite | non | Activer la détection et le bannissement. |
BAD_BEHAVIOR_STATUS_CODES |
400 401 403 404 405 429 444 |
multisite | non | Codes HTTP considérés « mauvais ». |
BAD_BEHAVIOR_THRESHOLD |
10 |
multisite | non | Seuil de réponses « mauvaises » avant bannissement. |
BAD_BEHAVIOR_COUNT_TIME |
60 |
multisite | non | FenĂȘtre de comptage (secondes). |
BAD_BEHAVIOR_BAN_TIME |
86400 |
multisite | non | Durée du ban en secondes (0 = permanent). |
BAD_BEHAVIOR_BAN_SCOPE |
service |
global | non | Portée du ban : site courant (service) ou global (global). |
!!! warning "Faux positifs" Un seuil/fenĂȘtre trop bas peut bannir des utilisateurs lĂ©gitimes. DĂ©marrez conservateur et ajustez.
Exemples
=== "Défaut"
```yaml
USE_BAD_BEHAVIOR: "yes"
BAD_BEHAVIOR_STATUS_CODES: "400 401 403 404 405 429 444"
BAD_BEHAVIOR_THRESHOLD: "10"
BAD_BEHAVIOR_COUNT_TIME: "60"
BAD_BEHAVIOR_BAN_TIME: "86400"
BAD_BEHAVIOR_BAN_SCOPE: "service"
```
=== "Strict"
```yaml
USE_BAD_BEHAVIOR: "yes"
BAD_BEHAVIOR_STATUS_CODES: "400 401 403 404 405 429 444 500 502 503"
BAD_BEHAVIOR_THRESHOLD: "5"
BAD_BEHAVIOR_COUNT_TIME: "120"
BAD_BEHAVIOR_BAN_TIME: "604800"
BAD_BEHAVIOR_BAN_SCOPE: "global"
```
=== "Tolérant"
```yaml
USE_BAD_BEHAVIOR: "yes"
BAD_BEHAVIOR_STATUS_CODES: "401 403 429"
BAD_BEHAVIOR_THRESHOLD: "20"
BAD_BEHAVIOR_COUNT_TIME: "30"
BAD_BEHAVIOR_BAN_TIME: "3600"
BAD_BEHAVIOR_BAN_SCOPE: "service"
```
=== "Ban permanent"
```yaml
USE_BAD_BEHAVIOR: "yes"
BAD_BEHAVIOR_STATUS_CODES: "400 401 403 404 405 429 444"
BAD_BEHAVIOR_THRESHOLD: "10"
BAD_BEHAVIOR_COUNT_TIME: "60"
BAD_BEHAVIOR_BAN_TIME: "0"
BAD_BEHAVIOR_BAN_SCOPE: "global"
```
Blacklist
Prise en charge STREAM â ïž
Le plugin Blacklist protĂšge votre site en bloquant lâaccĂšs selon divers attributs client. Cette fonctionnalitĂ© dĂ©fend contre les entitĂ©s malveillantes connues, les scanners et les visiteurs suspects en refusant lâaccĂšs en fonction des adresses IP, des rĂ©seaux, des entrĂ©es DNS inversĂ©es (rDNS), des ASN, des user-agents et de motifs dâURI spĂ©cifiques.
Comment ça marche :
- Le plugin vĂ©rifie les requĂȘtes entrantes par rapport Ă plusieurs critĂšres de liste noire (adresses IP, rĂ©seaux, rDNS, ASN, User-Agent ou motifs dâURI).
- Les listes noires peuvent ĂȘtre spĂ©cifiĂ©es directement dans votre configuration ou chargĂ©es depuis des URL externes.
- Si un visiteur correspond Ă une rĂšgle de la liste noire (et ne correspond Ă aucune rĂšgle dâignorance), lâaccĂšs est refusĂ©.
- Les listes noires sont mises à jour automatiquement à intervalles réguliers à partir des URL configurées.
- Vous pouvez personnaliser précisément quels critÚres sont vérifiés et ignorés en fonction de vos besoins de sécurité spécifiques.
Comment lâutiliser
Suivez ces étapes pour configurer et utiliser la fonctionnalité Blacklist :
- Activer la fonctionnalité : La fonctionnalité Blacklist est activée par défaut. Si nécessaire, vous pouvez la contrÎler avec le paramÚtre
USE_BLACKLIST. - Configurer les rĂšgles de blocage : DĂ©finissez quelles IP, quels rĂ©seaux, quels motifs rDNS, quels ASN, quels User-Agents ou quelles URI doivent ĂȘtre bloquĂ©s.
- Mettre en place des rĂšgles dâignorance : SpĂ©cifiez les exceptions qui doivent contourner les vĂ©rifications de la liste noire.
- Ajouter des sources externes : Configurez des URL pour télécharger et mettre à jour automatiquement les données de la liste noire.
- Surveiller lâefficacité : Consultez l'interface web pour voir les statistiques sur les requĂȘtes bloquĂ©es.
!!! info "Mode stream" En mode stream, seules les vérifications par IP, rDNS et ASN seront effectuées.
ParamĂštres de configuration
Général
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_BLACKLIST |
yes |
multisite | non | Activer la Blacklist : Mettre à yes pour activer la fonctionnalité de liste noire. |
BLACKLIST_COMMUNITY_LISTS |
ip:danmeuk-tor-exit ua:mitchellkrogza-bad-user-agents |
multisite | non | Listes noires communautaires : Sélectionnez des listes noires pré-configurées et maintenues par la communauté à inclure dans le blocage. |
=== "Listes noires communautaires" Ce que ça fait : Vous permet dâajouter rapidement des listes noires bien entretenues et sourcĂ©es par la communautĂ© sans avoir Ă configurer manuellement les URL.
Le paramÚtre `BLACKLIST_COMMUNITY_LISTS` vous permet de choisir parmi des sources de listes noires sélectionnées. Les options disponibles incluent :
| ID | Description | Source |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `ip:laurent-minne-data-shield-aggressive` | Data-Shield IPv4 Blocklist. DST = Europa | `https://raw.githubusercontent.com/duggytuxy/Data-Shield_IPv4_Blocklist/refs/heads/main/prod_data-shield_ipv4_blocklist.txt` |
| `ip:danmeuk-tor-exit` | Adresses IP des nĆuds de sortie Tor (dan.me.uk) | `https://www.dan.me.uk/torlist/?exit` |
| `ua:mitchellkrogza-bad-user-agents` | Nginx Block Bad Bots, Spam Referrer Blocker, Vulnerability Scanners, User-Agents, Malware, Adware, Ransomware, Malicious Sites, avec anti-DDOS, Wordpress Theme Detector Blocking et Fail2Ban Jail for Repeat Offenders | `https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list` |
**Configuration :** Spécifiez plusieurs listes séparées par des espaces. Par exemple :
```yaml
BLACKLIST_COMMUNITY_LISTS: "ip:danmeuk-tor-exit ua:mitchellkrogza-bad-user-agents"
```
!!! tip "Listes communautaires vs configuration manuelle"
Les listes noires communautaires offrent un moyen pratique de dĂ©marrer avec des sources de listes noires Ă©prouvĂ©es. Vous pouvez les utiliser en parallĂšle de configurations manuelles dâURL pour une flexibilitĂ© maximale.
=== "Adresse IP" Ce que ça fait : Bloque les visiteurs en fonction de leur adresse IP ou de leur réseau.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------------- | ------------------------------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `BLACKLIST_IP` | | multisite | non | **Liste noire dâIP :** Liste dâadresses IP ou de rĂ©seaux (notation CIDR) Ă bloquer, sĂ©parĂ©s par des espaces. |
| `BLACKLIST_IGNORE_IP` | | multisite | non | **Liste dâignorance dâIP :** Liste dâadresses IP ou de rĂ©seaux qui doivent contourner les vĂ©rifications de la liste noire dâIP. |
| `BLACKLIST_IP_URLS` | `https://www.dan.me.uk/torlist/?exit` | multisite | non | **URL de listes noires dâIP :** Liste dâURL contenant des adresses IP ou des rĂ©seaux Ă bloquer, sĂ©parĂ©s par des espaces. |
| `BLACKLIST_IGNORE_IP_URLS` | | multisite | non | **URL de listes dâignorance dâIP :** Liste dâURL contenant des adresses IP ou des rĂ©seaux Ă ignorer. |
Le paramĂštre par dĂ©faut `BLACKLIST_IP_URLS` inclut une URL qui fournit une **liste des nĆuds de sortie Tor connus**. Câest une source courante de trafic malveillant et un bon point de dĂ©part pour de nombreux sites.
=== "Reverse DNS" Ce que ça fait : Bloque les visiteurs en fonction de leur nom de domaine inversĂ©. Câest utile pour bloquer les scanners et les crawlers connus en se basant sur les domaines de leur organisation.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ---------------------------- | ----------------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `BLACKLIST_RDNS` | `.shodan.io .censys.io` | multisite | non | **Liste noire rDNS :** Liste de suffixes de DNS inversé à bloquer, séparés par des espaces. |
| `BLACKLIST_RDNS_GLOBAL` | `yes` | multisite | non | **rDNS global uniquement :** Nâeffectue des vĂ©rifications rDNS que sur les adresses IP globales si mis Ă `yes`. |
| `BLACKLIST_IGNORE_RDNS` | | multisite | non | **Liste dâignorance rDNS :** Liste de suffixes de DNS inversĂ© qui doivent contourner les vĂ©rifications de la liste noire rDNS. |
| `BLACKLIST_RDNS_URLS` | | multisite | non | **URL de listes noires rDNS :** Liste dâURL contenant des suffixes de DNS inversĂ© Ă bloquer. |
| `BLACKLIST_IGNORE_RDNS_URLS` | | multisite | non | **URL de listes dâignorance rDNS :** Liste dâURL contenant des suffixes de DNS inversĂ© Ă ignorer. |
Le paramÚtre par défaut `BLACKLIST_RDNS` inclut des domaines de scanners courants comme **Shodan** et **Censys**. Ils sont souvent utilisés par des chercheurs en sécurité et des scanners pour identifier des sites vulnérables.
=== "ASN" Ce que ça fait : Bloque les visiteurs provenant de fournisseurs de rĂ©seaux spĂ©cifiques. Les ASN sont comme des codes postaux pour Internetâils identifient Ă quel fournisseur ou organisation une IP appartient.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| --------------------------- | ------ | --------- | -------- | ----------------------------------------------------------------------------------------------------------- |
| `BLACKLIST_ASN` | | multisite | non | **Liste noire dâASN :** Liste de numĂ©ros de systĂšmes autonomes Ă bloquer, sĂ©parĂ©s par des espaces. |
| `BLACKLIST_IGNORE_ASN` | | multisite | non | **Liste dâignorance dâASN :** Liste dâASN qui doivent contourner les vĂ©rifications de la liste noire dâASN. |
| `BLACKLIST_ASN_URLS` | | multisite | non | **URL de listes noires dâASNÂ :** Liste dâURL contenant des ASN Ă bloquer. |
| `BLACKLIST_IGNORE_ASN_URLS` | | multisite | non | **URL de listes dâignorance dâASNÂ :** Liste dâURL contenant des ASN Ă ignorer. |
=== "User-Agent" Ce que ça fait : Bloque les visiteurs en fonction du navigateur ou de lâoutil quâils prĂ©tendent utiliser. Câest efficace contre les bots qui sâidentifient honnĂȘtement (comme "ScannerBot" ou "WebHarvestTool").
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `BLACKLIST_USER_AGENT` | | multisite | non | **Liste noire de User-Agent :** Liste de motifs de User-Agent (regex PCRE) à bloquer, séparés par des espaces. |
| `BLACKLIST_IGNORE_USER_AGENT` | | multisite | non | **Liste dâignorance de User-Agent :** Liste de motifs de User-Agent qui doivent contourner les vĂ©rifications de la liste noire de User-Agent. |
| `BLACKLIST_USER_AGENT_URLS` | `https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list` | multisite | non | **URL de listes noires de User-Agent :** Liste dâURL contenant des motifs de User-Agent Ă bloquer. |
| `BLACKLIST_IGNORE_USER_AGENT_URLS` | | multisite | non | **URL de listes dâignorance de User-Agent :** Liste dâURL contenant des motifs de User-Agent Ă ignorer. |
Le paramÚtre par défaut `BLACKLIST_USER_AGENT_URLS` inclut une URL qui fournit une **liste de user agents malveillants connus**. Ils sont souvent utilisés par des bots et des scanners malveillants pour identifier des sites vulnérables.
=== "URI" Ce que ça fait : Bloque les requĂȘtes vers des URL spĂ©cifiques de votre site. Câest utile pour bloquer les tentatives dâaccĂšs aux pages dâadministration, aux formulaires de connexion ou Ă dâautres zones sensibles qui pourraient ĂȘtre ciblĂ©es.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| --------------------------- | ------ | --------- | -------- | --------------------------------------------------------------------------------------------------------------------- |
| `BLACKLIST_URI` | | multisite | non | **Liste noire dâURI :** Liste de motifs dâURI (regex PCRE) Ă bloquer, sĂ©parĂ©s par des espaces. |
| `BLACKLIST_IGNORE_URI` | | multisite | non | **Liste dâignorance dâURI :** Liste de motifs dâURI qui doivent contourner les vĂ©rifications de la liste noire dâURI. |
| `BLACKLIST_URI_URLS` | | multisite | non | **URL de listes noires dâURIÂ :** Liste dâURL contenant des motifs dâURI Ă bloquer. |
| `BLACKLIST_IGNORE_URI_URLS` | | multisite | non | **URL de listes dâignorance dâURIÂ :** Liste dâURL contenant des motifs dâURI Ă ignorer. |
!!! info "Support des formats dâURL"
Tous les paramĂštres *_URLS supportent les URL HTTP/HTTPS ainsi que les chemins de fichiers locaux en utilisant le prĂ©fixe file:///. Lâauthentification basique est supportĂ©e en utilisant le format http://user:pass@url.
!!! tip "Mises Ă jour rĂ©guliĂšres" Les listes noires provenant dâURL sont automatiquement tĂ©lĂ©chargĂ©es et mises Ă jour toutes les heures pour garantir que votre protection reste Ă jour contre les derniĂšres menaces.
Exemples de configuration
=== "Protection de base par IP et User-Agent"
Une configuration simple qui bloque les nĆuds de sortie Tor connus et les user agents malveillants courants en utilisant les listes noires communautaires :
```yaml
USE_BLACKLIST: "yes"
BLACKLIST_COMMUNITY_LISTS: "ip:danmeuk-tor-exit ua:mitchellkrogza-bad-user-agents"
```
Alternativement, vous pouvez utiliser une configuration manuelle par URLÂ :
```yaml
USE_BLACKLIST: "yes"
BLACKLIST_IP_URLS: "https://www.dan.me.uk/torlist/?exit"
BLACKLIST_USER_AGENT_URLS: "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list"
```
=== "Protection avancée avec des rÚgles personnalisées"
Une configuration plus complÚte avec des entrées de liste noire personnalisées et des exceptions :
```yaml
USE_BLACKLIST: "yes"
# Entrées de liste noire personnalisées
BLACKLIST_IP: "192.168.1.100 203.0.113.0/24"
BLACKLIST_RDNS: ".shodan.io .censys.io .scanner.com"
BLACKLIST_ASN: "16509 14618" # ASN d'AWS et d'Amazon
BLACKLIST_USER_AGENT: "(?:\b)SemrushBot(?:\b) (?:\b)AhrefsBot(?:\b)"
BLACKLIST_URI: "^/wp-login\.php$ ^/administrator/"
# RÚgles d'ignorance personnalisées
BLACKLIST_IGNORE_IP: "192.168.1.200 203.0.113.42"
# Sources de listes noires externes
BLACKLIST_IP_URLS: "https://www.dan.me.uk/torlist/?exit https://www.spamhaus.org/drop/drop.txt"
BLACKLIST_USER_AGENT_URLS: "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list"
```
=== "Utilisation de fichiers locaux"
Configuration utilisant des fichiers locaux pour les listes noires :
```yaml
USE_BLACKLIST: "yes"
BLACKLIST_IP_URLS: "file:///chemin/vers/ip-blacklist.txt"
BLACKLIST_RDNS_URLS: "file:///chemin/vers/rdns-blacklist.txt"
BLACKLIST_ASN_URLS: "file:///chemin/vers/asn-blacklist.txt"
BLACKLIST_USER_AGENT_URLS: "file:///chemin/vers/user-agent-blacklist.txt"
BLACKLIST_URI_URLS: "file:///chemin/vers/uri-blacklist.txt"
```
Travailler avec des fichiers de listes locaux
Les paramĂštres *_URLS fournis par les plugins Whitelist, Greylist et Blacklist utilisent le mĂȘme tĂ©lĂ©chargeur. Lorsque vous rĂ©fĂ©rencez une URL file:/// :
- Le chemin est rĂ©solu dans le conteneur du scheduler (dans un dĂ©ploiement Docker il sâagit gĂ©nĂ©ralement de
bunkerweb-scheduler). Montez-y vos fichiers et vĂ©rifiez que lâutilisateur scheduler possĂšde un accĂšs en lecture. - Chaque fichier est un texte encodĂ© en UTF-8 avec une entrĂ©e par ligne. Les lignes vides sont ignorĂ©es et les commentaires doivent commencer par
#ou;. Les commentaires//ne sont pas pris en charge. - Valeur attendue selon le type de liste :
- Listes IP acceptent des adresses IPv4/IPv6 ou des réseaux CIDR (par exemple
192.0.2.10ou2001:db8::/48). - Listes rDNS attendent un suffixe sans espaces (par exemple
.search.msn.com). Les valeurs sont automatiquement converties en minuscules. - Listes ASN peuvent contenir uniquement le numéro (
32934) ou le numĂ©ro prĂ©fixĂ© parAS(AS15169). - Listes User-Agent sont traitĂ©es comme des motifs PCRE et la ligne complĂšte est conservĂ©e (espaces compris). Placez vos commentaires sur une ligne sĂ©parĂ©e pour Ă©viter quâils ne soient interprĂ©tĂ©s comme motif.
- Listes URI doivent commencer par
/et peuvent utiliser des jetons PCRE tels que^ou$.
- Listes IP acceptent des adresses IPv4/IPv6 ou des réseaux CIDR (par exemple
Exemples de fichiers conformes :
# /etc/bunkerweb/lists/ip-blacklist.txt
192.0.2.10
198.51.100.0/24
# /etc/bunkerweb/lists/ua-blacklist.txt
(?:^|\s)FriendlyScanner(?:\s|$)
TrustedMonitor/\d+\.\d+
Brotli
Prise en charge STREAM â
Le plugin Brotli active la compression des rĂ©ponses HTTP avec lâalgorithme Brotli. Il rĂ©duit lâusage de bande passante et accĂ©lĂšre le chargement en compressant le contenu avant lâenvoi au navigateur.
Par rapport à gzip, Brotli atteint généralement de meilleurs taux de compression, pour des fichiers plus petits et une livraison plus rapide.
Comment ça marche :
- Ă la requĂȘte dâun client, BunkerWeb vĂ©rifie si le navigateur supporte Brotli.
- Si oui, la réponse est compressée au niveau configuré (
BROTLI_COMP_LEVEL). - Les enâtĂȘtes appropriĂ©s indiquent la compression Brotli.
- Le navigateur décompresse avant affichage.
- Bande passante et temps de chargement diminuent.
Comment lâutiliser
- Activer :
USE_BROTLI: yes(désactivé par défaut). - Types MIME : définir les contenus à compresser via
BROTLI_TYPES. - Taille minimale :
BROTLI_MIN_LENGTHpour éviter de compresser les petites réponses. - Niveau de compression :
BROTLI_COMP_LEVELpour lâĂ©quilibre vitesse/ratio.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_BROTLI |
no |
multisite | non | Activer la compression Brotli. |
BROTLI_TYPES |
application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml |
multisite | non | Types MIME compressés. |
BROTLI_MIN_LENGTH |
1000 |
multisite | non | Taille minimale (octets) pour appliquer la compression. |
BROTLI_COMP_LEVEL |
6 |
multisite | non | Niveau 0â11Â : plus haut = meilleure compression mais plus de CPU. |
!!! tip "Niveau de compression"
6 offre un bon compromis. Pour du statique et CPU disponible : 9â11. Pour du dynamique ou CPU contraint : 4â5.
Exemples
=== "Basique"
```yaml
USE_BROTLI: "yes"
BROTLI_TYPES: "application/javascript application/json application/xml application/xhtml+xml text/css text/html text/javascript text/plain text/xml"
BROTLI_MIN_LENGTH: "1000"
BROTLI_COMP_LEVEL: "6"
```
=== "Compression maximale"
```yaml
USE_BROTLI: "yes"
BROTLI_TYPES: "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml"
BROTLI_MIN_LENGTH: "500"
BROTLI_COMP_LEVEL: "11"
```
=== "Performance équilibrée"
```yaml
USE_BROTLI: "yes"
BROTLI_TYPES: "application/javascript application/json text/css text/html text/javascript text/plain"
BROTLI_MIN_LENGTH: "1000"
BROTLI_COMP_LEVEL: "4"
```
BunkerNet
Prise en charge STREAM â
Le plugin BunkerNet permet le partage collectif de renseignements sur les menaces entre instances BunkerWeb, crĂ©ant un rĂ©seau de protection contre les acteurs malveillants. En y participant, votre instance bĂ©nĂ©ficie dâune base mondiale de menaces et y contribue de façon anonyme.
Comment ça marche :
- Votre instance sâenregistre automatiquement auprĂšs de lâAPI BunkerNet et reçoit un identifiant unique.
- Ă chaque IP/comportement malveillant bloquĂ©, lâinformation est signalĂ©e anonymement Ă BunkerNet.
- BunkerNet agrĂšge lâintelligence de toutes les instances et diffuse une base consolidĂ©e.
- Votre instance télécharge réguliÚrement la base à jour.
- Cette intelligence collective permet de bloquer proactivement des IP déjà malveillantes ailleurs.
Comment lâutiliser
- Activation :
USE_BUNKERNET(activé par défaut). - Enregistrement initial : effectué automatiquement au premier démarrage.
- Mises à jour : téléchargement automatique et régulier de la base.
- Signalement : contribution automatique lors de blocages dâIP.
- Suivi : statistiques visibles dans la web UI.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_BUNKERNET |
yes |
multisite | non | Activer la participation BunkerNet. |
BUNKERNET_SERVER |
https://api.bunkerweb.io |
global | non | URL de lâAPI BunkerNet. |
!!! info "ConfidentialitĂ©" Seules les donnĂ©es nĂ©cessaires Ă lâidentification de la menace sont partagĂ©es (IP, raison du blocage, contexte minimal).
Intégration CrowdSec Console
Grùce au partenariat avec CrowdSec, vous pouvez inscrire vos instances BunkerWeb dans votre CrowdSec Console et visualiser les attaques bloquées.
Ătapes principales :
- CrĂ©ez un compte CrowdSec Console et rĂ©cupĂ©rez la clĂ© dâenrĂŽlement.
- Récupérez votre BunkerNet ID (BunkerNet activé).
- Commandez le service gratuit « BunkerNet / CrowdSec » sur le Panel et fournissez lâID et la clĂ©.
- Acceptez le nouvel engine dans la Console.
Exemples
=== "Configuration par défaut (recommandée)"
```yaml
USE_BUNKERNET: "yes"
BUNKERNET_SERVER: "https://api.bunkerweb.io"
```
=== "Désactivation"
```yaml
USE_BUNKERNET: "no"
```
=== "Serveur personnalisé"
```yaml
USE_BUNKERNET: "yes"
BUNKERNET_SERVER: "https://bunkernet.example.com"
```
CORS
Prise en charge STREAM â
Le plugin CORS active le partage de ressources entre origines (CrossâOrigin Resource Sharing) de maniĂšre contrĂŽlĂ©e. Il permet de partager vos ressources avec des domaines tiers de confiance en dĂ©finissant prĂ©cisĂ©ment origines, mĂ©thodes et enâtĂȘtes autorisĂ©s.
Comment ça marche :
- Pour une requĂȘte crossâorigin, le navigateur envoie dâabord une requĂȘte « preflight »
OPTIONS. - BunkerWeb vĂ©rifie si lâorigine est autorisĂ©e.
- Si oui, il renvoie les enâtĂȘtes CORS appropriĂ©s dĂ©crivant ce qui est permis.
- Sinon, la requĂȘte est refusĂ©e ou servie sans enâtĂȘtes CORS selon la configuration.
- Des politiques supplémentaires (COEP/COOP/CORP) peuvent renforcer la sécurité.
Comment lâutiliser
- Activer :
USE_CORS: yes(désactivé par défaut). - Origines :
CORS_ALLOW_ORIGIN(regex PCRE,*tous,selfmĂȘme origine). - MĂ©thodes :
CORS_ALLOW_METHODS. - EnâtĂȘtes :
CORS_ALLOW_HEADERS. - Identifiants :
CORS_ALLOW_CREDENTIALSpour autoriser cookies/auth.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_CORS |
no |
multisite | non | Activer CORS. |
CORS_ALLOW_ORIGIN |
self |
multisite | non | Origines autorisĂ©es (regex PCRE). * = toute origine, self = mĂȘme origine. |
CORS_ALLOW_METHODS |
GET, POST, OPTIONS |
multisite | non | Méthodes autorisées. |
CORS_ALLOW_HEADERS |
DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range |
multisite | non | EnâtĂȘtes autorisĂ©s cĂŽtĂ© requĂȘte. |
CORS_ALLOW_CREDENTIALS |
no |
multisite | non | Autoriser les identifiants (cookies, auth HTTP). |
CORS_EXPOSE_HEADERS |
Content-Length,Content-Range |
multisite | non | EnâtĂȘtes exposĂ©s cĂŽtĂ© rĂ©ponse. |
CROSS_ORIGIN_OPENER_POLICY |
same-origin |
multisite | non | Politique COOP. |
CROSS_ORIGIN_EMBEDDER_POLICY |
require-corp |
multisite | non | Politique COEP. |
CROSS_ORIGIN_RESOURCE_POLICY |
same-site |
multisite | non | Politique CORP. |
CORS_MAX_AGE |
86400 |
multisite | non | Durée de cache du preflight (secondes). |
CORS_DENY_REQUEST |
yes |
multisite | non | Refuser les origines non autorisĂ©es avec un code dâerreur. |
!!! tip "Optimiser le preflight"
Augmenter CORS_MAX_AGE réduit la fréquence des preflights (par défaut 24h).
!!! warning "Sécurité"
Soyez prudent avec CORS_ALLOW_ORIGIN: * et/ou CORS_ALLOW_CREDENTIALS: yes. Préférez lister explicitement les origines de confiance.
Exemples
=== "Configuration basique"
```yaml
USE_CORS: "yes"
CORS_ALLOW_ORIGIN: "self"
CORS_ALLOW_METHODS: "GET, POST, OPTIONS"
CORS_ALLOW_HEADERS: "Content-Type, Authorization"
CORS_ALLOW_CREDENTIALS: "no"
CORS_DENY_REQUEST: "yes"
```
=== "API publique"
```yaml
USE_CORS: "yes"
CORS_ALLOW_ORIGIN: "*"
CORS_ALLOW_METHODS: "GET, OPTIONS"
CORS_ALLOW_HEADERS: "Content-Type, X-API-Key"
CORS_ALLOW_CREDENTIALS: "no"
CORS_MAX_AGE: "3600"
CORS_DENY_REQUEST: "no"
```
=== "Plusieurs domaines de confiance"
```yaml
USE_CORS: "yes"
CORS_ALLOW_ORIGIN: "^https://(app|api|dashboard)\\.example\\.com$"
CORS_ALLOW_METHODS: "GET, POST, PUT, DELETE, OPTIONS"
CORS_ALLOW_HEADERS: "Content-Type, Authorization, X-Requested-With"
CORS_ALLOW_CREDENTIALS: "yes"
CORS_EXPOSE_HEADERS: "Content-Length, Content-Range, X-RateLimit-Remaining"
CORS_MAX_AGE: "86400"
CORS_DENY_REQUEST: "yes"
```
=== "Wildcard sousâdomaine"
```yaml
USE_CORS: "yes"
CORS_ALLOW_ORIGIN: "^https://.*\\.example\\.com$"
CORS_ALLOW_METHODS: "GET, POST, OPTIONS"
CORS_ALLOW_HEADERS: "Content-Type, Authorization"
CORS_ALLOW_CREDENTIALS: "no"
CORS_MAX_AGE: "86400"
CORS_DENY_REQUEST: "yes"
```
=== "Multiples motifs de domaine"
```yaml
USE_CORS: "yes"
CORS_ALLOW_ORIGIN: "^https://(.*\\.example\\.com|.*\\.trusted-partner\\.org|api\\.third-party\\.net)$"
CORS_ALLOW_METHODS: "GET, POST, PUT, OPTIONS"
CORS_ALLOW_HEADERS: "Content-Type, Authorization, X-Custom-Header"
CORS_ALLOW_CREDENTIALS: "no"
CORS_MAX_AGE: "86400"
CORS_DENY_REQUEST: "yes"
```
Client cache
Prise en charge STREAM â
Le plugin Client Cache optimise les performances en contrÎlant la mise en cache des contenus statiques par les navigateurs. Il réduit la bande passante, la charge serveur et accélÚre les temps de chargement en instruisant les navigateurs à conserver localement images, CSS, JS, etc., plutÎt que de les retélécharger à chaque visite.
Comment ça marche :
- Une fois activĂ©, BunkerWeb ajoute des enâtĂȘtes Cache-Control aux rĂ©ponses des fichiers statiques.
- Ces enâtĂȘtes indiquent aux navigateurs pendant combien de temps conserver localement le contenu.
- Pour les extensions spĂ©cifiĂ©es (images, CSS, JSâŠ), BunkerWeb applique la politique de cache configurĂ©e.
- Les ETags (optionnels) fournissent un mécanisme de validation supplémentaire.
- Lors des visites suivantes, le navigateur réutilise les fichiers en cache, accélérant le chargement.
Comment lâutiliser
- Activer : mettez
USE_CLIENT_CACHEĂyes(dĂ©sactivĂ© par dĂ©faut). - Extensions : dĂ©finissez
CLIENT_CACHE_EXTENSIONSpour les types de fichiers à mettre en cache. - Directives Cache-Control : personnalisez
CLIENT_CACHE_CONTROL. - ETag : activez ou non via
CLIENT_CACHE_ETAG.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description | |
|---|---|---|---|---|---|
USE_CLIENT_CACHE |
no |
multisite | non | Activer la mise en cache cÎté client des fichiers statiques. | |
CLIENT_CACHE_EXTENSIONS |
`jpg | jpeg | png | bmp | ico |
CLIENT_CACHE_CONTROL |
public, max-age=15552000 |
multisite | non | Valeur de lâenâtĂȘte HTTP Cache-Control. | |
CLIENT_CACHE_ETAG |
yes |
multisite | non | Envoi dâun ETag pour les ressources statiques. |
!!! tip "Optimiser le cache" Contenu fréquemment mis à jour : durée plus courte. Contenu versionné ou peu changeant : durée plus longue. La valeur par défaut (180 jours) convient souvent.
Exemples
=== "Basique"
```yaml
USE_CLIENT_CACHE: "yes"
CLIENT_CACHE_EXTENSIONS: "jpg|jpeg|png|gif|css|js|svg|woff|woff2"
CLIENT_CACHE_CONTROL: "public, max-age=86400"
CLIENT_CACHE_ETAG: "yes"
```
=== "Agressif"
```yaml
USE_CLIENT_CACHE: "yes"
CLIENT_CACHE_EXTENSIONS: "jpg|jpeg|png|bmp|ico|svg|tif|gif|css|js|otf|ttf|eot|woff|woff2|pdf|xml|txt"
CLIENT_CACHE_CONTROL: "public, max-age=31536000, immutable"
CLIENT_CACHE_ETAG: "yes"
```
=== "Mixte"
```yaml
USE_CLIENT_CACHE: "yes"
CLIENT_CACHE_EXTENSIONS: "jpg|jpeg|png|bmp|ico|svg|tif|gif|css|js|otf|ttf|eot|woff|woff2"
CLIENT_CACHE_CONTROL: "public, max-age=604800"
CLIENT_CACHE_ETAG: "yes"
```
Country
Prise en charge STREAM â
Le plugin Country active le gĂ©oâblocage et permet de restreindre lâaccĂšs selon la localisation gĂ©ographique des visiteurs. Utile pour la conformitĂ© rĂ©gionale, limiter la fraude associĂ©e Ă des zones Ă risque et appliquer des restrictions de contenu selon les frontiĂšres.
Comment ça marche :
- Ă chaque visite, BunkerWeb dĂ©termine le pays dâorigine via lâadresse IP.
- Votre configuration définit une liste blanche (autorisés) ou noire (bloqués).
- En liste blanche : seuls les pays listés sont autorisés.
- En liste noire : les pays listés sont refusés.
- Le résultat est mis en cache pour les visites répétées.
Comment lâutiliser
- Stratégie : choisir liste blanche (peu de pays autorisés) ou liste noire (bloquer certains pays).
- Codes pays : ajoutez des codes ISO 3166â1 alphaâ2 (US, GB, FR) Ă
WHITELIST_COUNTRYouBLACKLIST_COUNTRY. - Application : une fois configurĂ©, la restriction sâapplique Ă tous les visiteurs.
- Suivi : consultez la web UI pour les statistiques par pays.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
WHITELIST_COUNTRY |
multisite | non | Liste blanche : codes pays ISO 3166â1 alphaâ2 sĂ©parĂ©s par des espaces. Seuls ces pays sont autorisĂ©s. | |
BLACKLIST_COUNTRY |
multisite | non | Liste noire : codes pays ISO 3166â1 alphaâ2 sĂ©parĂ©s par des espaces. Ces pays sont bloquĂ©s. |
!!! tip "Liste blanche vs noire" Liste blanche : accÚs restreint à quelques pays. Liste noire : bloquer des régions problématiques et autoriser le reste.
!!! warning "PrioritĂ©" Si une liste blanche et une liste noire sont dĂ©finies, la liste blanche a priorité : si le pays nây figure pas, lâaccĂšs est refusĂ©.
!!! info "DĂ©tection du pays" BunkerWeb utilise la base mmdb dbâip lite.
Exemples
=== "Liste blanche uniquement"
```yaml
WHITELIST_COUNTRY: "US CA GB"
```
=== "Liste noire uniquement"
```yaml
BLACKLIST_COUNTRY: "RU CN KP"
```
=== "UE uniquement"
```yaml
WHITELIST_COUNTRY: "AT BE BG HR CY CZ DK EE FI FR DE GR HU IE IT LV LT LU MT NL PL PT RO SK SI ES SE"
```
=== "Blocage pays Ă risque"
```yaml
BLACKLIST_COUNTRY: "RU CN KP IR SY"
```
CrowdSec
Prise en charge STREAM â
Le plugin CrowdSec intĂšgre BunkerWeb avec le moteur de sĂ©curitĂ© CrowdSec, fournissant une couche de protection supplĂ©mentaire contre diverses cybermenaces. Ce plugin agit comme un bouncer CrowdSec, refusant les requĂȘtes en fonction des dĂ©cisions de l'API CrowdSec.
CrowdSec est un moteur de sécurité moderne et open-source qui détecte et bloque les adresses IP malveillantes en se basant sur l'analyse comportementale et l'intelligence collective de sa communauté. Vous pouvez également configurer des scénarios pour bannir automatiquement les adresses IP en fonction de comportements suspects, bénéficiant ainsi d'une liste noire participative.
Comment ça marche :
- Le moteur CrowdSec analyse les journaux et détecte les activités suspectes sur votre infrastructure.
- Lorsqu'une activité malveillante est détectée, CrowdSec crée une décision pour bloquer l'adresse IP incriminée.
- BunkerWeb, agissant comme un bouncer, interroge l'API locale de CrowdSec pour obtenir des dĂ©cisions concernant les requĂȘtes entrantes.
- Si l'adresse IP d'un client fait l'objet d'une décision de blocage active, BunkerWeb refuse l'accÚs aux services protégés.
- En option, le composant de sĂ©curitĂ© applicative (Application Security Component) peut effectuer une inspection approfondie des requĂȘtes pour une sĂ©curitĂ© renforcĂ©e.
!!! success "Bénéfices clés"
1. **Sécurité communautaire :** Bénéficiez des renseignements sur les menaces partagés par la communauté des utilisateurs de CrowdSec.
2. **Analyse comportementale :** Détectez les attaques sophistiquées basées sur des modÚles de comportement, et non uniquement sur des signatures.
3. **Intégration légÚre :** Impact minimal sur les performances de votre instance BunkerWeb.
4. **Protection multi-niveaux :** Combinez la défense périmétrique (blocage d'IP) avec la sécurité applicative pour une protection en profondeur.
Prérequis
- Une API locale CrowdSec accessible par BunkerWeb (gĂ©nĂ©ralement lâagent exĂ©cutĂ© sur la mĂȘme machine ou dans le mĂȘme rĂ©seau Docker).
- LâaccĂšs aux journaux dâaccĂšs de BunkerWeb (
/var/log/bunkerweb/access.logpar dĂ©faut) pour que lâagent CrowdSec puisse analyser les requĂȘtes. - LâaccĂšs Ă
csclisur lâhĂŽte CrowdSec afin dâenregistrer la clĂ© du bouncer BunkerWeb.
Parcours dâintĂ©gration
- PrĂ©parer lâagent CrowdSec pour ingĂ©rer les journaux BunkerWeb.
- Configurer BunkerWeb pour interroger lâAPI locale CrowdSec.
- Valider le lien via lâAPI
/crowdsec/pingou la carte CrowdSec dans lâinterface dâadministration.
Les sections suivantes détaillent chacune de ces étapes.
Ătape 1 â PrĂ©parer CrowdSec Ă ingĂ©rer les journaux BunkerWeb
=== "Docker" Fichier d'acquisition
Vous devrez exécuter une instance de CrowdSec et la configurer pour analyser les journaux de BunkerWeb. Utilisez la valeur dédiée `bunkerweb` pour le paramÚtre `type` dans votre fichier d'acquisition (en supposant que les journaux de BunkerWeb sont stockés tels quels sans données supplémentaires) :
```yaml
filenames:
- /var/log/bunkerweb.log
labels:
type: bunkerweb
```
Si la collection n'apparaßt pas dans le conteneur CrowdSec, exécutez `docker exec -it <crowdsec-container> cscli hub update`, puis redémarrez ce conteneur (`docker restart <crowdsec-container>`) afin que les nouveaux artefacts soient disponibles. Remplacez `<crowdsec-container>` par le nom de votre conteneur CrowdSec.
**Composant de sécurité applicative (*optionnel*)**
CrowdSec fournit Ă©galement un [Composant de sĂ©curitĂ© applicative](https://docs.crowdsec.net/docs/appsec/intro?utm_source=external-docs&utm_medium=cta&utm_campaign=bunker-web-docs) qui peut ĂȘtre utilisĂ© pour protĂ©ger votre application contre les attaques. Si vous souhaitez l'utiliser, vous devez crĂ©er un autre fichier d'acquisition pour le composant AppSec :
```yaml
appsec_config: crowdsecurity/appsec-default
labels:
type: appsec
listen_addr: 0.0.0.0:7422
source: appsec
```
**Syslog**
Pour les intégrations basées sur des conteneurs, nous recommandons de rediriger les journaux du conteneur BunkerWeb vers un service syslog afin que CrowdSec puisse y accéder facilement. Voici un exemple de configuration pour syslog-ng qui stockera les journaux bruts provenant de BunkerWeb dans un fichier local `/var/log/bunkerweb.log` :
```syslog
@version: 4.8
source s_net {
udp(
ip("0.0.0.0")
);
};
template t_imp {
template("$MSG\n");
template_escape(no);
};
destination d_file {
file("/var/log/bunkerweb.log" template(t_imp));
};
log {
source(s_net);
destination(d_file);
};
```
**Docker Compose**
Voici le modÚle docker-compose que vous pouvez utiliser (n'oubliez pas de mettre à jour la clé du bouncer) :
```yaml
x-bw-env: &bw-env
# Nous utilisons une ancre pour Ă©viter de rĂ©pĂ©ter les mĂȘmes paramĂštres pour les deux services
API_WHITELIST_IP: "127.0.0.0/8 10.20.30.0/24" # Assurez-vous de définir la bonne plage IP pour que le planificateur puisse envoyer la configuration à l'instance
services:
bunkerweb:
# C'est le nom qui sera utilisé pour identifier l'instance dans le planificateur
image: bunkerity/bunkerweb:1.6.6
ports:
- "80:8080/tcp"
- "443:8443/tcp"
- "443:8443/udp" # Pour le support QUIC / HTTP3
environment:
<<: *bw-env # Nous utilisons l'ancre pour Ă©viter de rĂ©pĂ©ter les mĂȘmes paramĂštres pour tous les services
restart: "unless-stopped"
networks:
- bw-universe
- bw-services
logging:
driver: syslog # Envoyer les journaux Ă syslog
options:
syslog-address: "udp://10.20.30.254:514" # L'adresse IP du service syslog
bw-scheduler:
image: bunkerity/bunkerweb-scheduler:1.6.6
environment:
<<: *bw-env
BUNKERWEB_INSTANCES: "bunkerweb" # Assurez-vous de définir le nom correct de l'instance
DATABASE_URI: "mariadb+pymysql://bunkerweb:changeme@bw-db:3306/db" # N'oubliez pas de définir un mot de passe plus fort pour la base de données
SERVER_NAME: ""
MULTISITE: "yes"
USE_CROWDSEC: "yes"
CROWDSEC_API: "http://crowdsec:8080" # C'est l'adresse de l'API du conteneur CrowdSec dans le mĂȘme rĂ©seau
CROWDSEC_APPSEC_URL: "http://crowdsec:7422" # Commentez si vous ne voulez pas utiliser le composant AppSec
CROWDSEC_API_KEY: "s3cr3tb0unc3rk3y" # N'oubliez pas de définir une clé plus forte pour le bouncer
volumes:
- bw-storage:/data # Ceci est utilisé pour persister le cache et d'autres données comme les sauvegardes
restart: "unless-stopped"
networks:
- bw-universe
- bw-db
bw-db:
image: mariadb:11
# Nous dĂ©finissons la taille maximale des paquets autorisĂ©s pour Ă©viter les problĂšmes avec les grosses requĂȘtes
command: --max-allowed-packet=67108864
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_DATABASE: "db"
MYSQL_USER: "bunkerweb"
MYSQL_PASSWORD: "changeme" # N'oubliez pas de définir un mot de passe plus fort pour la base de données
volumes:
- bw-data:/var/lib/mysql
restart: "unless-stopped"
networks:
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.3 # Utilisez la derniÚre version mais épinglez toujours la version pour une meilleure stabilité/sécurité
volumes:
- cs-data:/var/lib/crowdsec/data # Pour persister les données de CrowdSec
- bw-logs:/var/log:ro # Les journaux de BunkerWeb Ă analyser par CrowdSec
- ./acquis.yaml:/etc/crowdsec/acquis.yaml # Le fichier d'acquisition pour les journaux de BunkerWeb
- ./appsec.yaml:/etc/crowdsec/acquis.d/appsec.yaml # Commentez si vous ne voulez pas utiliser le composant AppSec
environment:
BOUNCER_KEY_bunkerweb: "s3cr3tb0unc3rk3y" # N'oubliez pas de définir une clé plus forte pour le bouncer
COLLECTIONS: "bunkerity/bunkerweb crowdsecurity/appsec-virtual-patching crowdsecurity/appsec-generic-rules"
# COLLECTIONS: "bunkerity/bunkerweb" # Si vous ne voulez pas utiliser le composant AppSec, utilisez plutĂŽt cette ligne
networks:
- bw-universe
syslog:
image: balabit/syslog-ng:4.9.0
cap_add:
- NET_BIND_SERVICE # Lier aux ports bas
- NET_BROADCAST # Envoyer des diffusions
- NET_RAW # Utiliser des sockets brutes
- DAC_READ_SEARCH # Lire les fichiers en contournant les autorisations
- DAC_OVERRIDE # Outrepasser les autorisations de fichiers
- CHOWN # Changer le propriétaire
- SYSLOG # Ăcrire dans les journaux systĂšme
volumes:
- bw-logs:/var/log/bunkerweb # C'est le volume utilisé pour stocker les journaux
- ./syslog-ng.conf:/etc/syslog-ng/syslog-ng.conf # C'est le fichier de configuration de syslog-ng
networks:
bw-universe:
ipv4_address: 10.20.30.254
volumes:
bw-data:
bw-storage:
bw-logs:
cs-data:
networks:
bw-universe:
name: bw-universe
ipam:
driver: default
config:
- subnet: 10.20.30.0/24 # Assurez-vous de définir la bonne plage IP pour que le planificateur puisse envoyer la configuration à l'instance
bw-services:
name: bw-services
bw-db:
name: bw-db
```
=== "Linux"
Vous devez installer CrowdSec et le configurer pour analyser les journaux de BunkerWeb. Suivez la [documentation officielle](https://doc.crowdsec.net/docs/getting_started/install_crowdsec?utm_source=external-docs&utm_medium=cta&utm_campaign=bunker-web-docs#scenarios).
Pour permettre à CrowdSec d'analyser les journaux de BunkerWeb, ajoutez les lignes suivantes à votre fichier d'acquisition situé à `/etc/crowdsec/acquis.yaml` :
```yaml
filenames:
- /var/log/bunkerweb/access.log
- /var/log/bunkerweb/error.log
- /var/log/bunkerweb/modsec_audit.log
labels:
type: bunkerweb
```
Mettez Ă jour le hub CrowdSec et installez la collection BunkerWeb :
```shell
sudo cscli hub update
sudo cscli collections install bunkerity/bunkerweb
```
Maintenant, ajoutez votre bouncer personnalisé à l'API CrowdSec en utilisant l'outil `cscli` :
```shell
sudo cscli bouncers add crowdsec-bunkerweb-bouncer/v1.6
```
!!! warning "Clé API"
Conservez la clé générée par la commande `cscli` ; vous en aurez besoin plus tard.
Ensuite, redémarrez le service CrowdSec :
```shell
sudo systemctl restart crowdsec
```
**Composant de sécurité applicative (*optionnel*)**
Si vous souhaitez utiliser le composant AppSec, vous devez créer un autre fichier d'acquisition pour celui-ci, situé à `/etc/crowdsec/acquis.d/appsec.yaml` :
```yaml
appsec_config: crowdsecurity/appsec-default
labels:
type: appsec
listen_addr: 127.0.0.1:7422
source: appsec
```
Vous devrez également installer les collections du composant AppSec :
```shell
sudo cscli collections install crowdsecurity/appsec-virtual-patching
sudo cscli collections install crowdsecurity/appsec-generic-rules
```
Enfin, redémarrez le service CrowdSec :
```shell
sudo systemctl restart crowdsec
```
**ParamĂštres**
Configurez le plugin en ajoutant les paramĂštres suivants Ă votre fichier de configuration BunkerWeb :
```env
USE_CROWDSEC=yes
CROWDSEC_API=http://127.0.0.1:8080
CROWDSEC_API_KEY=<La clé fournie par cscli>
# Commentez si vous ne voulez pas utiliser le composant AppSec
CROWDSEC_APPSEC_URL=http://127.0.0.1:7422
```
Enfin, rechargez le service BunkerWeb :
```shell
sudo systemctl reload bunkerweb
```
=== "All-in-one"
L'image Docker BunkerWeb All-In-One (AIO) est livrée avec CrowdSec entiÚrement intégré. Vous n'avez pas besoin de configurer une instance CrowdSec séparée ou de configurer manuellement les fichiers d'acquisition pour les journaux de BunkerWeb lorsque vous utilisez l'agent CrowdSec interne.
Référez-vous à la [documentation d'intégration de l'image All-In-One (AIO)](integrations.md#crowdsec-integration).
Ătape 2 â Configurer les paramĂštres de BunkerWeb
Appliquez les variables dâenvironnement suivantes (ou leurs Ă©quivalents via le scheduler) pour permettre Ă votre instance BunkerWeb de communiquer avec lâAPI locale CrowdSec. Au minimum, USE_CROWDSEC, CROWDSEC_API et une clĂ© valide gĂ©nĂ©rĂ©e avec cscli bouncers add sont nĂ©cessaires.
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_CROWDSEC |
no |
multisite | no | Activer CrowdSec : Mettre Ă yes pour activer le bouncer CrowdSec. |
CROWDSEC_API |
http://crowdsec:8080 |
global | no | URL de l'API CrowdSec : L'adresse du service de l'API locale de CrowdSec. |
CROWDSEC_API_KEY |
global | no | Clé API CrowdSec : La clé API pour s'authentifier auprÚs de l'API CrowdSec, obtenue avec cscli bouncers add. |
|
CROWDSEC_MODE |
live |
global | no | Mode de fonctionnement : Soit live (interroge l'API pour chaque requĂȘte) ou stream (met en cache pĂ©riodiquement toutes les dĂ©cisions). |
CROWDSEC_ENABLE_INTERNAL |
no |
global | no | Trafic interne : Mettre à yes pour vérifier le trafic interne par rapport aux décisions de CrowdSec. |
CROWDSEC_REQUEST_TIMEOUT |
1000 |
global | no | DĂ©lai d'attente de la requĂȘte : DĂ©lai d'attente en millisecondes pour les requĂȘtes HTTP vers l'API locale de CrowdSec en mode live. |
CROWDSEC_EXCLUDE_LOCATION |
global | no | Emplacements exclus : Liste d'emplacements (URI) séparés par des virgules à exclure des vérifications de CrowdSec. | |
CROWDSEC_CACHE_EXPIRATION |
1 |
global | no | Expiration du cache : Le temps d'expiration du cache en secondes pour les décisions IP en mode live. |
CROWDSEC_UPDATE_FREQUENCY |
10 |
global | no | Fréquence de mise à jour : à quelle fréquence (en secondes) récupérer les décisions nouvelles/expirées de l'API CrowdSec en mode stream. |
ParamÚtres du composant de sécurité applicative
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
CROWDSEC_APPSEC_URL |
global | no | URL AppSec : L'URL du composant de sécurité applicative de CrowdSec. Laisser vide pour désactiver AppSec. | |
CROWDSEC_APPSEC_FAILURE_ACTION |
passthrough |
global | no | Action en cas d'Ă©chec : Action Ă entreprendre lorsque AppSec renvoie une erreur. Peut ĂȘtre passthrough ou deny. |
CROWDSEC_APPSEC_CONNECT_TIMEOUT |
100 |
global | no | Délai de connexion : Le délai d'attente en millisecondes pour se connecter au composant AppSec. |
CROWDSEC_APPSEC_SEND_TIMEOUT |
100 |
global | no | Délai d'envoi : Le délai d'attente en millisecondes pour envoyer des données au composant AppSec. |
CROWDSEC_APPSEC_PROCESS_TIMEOUT |
500 |
global | no | DĂ©lai de traitement : Le dĂ©lai d'attente en millisecondes pour traiter la requĂȘte dans le composant AppSec. |
CROWDSEC_ALWAYS_SEND_TO_APPSEC |
no |
global | no | Toujours envoyer : Mettre Ă yes pour toujours envoyer les requĂȘtes Ă AppSec, mĂȘme s'il y a une dĂ©cision au niveau de l'IP. |
CROWDSEC_APPSEC_SSL_VERIFY |
no |
global | no | Vérification SSL : Mettre à yes pour vérifier le certificat SSL du composant AppSec. |
!!! info "Ă propos des modes de fonctionnement" - Le mode Live interroge l'API CrowdSec pour chaque requĂȘte entrante, offrant une protection en temps rĂ©el au prix d'une latence plus Ă©levĂ©e. - Le mode Stream tĂ©lĂ©charge pĂ©riodiquement toutes les dĂ©cisions de l'API CrowdSec et les met en cache localement, rĂ©duisant la latence avec un lĂ©ger retard dans l'application des nouvelles dĂ©cisions.
Exemples de configurations
=== "Configuration de base"
C'est une configuration simple pour lorsque CrowdSec s'exĂ©cute sur le mĂȘme hĂŽte :
```yaml
USE_CROWDSEC: "yes"
CROWDSEC_API: "http://crowdsec:8080"
CROWDSEC_API_KEY: "your-api-key-here"
CROWDSEC_MODE: "live"
```
=== "Configuration avancée avec AppSec"
Une configuration plus complÚte incluant le composant de sécurité applicative :
```yaml
USE_CROWDSEC: "yes"
CROWDSEC_API: "http://crowdsec:8080"
CROWDSEC_API_KEY: "your-api-key-here"
CROWDSEC_MODE: "stream"
CROWDSEC_UPDATE_FREQUENCY: "30"
CROWDSEC_EXCLUDE_LOCATION: "/health,/metrics"
# Configuration AppSec
CROWDSEC_APPSEC_URL: "http://crowdsec:7422"
CROWDSEC_APPSEC_FAILURE_ACTION: "deny"
CROWDSEC_ALWAYS_SEND_TO_APPSEC: "yes"
CROWDSEC_APPSEC_SSL_VERIFY: "yes"
```
Ătape 3 â Valider lâintĂ©gration
- Dans les journaux du planificateur, recherchez les entrées
CrowdSec configuration successfully generatedetCrowdSec bouncer denied requestafin de vérifier que le plugin est actif. - CÎté CrowdSec, surveillez
cscli metrics showou la console CrowdSec pour vous assurer que les dĂ©cisions BunkerWeb apparaissent comme prĂ©vu. - Dans lâinterface BunkerWeb, ouvrez la page du plugin CrowdSec pour voir lâĂ©tat de lâintĂ©gration.
Custom SSL certificate
Prise en charge STREAM â
Le plugin Certificat SSL personnalisĂ© permet dâutiliser vos propres certificats SSL/TLS avec BunkerWeb, au lieu de ceux gĂ©nĂ©rĂ©s automatiquement. Utile si vous possĂ©dez dĂ©jĂ des certificats dâune AC de confiance, avez des besoins spĂ©cifiques ou centralisez la gestion des certificats.
Comment ça marche :
- Vous fournissez le certificat et la clé privée (chemins de fichiers ou données en base64/PEM).
- BunkerWeb valide le format et lâutilisabilitĂ© des fichiers.
- Lors dâune connexion sĂ©curisĂ©e, BunkerWeb sert votre certificat personnalisĂ©.
- La validité est surveillée et des alertes sont émises avant expiration.
- Vous gardez le contrĂŽle total sur le cycle de vie des certificats.
!!! info "Surveillance automatique"
Avec USE_CUSTOM_SSL: yes, BunkerWeb surveille le certificat CUSTOM_SSL_CERT, détecte les changements et recharge NGINX si nécessaire.
Comment lâutiliser
- Activer :
USE_CUSTOM_SSL: yes. - Méthode : fichiers vs données, priorité via
CUSTOM_SSL_CERT_PRIORITY. - Fichiers : fournissez les chemins du certificat et de la clé privée.
- Données : fournissez les chaßnes base64 ou PEM en clair.
!!! tip "Mode stream"
En mode stream, configurez LISTEN_STREAM_PORT_SSL pour le port SSL/TLS.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_CUSTOM_SSL |
no |
multisite | non | Activer lâusage dâun certificat personnalisĂ©. |
CUSTOM_SSL_CERT_PRIORITY |
file |
multisite | non | Priorité des sources : file (fichiers) ou data (données). |
CUSTOM_SSL_CERT |
multisite | non | Chemin complet vers le certificat (ou bundle). | |
CUSTOM_SSL_KEY |
multisite | non | Chemin complet vers la clé privée. | |
CUSTOM_SSL_CERT_DATA |
multisite | non | Données du certificat (base64 ou PEM en clair). | |
CUSTOM_SSL_KEY_DATA |
multisite | non | Données de la clé privée (base64 ou PEM en clair). |
!!! warning "Sécurité" Protégez la clé privée (droits adaptés, lisible par le scheduler BunkerWeb uniquement).
!!! tip "Format" Les certificats doivent ĂȘtre au format PEM. Convertissez si nĂ©cessaire.
!!! info "ChaĂźnes de certification" Si une chaĂźne intermĂ©diaire est nĂ©cessaire, fournissez le bundle complet dans lâordre (certificat puis intermĂ©diaires).
Exemples
=== "Fichiers"
```yaml
USE_CUSTOM_SSL: "yes"
CUSTOM_SSL_CERT_PRIORITY: "file"
CUSTOM_SSL_CERT: "/path/to/your/certificate.pem"
CUSTOM_SSL_KEY: "/path/to/your/private-key.pem"
```
=== "Données base64"
```yaml
USE_CUSTOM_SSL: "yes"
CUSTOM_SSL_CERT_PRIORITY: "data"
CUSTOM_SSL_CERT_DATA: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR..."
CUSTOM_SSL_KEY_DATA: "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSEV..."
```
=== "PEM en clair"
```yaml
USE_CUSTOM_SSL: "yes"
CUSTOM_SSL_CERT_PRIORITY: "data"
CUSTOM_SSL_CERT_DATA: |
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIUJH...certificate content...AAAA
-----END CERTIFICATE-----
CUSTOM_SSL_KEY_DATA: |
-----BEGIN PRIVATE KEY-----
MIIEvQIBADAN...key content...AAAA
-----END PRIVATE KEY-----
```
=== "Fallback"
```yaml
USE_CUSTOM_SSL: "yes"
CUSTOM_SSL_CERT_PRIORITY: "file"
CUSTOM_SSL_CERT: "/path/to/your/certificate.pem"
CUSTOM_SSL_KEY: "/path/to/your/private-key.pem"
CUSTOM_SSL_CERT_DATA: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR..."
CUSTOM_SSL_KEY_DATA: "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSEV..."
```
DNSBL
Prise en charge STREAM â
Le plugin DNSBL (Domain Name System Blacklist) protĂšge contre les IP malveillantes connues en vĂ©rifiant lâadresse IP du client auprĂšs de serveurs DNSBL externes. Cette fonctionnalitĂ© aide Ă se prĂ©munir du spam, des botnets et de diverses menaces en sâappuyant on des listes communautaires dâIP problĂ©matiques.
Comment ça marche :
- Lorsquâun client se connecte Ă votre site, BunkerWeb interroge les serveurs DNSBL que vous avez choisis via le protocole DNS.
- La vĂ©rification sâeffectue en envoyant une requĂȘte DNS inversĂ©e Ă chaque serveur DNSBL avec lâIP du client.
- Si un serveur DNSBL confirme que lâIP du client est listĂ©e comme malveillante, BunkerWeb bannit automatiquement ce client, empĂȘchant les menaces potentielles dâatteindre votre application.
- Les rĂ©sultats sont mis en cache pour amĂ©liorer les performances pour les visites rĂ©pĂ©tĂ©es depuis la mĂȘme IP.
- Les recherches sont asynchrones pour minimiser lâimpact sur le temps de chargement.
Comment lâutiliser
Suivez ces étapes pour configurer et utiliser la fonctionnalité DNSBL :
- Activer la fonction : La fonction DNSBL est désactivée par défaut. Passez
USE_DNSBLĂyespour l'activer. - Configurer les serveurs DNSBL : Ajoutez les noms de domaine des services DNSBL que vous souhaitez utiliser dans le paramĂštre
DNSBL_LIST. - Appliquer les paramÚtres : Une fois configuré, BunkerWeb vérifiera automatiquement les connexions entrantes auprÚs des serveurs DNSBL spécifiés.
- Surveiller l'efficacitĂ© : Consultez la web UI pour voir les statistiques des requĂȘtes bloquĂ©es par les vĂ©rifications DNSBL.
ParamĂštres de configuration
Général
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_DNSBL |
no |
multisite | non | Activer DNSBL : mettre à yes pour activer les vérifications DNSBL pour les connexions entrantes. |
DNSBL_LIST |
bl.blocklist.de sbl.spamhaus.org xbl.spamhaus.org |
global | non | Serveurs DNSBL : liste des domaines de serveurs DNSBL à vérifier, séparés par des espaces. |
Listes dâexception
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
DNSBL_IGNORE_IP |
`` | multisite | oui | IP/CIDR séparés par des espaces pour lesquels ignorer les vérifications DNSBL (liste blanche). |
DNSBL_IGNORE_IP_URLS |
`` | multisite | oui | URL séparées par des espaces fournissant des IP/CIDR à ignorer. Supporte http(s):// et file://. |
!!! tip "Choisir des serveurs DNSBL" Choisissez des fournisseurs DNSBL réputés pour minimiser les faux positifs. La liste par défaut inclut des services bien établis qui conviennent à la plupart des sites web :
- **bl.blocklist.de :** Liste les IP qui ont été détectées en train d'attaquer d'autres serveurs.
- **sbl.spamhaus.org :** Se concentre sur les sources de spam et autres activités malveillantes.
- **xbl.spamhaus.org :** Cible les systÚmes infectés, tels que les machines compromises ou les proxys ouverts.
!!! info "Principe de fonctionnement de DNSBL" Les serveurs DNSBL fonctionnent en rĂ©pondant Ă des requĂȘtes DNS spĂ©cialement formatĂ©es. Lorsque BunkerWeb vĂ©rifie une adresse IP, il inverse l'IP et y ajoute le nom de domaine du DNSBL. Si la requĂȘte DNS rĂ©sultante renvoie une rĂ©ponse de « succĂšs », l'IP est considĂ©rĂ©e comme Ă©tant sur la liste noire.
!!! warning "Considérations sur la performance" Bien que BunkerWeb optimise les recherches DNSBL pour la performance, l'ajout d'un grand nombre de serveurs DNSBL pourrait potentiellement impacter les temps de réponse. Commencez avec quelques serveurs DNSBL réputés et surveillez la performance avant d'en ajouter d'autres.
Exemples de configuration
=== "Configuration de base"
Une configuration simple utilisant les serveurs DNSBL par défaut :
```yaml
USE_DNSBL: "yes"
DNSBL_LIST: "bl.blocklist.de sbl.spamhaus.org xbl.spamhaus.org"
```
=== "Configuration minimale"
Une configuration minimale se concentrant sur les services DNSBL les plus fiables :
```yaml
USE_DNSBL: "yes"
DNSBL_LIST: "zen.spamhaus.org"
```
Cette configuration utilise uniquement :
- **zen.spamhaus.org** : La liste combinĂ©e de Spamhaus est souvent considĂ©rĂ©e comme suffisante en tant que solution autonome en raison de sa large couverture et de sa rĂ©putation de prĂ©cision. Elle combine les listes SBL, XBL et PBL en une seule requĂȘte, la rendant efficace et complĂšte.
=== "Exclure des IP de confiance"
Vous pouvez exclure certains clients des vérifications DNSBL via des valeurs statiques et/ou des fichiers distants :
- `DNSBL_IGNORE_IP` : Ajoutez des IP et des plages CIDR séparées par des espaces. Exemple : `192.0.2.10 203.0.113.0/24 2001:db8::/32`.
- `DNSBL_IGNORE_IP_URLS` : Fournissez des URL dont le contenu liste une IP/CIDR par ligne. Les commentaires commençant par `#` ou `;` sont ignorés. Les entrées en double sont dédupliquées.
Quand une IP cliente correspond Ă la liste dâexclusion, BunkerWeb saute les requĂȘtes DNSBL et met en cache le rĂ©sultat « ok » pour accĂ©lĂ©rer les requĂȘtes suivantes.
=== "Utiliser des URL distantes"
La tùche `dnsbl-download` télécharge et met en cache les IP à ignorer toutes les heures :
- Protocoles : `https://`, `http://` et chemins locaux `file://`.
- Un cache par URL avec une somme de contrĂŽle empĂȘche les tĂ©lĂ©chargements redondants (dĂ©lai de grĂące d'1 heure).
- Fichier fusionné par service : `/var/cache/bunkerweb/dnsbl/<service>/IGNORE_IP.list`.
- Chargé au démarrage et fusionné avec `DNSBL_IGNORE_IP`.
Exemple combinant des sources statiques et des URL :
```yaml
USE_DNSBL: "yes"
DNSBL_LIST: "zen.spamhaus.org"
DNSBL_IGNORE_IP: "10.0.0.0/8 192.168.0.0/16 2001:db8::/32"
DNSBL_IGNORE_IP_URLS: "https://exemple.com/allow-cidrs.txt file:///etc/bunkerweb/dnsbl/ignore.txt"
```
=== "Utiliser des fichiers locaux"
Chargez des IP Ă ignorer depuis des fichiers locaux en utilisant des URL `file://` :
```yaml
USE_DNSBL: "yes"
DNSBL_LIST: "zen.spamhaus.org"
DNSBL_IGNORE_IP_URLS: "file:///etc/bunkerweb/dnsbl/ignore.txt file:///opt/data/allow-cidrs.txt"
```
Database
Prise en charge STREAM â
Le plugin Base de donnĂ©es fournit une intĂ©gration robuste pour BunkerWeb en permettant le stockage centralisĂ© et la gestion des donnĂ©es de configuration, des journaux et dâautres informations essentielles.
Ce composant cĆur prend en charge plusieurs moteurs : SQLite, PostgreSQL, MySQL/MariaDB et Oracle, afin de choisir la solution la mieux adaptĂ©e Ă votre environnement et Ă vos besoins.
Comment ça marche :
- BunkerWeb se connecte à la base configurée via une URI au format SQLAlchemy.
- Les donnĂ©es de configuration critiques, les informations dâexĂ©cution et les journaux des jobs sont stockĂ©s de maniĂšre sĂ©curisĂ©e en base.
- Des tùches de maintenance automatiques optimisent la base en gérant la croissance et en purgeant les enregistrements excédentaires.
- Pour la haute disponibilité, vous pouvez configurer une URI en lecture seule servant de bascule et/ou pour délester les lectures.
- Les opérations base de données sont journalisées selon le niveau de log spécifié, offrant la visibilité adaptée.
Comment lâutiliser
Ătapes pour configurer la base de donnĂ©es :
- Choisir un moteur : SQLite (par défaut), PostgreSQL, MySQL/MariaDB ou Oracle.
- Configurer lâURIÂ : renseignez
DATABASE_URI(format SQLAlchemy) pour la base principale. - Optionnel :
DATABASE_URI_READONLYpour les opérations en lecture seule ou en secours.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
DATABASE_URI |
sqlite:////var/lib/bunkerweb/db.sqlite3 |
global | non | URI principale de connexion (format SQLAlchemy). |
DATABASE_URI_READONLY |
global | non | URI optionnelle en lecture seule (offload/HA). | |
DATABASE_LOG_LEVEL |
warning |
global | non | Niveau de verbosité des logs DB : debug, info, warn, warning, error. |
DATABASE_MAX_JOBS_RUNS |
10000 |
global | non | Nombre max dâentrĂ©es de runs de jobs conservĂ©es avant purge automatique. |
DATABASE_MAX_SESSION_AGE_DAYS |
14 |
global | non | Durée max de conservation des sessions UI (en jours) avant purge automatique. |
!!! tip "Choix du moteur" - SQLite (dĂ©faut) : simple et fichier unique, idĂ©al monoânĆud/tests. - PostgreSQL : recommandĂ© en production multiâinstances (robustesse, concurrence). - MySQL/MariaDB : alternative solide aux capacitĂ©s proches de PostgreSQL. - Oracle : adaptĂ© aux environnements dâentreprise standardisĂ©s sur Oracle.
!!! info "Format SQLAlchemy" - SQLite : sqlite:////chemin/vers/database.sqlite3 - PostgreSQL : postgresql://user:password@hÎte:port/base - MySQL/MariaDB : mysql://user:password@hÎte:port/base ou mariadb://user:password@hÎte:port/base - Oracle : oracle://user:password@hÎte:port/base
!!! warning "Maintenance" Des tùches quotidiennes assurent la maintenance automatique :
- Purge des runs de jobs excĂ©dentaires : supprime lâhistorique au-delĂ de
DATABASE_MAX_JOBS_RUNS. - Purge des sessions UI expirées : enlÚve les sessions plus anciennes que
DATABASE_MAX_SESSION_AGE_DAYS.
Ces jobs Ă©vitent la croissance illimitĂ©e tout en conservant un historique dâexploitation pertinent.
Easy Resolve
(PRO)
Prise en charge STREAM â
Provides a simpler way to fix false positives in reports.
Errors
Prise en charge STREAM â
Le plugin Errors fournit une gestion personnalisable des erreurs HTTP, afin de dĂ©finir lâapparence des rĂ©ponses dâerreur pour vos utilisateurs. Vous pouvez ainsi afficher des pages dâerreur claires et cohĂ©rentes avec votre identitĂ©, plutĂŽt que les pages techniques par dĂ©faut du serveur.
Comment ça marche :
- Quand une erreur HTTP survient (ex. 400, 404, 500), BunkerWeb intercepte la réponse.
- à la place de la page par défaut, BunkerWeb affiche une page personnalisée et soignée.
- Les pages dâerreur sont configurables : vous pouvez fournir un fichier HTML par code dâerreur. Les fichiers doivent ĂȘtre placĂ©s dans le rĂ©pertoire dĂ©fini par
ROOT_FOLDER(voir le plugin Misc).- Par défaut,
ROOT_FOLDERvaut/var/www/html/{server_name}. - En mode multisite, chaque site a son propre
ROOT_FOLDERÂ ; placez les pages dâerreur dans le dossier correspondant Ă chaque site.
- Par défaut,
- Les pages par défaut expliquent clairement le problÚme et suggÚrent des actions possibles.
Comment lâutiliser
- Définir les pages personnalisées : utilisez
ERRORSpour associer des codes HTTP à des fichiers HTML (dansROOT_FOLDER). - Configurer vos pages : utilisez celles de BunkerWeb par défaut ou vos propres fichiers.
- Définir les codes interceptés : avec
INTERCEPTED_ERROR_CODES, choisissez les codes toujours gĂ©rĂ©s par BunkerWeb. - Laissez BunkerWeb faire le reste : la gestion dâerreurs sera appliquĂ©e automatiquement.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
ERRORS |
multisite | non | Pages dâerreur personnalisĂ©es : paires CODE=/chemin/page.html. |
|
INTERCEPTED_ERROR_CODES |
400 401 403 404 405 413 429 500 501 502 503 504 |
multisite | non | Codes interceptĂ©s : liste de codes gĂ©rĂ©s avec la page par dĂ©faut si aucune page personnalisĂ©e nâest dĂ©finie. |
!!! tip "Conception des pages" Les pages par dĂ©faut sont claires et pĂ©dagogiques : description de lâerreur, causes possibles, actions suggĂ©rĂ©es et repĂšres visuels.
!!! info "Types dâerreurs" - 4xx (cĂŽtĂ© client) : requĂȘtes invalides, ressource inexistante, authentification manquante⊠- 5xx (cĂŽtĂ© serveur) : impossibilitĂ© de traiter une requĂȘte valide (erreur interne, indisponibilitĂ© temporaireâŠ).
Exemples
=== "Gestion par défaut"
```yaml
INTERCEPTED_ERROR_CODES: "400 401 403 404 405 413 429 500 501 502 503 504"
```
=== "Pages personnalisées"
```yaml
ERRORS: "404=/custom/404.html 500=/custom/500.html"
INTERCEPTED_ERROR_CODES: "400 401 403 404 405 413 429 500 501 502 503 504"
```
=== "Gestion sélective"
```yaml
INTERCEPTED_ERROR_CODES: "404 500"
```
Greylist
Prise en charge STREAM â ïž
Le plugin Greylist adopte une approche flexible : il autorise lâaccĂšs aux visiteurs correspondant Ă des critĂšres donnĂ©s tout en maintenant les contrĂŽles de sĂ©curitĂ©. Contrairement aux listes noire/blanche, il crĂ©e un juste milieu.
Comment ça marche :
- Vous dĂ©finissez des critĂšres (IP, rĂ©seaux, rDNS, ASN, UserâAgent, motifs dâURI).
- Un visiteur qui correspond est autorisé, mais reste soumis aux autres contrÎles.
- Sâil ne correspond Ă aucun critĂšre greylist, lâaccĂšs est refusĂ©.
- Des sources externes peuvent alimenter automatiquement la liste.
Comment lâutiliser
- Activer :
USE_GREYLIST: yes. - RĂšgles : dĂ©finissez IP/rĂ©seaux, rDNS, ASN, UserâAgent ou URIs.
- Sources externes : optionnel, configurez des URLs pour mises à jour.
- Suivi : consultez la web UI.
!!! tip "Comportement dâaccĂšs" - Visiteurs greylist : accĂšs autorisĂ© mais contrĂŽles appliquĂ©s. - Autres visiteurs : accĂšs refusĂ©.
!!! info "Mode stream" En mode stream, seuls IP, rDNS et ASN sont pris en compte.
ParamĂštres
Général
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_GREYLIST |
no |
multisite | non | Activer la greylist. |
=== "Adresse IP"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------------ | ------ | --------- | -------- | -------------------------------------------------------------- |
| `GREYLIST_IP` | | multisite | non | Liste dâIP/rĂ©seaux (CIDR) Ă greylist, sĂ©parĂ©s par des espaces. |
| `GREYLIST_IP_URLS` | | multisite | non | URLs contenant des IP/réseaux à greylist. |
=== "Reverse DNS"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ---------------------- | ------ | --------- | -------- | -------------------------------------------- |
| `GREYLIST_RDNS` | | multisite | non | Suffixes de DNS inversés à greylist. |
| `GREYLIST_RDNS_GLOBAL` | `yes` | multisite | non | Vérifier seulement les IP globales si `yes`. |
| `GREYLIST_RDNS_URLS` | | multisite | non | URLs contenant des suffixes rDNS Ă greylist. |
=== "ASN"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------------- | ------ | --------- | -------- | -------------------------------------------------- |
| `GREYLIST_ASN` | | multisite | non | NumĂ©ros dâAS Ă greylist (sĂ©parĂ©s par des espaces). |
| `GREYLIST_ASN_URLS` | | multisite | non | URLs contenant des AS Ă greylist. |
=== "UserâAgent"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------------- | ------ | --------- | -------- | -------------------------------------------------- |
| `GREYLIST_USER_AGENT` | | multisite | non | Motifs (regex PCRE) dâUserâAgent Ă greylist. |
| `GREYLIST_USER_AGENT_URLS` | | multisite | non | URLs contenant des motifs dâUserâAgent Ă greylist. |
=== "URI"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------------- | ------ | --------- | -------- | ------------------------------------------- |
| `GREYLIST_URI` | | multisite | non | Motifs dâURI (regex PCRE) Ă greylist. |
| `GREYLIST_URI_URLS` | | multisite | non | URLs contenant des motifs dâURI Ă greylist. |
!!! info "Format dâURL"
Les paramĂštres *_URLS supportent HTTP/HTTPS et file:///. Auth basique possible avec http://user:pass@url.
!!! tip "Mises à jour" Les listes récupérées par URL sont mises à jour automatiquement toutes les heures.
Travailler avec des fichiers de listes locaux
Les paramĂštres *_URLS fournis par les plugins Whitelist, Greylist et Blacklist utilisent le mĂȘme tĂ©lĂ©chargeur. Lorsque vous rĂ©fĂ©rencez une URL file:/// :
- Le chemin est rĂ©solu dans le conteneur du scheduler (dans un dĂ©ploiement Docker il sâagit gĂ©nĂ©ralement de
bunkerweb-scheduler). Montez-y vos fichiers et vĂ©rifiez que lâutilisateur scheduler possĂšde un accĂšs en lecture. - Chaque fichier est un texte encodĂ© en UTF-8 avec une entrĂ©e par ligne. Les lignes vides sont ignorĂ©es et les commentaires doivent commencer par
#ou;. Les commentaires//ne sont pas pris en charge. - Valeur attendue selon le type de liste :
- Listes IP acceptent des adresses IPv4/IPv6 ou des réseaux CIDR (par exemple
192.0.2.10ou2001:db8::/48). - Listes rDNS attendent un suffixe sans espaces (par exemple
.search.msn.com). Les valeurs sont automatiquement converties en minuscules. - Listes ASN peuvent contenir uniquement le numéro (
32934) ou le numĂ©ro prĂ©fixĂ© parAS(AS15169). - Listes User-Agent sont traitĂ©es comme des motifs PCRE et la ligne complĂšte est conservĂ©e (espaces compris). Placez vos commentaires sur une ligne sĂ©parĂ©e pour Ă©viter quâils ne soient interprĂ©tĂ©s comme motif.
- Listes URI doivent commencer par
/et peuvent utiliser des jetons PCRE tels que^ou$.
- Listes IP acceptent des adresses IPv4/IPv6 ou des réseaux CIDR (par exemple
Exemples de fichiers conformes :
# /etc/bunkerweb/lists/ip-greylist.txt
192.0.2.10
198.51.100.0/24
# /etc/bunkerweb/lists/ua-greylist.txt
(?:^|\s)FriendlyScanner(?:\s|$)
TrustedMonitor/\d+\.\d+
Gzip
Prise en charge STREAM â
Le plugin GZIP compresse les rĂ©ponses HTTP avec lâalgorithme gzip pour rĂ©duire la bande passante et accĂ©lĂ©rer le chargement des pages.
Fonctionnement
- BunkerWeb détecte si le client supporte gzip.
- Si oui, la réponse est compressée au niveau configuré.
- Les enâtĂȘtes indiquent lâusage de gzip.
- Le navigateur dĂ©compresse avant lâaffichage.
Comment lâutiliser
- Activer :
USE_GZIP: yes(désactivé par défaut). - Types MIME : définir
GZIP_TYPES. - Taille minimale :
GZIP_MIN_LENGTHpour éviter les trÚs petits fichiers. - Niveau de compression :
GZIP_COMP_LEVEL(1â9). - Contenu proxifié : ajuster
GZIP_PROXIED.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_GZIP |
no |
multisite | non | Activer la compression gzip. |
GZIP_TYPES |
application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml |
multisite | non | Types MIME compressés. |
GZIP_MIN_LENGTH |
1000 |
multisite | non | Taille minimale (octets) pour appliquer la compression. |
GZIP_COMP_LEVEL |
5 |
multisite | non | Niveau 1â9Â : plus haut = meilleure compression mais plus de CPU. |
GZIP_PROXIED |
no-cache no-store private expired auth |
multisite | non | PrĂ©cise quels contenus proxifiĂ©s doivent ĂȘtre compressĂ©s selon les enâtĂȘtes de rĂ©ponse. |
!!! tip "Niveau de compression"
5 est un bon compromis. Statique/CPU dispo : 7â9. Dynamique/CPU limité : 1â3.
Exemples
=== "Basique"
```yaml
USE_GZIP: "yes"
GZIP_TYPES: "application/javascript application/json application/xml text/css text/html text/javascript text/plain text/xml"
GZIP_MIN_LENGTH: "1000"
GZIP_COMP_LEVEL: "5"
```
=== "Compression maximale"
```yaml
USE_GZIP: "yes"
GZIP_TYPES: "application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml"
GZIP_MIN_LENGTH: "500"
GZIP_COMP_LEVEL: "9"
GZIP_PROXIED: "any"
```
=== "Performance équilibrée"
```yaml
USE_GZIP: "yes"
GZIP_TYPES: "application/javascript application/json text/css text/html text/javascript text/plain"
GZIP_MIN_LENGTH: "1000"
GZIP_COMP_LEVEL: "3"
GZIP_PROXIED: "no-cache no-store private expired"
```
=== "Contenu proxifié"
```yaml
USE_GZIP: "yes"
GZIP_TYPES: "application/javascript application/json text/css text/html text/javascript"
GZIP_MIN_LENGTH: "1000"
GZIP_COMP_LEVEL: "4"
GZIP_PROXIED: "any"
```
HTML injection
Prise en charge STREAM â
Le plugin dâinjection HTML permet dâajouter du code HTML personnalisĂ© dans les pages de votre site juste avant </body> ou </head>. IdĂ©al pour intĂ©grer des scripts dâanalytics, pixels de tracking, JS/CSS personnalisĂ©s ou des intĂ©grations tierces sans modifier le code source de votre application.
Comment ça marche :
- Ă la livraison dâune page, BunkerWeb inspecte la rĂ©ponse HTML.
- Si lâinjection « body » est configurĂ©e, il insĂšre votre HTML juste avant
</body>. - Si lâinjection « head » est configurĂ©e, il insĂšre votre HTML juste avant
</head>. - Lâinsertion sâapplique automatiquement Ă toutes les pages HTML servies.
Comment lâutiliser
- Préparez votre HTML personnalisé.
- Choisissez lâemplacement :
<head>,<body>, ou les deux. - Renseignez
INJECT_HEADet/ouINJECT_BODYavec votre code.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
INJECT_HEAD |
multisite | non | Code HTML injecté avant </head>. |
|
INJECT_BODY |
multisite | non | Code HTML injecté avant </body>. |
!!! tip "Bonnes pratiques" - Placez de préférence les scripts JS en fin de body pour éviter de bloquer le rendu. - Mettez le CSS et le JS critique dans le head pour éviter le flash de contenu non stylé. - Attention au contenu injecté qui pourrait casser le site.
Exemples
=== "Google Analytics"
```yaml
INJECT_HEAD: ""
INJECT_BODY: '<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script><script>window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag(''js'', new Date());gtag(''config'', ''G-XXXXXXXXXX'');</script>'
```
=== "Styles personnalisés"
```yaml
INJECT_HEAD: "<style>body { font-family: 'Arial', sans-serif; } .custom-element { color: blue; }</style>"
INJECT_BODY: ""
```
=== "Intégrations multiples"
```yaml
INJECT_HEAD: "<style>body { font-family: 'Arial', sans-serif; } .notification-banner { background: #f8f9fa; padding: 10px; text-align: center; }</style>"
INJECT_BODY: '<script src="https://cdn.example.com/js/widget.js"></script><script>initializeWidget(''your-api-key'');</script>'
```
=== "Bandeau cookies"
```yaml
INJECT_HEAD: "<style>.cookie-banner { position: fixed; bottom: 0; left: 0; right: 0; background: #f1f1f1; padding: 20px; text-align: center; z-index: 1000; } .cookie-banner button { background: #4CAF50; border: none; color: white; padding: 10px 20px; cursor: pointer; }</style>"
INJECT_BODY: '<div id="cookie-banner" class="cookie-banner">This website uses cookies to ensure you get the best experience. <button onclick="acceptCookies()">Accept</button></div><script>function acceptCookies() { document.getElementById(''cookie-banner'').style.display = ''none''; localStorage.setItem(''cookies-accepted'', ''true''); } if(localStorage.getItem(''cookies-accepted'') === ''true'') { document.getElementById(''cookie-banner'').style.display = ''none''; }</script>'
```
Headers
Prise en charge STREAM â
Les en-tĂȘtes HTTP jouent un rĂŽle crucial dans la sĂ©curitĂ©. Le plugin Headers offre une gestion robuste des en-tĂȘtes HTTP standards et personnalisĂ©s, amĂ©liorant ainsi la sĂ©curitĂ© et les fonctionnalitĂ©s. Il applique dynamiquement des mesures de sĂ©curitĂ©, telles que HSTS, CSP (y compris un mode de rapport seul), et l'injection d'en-tĂȘtes personnalisĂ©s, tout en empĂȘchant les fuites d'informations.
Comment ça marche
- Lorsqu'un client demande du contenu depuis votre site web, BunkerWeb traite les en-tĂȘtes de la rĂ©ponse.
- Les en-tĂȘtes de sĂ©curitĂ© sont appliquĂ©s conformĂ©ment Ă votre configuration.
- Des en-tĂȘtes personnalisĂ©s peuvent ĂȘtre ajoutĂ©s pour fournir des informations ou des fonctionnalitĂ©s supplĂ©mentaires aux clients.
- Les en-tĂȘtes indĂ©sirables qui pourraient rĂ©vĂ©ler des informations sur le serveur sont automatiquement supprimĂ©s.
- Les cookies sont modifiés pour inclure les attributs de sécurité appropriés en fonction de vos paramÚtres.
- Les en-tĂȘtes des serveurs en amont peuvent ĂȘtre prĂ©servĂ©s de maniĂšre sĂ©lective lorsque cela est nĂ©cessaire.
Comment lâutiliser
Suivez ces étapes pour configurer et utiliser la fonctionnalité Headers :
- Configurer les en-tĂȘtes de sĂ©curitĂ© : DĂ©finissez des valeurs pour les en-tĂȘtes courants.
- Ajouter des en-tĂȘtes personnalisĂ©s : DĂ©finissez les en-tĂȘtes personnalisĂ©s Ă l'aide du paramĂštre
CUSTOM_HEADER. - Supprimer les en-tĂȘtes indĂ©sirables : Utilisez
REMOVE_HEADERSpour vous assurer que les en-tĂȘtes qui pourraient exposer des dĂ©tails sur le serveur sont supprimĂ©s. - DĂ©finir la sĂ©curitĂ© des cookies : Activez une sĂ©curitĂ© robuste des cookies en configurant
COOKIE_FLAGSet en rĂ©glantCOOKIE_AUTO_SECURE_FLAGsuryespour que l'attribut Secure soit automatiquement ajoutĂ© sur les connexions HTTPS. - PrĂ©server les en-tĂȘtes en amont : SpĂ©cifiez les en-tĂȘtes en amont Ă conserver en utilisant
KEEP_UPSTREAM_HEADERS. - Tirer parti de l'application conditionnelle des en-tĂȘtes : Si vous souhaitez tester des politiques sans interruption, activez le mode CSP Report-Only via
CONTENT_SECURITY_POLICY_REPORT_ONLY.
Guide de configuration
=== "En-tĂȘtes de sĂ©curitĂ©"
**Aperçu**
Les en-tĂȘtes de sĂ©curitĂ© renforcent la communication sĂ©curisĂ©e, restreignent le chargement des ressources et prĂ©viennent les attaques comme le clickjacking et l'injection. Des en-tĂȘtes correctement configurĂ©s crĂ©ent une couche de dĂ©fense robuste pour votre site web.
!!! success "Avantages des en-tĂȘtes de sĂ©curitĂ©"
- **HSTS :** Assure que toutes les connexions sont chiffrées, protégeant contre les attaques de rétrogradation de protocole.
- **CSP :** EmpĂȘche l'exĂ©cution de scripts malveillants, rĂ©duisant le risque d'attaques XSS.
- **X-Frame-Options :** Bloque les tentatives de clickjacking en contrÎlant l'intégration des iframes.
- **Referrer Policy :** Limite les fuites d'informations sensibles via les en-tĂȘtes referrer.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------------------------------- | --------------------------------------------------------------------------------------------------- | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `STRICT_TRANSPORT_SECURITY` | `max-age=63072000; includeSubDomains; preload` | multisite | non | **HSTS :** Force les connexions HTTPS sécurisées, réduisant les risques d'attaques de type "man-in-the-middle". |
| `CONTENT_SECURITY_POLICY` | `object-src 'none'; form-action 'self'; frame-ancestors 'self';` | multisite | non | **CSP :** Restreint le chargement des ressources aux sources de confiance, atténuant les attaques de type cross-site scripting et d'injection de données. |
| `CONTENT_SECURITY_POLICY_REPORT_ONLY` | `no` | multisite | non | **Mode rapport CSP :** Signale les violations sans bloquer le contenu, aidant à tester les politiques de sécurité tout en capturant les journaux. |
| `X_FRAME_OPTIONS` | `SAMEORIGIN` | multisite | non | **X-Frame-Options :** EmpĂȘche le clickjacking en contrĂŽlant si votre site peut ĂȘtre intĂ©grĂ© dans une frame. |
| `X_CONTENT_TYPE_OPTIONS` | `nosniff` | multisite | non | **X-Content-Type-Options :** EmpĂȘche les navigateurs de "MIME-sniffer", protĂ©geant contre les attaques de type "drive-by download". |
| `X_DNS_PREFETCH_CONTROL` | `off` | multisite | non | **X-DNS-Prefetch-Control :** RĂ©gule le prĂ©chargement DNS pour rĂ©duire les requĂȘtes rĂ©seau involontaires et amĂ©liorer la confidentialitĂ©. |
| `REFERRER_POLICY` | `strict-origin-when-cross-origin` | multisite | non | **Politique de Referrer :** ContrÎle la quantité d'informations de référent envoyées, protégeant la vie privée de l'utilisateur. |
| `PERMISSIONS_POLICY` | `accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), ...` | multisite | non | **Politique de permissions :** Restreint l'accÚs aux fonctionnalités du navigateur, réduisant les vecteurs d'attaque potentiels. |
| `KEEP_UPSTREAM_HEADERS` | `Content-Security-Policy Permissions-Policy X-Frame-Options` | multisite | non | **Conserver les en-tĂȘtes :** PrĂ©serve les en-tĂȘtes en amont sĂ©lectionnĂ©s, facilitant l'intĂ©gration hĂ©ritĂ©e tout en maintenant la sĂ©curitĂ©. |
!!! tip "Bonnes pratiques"
- RĂ©visez et mettez Ă jour rĂ©guliĂšrement vos en-tĂȘtes de sĂ©curitĂ© pour vous conformer aux normes de sĂ©curitĂ© en constante Ă©volution.
- Utilisez des outils comme [Mozilla Observatory](https://observatory.mozilla.org/) pour valider la configuration de vos en-tĂȘtes.
- Testez la CSP en mode `Report-Only` avant de l'appliquer pour éviter de casser des fonctionnalités.
=== "ParamĂštres des cookies"
**Aperçu**
Des paramĂštres de cookies appropriĂ©s garantissent la sĂ©curitĂ© des sessions utilisateur en empĂȘchant le dĂ©tournement, la fixation et le cross-site scripting. Les cookies sĂ©curisĂ©s maintiennent l'intĂ©gritĂ© de la session sur HTTPS et amĂ©liorent la protection globale des donnĂ©es des utilisateurs.
!!! success "Avantages des cookies sécurisés"
- **Attribut HttpOnly :** EmpĂȘche les scripts cĂŽtĂ© client d'accĂ©der aux cookies, attĂ©nuant les risques XSS.
- **Attribut SameSite :** Réduit les attaques CSRF en restreignant l'utilisation des cookies inter-origines.
- **Attribut Secure :** Assure que les cookies ne sont transmis que sur des connexions HTTPS chiffrées.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------------------- | ------------------------- | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `COOKIE_FLAGS` | `* HttpOnly SameSite=Lax` | multisite | oui | **Attributs de cookie :** Ajoute automatiquement des attributs de sécurité tels que HttpOnly et SameSite, protégeant les cookies de l'accÚs par des scripts cÎté client et des attaques CSRF. |
| `COOKIE_AUTO_SECURE_FLAG` | `yes` | multisite | non | **Attribut Secure automatique :** Assure que les cookies ne sont envoyés que sur des connexions HTTPS sécurisées en ajoutant automatiquement l'attribut Secure. |
!!! tip "Bonnes pratiques"
- Utilisez `SameSite=Strict` pour les cookies sensibles afin d'empĂȘcher l'accĂšs inter-origines.
- Auditez réguliÚrement vos paramÚtres de cookies pour assurer la conformité avec les réglementations de sécurité et de confidentialité.
- Ăvitez de dĂ©finir des cookies sans l'attribut Secure dans les environnements de production.
=== "En-tĂȘtes personnalisĂ©s"
**Aperçu**
Les en-tĂȘtes personnalisĂ©s vous permettent d'ajouter des en-tĂȘtes HTTP spĂ©cifiques pour rĂ©pondre aux exigences de l'application ou de performance. Ils offrent de la flexibilitĂ© mais doivent ĂȘtre configurĂ©s avec soin pour Ă©viter d'exposer des dĂ©tails sensibles du serveur.
!!! success "Avantages des en-tĂȘtes personnalisĂ©s"
- AmĂ©liorez la sĂ©curitĂ© en supprimant les en-tĂȘtes inutiles qui pourraient divulguer des dĂ©tails sur le serveur.
- Ajoutez des en-tĂȘtes spĂ©cifiques Ă l'application pour amĂ©liorer la fonctionnalitĂ© ou le dĂ©bogage.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ---------------- | ------------------------------------------------------------------------------------ | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CUSTOM_HEADER` | | multisite | oui | **En-tĂȘte personnalisĂ© :** Permet d'ajouter des en-tĂȘtes dĂ©finis par l'utilisateur au format NomEnTete: ValeurEnTete pour des amĂ©liorations de sĂ©curitĂ© ou de performance spĂ©cialisĂ©es. |
| `REMOVE_HEADERS` | `Server Expect-CT X-Powered-By X-AspNet-Version X-AspNetMvc-Version Public-Key-Pins` | multisite | non | **Supprimer les en-tĂȘtes :** SpĂ©cifie les en-tĂȘtes Ă supprimer, rĂ©duisant ainsi le risque d'exposer des dĂ©tails internes du serveur et des vulnĂ©rabilitĂ©s connues. |
!!! warning "Considérations de sécurité"
- Ăvitez d'exposer des informations sensibles via des en-tĂȘtes personnalisĂ©s.
- RĂ©visez et mettez Ă jour rĂ©guliĂšrement les en-tĂȘtes personnalisĂ©s pour les aligner sur les exigences de votre application.
!!! tip "Bonnes pratiques"
- Utilisez `REMOVE_HEADERS` pour supprimer les en-tĂȘtes comme `Server` et `X-Powered-By` afin de rĂ©duire les risques de prise d'empreintes.
- Testez les en-tĂȘtes personnalisĂ©s dans un environnement de prĂ©-production avant de les dĂ©ployer en production.
Exemples de configuration
=== "En-tĂȘtes de sĂ©curitĂ© de base"
Une configuration standard avec les en-tĂȘtes de sĂ©curitĂ© essentiels :
```yaml
STRICT_TRANSPORT_SECURITY: "max-age=63072000; includeSubDomains; preload"
CONTENT_SECURITY_POLICY: "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'"
X_FRAME_OPTIONS: "SAMEORIGIN"
X_CONTENT_TYPE_OPTIONS: "nosniff"
REFERRER_POLICY: "strict-origin-when-cross-origin"
REMOVE_HEADERS: "Server X-Powered-By X-AspNet-Version"
```
=== "Sécurité des cookies renforcée"
Configuration avec des paramÚtres de sécurité des cookies robustes :
```yaml
COOKIE_FLAGS: "* HttpOnly SameSite=Strict"
COOKIE_FLAGS_2: "session_cookie Secure HttpOnly SameSite=Strict"
COOKIE_FLAGS_3: "auth_cookie Secure HttpOnly SameSite=Strict Max-Age=3600"
COOKIE_AUTO_SECURE_FLAG: "yes"
```
=== "En-tĂȘtes personnalisĂ©s pour API"
Configuration pour un service API avec des en-tĂȘtes personnalisĂ©s :
```yaml
CUSTOM_HEADER: "API-Version: 1.2.3"
CUSTOM_HEADER_2: "Access-Control-Max-Age: 86400"
CONTENT_SECURITY_POLICY: "default-src 'none'; frame-ancestors 'none'"
REMOVE_HEADERS: "Server X-Powered-By X-AspNet-Version X-Runtime"
```
=== "Content Security Policy - Mode rapport"
Configuration pour tester la CSP sans casser les fonctionnalités :
```yaml
CONTENT_SECURITY_POLICY: "default-src 'self'; script-src 'self' https://trusted-cdn.example.com; img-src 'self' data: https://*.example.com; style-src 'self' 'unsafe-inline' https://trusted-cdn.example.com; connect-src 'self' https://api.example.com; object-src 'none'; frame-ancestors 'self'; form-action 'self'; base-uri 'self'; report-uri https://example.com/csp-reports"
CONTENT_SECURITY_POLICY_REPORT_ONLY: "yes"
```
Let's Encrypt
Prise en charge STREAM â
Le plugin Letâs Encrypt simplifie la gestion des certificats SSL/TLS en automatisant la crĂ©ation, le renouvellement et la configuration de certificats gratuits de Let's Encrypt. Cette fonctionnalitĂ© active les connexions HTTPS sĂ©curisĂ©es pour vos sites web sans la complexitĂ© de la gestion manuelle des certificats, rĂ©duisant ainsi les coĂ»ts et la charge administrative.
Comment ça marche :
- Une fois activé, BunkerWeb détecte automatiquement les domaines configurés pour votre site.
- BunkerWeb demande des certificats SSL/TLS gratuits à l'autorité de certification de Let's Encrypt.
- La propriété du domaine est vérifiée par des défis HTTP (prouvant que vous contrÎlez le site) ou des défis DNS (prouvant que vous contrÎlez le DNS de votre domaine).
- Les certificats sont automatiquement installés et configurés pour vos domaines.
- BunkerWeb gÚre les renouvellements de certificats en arriÚre-plan avant leur expiration, assurant une disponibilité HTTPS continue.
- L'ensemble du processus est entiÚrement automatisé, ne nécessitant qu'une intervention minimale aprÚs la configuration initiale.
!!! info "PrĂ©requis" Pour utiliser cette fonctionnalitĂ©, assurez-vous que des enregistrements DNS A corrects sont configurĂ©s pour chaque domaine, pointant vers la ou les IP publiques oĂč BunkerWeb est accessible. Sans une configuration DNS correcte, le processus de vĂ©rification de domaine Ă©chouera.
Comment lâutiliser
Suivez ces étapes pour configurer et utiliser la fonctionnalité Let's Encrypt :
- Activer la fonctionnalité : Mettez le paramÚtre
AUTO_LETS_ENCRYPTĂyespour activer l'Ă©mission et le renouvellement automatiques des certificats. - Fournir un e-mail de contact (recommandĂ©) : Saisissez votre adresse e-mail dans le paramĂštre
EMAIL_LETS_ENCRYPTpour que Let's Encrypt puisse vous prévenir avant l'expiration d'un certificat. Si vous laissez ce champ vide, BunkerWeb s'enregistrera sans adresse (option Certbot--register-unsafely-without-email) et vous ne recevrez aucun rappel ni e-mail de récupération. - Choisir le type de défi : Sélectionnez la vérification
httpoudnsavec le paramÚtreLETS_ENCRYPT_CHALLENGE. - Configurer le fournisseur DNS : Si vous utilisez les défis DNS, spécifiez votre fournisseur DNS et vos identifiants.
- Sélectionner un profil de certificat : Choisissez votre profil de certificat préféré avec le paramÚtre
LETS_ENCRYPT_PROFILE(classic, tlsserver ou shortlived). - Laissez BunkerWeb s'occuper du reste : Une fois configuré, les certificats sont automatiquement émis, installés et renouvelés selon les besoins.
!!! tip "Profils de certificat"
Let's Encrypt propose différents profils de certificat pour différents cas d'usage : - classic : Certificats à usage général avec une validité de 90 jours (par défaut) - tlsserver : Optimisé pour l'authentification de serveur TLS avec une validité de 90 jours et une charge utile plus petite - shortlived : Sécurité renforcée avec une validité de 7 jours pour les environnements automatisés - custom : Si votre serveur ACME prend en charge un profil différent, définissez-le avec LETS_ENCRYPT_CUSTOM_PROFILE.
!!! info "Disponibilité des profils"
Notez que les profils tlsserver et shortlived peuvent ne pas ĂȘtre disponibles dans tous les environnements ou avec tous les clients ACME pour le moment. Le profil classic a la compatibilitĂ© la plus large et est recommandĂ© pour la plupart des utilisateurs. Si un profil sĂ©lectionnĂ© n'est pas disponible, le systĂšme basculera automatiquement sur le profil classic.
ParamĂštres de configuration
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
AUTO_LETS_ENCRYPT |
no |
multisite | no | Activer Let's Encrypt : Mettre à yes pour activer l'émission et le renouvellement automatiques des certificats. |
LETS_ENCRYPT_PASSTHROUGH |
no |
multisite | no | Passer Ă travers Let's Encrypt : Mettre Ă yes pour passer les requĂȘtes Let's Encrypt au serveur web. Utile si BunkerWeb est derriĂšre un autre reverse proxy gĂ©rant le SSL. |
EMAIL_LETS_ENCRYPT |
- |
multisite | no | E-mail de contact : Adresse e-mail utilisée pour les rappels Let's Encrypt. Ne laissez ce champ vide que si vous acceptez de ne recevoir aucun avertissement ni e-mail de récupération (Certbot s'enregistre avec --register-unsafely-without-email). |
LETS_ENCRYPT_CHALLENGE |
http |
multisite | no | Type de défi : Méthode utilisée pour vérifier la propriété du domaine. Options : http ou dns. |
LETS_ENCRYPT_DNS_PROVIDER |
multisite | no | Fournisseur DNS : Pour les défis DNS, le fournisseur à utiliser (ex. : cloudflare, route53, digitalocean). | |
LETS_ENCRYPT_DNS_PROPAGATION |
default |
multisite | no | Propagation DNS : Le temps d'attente en secondes pour la propagation DNS. Si aucune valeur n'est fournie, le temps par défaut du fournisseur est utilisé. |
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM |
multisite | yes | ĂlĂ©ment d'identification : ĂlĂ©ments de configuration pour l'authentification du fournisseur DNS (ex. : cloudflare_api_token 123456). Les valeurs peuvent ĂȘtre du texte brut, encodĂ©es en base64 ou un objet JSON. |
|
LETS_ENCRYPT_DNS_CREDENTIAL_DECODE_BASE64 |
yes |
multisite | no | Décoder les identifiants DNS Base64 : Décoder automatiquement les identifiants du fournisseur DNS encodés en base64 lorsqu'il est défini sur yes. Les valeurs au format base64 sont décodées avant utilisation (sauf pour le fournisseur rfc2136). Désactivez si vos identifiants sont intentionnellement en base64. |
USE_LETS_ENCRYPT_WILDCARD |
no |
multisite | no | Certificats Wildcard : Si mis à yes, crée des certificats wildcard pour tous les domaines. Uniquement disponible avec les défis DNS. |
USE_LETS_ENCRYPT_STAGING |
no |
multisite | no | Utiliser Staging : Si mis à yes, utilise l'environnement de staging de Let's Encrypt pour les tests. Les limites de débit y sont plus élevées mais les certificats ne sont pas fiables. |
LETS_ENCRYPT_CLEAR_OLD_CERTS |
no |
global | no | Effacer les anciens certificats : Si mis Ă yes, supprime les anciens certificats inutiles lors du renouvellement. |
LETS_ENCRYPT_PROFILE |
classic |
multisite | no | Profil de certificat : Sélectionnez le profil à utiliser. Options : classic (général), tlsserver (optimisé TLS), ou shortlived (7 jours). |
LETS_ENCRYPT_CUSTOM_PROFILE |
multisite | no | Profil de certificat personnalisé : Saisissez un profil personnalisé si votre serveur ACME le supporte. Remplace LETS_ENCRYPT_PROFILE s'il est défini. |
|
LETS_ENCRYPT_MAX_RETRIES |
3 |
multisite | no | Tentatives maximales : Nombre de tentatives de génération de certificat en cas d'échec. 0 pour désactiver. Utile pour les problÚmes réseau temporaires. |
!!! info "Information et comportement"
- Le paramĂštre LETS_ENCRYPT_DNS_CREDENTIAL_ITEM est un paramĂštre multiple et peut ĂȘtre utilisĂ© pour dĂ©finir plusieurs Ă©lĂ©ments pour le fournisseur DNS. Les Ă©lĂ©ments seront enregistrĂ©s dans un fichier de cache, et Certbot lira les informations d'identification Ă partir de celui-ci.
- Si aucun paramÚtre LETS_ENCRYPT_DNS_PROPAGATION n'est fourni, le temps de propagation par défaut du fournisseur est utilisé.
- L'automatisation complÚte de Let's Encrypt avec le défi http fonctionne en mode stream tant que vous ouvrez le port 80/tcp depuis l'extérieur. Utilisez le paramÚtre LISTEN_STREAM_PORT_SSL pour choisir votre port d'écoute SSL/TLS.
- Si LETS_ENCRYPT_PASSTHROUGH est mis Ă yes, BunkerWeb ne gĂ©rera pas les requĂȘtes de dĂ©fi ACME lui-mĂȘme mais les transmettra au serveur web backend. Ceci est utile dans les scĂ©narios oĂč BunkerWeb agit comme un reverse proxy devant un autre serveur configurĂ© pour gĂ©rer les dĂ©fis Let's Encrypt.
!!! tip "Défis HTTP vs. DNS" Les défis HTTP sont plus simples à configurer et fonctionnent bien pour la plupart des sites web :
- Nécessite que votre site soit publiquement accessible sur le port 80
- Configuré automatiquement par BunkerWeb
- Ne peut pas ĂȘtre utilisĂ© pour les certificats wildcard
**Les défis DNS** offrent plus de flexibilité et sont requis pour les certificats wildcard :
- Fonctionne mĂȘme si votre site n'est pas publiquement accessible
- Nécessite les identifiants de l'API de votre fournisseur DNS
- Requis pour les certificats wildcard (ex. : *.example.com)
- Utile lorsque le port 80 est bloqué ou indisponible
!!! warning "Certificats wildcard"
Les certificats wildcard ne sont disponibles qu'avec les défis DNS. Si vous souhaitez les utiliser, vous devez mettre le paramÚtre USE_LETS_ENCRYPT_WILDCARD à yes et configurer correctement les identifiants de votre fournisseur DNS.
!!! warning "Limites de débit"
Let's Encrypt impose des limites de débit sur l'émission de certificats. Lors du test de configurations, utilisez l'environnement de staging en mettant USE_LETS_ENCRYPT_STAGING à yes pour éviter d'atteindre les limites de production. Les certificats de staging ne sont pas reconnus par les navigateurs mais sont utiles pour valider votre configuration.
Fournisseurs DNS supportés
Le plugin Let's Encrypt prend en charge un large Ă©ventail de fournisseurs DNS pour les dĂ©fis DNS. Chaque fournisseur nĂ©cessite des informations d'identification spĂ©cifiques qui doivent ĂȘtre fournies via le paramĂštre LETS_ENCRYPT_DNS_CREDENTIAL_ITEM.
| Fournisseur | Description | ParamĂštres obligatoires | ParamĂštres optionnels | Documentation |
|---|---|---|---|---|
bunny |
bunny.net | api_key |
Documentation | |
cloudflare |
Cloudflare | soit api_tokensoit email et api_key |
Documentation | |
desec |
deSEC | token |
Documentation | |
digitalocean |
DigitalOcean | token |
Documentation | |
domainoffensive |
Domain-Offensive | api_token |
Documentation | |
dnsimple |
DNSimple | token |
Documentation | |
dnsmadeeasy |
DNS Made Easy | api_keysecret_key |
Documentation | |
duckdns |
DuckDNS | duckdns_token |
Documentation | |
dynu |
Dynu | auth_token |
Documentation | |
gehirn |
Gehirn DNS | api_tokenapi_secret |
Documentation | |
google |
Google Cloud | project_idprivate_key_idprivate_keyclient_emailclient_idclient_x509_cert_url |
type (défaut : service_account)auth_uri (défaut : https://accounts.google.com/o/oauth2/auth)token_uri (défaut : https://accounts.google.com/o/oauth2/token)auth_provider_x509_cert_url (défaut : https://www.googleapis.com/oauth2/v1/certs) |
Documentation |
infomaniak |
Infomaniak | token |
Documentation | |
ionos |
IONOS | prefixsecret |
endpoint (défaut : https://api.hosting.ionos.com) |
Documentation |
linode |
Linode | key |
Documentation | |
luadns |
LuaDNS | emailtoken |
Documentation | |
njalla |
Njalla | token |
Documentation | |
nsone |
NS1 | api_key |
Documentation | |
ovh |
OVH | application_keyapplication_secretconsumer_key |
endpoint (défaut : ovh-eu) |
Documentation |
pdns |
PowerDNS | endpointapi_keyserver_id (default: localhost)disable_notify (default: false) |
Documentation | |
rfc2136 |
RFC 2136 | servernamesecret |
port (défaut : 53)algorithm (défaut : HMAC-SHA512)sign_query (défaut : false) |
Documentation |
route53 |
Amazon Route 53 | access_key_idsecret_access_key |
Documentation | |
sakuracloud |
Sakura Cloud | api_tokenapi_secret |
Documentation | |
scaleway |
Scaleway | application_token |
Documentation |
Exemples de configuration
=== "Défi HTTP de base"
Configuration simple utilisant les défis HTTP pour un seul domaine :
```yaml
AUTO_LETS_ENCRYPT: "yes"
EMAIL_LETS_ENCRYPT: "admin@example.com"
LETS_ENCRYPT_CHALLENGE: "http"
```
=== "DNS Cloudflare avec Wildcard"
Configuration pour les certificats wildcard utilisant le DNS de Cloudflare :
```yaml
AUTO_LETS_ENCRYPT: "yes"
EMAIL_LETS_ENCRYPT: "admin@example.com"
LETS_ENCRYPT_CHALLENGE: "dns"
LETS_ENCRYPT_DNS_PROVIDER: "cloudflare"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM: "api_token VOTRE_JETON_API"
USE_LETS_ENCRYPT_WILDCARD: "yes"
```
=== "Configuration AWS Route53"
Configuration utilisant Amazon Route53 pour les défis DNS :
```yaml
AUTO_LETS_ENCRYPT: "yes"
EMAIL_LETS_ENCRYPT: "admin@example.com"
LETS_ENCRYPT_CHALLENGE: "dns"
LETS_ENCRYPT_DNS_PROVIDER: "route53"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM: "aws_access_key_id VOTRE_CLE_ACCES"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM_2: "aws_secret_access_key VOTRE_CLE_SECRETE"
```
=== "Test avec l'environnement de Staging et tentatives"
Configuration pour tester la configuration avec l'environnement de staging et des paramÚtres de tentatives améliorés :
```yaml
AUTO_LETS_ENCRYPT: "yes"
EMAIL_LETS_ENCRYPT: "admin@example.com"
LETS_ENCRYPT_CHALLENGE: "http"
USE_LETS_ENCRYPT_STAGING: "yes"
LETS_ENCRYPT_MAX_RETRIES: "5"
```
=== "DigitalOcean avec temps de propagation personnalisé"
Configuration utilisant le DNS de DigitalOcean avec un temps d'attente de propagation plus long :
```yaml
AUTO_LETS_ENCRYPT: "yes"
EMAIL_LETS_ENCRYPT: "admin@example.com"
LETS_ENCRYPT_CHALLENGE: "dns"
LETS_ENCRYPT_DNS_PROVIDER: "digitalocean"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM: "token VOTRE_JETON_API"
LETS_ENCRYPT_DNS_PROPAGATION: "120"
```
=== "Google Cloud DNS"
Configuration utilisant Google Cloud DNS avec les informations d'identification d'un compte de service :
```yaml
AUTO_LETS_ENCRYPT: "yes"
EMAIL_LETS_ENCRYPT: "admin@example.com"
LETS_ENCRYPT_CHALLENGE: "dns"
LETS_ENCRYPT_DNS_PROVIDER: "google"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM: "project_id votre-id-projet"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM_2: "private_key_id votre-id-cle-privee"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM_3: "private_key votre-cle-privee"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM_4: "client_email votre-email-compte-service"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM_5: "client_id votre-id-client"
LETS_ENCRYPT_DNS_CREDENTIAL_ITEM_6: "client_x509_cert_url votre-url-cert"
```
Limit
Prise en charge STREAM â ïž
Le plugin Limit permet dâappliquer des politiques de limitation pour garantir un usage Ă©quitable et protĂ©ger vos ressources contre les abus, les attaques par dĂ©ni de service (DoS) et la surconsommation. Ces politiques incluent :
- Le nombre de connexions simultanĂ©es par adresse IP (support STREAM â )
- Le nombre de requĂȘtes par adresse IP et par URL sur une pĂ©riode donnĂ©e (support STREAM â)
Fonctionnement
- Limitation de dĂ©bit : Suit le nombre de requĂȘtes de chaque adresse IP cliente vers des URL spĂ©cifiques. Si un client dĂ©passe la limite de dĂ©bit configurĂ©e, les requĂȘtes suivantes sont temporairement refusĂ©es.
- Limitation de connexions : Surveille et restreint le nombre de connexions simultanĂ©es de chaque adresse IP cliente. DiffĂ©rentes limites de connexion peuvent ĂȘtre appliquĂ©es en fonction du protocole utilisĂ© (HTTP/1, HTTP/2, HTTP/3 ou stream).
- Dans les deux cas, les clients qui dépassent les limites définies reçoivent un code de statut HTTP « 429 - Too Many Requests », ce qui aide à prévenir la surcharge du serveur.
Utilisation
- Activer la limitation de dĂ©bit de requĂȘtes : Utilisez
USE_LIMIT_REQpour activer la limitation de dĂ©bit de requĂȘtes et dĂ©finissez des motifs d'URL avec leurs limites correspondantes. - Activer la limitation de connexions : Utilisez
USE_LIMIT_CONNpour activer la limitation de connexions et définissez le nombre maximum de connexions simultanées pour différents protocoles. - Appliquer un contrÎle granulaire : Créez plusieurs rÚgles de limitation de débit pour différentes URL afin de fournir des niveaux de protection variés sur votre site.
- Suivre l'efficacitĂ© : Utilisez l'interface web pour consulter les statistiques sur les requĂȘtes et les connexions limitĂ©es.
ParamĂštres
=== "Limitation de requĂȘtes"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ---------------- | ------ | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `USE_LIMIT_REQ` | `yes` | multisite | non | **Activer la limitation de requĂȘtes :** Mettre Ă `yes` pour activer la fonctionnalitĂ© de limitation de dĂ©bit par requĂȘtes. |
| `LIMIT_REQ_URL` | `/` | multisite | oui | **Motif dâURL :** Motif dâURL (regex PCRE) auquel la limite de dĂ©bit sera appliquĂ©e ; utilisez `/` pour l'appliquer Ă toutes les requĂȘtes. |
| `LIMIT_REQ_RATE` | `2r/s` | multisite | oui | **Limite de dĂ©bit :** Taux de requĂȘtes maximal au format `Nr/t`, oĂč N est le nombre de requĂȘtes et t est l'unitĂ© de temps : s (seconde), m (minute), h (heure), ou d (jour). |
!!! tip "Format de la limitation de débit"
Le format de la limite de dĂ©bit est spĂ©cifiĂ© comme Nr/t oĂč :
- `N` est le nombre de requĂȘtes autorisĂ©es
- `r` est la lettre littĂ©rale 'r' (pour 'requĂȘtes')
- `/` est une barre oblique littérale
- `t` est l'unité de temps : `s` (seconde), `m` (minute), `h` (heure), ou `d` (jour)
Par exemple, `5r/m` signifie que 5 requĂȘtes par minute sont autorisĂ©es pour chaque adresse IP.
=== "Limitation de connexions"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ----------------------- | ------ | --------- | -------- | -------------------------------------------------------------------------------------------------------------- |
| `USE_LIMIT_CONN` | `yes` | multisite | non | **Activer la limitation de connexions :** Mettre à `yes` pour activer la limitation de connexions simultanées. |
| `LIMIT_CONN_MAX_HTTP1` | `10` | multisite | non | **Connexions HTTP/1.X :** Nombre maximal de connexions HTTP/1.X simultanées par adresse IP. |
| `LIMIT_CONN_MAX_HTTP2` | `100` | multisite | non | **Flux HTTP/2 :** Nombre maximal de flux HTTP/2 simultanés par adresse IP. |
| `LIMIT_CONN_MAX_HTTP3` | `100` | multisite | non | **Flux HTTP/3 :** Nombre maximal de flux HTTP/3 simultanés par adresse IP. |
| `LIMIT_CONN_MAX_STREAM` | `10` | multisite | non | **Connexions Stream :** Nombre maximal de connexions stream simultanées par adresse IP. |
!!! info "Limitation de connexions vs de requĂȘtes" - La limitation de connexions restreint le nombre de connexions simultanĂ©es qu'une seule adresse IP peut maintenir. - La limitation de dĂ©bit de requĂȘtes restreint le nombre de requĂȘtes qu'une adresse IP peut effectuer dans une pĂ©riode de temps dĂ©finie.
L'utilisation des deux méthodes offre une protection complÚte contre divers types d'abus.
!!! warning "RĂ©glages adaptĂ©s" Des limites trop strictes peuvent impacter des clients lĂ©gitimes, notamment pour HTTP/2 et HTTP/3 oĂč les navigateurs utilisent souvent plusieurs flux. Les valeurs par dĂ©faut sont Ă©quilibrĂ©es pour la plupart des cas d'utilisation, mais envisagez de les ajuster en fonction des besoins de votre application et du comportement des utilisateurs.
Exemples de configuration
=== "Protection de base"
Une configuration simple utilisant les paramÚtres par défaut pour protéger l'ensemble de votre site :
```yaml
USE_LIMIT_REQ: "yes"
LIMIT_REQ_URL: "/"
LIMIT_REQ_RATE: "2r/s"
USE_LIMIT_CONN: "yes"
LIMIT_CONN_MAX_HTTP1: "10"
LIMIT_CONN_MAX_HTTP2: "100"
LIMIT_CONN_MAX_HTTP3: "100"
LIMIT_CONN_MAX_STREAM: "10"
```
=== "Protection d'endpoints spécifiques"
Configuration avec différentes limites de débit pour divers endpoints :
```yaml
USE_LIMIT_REQ: "yes"
# RĂšgle par dĂ©faut pour toutes les requĂȘtes
LIMIT_REQ_URL: "/"
LIMIT_REQ_RATE: "10r/s"
# Limite plus stricte pour la page de connexion
LIMIT_REQ_URL_2: "^/login"
LIMIT_REQ_RATE_2: "1r/s"
# Limite plus stricte pour l'API
LIMIT_REQ_URL_3: "^/api/"
LIMIT_REQ_RATE_3: "5r/s"
USE_LIMIT_CONN: "yes"
LIMIT_CONN_MAX_HTTP1: "10"
LIMIT_CONN_MAX_HTTP2: "100"
LIMIT_CONN_MAX_HTTP3: "100"
LIMIT_CONN_MAX_STREAM: "10"
```
=== "Configuration pour site Ă fort trafic"
Configuration optimisée pour les sites à fort trafic avec des limites plus permissives :
```yaml
USE_LIMIT_REQ: "yes"
# Limite générale
LIMIT_REQ_URL: "/"
LIMIT_REQ_RATE: "30r/s"
# Protection de la zone d'administration
LIMIT_REQ_URL_2: "^/admin/"
LIMIT_REQ_RATE_2: "5r/s"
USE_LIMIT_CONN: "yes"
LIMIT_CONN_MAX_HTTP1: "50"
LIMIT_CONN_MAX_HTTP2: "200"
LIMIT_CONN_MAX_HTTP3: "200"
LIMIT_CONN_MAX_STREAM: "30"
```
=== "Configuration pour serveur d'API"
Configuration optimisĂ©e pour un serveur d'API avec des limites de dĂ©bit exprimĂ©es en requĂȘtes par minute :
```yaml
USE_LIMIT_REQ: "yes"
# Endpoints de l'API publique
LIMIT_REQ_URL: "^/api/public/"
LIMIT_REQ_RATE: "120r/m"
# Endpoints de l'API privée
LIMIT_REQ_URL_2: "^/api/private/"
LIMIT_REQ_RATE_2: "300r/m"
# Endpoint d'authentification
LIMIT_REQ_URL_3: "^/api/auth"
LIMIT_REQ_RATE_3: "10r/m"
USE_LIMIT_CONN: "yes"
LIMIT_CONN_MAX_HTTP1: "20"
LIMIT_CONN_MAX_HTTP2: "100"
LIMIT_CONN_MAX_HTTP3: "100"
LIMIT_CONN_MAX_STREAM: "20"
```
Load Balancer
(PRO)
Prise en charge STREAM â
Provides load balancing feature to group of upstreams with optional healthchecks.
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
LOADBALANCER_HEALTHCHECK_DICT_SIZE |
10m |
global | non | Shared dict size (datastore for all healthchecks). |
LOADBALANCER_UPSTREAM_NAME |
global | oui | Name of the upstream (used in REVERSE_PROXY_HOST). | |
LOADBALANCER_UPSTREAM_SERVERS |
global | oui | List of servers/IPs in the server group. | |
LOADBALANCER_UPSTREAM_MODE |
round-robin |
global | oui | Load balancing mode (round-robin or sticky). |
LOADBALANCER_UPSTREAM_STICKY_METHOD |
ip |
global | oui | Sticky session method (ip or cookie). |
LOADBALANCER_UPSTREAM_RESOLVE |
no |
global | oui | Dynamically resolve upstream hostnames. |
LOADBALANCER_UPSTREAM_KEEPALIVE |
global | oui | Number of keepalive connections to cache per worker. | |
LOADBALANCER_UPSTREAM_KEEPALIVE_TIMEOUT |
60s |
global | oui | Keepalive timeout for upstream connections. |
LOADBALANCER_UPSTREAM_KEEPALIVE_TIME |
1h |
global | oui | Keepalive time for upstream connections. |
LOADBALANCER_HEALTHCHECK_URL |
/status |
global | oui | The healthcheck URL. |
LOADBALANCER_HEALTHCHECK_INTERVAL |
2000 |
global | oui | Healthcheck interval in milliseconds. |
LOADBALANCER_HEALTHCHECK_TIMEOUT |
1000 |
global | oui | Healthcheck timeout in milliseconds. |
LOADBALANCER_HEALTHCHECK_FALL |
3 |
global | oui | Number of failed healthchecks before marking the server as down. |
LOADBALANCER_HEALTHCHECK_RISE |
1 |
global | oui | Number of successful healthchecks before marking the server as up. |
LOADBALANCER_HEALTHCHECK_VALID_STATUSES |
200 |
global | oui | HTTP status considered valid in healthchecks. |
LOADBALANCER_HEALTHCHECK_CONCURRENCY |
10 |
global | oui | Maximum number of concurrent healthchecks. |
LOADBALANCER_HEALTHCHECK_TYPE |
http |
global | oui | Type of healthcheck (http or https). |
LOADBALANCER_HEALTHCHECK_SSL_VERIFY |
yes |
global | oui | Verify SSL certificate in healthchecks. |
LOADBALANCER_HEALTHCHECK_HOST |
global | oui | Host header for healthchecks (useful for HTTPS). |
Metrics
Prise en charge STREAM â ïž
Le plugin Metrics offre une collecte/visualisation des indicateurs de votre instance BunkerWeb : performances, Ă©vĂ©nements de sĂ©curitĂ©, statistiques systĂšmeâŠ
Comment ça marche :
- BunkerWeb collecte des mĂ©triques lors du traitement des requĂȘtes/rĂ©ponses.
- Compteurs de requĂȘtes bloquĂ©es, mesures de perfs et stats sĂ©curitĂ© sont enregistrĂ©s.
- Stockage en mĂ©moire avec limites configurables pour contenir lâusage de ressources.
- En multiâinstances, Redis permet dâagrĂ©ger/centraliser les donnĂ©es.
- AccĂšs via API ou web UI.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_METRICS |
yes |
multisite | non | Activer la collecte et lâaccĂšs aux mĂ©triques. |
METRICS_MEMORY_SIZE |
16m |
global | non | Taille du stockage interne (ex. 16m, 32m). |
METRICS_MAX_BLOCKED_REQUESTS |
1000 |
global | non | Max de requĂȘtes bloquĂ©es conservĂ©es par worker. |
METRICS_MAX_BLOCKED_REQUESTS_REDIS |
100000 |
global | non | Max de requĂȘtes bloquĂ©es conservĂ©es dans Redis. |
METRICS_SAVE_TO_REDIS |
yes |
global | non | Sauvegarder compteurs/tableaux dans Redis pour agrégation cluster. |
!!! tip "Dimensionnement mémoire"
Ajustez METRICS_MEMORY_SIZE selon le trafic et le nombre dâinstances.
!!! info "IntĂ©gration Redis" Avec Redis, les requĂȘtes bloquĂ©es sont synchronisĂ©es pour une vue centralisĂ©e multiânĆuds.
!!! warning "Performance" Des valeurs trop Ă©levĂ©es augmentent lâusage mĂ©moire. Surveillez et ajustez.
Exemples
=== "Configuration par défaut"
```yaml
USE_METRICS: "yes"
METRICS_MEMORY_SIZE: "16m"
METRICS_MAX_BLOCKED_REQUESTS: "1000"
METRICS_MAX_BLOCKED_REQUESTS_REDIS: "100000"
METRICS_SAVE_TO_REDIS: "yes"
```
=== "Ressources limitées"
```yaml
USE_METRICS: "yes"
METRICS_MEMORY_SIZE: "8m"
METRICS_MAX_BLOCKED_REQUESTS: "500"
METRICS_MAX_BLOCKED_REQUESTS_REDIS: "10000"
METRICS_SAVE_TO_REDIS: "no"
```
=== "Fort trafic"
```yaml
USE_METRICS: "yes"
METRICS_MEMORY_SIZE: "64m"
METRICS_MAX_BLOCKED_REQUESTS: "5000"
METRICS_MAX_BLOCKED_REQUESTS_REDIS: "500000"
METRICS_SAVE_TO_REDIS: "yes"
```
=== "Désactivation"
```yaml
USE_METRICS: "no"
```
Migration
(PRO)
Prise en charge STREAM â
Migration of BunkerWeb configuration between instances made easy via the web UI
Miscellaneous
Prise en charge STREAM â ïž
Le plugin Divers (Miscellaneous) fournit des paramÚtres de base essentiels qui aident à maintenir la sécurité et la fonctionnalité de votre site web. Ce composant central offre des contrÎles complets pour :
- Le comportement du serveur - Configurez la maniĂšre dont votre serveur rĂ©pond Ă diverses requĂȘtes
- Les paramĂštres HTTP - GĂ©rez les mĂ©thodes, la taille des requĂȘtes et les options de protocole
- La gestion des fichiers - ContrĂŽlez le service des fichiers statiques et optimisez leur livraison
- Le support des protocoles - Activez les protocoles HTTP modernes pour de meilleures performances
- Les configurations systĂšme - Ătendez les fonctionnalitĂ©s et amĂ©liorez la sĂ©curitĂ©
Que vous ayez besoin de restreindre les mĂ©thodes HTTP, de gĂ©rer la taille des requĂȘtes, d'optimiser la mise en cache des fichiers ou de contrĂŽler la maniĂšre dont votre serveur rĂ©pond Ă diverses requĂȘtes, ce plugin vous donne les outils pour affiner le comportement de votre service web tout en optimisant Ă la fois la performance et la sĂ©curitĂ©.
Fonctionnalités clés
| Catégorie de fonctionnalité | Description |
|---|---|
| ContrÎle des méthodes HTTP | Définissez quelles méthodes HTTP sont acceptables pour votre application |
| Protection du serveur par dĂ©faut | EmpĂȘchez l'accĂšs non autorisĂ© par des noms d'hĂŽte incorrects et forcez le SNI pour les connexions sĂ©curisĂ©es |
| Gestion de la taille des requĂȘtes | DĂ©finissez des limites pour le corps des requĂȘtes client et les tĂ©lĂ©versements de fichiers |
| Service de fichiers statiques | Configurez et optimisez la livraison de contenu statique depuis des dossiers racine personnalisés |
| Mise en cache des fichiers | Améliorez les performances grùce à des mécanismes avancés de mise en cache des descripteurs de fichiers |
| Support des protocoles | Configurez les options des protocoles HTTP modernes (HTTP2/HTTP3) et les paramĂštres de port Alt-Svc |
| Rapport anonyme | Rapport de statistiques d'utilisation optionnel pour aider à améliorer BunkerWeb |
| Support des plugins externes | Ătendez les fonctionnalitĂ©s en intĂ©grant des plugins externes via des URL |
| ContrĂŽle du statut HTTP | Configurez la rĂ©ponse de votre serveur lors du refus de requĂȘtes (y compris la fermeture de connexion) |
Guide de configuration
=== "Sécurité du serveur par défaut"
**ContrÎles du serveur par défaut**
En HTTP, l'en-tĂȘte `Host` spĂ©cifie le serveur cible, mais il peut ĂȘtre manquant ou inconnu, souvent Ă cause de bots recherchant des vulnĂ©rabilitĂ©s.
Pour bloquer de telles requĂȘtes :
- Mettez `DISABLE_DEFAULT_SERVER` Ă `yes` pour refuser silencieusement ces requĂȘtes en utilisant le [code de statut `444` de NGINX](https://http.dev/444).
- Pour une sécurité plus stricte, activez `DISABLE_DEFAULT_SERVER_STRICT_SNI` pour rejeter les connexions SSL/TLS sans SNI valide.
!!! success "Avantages en matiÚre de sécurité"
- Bloque la manipulation de l'en-tĂȘte Host et le scan des hĂŽtes virtuels
- AttĂ©nue les risques de contrebande de requĂȘtes HTTP (HTTP request smuggling)
- Supprime le serveur par défaut comme vecteur d'attaque
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ----------------------------------- | ------ | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `DISABLE_DEFAULT_SERVER` | `no` | global | no | **Serveur par dĂ©faut :** Mettre Ă `yes` pour dĂ©sactiver le serveur par dĂ©faut lorsqu'aucun nom d'hĂŽte ne correspond Ă la requĂȘte. |
| `DISABLE_DEFAULT_SERVER_STRICT_SNI` | `no` | global | no | **SNI Strict :** Si mis Ă `yes`, requiert le SNI pour les connexions HTTPS et rejette les connexions sans SNI valide. |
!!! warning "Application du SNI"
Activer la validation stricte du SNI offre une sĂ©curitĂ© renforcĂ©e mais peut causer des problĂšmes si BunkerWeb est derriĂšre un proxy inverse qui transmet les requĂȘtes HTTPS sans prĂ©server les informations SNI. Testez minutieusement avant d'activer en production.
=== "Statut HTTP en cas de refus"
**ContrĂŽle du statut HTTP**
La premiĂšre Ă©tape dans la gestion de l'accĂšs refusĂ© Ă un client est de dĂ©finir l'action appropriĂ©e. Cela peut ĂȘtre configurĂ© avec le paramĂštre `DENY_HTTP_STATUS`. Lorsque BunkerWeb refuse une requĂȘte, vous pouvez contrĂŽler sa rĂ©ponse. Par dĂ©faut, il renvoie un statut `403 Forbidden`, affichant une page web ou un contenu personnalisĂ©.
Alternativement, le rĂ©gler sur `444` ferme immĂ©diatement la connexion sans envoyer de rĂ©ponse. Ce [code de statut non standard](https://http.dev/444), spĂ©cifique Ă NGINX, est utile pour ignorer silencieusement les requĂȘtes indĂ©sirables.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------------ | ------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `DENY_HTTP_STATUS` | `403` | global | no | **Statut HTTP de refus :** Code de statut HTTP Ă envoyer quand une requĂȘte est refusĂ©e (403 ou 444). Le code 444 ferme la connexion. |
!!! warning "Considérations sur le code de statut 444"
Comme les clients ne reçoivent aucun retour, le dĂ©pannage peut ĂȘtre plus difficile. RĂ©gler sur `444` est recommandĂ© uniquement si vous avez minutieusement traitĂ© les faux positifs, ĂȘtes expĂ©rimentĂ© avec BunkerWeb et exigez un niveau de sĂ©curitĂ© plus Ă©levĂ©.
!!! info "Mode stream"
En **mode stream**, ce paramÚtre est toujours appliqué comme `444`, ce qui signifie que la connexion sera fermée, quelle que soit la valeur configurée.
=== "Méthodes HTTP"
**ContrÎle des méthodes HTTP**
Restreindre les méthodes HTTP à celles requises par votre application est une mesure de sécurité fondamentale qui respecte le principe du moindre privilÚge. En définissant explicitement les méthodes acceptables, vous minimisez le risque d'exploitation via des méthodes inutilisées ou dangereuses.
Cette fonctionnalitĂ© est configurĂ©e avec `ALLOWED_METHODS`, oĂč les mĂ©thodes sont listĂ©es et sĂ©parĂ©es par un `|` (dĂ©faut : `GET|POST|HEAD`). Si un client tente une mĂ©thode non listĂ©e, le serveur rĂ©pondra avec un statut **405 - Method Not Allowed**.
Pour la plupart des sites web, le dĂ©faut `GET|POST|HEAD` est suffisant. Si votre application utilise des API RESTful, vous devrez peut-ĂȘtre inclure `PUT` et `DELETE`.
!!! success "Avantages en matiÚre de sécurité"
- EmpĂȘche l'exploitation de mĂ©thodes HTTP inutilisĂ©es ou inutiles
- Réduit la surface d'attaque en désactivant les méthodes potentiellement dangereuses
- Bloque les techniques d'énumération de méthodes HTTP utilisées par les attaquants
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ----------------- | ------ | -------- | -------- | ----------- |
| `ALLOWED_METHODS` | `GET | POST | HEAD` | multisite | no | **Méthodes HTTP :** Liste des méthodes HTTP autorisées, séparées par des barres verticales (` | `). |
!!! abstract "CORS et requĂȘtes pre-flight"
Si votre application prend en charge le [Cross-Origin Resource Sharing (CORS)](#cors), vous devriez inclure la mĂ©thode `OPTIONS` dans `ALLOWED_METHODS` pour gĂ©rer les requĂȘtes pre-flight. Cela garantit le bon fonctionnement pour les navigateurs effectuant des requĂȘtes inter-origines.
!!! danger "Considérations de sécurité"
- **Ăvitez d'activer `TRACE` ou `CONNECT` :** Ces mĂ©thodes sont rarement nĂ©cessaires et peuvent introduire des risques de sĂ©curitĂ© importants, comme le Cross-Site Tracing (XST) ou les attaques par tunnelisation.
- **Révisez réguliÚrement les méthodes autorisées :** Auditez périodiquement `ALLOWED_METHODS` pour vous assurer qu'il correspond aux besoins actuels de votre application.
- **Testez minutieusement avant le déploiement :** Les changements de restrictions de méthodes HTTP peuvent impacter la fonctionnalité de l'application. Validez votre configuration dans un environnement de pré-production.
=== "Limites de taille des requĂȘtes"
**Limites de taille des requĂȘtes**
La taille maximale du corps d'une requĂȘte peut ĂȘtre contrĂŽlĂ©e avec `MAX_CLIENT_SIZE` (dĂ©faut : `10m`). Les valeurs acceptĂ©es suivent la syntaxe dĂ©crite [ici](https://nginx.org/en/docs/syntax.html).
!!! success "Avantages en matiÚre de sécurité"
- ProtÚge contre les attaques par déni de service causées par des charges utiles excessives
- Atténue les vulnérabilités de débordement de tampon (buffer overflow)
- EmpĂȘche les attaques par tĂ©lĂ©versement de fichiers
- Réduit le risque d'épuisement des ressources du serveur
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ----------------- | ------ | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------- |
| `MAX_CLIENT_SIZE` | `10m` | multisite | no | **Taille maximale des requĂȘtes :** La taille maximale autorisĂ©e pour le corps des requĂȘtes client (ex. : tĂ©lĂ©versements). |
!!! tip "Bonnes pratiques de configuration de la taille des requĂȘtes"
Si vous devez autoriser un corps de requĂȘte de taille illimitĂ©e, vous pouvez mettre la valeur `MAX_CLIENT_SIZE` Ă `0`. Cependant, ce n'est **pas recommandĂ©** en raison des risques potentiels de sĂ©curitĂ© et de performance.
**Bonnes pratiques :**
- Configurez toujours `MAX_CLIENT_SIZE` à la plus petite valeur répondant aux besoins légitimes de votre application.
- Révisez et ajustez réguliÚrement ce paramÚtre pour l'aligner sur les besoins évolutifs de votre application.
- Ăvitez de mettre `0` sauf en cas de nĂ©cessitĂ© absolue, car cela peut exposer votre serveur Ă des attaques par dĂ©ni de service et Ă l'Ă©puisement des ressources.
En gérant soigneusement ce paramÚtre, vous pouvez garantir une sécurité et des performances optimales pour votre application.
=== "Support des protocoles"
**ParamĂštres des protocoles HTTP**
Les protocoles HTTP modernes comme HTTP/2 et HTTP/3 améliorent la performance et la sécurité. BunkerWeb permet une configuration facile de ces protocoles.
!!! success "Avantages en matiÚre de sécurité et de performance"
- **Avantages de sĂ©curitĂ© :** Les protocoles modernes comme HTTP/2 et HTTP/3 imposent TLS/HTTPS par dĂ©faut, rĂ©duisent la sensibilitĂ© Ă certaines attaques et amĂ©liorent la confidentialitĂ© grĂące aux en-tĂȘtes chiffrĂ©s (HTTP/3).
- **Avantages de performance :** Des fonctionnalitĂ©s comme le multiplexage, la compression des en-tĂȘtes, le server push et le transfert de donnĂ©es binaires amĂ©liorent la vitesse et l'efficacitĂ©.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------- | ------ | --------- | -------- | ----------------------------------------------------------------------------- |
| `LISTEN_HTTP` | `yes` | multisite | no | **Ăcoute HTTP :** RĂ©pondre aux requĂȘtes HTTP (non sĂ©curisĂ©es) si mis Ă `yes`. |
| `HTTP2` | `yes` | multisite | no | **HTTP2 :** Supporte le protocole HTTP2 lorsque HTTPS est activé. |
| `HTTP3` | `yes` | multisite | no | **HTTP3 :** Supporte le protocole HTTP3 lorsque HTTPS est activé. |
| `HTTP3_ALT_SVC_PORT` | `443` | multisite | no | **Port Alt-Svc HTTP3 :** Port Ă utiliser dans l'en-tĂȘte Alt-Svc pour HTTP3. |
!!! example "Ă propos de HTTP/3"
HTTP/3, la derniĂšre version du protocole Hypertext Transfer, utilise QUIC sur UDP au lieu de TCP, rĂ©solvant des problĂšmes comme le blocage en tĂȘte de ligne pour des connexions plus rapides et plus fiables.
NGINX a introduit un support expérimental pour HTTP/3 et QUIC à partir de la version 1.25.0. Cependant, cette fonctionnalité est encore expérimentale, et la prudence est de mise pour une utilisation en production. Pour plus de détails, consultez la [documentation officielle de NGINX](https://nginx.org/en/docs/quic.html).
Des tests approfondis sont recommandés avant d'activer HTTP/3 en production.
=== "Service de fichiers statiques"
**Configuration du service de fichiers**
BunkerWeb peut servir des fichiers statiques directement ou agir comme un proxy inverse vers un serveur d'application. Par défaut, les fichiers sont servis depuis `/var/www/html/{server_name}`.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------- | ----------------------------- | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `SERVE_FILES` | `yes` | multisite | no | **Servir des fichiers :** Si `yes`, BunkerWeb servira les fichiers statiques depuis le dossier racine configuré. |
| `ROOT_FOLDER` | `/var/www/html/{server_name}` | multisite | no | **Dossier racine :** Le répertoire depuis lequel servir les fichiers statiques. Vide signifie utiliser l'emplacement par défaut. |
!!! tip "Bonnes pratiques pour le service de fichiers statiques"
- **Service direct :** Activez le service de fichiers (`SERVE_FILES=yes`) lorsque BunkerWeb est responsable de servir directement les fichiers statiques.
- **Proxy inverse :** Si BunkerWeb agit comme un proxy inverse, **désactivez le service de fichiers** (`SERVE_FILES=no`) pour réduire la surface d'attaque et éviter d'exposer des répertoires inutiles.
- **Permissions :** Assurez-vous que les permissions de fichiers et les configurations de chemin sont correctes pour empĂȘcher tout accĂšs non autorisĂ©.
- **SĂ©curitĂ© :** Ăvitez d'exposer des rĂ©pertoires ou des fichiers sensibles par des mauvaises configurations.
En gérant soigneusement le service de fichiers statiques, vous pouvez optimiser les performances tout en maintenant un environnement sécurisé.
=== "ParamĂštres systĂšme"
**Gestion des plugins et du systĂšme**
Ces paramÚtres gÚrent l'interaction de BunkerWeb avec des systÚmes externes et contribuent à l'amélioration du produit via des statistiques d'utilisation anonymes optionnelles.
**Rapport anonyme**
Le rapport anonyme fournit à l'équipe de BunkerWeb des informations sur la maniÚre dont le logiciel est utilisé. Cela aide à identifier les domaines d'amélioration et à prioriser le développement de fonctionnalités. Les rapports sont strictement statistiques et n'incluent aucune information sensible ou personnellement identifiable. Ils couvrent :
- Les fonctionnalités activées
- Les schémas de configuration généraux
Vous pouvez désactiver cette fonctionnalité si vous le souhaitez en mettant `SEND_ANONYMOUS_REPORT` à `no`.
**Plugins externes**
Les plugins externes vous permettent d'étendre les fonctionnalités de BunkerWeb en intégrant des modules tiers. Cela permet une personnalisation supplémentaire et des cas d'utilisation avancés.
!!! danger "Sécurité des plugins externes"
**Les plugins externes peuvent introduire des risques de sécurité s'ils ne sont pas correctement vérifiés.** Suivez ces bonnes pratiques pour minimiser les menaces potentielles :
- N'utilisez que des plugins provenant de sources fiables.
- Vérifiez l'intégrité des plugins à l'aide de sommes de contrÎle (checksums) lorsqu'elles sont disponibles.
- Révisez et mettez à jour réguliÚrement les plugins pour garantir la sécurité et la compatibilité.
Pour plus de détails, consultez la [documentation des Plugins](plugins.md).
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ----------------------- | ------ | -------- | -------- | ------------------------------------------------------------------------------------------------- |
| `SEND_ANONYMOUS_REPORT` | `yes` | global | no | **Rapports anonymes :** Envoyer des rapports d'utilisation anonymes aux mainteneurs de BunkerWeb. |
| `EXTERNAL_PLUGIN_URLS` | | global | no | **Plugins externes :** URL pour télécharger des plugins externes (séparées par des espaces). |
=== "Mise en cache des fichiers"
**Optimisation du cache de fichiers**
Le cache de fichiers ouverts améliore les performances en stockant les descripteurs de fichiers et les métadonnées en mémoire, réduisant ainsi le besoin d'opérations répétées sur le systÚme de fichiers.
!!! success "Avantages de la mise en cache de fichiers"
- **Performance :** Réduit les E/S du systÚme de fichiers, diminue la latence et abaisse l'utilisation du CPU pour les opérations sur les fichiers.
- **Sécurité :** Atténue les attaques par synchronisation (timing attacks) en mettant en cache les réponses d'erreur et réduit l'impact des attaques DoS ciblant le systÚme de fichiers.
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------------- | ----------------------- | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `USE_OPEN_FILE_CACHE` | `no` | multisite | no | **Activer le cache :** Activer la mise en cache des descripteurs de fichiers et des métadonnées pour améliorer les performances. |
| `OPEN_FILE_CACHE` | `max=1000 inactive=20s` | multisite | no | **Configuration du cache :** Configurez le cache de fichiers ouverts (ex. : nombre max d'entrées et délai d'inactivité). |
| `OPEN_FILE_CACHE_ERRORS` | `yes` | multisite | no | **Mettre en cache les erreurs :** Met en cache les erreurs de recherche de descripteurs de fichiers ainsi que les recherches réussies. |
| `OPEN_FILE_CACHE_MIN_USES` | `2` | multisite | no | **Utilisations minimales :** Nombre minimum d'accÚs pendant la période d'inactivité pour qu'un fichier reste en cache. |
| `OPEN_FILE_CACHE_VALID` | `30s` | multisite | no | **Validité du cache :** Temps aprÚs lequel les éléments mis en cache sont revalidés. |
**Guide de configuration**
Pour activer et configurer la mise en cache des fichiers :
1. Mettez `USE_OPEN_FILE_CACHE` Ă `yes`.
2. Ajustez les paramÚtres `OPEN_FILE_CACHE` pour définir le nombre maximum d'entrées et leur délai d'inactivité.
3. Utilisez `OPEN_FILE_CACHE_ERRORS` pour mettre en cache les recherches réussies et échouées.
4. Réglez `OPEN_FILE_CACHE_MIN_USES` pour spécifier le nombre d'accÚs requis pour qu'un fichier reste en cache.
5. Définissez la période de validité du cache avec `OPEN_FILE_CACHE_VALID`.
!!! tip "Bonnes pratiques"
- Activez la mise en cache pour les sites web avec de nombreux fichiers statiques pour améliorer les performances.
- Révisez et affinez réguliÚrement les paramÚtres de cache pour équilibrer performance et utilisation des ressources.
- Dans les environnements dynamiques oĂč les fichiers changent frĂ©quemment, envisagez de rĂ©duire la pĂ©riode de validitĂ© du cache ou de dĂ©sactiver la fonctionnalitĂ© pour garantir la fraĂźcheur du contenu.
Exemples de configuration
=== "Sécurité du serveur par défaut"
Exemple pour désactiver le serveur par défaut et forcer le SNI strict :
```yaml
DISABLE_DEFAULT_SERVER: "yes"
DISABLE_DEFAULT_SERVER_STRICT_SNI: "yes"
```
=== "Statut HTTP en cas de refus"
Exemple pour ignorer silencieusement les requĂȘtes indĂ©sirables :
```yaml
DENY_HTTP_STATUS: "444"
```
=== "Méthodes HTTP"
Exemple pour restreindre les méthodes HTTP à celles requises par une API RESTful :
```yaml
ALLOWED_METHODS: "GET|POST|PUT|DELETE"
```
=== "Limites de taille des requĂȘtes"
Exemple pour limiter la taille maximale du corps d'une requĂȘte :
```yaml
MAX_CLIENT_SIZE: "5m"
```
=== "Support des protocoles"
Exemple pour activer HTTP/2 et HTTP/3 avec un port Alt-Svc personnalisé :
```yaml
HTTP2: "yes"
HTTP3: "yes"
HTTP3_ALT_SVC_PORT: "443"
```
=== "Service de fichiers statiques"
Exemple pour servir des fichiers statiques depuis un dossier racine personnalisé :
```yaml
SERVE_FILES: "yes"
ROOT_FOLDER: "/var/www/custom-folder"
```
=== "Mise en cache des fichiers"
Exemple pour activer et optimiser la mise en cache des fichiers :
```yaml
USE_OPEN_FILE_CACHE: "yes"
OPEN_FILE_CACHE: "max=2000 inactive=30s"
OPEN_FILE_CACHE_ERRORS: "yes"
OPEN_FILE_CACHE_MIN_USES: "3"
OPEN_FILE_CACHE_VALID: "60s"
ModSecurity
Prise en charge STREAM â
Le plugin ModSecurity intÚgre le puissant pare-feu applicatif web (WAF) ModSecurity dans BunkerWeb. Cette intégration offre une protection robuste contre un large éventail d'attaques web en s'appuyant sur le Jeu de RÚgles de Base OWASP (CRS) pour détecter et bloquer des menaces telles que l'injection SQL, le cross-site scripting (XSS), l'inclusion de fichiers locaux, et bien plus encore.
Comment ça marche :
- Lorsqu'une requĂȘte est reçue, ModSecurity l'Ă©value par rapport au jeu de rĂšgles actif.
- Le Jeu de RĂšgles de Base OWASP inspecte les en-tĂȘtes, les cookies, les paramĂštres d'URL et le contenu du corps de la requĂȘte.
- Chaque violation détectée contribue à un score d'anomalie global.
- Si ce score dĂ©passe le seuil configurĂ©, la requĂȘte est bloquĂ©e.
- Des journaux détaillés sont créés pour aider à diagnostiquer quelles rÚgles ont été déclenchées et pourquoi.
!!! success "Bénéfices clés"
1. **Protection standard de l'industrie :** Utilise le pare-feu open-source ModSecurity largement répandu.
2. **Jeu de RÚgles de Base OWASP :** Emploie des rÚgles maintenues par la communauté couvrant le Top Dix de l'OWASP et plus encore.
3. **Niveaux de sécurité configurables :** Ajustez les niveaux de paranoïa pour équilibrer la sécurité avec les faux positifs potentiels.
4. **Journalisation détaillée :** Fournit des journaux d'audit complets pour l'analyse des attaques.
5. **Support des plugins :** Ătendez la protection avec des plugins CRS optionnels adaptĂ©s Ă vos applications.
Comment lâutiliser
Suivez ces étapes pour configurer et utiliser ModSecurity :
- Activer la fonctionnalitĂ© : ModSecurity est activĂ© par dĂ©faut. Cela peut ĂȘtre contrĂŽlĂ© via le paramĂštre
USE_MODSECURITY. - Sélectionner une version du CRS : Choisissez une version du Jeu de RÚgles de Base OWASP (v3, v4, ou nightly).
- Ajouter des plugins : Activez optionnellement des plugins CRS pour améliorer la couverture des rÚgles.
- Surveiller et ajuster : Utilisez les journaux et l'interface web pour identifier les faux positifs et ajuster les paramĂštres.
ParamĂštres de configuration
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_MODSECURITY |
yes |
multisite | no | Activer ModSecurity : Active la protection du pare-feu applicatif web ModSecurity. |
USE_MODSECURITY_CRS |
yes |
multisite | no | Utiliser le Core Rule Set : Active le Jeu de RĂšgles de Base OWASP pour ModSecurity. |
MODSECURITY_CRS_VERSION |
4 |
multisite | no | Version du CRS : La version du Jeu de RĂšgles de Base OWASP Ă utiliser. Options : 3, 4, ou nightly. |
MODSECURITY_SEC_RULE_ENGINE |
On |
multisite | no | Moteur de rÚgles : ContrÎle si les rÚgles sont appliquées. Options : On, DetectionOnly, ou Off. |
MODSECURITY_SEC_AUDIT_ENGINE |
RelevantOnly |
multisite | no | Moteur d'audit : ContrĂŽle le fonctionnement de la journalisation d'audit. Options : On, Off, ou RelevantOnly. |
MODSECURITY_SEC_AUDIT_LOG_PARTS |
ABIJDEFHZ |
multisite | no | Parties du journal d'audit : Quelles parties des requĂȘtes/rĂ©ponses inclure dans les journaux d'audit. |
MODSECURITY_REQ_BODY_NO_FILES_LIMIT |
131072 |
multisite | no | Limite du corps de requĂȘte (sans fichiers) : Taille maximale pour les corps de requĂȘte sans tĂ©lĂ©versement de fichiers. Accepte les octets bruts ou un suffixe lisible (k, m, g). |
USE_MODSECURITY_CRS_PLUGINS |
yes |
multisite | no | Activer les plugins CRS : Active des jeux de rÚgles de plugins supplémentaires pour le Core Rule Set. |
MODSECURITY_CRS_PLUGINS |
multisite | no | Liste des plugins CRS : Liste de plugins séparés par des espaces à télécharger et installer (nom-plugin[/tag] ou URL). |
|
USE_MODSECURITY_GLOBAL_CRS |
no |
global | no | CRS Global : Si activé, applique les rÚgles CRS globalement au niveau HTTP plutÎt que par serveur. |
!!! warning "ModSecurity et le Jeu de RĂšgles de Base OWASP" Nous recommandons vivement de garder ModSecurity et le Jeu de RĂšgles de Base OWASP (CRS) activĂ©s pour fournir une protection robuste contre les vulnĂ©rabilitĂ©s web courantes. Bien que des faux positifs occasionnels puissent se produire, ils peuvent ĂȘtre rĂ©solus avec un peu d'effort en affinant les rĂšgles ou en utilisant des exclusions prĂ©dĂ©finies.
L'équipe du CRS maintient activement une liste d'exclusions pour des applications populaires telles que WordPress, Nextcloud, Drupal et Cpanel, facilitant ainsi l'intégration sans impacter la fonctionnalité. Les avantages en matiÚre de sécurité l'emportent de loin sur l'effort de configuration minimal requis pour traiter les faux positifs.
Versions du CRS disponibles
Sélectionnez une version du CRS pour répondre au mieux à vos besoins de sécurité :
3: Stable v3.3.7.4: Stable v4.20.0 (par défaut).nightly: Version de nuit offrant les derniÚres mises à jour de rÚgles.
!!! example "Version de nuit (Nightly Build)" La version de nuit contient les rÚgles les plus à jour, offrant les derniÚres protections contre les menaces émergentes. Cependant, comme elle est mise à jour quotidiennement et peut inclure des changements expérimentaux ou non testés, il est recommandé d'utiliser d'abord la version de nuit dans un environnement de pré-production avant de la déployer en production.
!!! tip "Niveaux de paranoĂŻa" Le Jeu de RĂšgles de Base OWASP utilise des "niveaux de paranoĂŻa" (PL) pour contrĂŽler la rigueur des rĂšgles :
- **PL1 (défaut) :** Protection de base avec un minimum de faux positifs
- **PL2 :** Sécurité renforcée avec une correspondance de motifs plus stricte
- **PL3 :** Sécurité améliorée avec une validation plus stricte
- **PL4 :** Sécurité maximale avec des rÚgles trÚs strictes (peut causer de nombreux faux positifs)
Vous pouvez définir le niveau de paranoïa en ajoutant un fichier de configuration personnalisé dans `/etc/bunkerweb/configs/modsec-crs/`.
Configurations personnalisées
L'ajustement de ModSecurity et du Jeu de RĂšgles de Base OWASP (CRS) peut ĂȘtre rĂ©alisĂ© grĂące Ă des configurations personnalisĂ©es. Celles-ci vous permettent de personnaliser le comportement Ă des Ă©tapes spĂ©cifiques du traitement des rĂšgles de sĂ©curitĂ© :
modsec-crs: AppliquĂ© avant le chargement du Jeu de RĂšgles de Base OWASP.modsec: AppliquĂ© aprĂšs le chargement du Jeu de RĂšgles de Base OWASP. Ăgalement utilisĂ© si le CRS n'est pas chargĂ© du tout.crs-plugins-before: AppliquĂ© avant le chargement des plugins CRS.crs-plugins-after: AppliquĂ© aprĂšs le chargement des plugins CRS.
Cette structure offre une grande flexibilité, vous permettant d'affiner les paramÚtres de ModSecurity et du CRS pour répondre aux besoins spécifiques de votre application tout en maintenant un flux de configuration clair.
Ajout d'exclusions CRS avec modsec-crs
Vous pouvez utiliser une configuration personnalisée de type modsec-crs pour ajouter des exclusions pour des cas d'usage spécifiques, comme l'activation d'exclusions prédéfinies pour WordPress :
SecAction \
"id:900130,\
phase:1,\
nolog,\
pass,\
t:none,\
setvar:tx.crs_exclusions_wordpress=1"
Dans cet exemple :
- L'action est exĂ©cutĂ©e en Phase 1 (tĂŽt dans le cycle de vie de la requĂȘte).
- Elle active les exclusions spécifiques à WordPress du CRS en définissant la variable
tx.crs_exclusions_wordpress.
Mise Ă jour des rĂšgles CRS avec modsec
Pour affiner les rĂšgles CRS chargĂ©es, vous pouvez utiliser une configuration personnalisĂ©e de type modsec. Par exemple, vous pouvez supprimer des rĂšgles ou des balises spĂ©cifiques pour certains chemins de requĂȘte :
SecRule REQUEST_FILENAME "/wp-admin/admin-ajax.php" "id:1,ctl:ruleRemoveByTag=attack-xss,ctl:ruleRemoveByTag=attack-rce"
SecRule REQUEST_FILENAME "/wp-admin/options.php" "id:2,ctl:ruleRemoveByTag=attack-xss"
SecRule REQUEST_FILENAME "^/wp-json/yoast" "id:3,ctl:ruleRemoveById=930120"
Dans cet exemple :
- RĂšgle 1 : Supprime les rĂšgles avec les balises
attack-xssetattack-rcepour les requĂȘtes vers/wp-admin/admin-ajax.php. - RĂšgle 2 : Supprime les rĂšgles avec la balise
attack-xsspour les requĂȘtes vers/wp-admin/options.php. - RĂšgle 3 : Supprime une rĂšgle spĂ©cifique (ID
930120) pour les requĂȘtes correspondant Ă/wp-json/yoast.
!!! info "Ordre d'exécution" L'ordre d'exécution pour ModSecurity dans BunkerWeb est le suivant, assurant une progression claire et logique de l'application des rÚgles :
1. **Configuration OWASP CRS** : Configuration de base pour le Jeu de RĂšgles de Base OWASP.
2. **Configuration des plugins personnalisés (`crs-plugins-before`)** : ParamÚtres spécifiques aux plugins, appliqués avant toute rÚgle CRS.
3. **RÚgles des plugins personnalisés (avant les rÚgles CRS) (`crs-plugins-before`)** : RÚgles personnalisées pour les plugins exécutées avant les rÚgles CRS.
4. **Configuration des plugins téléchargés** : Configuration pour les plugins téléchargés en externe.
5. **RÚgles des plugins téléchargés (avant les rÚgles CRS)** : RÚgles pour les plugins téléchargés exécutées avant les rÚgles CRS.
6. **RÚgles CRS personnalisées (`modsec-crs`)** : RÚgles définies par l'utilisateur appliquées avant le chargement des rÚgles CRS.
7. **RÚgles OWASP CRS** : Le jeu de rÚgles de sécurité de base fourni par l'OWASP.
8. **RÚgles des plugins personnalisés (aprÚs les rÚgles CRS) (`crs-plugins-after`)** : RÚgles de plugins personnalisés exécutées aprÚs les rÚgles CRS.
9. **RÚgles des plugins téléchargés (aprÚs les rÚgles CRS)** : RÚgles pour les plugins téléchargés exécutées aprÚs les rÚgles CRS.
10. **RÚgles personnalisées (`modsec`)** : RÚgles définies par l'utilisateur appliquées aprÚs toutes les rÚgles CRS et de plugins.
**Notes clés** :
- Les personnalisations **pré-CRS** (`crs-plugins-before`, `modsec-crs`) vous permettent de définir des exceptions ou des rÚgles préparatoires avant le chargement des rÚgles CRS de base.
- Les personnalisations **post-CRS** (`crs-plugins-after`, `modsec`) sont idéales pour outrepasser ou étendre des rÚgles aprÚs l'application des rÚgles CRS et de plugins.
- Cette structure offre une flexibilité maximale, permettant un contrÎle précis de l'exécution et de la personnalisation des rÚgles tout en maintenant une base de sécurité solide.
Plugins OWASP CRS
Le Jeu de RĂšgles de Base OWASP prend Ă©galement en charge une gamme de plugins conçus pour Ă©tendre ses fonctionnalitĂ©s et amĂ©liorer la compatibilitĂ© avec des applications ou des environnements spĂ©cifiques. Ces plugins peuvent aider Ă affiner le CRS pour une utilisation avec des plateformes populaires telles que WordPress, Nextcloud et Drupal, ou mĂȘme des configurations personnalisĂ©es. Pour plus d'informations et une liste des plugins disponibles, consultez le registre des plugins OWASP CRS.
!!! tip "Téléchargement de plugins"
Le paramÚtre MODSECURITY_CRS_PLUGINS vous permet de télécharger et d'installer des plugins pour étendre les fonctionnalités du Jeu de RÚgles de Base OWASP (CRS). Ce paramÚtre accepte une liste de noms de plugins avec des balises ou des URL optionnelles, facilitant l'intégration de fonctionnalités de sécurité supplémentaires adaptées à vos besoins spécifiques.
Voici une liste non exhaustive des valeurs acceptées pour le paramÚtre `MODSECURITY_CRS_PLUGINS` :
* `fake-bot` - Télécharge la derniÚre version du plugin.
* `wordpress-rule-exclusions/v1.0.0` - Télécharge la version 1.0.0 du plugin.
* `https://github.com/coreruleset/dos-protection-plugin-modsecurity/archive/refs/heads/main.zip` - Télécharge le plugin directement depuis l'URL.
!!! warning "Faux positifs" Des paramĂštres de sĂ©curitĂ© plus Ă©levĂ©s peuvent bloquer le trafic lĂ©gitime. Commencez avec les paramĂštres par dĂ©faut et surveillez les journaux avant d'augmenter les niveaux de sĂ©curitĂ©. Soyez prĂȘt Ă ajouter des rĂšgles d'exclusion pour les besoins spĂ©cifiques de votre application.
Exemples de configuration
=== "Configuration de base"
Une configuration standard avec ModSecurity et CRS v4 activés :
```yaml
USE_MODSECURITY: "yes"
USE_MODSECURITY_CRS: "yes"
MODSECURITY_CRS_VERSION: "4"
MODSECURITY_SEC_RULE_ENGINE: "On"
```
=== "Mode détection uniquement"
Configuration pour surveiller les menaces potentielles sans bloquer :
```yaml
USE_MODSECURITY: "yes"
USE_MODSECURITY_CRS: "yes"
MODSECURITY_CRS_VERSION: "4"
MODSECURITY_SEC_RULE_ENGINE: "DetectionOnly"
MODSECURITY_SEC_AUDIT_ENGINE: "On"
MODSECURITY_SEC_AUDIT_LOG_PARTS: "ABIJDEFHZ"
```
=== "Configuration avancée avec plugins"
Configuration avec CRS v4 et des plugins activés pour une protection supplémentaire :
```yaml
USE_MODSECURITY: "yes"
USE_MODSECURITY_CRS: "yes"
MODSECURITY_CRS_VERSION: "4"
MODSECURITY_SEC_RULE_ENGINE: "On"
USE_MODSECURITY_CRS_PLUGINS: "yes"
MODSECURITY_CRS_PLUGINS: "wordpress-rule-exclusions fake-bot"
MODSECURITY_REQ_BODY_NO_FILES_LIMIT: "262144"
```
=== "Configuration héritée"
Configuration utilisant CRS v3 pour la compatibilité avec des installations plus anciennes :
```yaml
USE_MODSECURITY: "yes"
USE_MODSECURITY_CRS: "yes"
MODSECURITY_CRS_VERSION: "3"
MODSECURITY_SEC_RULE_ENGINE: "On"
```
=== "ModSecurity Global"
Configuration appliquant ModSecurity globalement Ă toutes les connexions HTTP :
```yaml
USE_MODSECURITY: "yes"
USE_MODSECURITY_CRS: "yes"
MODSECURITY_CRS_VERSION: "4"
USE_MODSECURITY_GLOBAL_CRS: "yes"
```
=== "Version de nuit avec plugins personnalisés"
Configuration utilisant la version de nuit du CRS avec des plugins personnalisés :
```yaml
USE_MODSECURITY: "yes"
USE_MODSECURITY_CRS: "yes"
MODSECURITY_CRS_VERSION: "nightly"
USE_MODSECURITY_CRS_PLUGINS: "yes"
MODSECURITY_CRS_PLUGINS: "wordpress-rule-exclusions/v1.0.0 https://github.com/coreruleset/dos-protection-plugin-modsecurity/archive/refs/heads/main.zip"
```
!!! note "Valeurs de taille lisibles"
Pour les paramÚtres de taille comme MODSECURITY_REQ_BODY_NO_FILES_LIMIT, les suffixes k, m, et g (insensibles à la casse) sont pris en charge et représentent les kibioctets, mébioctets et gibioctets (multiples de 1024). Exemples : 256k = 262144, 1m = 1048576, 2g = 2147483648.
Monitoring
(PRO)
Prise en charge STREAM â
BunkerWeb monitoring pro system. This plugin is a prerequisite for some other plugins.
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_MONITORING |
yes |
global | non | Enable monitoring of BunkerWeb. |
MONITORING_METRICS_DICT_SIZE |
10M |
global | non | Size of the dict to store monitoring metrics. |
MONITORING_IGNORE_URLS |
global | non | List of URLs to ignore when monitoring separated with spaces (e.g. /health) |
Mutual TLS
Prise en charge STREAM â
Le plugin Mutual TLS (mTLS) protĂšge vos applications sensibles en exigeant que les clients prĂ©sentent des certificats dĂ©livrĂ©s par des autoritĂ©s que vous maĂźtrisez. Une fois activĂ©, BunkerWeb authentifie les appelants avant que leurs requĂȘtes nâatteignent vos services, ce qui sĂ©curise vos outils internes et intĂ©grations partenaires.
BunkerWeb Ă©value chaque poignĂ©e de main TLS en fonction du bundle dâAC et de la politique que vous dĂ©finissez. Les clients qui ne rĂ©pondent pas aux rĂšgles sont bloquĂ©s, tandis que les connexions conformes peuvent transmettre les dĂ©tails du certificat aux applications amont pour une autorisation affinĂ©e.
Fonctionnement :
- Le plugin surveille les échanges HTTPS du site sélectionné.
- Pendant lâĂ©change TLS, BunkerWeb inspecte le certificat client et vĂ©rifie sa chaĂźne par rapport Ă votre magasin de confiance.
- Le mode de vérification détermine si les clients non authentifiés sont rejetés, acceptés avec tolérance ou autorisés pour des diagnostics.
- (Optionnel) BunkerWeb expose le rĂ©sultat via les en-tĂȘtes
X-SSL-Client-*afin que vos applications puissent appliquer leur propre logique dâaccĂšs.
!!! success "Avantages clés"
1. **ContrĂŽle renforcé :** limitez lâaccĂšs aux machines et utilisateurs authentifiĂ©s.
2. **Politiques souples :** combinez modes stricts et optionnels pour accompagner vos workflows.
3. **VisibilitĂ© applicative :** transfĂ©rez empreintes et identitĂ©s de certificats pour lâaudit.
4. **Défense en profondeur :** associez mTLS aux autres plugins BunkerWeb pour multiplier les protections.
Mise en Ćuvre
Suivez ces étapes pour déployer le mutual TLS sereinement :
- Activer la fonctionnalité : positionnez
USE_MTLSĂyessur les sites qui nĂ©cessitent lâauthentification par certificat. - Fournir le bundle dâAC : stockez vos autoritĂ©s de confiance dans un fichier PEM et renseignez
MTLS_CA_CERTIFICATEavec son chemin absolu. - Choisir le mode de vérification : sélectionnez
onpour rendre les certificats obligatoires,optionalpour offrir un repli ouoptional_no_capour un diagnostic temporaire. - Ajuster la profondeur de chaßne : adaptez
MTLS_VERIFY_DEPTHsi votre organisation utilise plusieurs intermédiaires. - Transmettre le résultat (optionnel) : laissez
MTLS_FORWARD_CLIENT_HEADERSĂyessi vos services amont doivent inspecter le certificat prĂ©sentĂ©. - Maintenir la rĂ©vocation : si vous publiez une CRL, renseignez
MTLS_CRLpour que BunkerWeb refuse les certificats révoqués.
ParamĂštres de configuration
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_MTLS |
no |
multisite | non | Activer le mutual TLSÂ : active lâauthentification par certificat client pour le site courant. |
MTLS_CA_CERTIFICATE |
multisite | non | Bundle dâAC client : chemin absolu vers le bundle dâAC clients (PEM). Requis lorsque MTLS_VERIFY_CLIENT vaut on ou optional; doit ĂȘtre lisible. |
|
MTLS_VERIFY_CLIENT |
on |
multisite | non | Mode de vĂ©rification : choisissez si les certificats sont requis (on), optionnels (optional) ou acceptĂ©s sans validation dâAC (optional_no_ca). |
MTLS_VERIFY_DEPTH |
2 |
multisite | non | Profondeur de vérification : profondeur maximale de chaßne acceptée pour les certificats clients. |
MTLS_FORWARD_CLIENT_HEADERS |
yes |
multisite | non | Transmettre les en-tĂȘtes client : propage les rĂ©sultats de vĂ©rification (X-SSL-Client-* avec statut, DN, Ă©metteur, numĂ©ro de sĂ©rie, empreinte, validitĂ©). |
MTLS_CRL |
multisite | non | Chemin de la CRL client : chemin optionnel vers une liste de rĂ©vocation de certificats encodĂ©e en PEM. AppliquĂ© uniquement si le bundle dâAC est chargĂ© avec succĂšs. |
!!! tip "Maintenez les certificats Ă jour" Stockez bundles dâAC et listes de rĂ©vocation dans un volume montĂ© accessible par le Scheduler pour que chaque redĂ©marrage rĂ©cupĂšre les ancrages de confiance rĂ©cents.
!!! warning "Bundle dâAC obligatoire en mode strict"
Lorsque MTLS_VERIFY_CLIENT vaut on ou optional, le fichier dâAC doit ĂȘtre prĂ©sent Ă lâexĂ©cution. Sâil manque, BunkerWeb ignore les directives mTLS pour Ă©viter un dĂ©marrage sur un chemin invalide. RĂ©servez optional_no_ca au diagnostic, car ce mode affaiblit lâauthentification.
!!! info "Certificat approuvĂ© vs. vĂ©rification" BunkerWeb rĂ©utilise le mĂȘme bundle dâAC pour vĂ©rifier les clients et bĂątir la chaĂźne de confiance, garantissant une cohĂ©rence OCSP/CRL et durant le handshake.
Exemples de configuration
=== "ContrĂŽle dâaccĂšs strict"
Exigez des certificats clients valides émis par votre AC privée et transmettez les informations de vérification au backend :
```yaml
USE_MTLS: "yes"
MTLS_CA_CERTIFICATE: "/etc/bunkerweb/mtls/engineering-ca.pem"
MTLS_VERIFY_CLIENT: "on"
MTLS_VERIFY_DEPTH: "2"
MTLS_FORWARD_CLIENT_HEADERS: "yes"
```
=== "Authentification client optionnelle"
Autorisez les utilisateurs anonymes mais transmettez les dĂ©tails du certificat lorsquâun client en prĂ©sente un :
```yaml
USE_MTLS: "yes"
MTLS_CA_CERTIFICATE: "/etc/bunkerweb/mtls/partner-ca.pem"
MTLS_VERIFY_CLIENT: "optional"
MTLS_FORWARD_CLIENT_HEADERS: "yes"
```
=== "Diagnostic sans AC"
Autorisez les connexions Ă aboutir mĂȘme si un certificat ne peut pas ĂȘtre rattachĂ© Ă un bundle dâAC de confiance. Utile uniquement pour le dĂ©pannage :
```yaml
USE_MTLS: "yes"
MTLS_VERIFY_CLIENT: "optional_no_ca"
MTLS_FORWARD_CLIENT_HEADERS: "no"
```
PHP
Prise en charge STREAM â
Le plugin PHP fournit lâintĂ©gration PHPâFPM avec BunkerWeb pour exĂ©cuter du PHP dynamiquement. Il prend en charge des instances locales (mĂȘme machine) et distantes, offrant de la flexibilitĂ© dans lâarchitecture.
Comment ça marche :
- Ă la demande dâun fichier PHP, BunkerWeb route la requĂȘte vers lâinstance PHPâFPM configurĂ©e.
- En local, la communication se fait via un socket Unix.
- Ă distance, la communication utilise FastCGI vers lâhĂŽte et le port indiquĂ©s.
- PHPâFPM exĂ©cute le script et renvoie la rĂ©ponse Ă BunkerWeb qui la livre au client.
- La réécriture dâURL est automatiquement configurĂ©e pour les frameworks/applications qui utilisent des « pretty URLs ».
Comment lâutiliser
- Choisissez local vs distant.
- Connexion : chemin du socket (local) ou hÎte+port (distant).
- Racine de documents : pointez vers le dossier contenant vos fichiers PHP.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
REMOTE_PHP |
multisite | non | HĂŽte PHPâFPM distant. Laissez vide pour utiliser le local. | |
REMOTE_PHP_PATH |
multisite | non | Chemin racine des fichiers cĂŽtĂ© PHPâFPM distant. | |
REMOTE_PHP_PORT |
9000 |
multisite | non | Port PHPâFPM distant. |
LOCAL_PHP |
multisite | non | Chemin du socket PHPâFPM local. Laissez vide pour utiliser un PHPâFPM distant. | |
LOCAL_PHP_PATH |
multisite | non | Chemin racine des fichiers cĂŽtĂ© PHPâFPM local. |
!!! tip "Local vs distant" Local : meilleures perfs (socket). Distant : flexibilité et scalabilité.
!!! warning "Chemins"
REMOTE_PHP_PATH/LOCAL_PHP_PATH doivent correspondre au chemin rĂ©el des fichiers sous peine dâerreurs « File not found ».
!!! info "Réécriture dâURL"
Le plugin configure automatiquement la réécriture pour diriger les requĂȘtes vers index.php si le fichier demandĂ© nâexiste pas.
Exemples
=== "PHPâFPM local"
```yaml
LOCAL_PHP: "/var/run/php/php8.1-fpm.sock"
LOCAL_PHP_PATH: "/var/www/html"
```
=== "PHPâFPM distant"
```yaml
REMOTE_PHP: "php-server.example.com"
REMOTE_PHP_PORT: "9000"
REMOTE_PHP_PATH: "/var/www/html"
```
=== "Port personnalisé"
```yaml
REMOTE_PHP: "php-server.example.com"
REMOTE_PHP_PORT: "9001"
REMOTE_PHP_PATH: "/var/www/html"
```
=== "WordPress"
```yaml
LOCAL_PHP: "/var/run/php/php8.1-fpm.sock"
LOCAL_PHP_PATH: "/var/www/html/wordpress"
```
Pro
Prise en charge STREAM â
Le plugin Pro regroupe des fonctionnalitĂ©s avancĂ©es pour les dĂ©ploiements entreprise de BunkerWeb. Il dĂ©verrouille des capacitĂ©s supplĂ©mentaires, des plugins premium et des extensions qui complĂštent la plateforme BunkerWeb, pour plus de sĂ©curitĂ©, de performance et dâoptions de gestion.
Comment ça marche :
- Avec une clĂ© de licence Pro valide, BunkerWeb contacte lâAPI Pro pour valider votre abonnement.
- Une fois authentifié, le plugin télécharge et installe automatiquement les plugins et extensions exclusifs Pro.
- Le statut Pro est vĂ©rifiĂ© pĂ©riodiquement afin dâassurer lâaccĂšs continu aux fonctionnalitĂ©s premium.
- Les plugins premium sâintĂšgrent de façon transparente Ă votre configuration existante.
- Les fonctionnalitĂ©s Pro complĂštent le cĆur openâsource, elles ne le remplacent pas.
!!! success "Bénéfices clés"
1. Extensions premium : accÚs à des plugins et fonctions exclusives.
2. Performances accrues : configurations optimisées et mécanismes avancés de cache.
3. Support entreprise : assistance prioritaire et canaux dédiés.
4. IntĂ©gration fluide : cohabite avec lâĂ©dition communautaire sans conflits.
5. Mises à jour automatiques : plugins premium téléchargés et tenus à jour automatiquement.
Comment lâutiliser
- Obtenir une licence : achetez une licence Pro depuis le BunkerWeb Panel.
- Configurer la licence : définissez
PRO_LICENSE_KEYavec votre clé. - Laissez BunkerWeb faire le reste : les plugins Pro sont téléchargés et activés automatiquement.
- Surveiller le statut Pro : vĂ©rifiez les indicateurs de santĂ© dans lâinterface web UI.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
PRO_LICENSE_KEY |
global | non | Clé de licence BunkerWeb Pro (authentification). |
!!! tip "Gestion de licence" La licence est liĂ©e Ă votre environnement de dĂ©ploiement. Pour un transfert ou une question dâabonnement, contactez le support via le BunkerWeb Panel.
!!! info "FonctionnalitĂ©s Pro" Le pĂ©rimĂštre des fonctionnalitĂ©s peut Ă©voluer. Le plugin Pro gĂšre automatiquement lâinstallation et la configuration des capacitĂ©s disponibles.
!!! warning "AccÚs réseau"
Le plugin Pro requiert un accĂšs Internet sortant pour contacter lâAPI BunkerWeb (vĂ©rification de licence) et tĂ©lĂ©charger les plugins premium. Autorisez les connexions HTTPS vers api.bunkerweb.io:443.
FAQ
Q : Que se passeâtâil si ma licence Pro expire ?
R : LâaccĂšs aux fonctionnalitĂ©s premium est dĂ©sactivĂ©, mais votre installation continue de fonctionner avec lâĂ©dition communautaire. Pour rĂ©activer les fonctionnalitĂ©s Pro, renouvelez la licence.
Q : Les fonctionnalitĂ©s Pro peuventâelles perturber ma configuration existante ?
R : Non. Elles sont conçues pour sâintĂ©grer sans modifier votre configuration actuelle.
Q : Puisâje essayer Pro avant achat ?
R : Oui. Deux offres existent :
- BunkerWeb PRO Standard : accÚs complet, sans support technique.
- BunkerWeb PRO Enterprise : accÚs complet, avec support dédié.
Un essai gratuit dâ1Â mois est disponible avec le code freetrial. Rendezâvous sur le BunkerWeb Panel pour lâactiver.
Prometheus exporter
(PRO)
Prise en charge STREAM â
Prometheus exporter for BunkerWeb internal metrics.
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_PROMETHEUS_EXPORTER |
no |
global | non | Enable the Prometheus export. |
PROMETHEUS_EXPORTER_IP |
0.0.0.0 |
global | non | Listening IP of the Prometheus exporter. |
PROMETHEUS_EXPORTER_PORT |
9113 |
global | non | Listening port of the Prometheus exporter. |
PROMETHEUS_EXPORTER_URL |
/metrics |
global | non | HTTP URL of the Prometheus exporter. |
PROMETHEUS_EXPORTER_ALLOW_IP |
127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 |
global | non | List of IP/networks allowed to contact the Prometheus exporter endpoint. |
Real IP
Prise en charge STREAM â ïž
Le plugin Real IP garantit que BunkerWeb identifie correctement lâadresse IP du client mĂȘme derriĂšre des proxys. Indispensable pour appliquer les rĂšgles de sĂ©curitĂ©, la limitation de dĂ©bit et des logs fiables : sinon toutes les requĂȘtes sembleraient venir de lâIP du proxy.
Comment ça marche :
- ActivĂ©, BunkerWeb inspecte les enâtĂȘtes (ex.
X-Forwarded-For) contenant lâIP dâorigine. - Il vĂ©rifie que lâIP source figure dans
REAL_IP_FROM(liste de proxys de confiance) pour nâaccepter que les proxys lĂ©gitimes. - LâIP client est extraite de lâenâtĂȘte
REAL_IP_HEADERet utilisĂ©e pour lâĂ©valuation sĂ©curitĂ© et la journalisation. - En chaĂźnes dâIPs, une recherche rĂ©cursive peut dĂ©terminer lâIP dâorigine via
REAL_IP_RECURSIVE. - Le support du PROXY protocol peut ĂȘtre activĂ© pour recevoir lâIP client directement depuis des proxys compatibles (ex. HAProxy).
- Les listes dâIP de proxys de confiance peuvent ĂȘtre tĂ©lĂ©chargĂ©es automatiquement via des URLs.
Comment lâutiliser
- Activer :
USE_REAL_IP: yes. - Proxys de confiance : renseignez IP/plages dans
REAL_IP_FROM. - EnâtĂȘte : indiquez lequel porte lâIP rĂ©elle via
REAL_IP_HEADER. - Récursif : activez
REAL_IP_RECURSIVEsi nécessaire. - Sources URL : utilisez
REAL_IP_FROM_URLSpour télécharger des listes. - PROXY protocol : activez
USE_PROXY_PROTOCOLsi lâamont le supporte.
!!! danger "Avertissement PROXY protocol"
Activer USE_PROXY_PROTOCOL sans un amont correctement configurĂ© pour lâĂ©mettre cassera votre application. Assurezâvous de lâavoir configurĂ© avant activation.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_REAL_IP |
no |
multisite | non | Activer la rĂ©cupĂ©ration de lâIP rĂ©elle depuis les enâtĂȘtes ou le PROXY protocol. |
REAL_IP_FROM |
192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 |
multisite | non | Proxys de confiance : liste dâIP/rĂ©seaux sĂ©parĂ©s par des espaces. |
REAL_IP_HEADER |
X-Forwarded-For |
multisite | non | EnâtĂȘte porteur de lâIP rĂ©elle ou valeur spĂ©ciale proxy_protocol. |
REAL_IP_RECURSIVE |
yes |
multisite | non | Recherche rĂ©cursive dans un enâtĂȘte contenant plusieurs IPs. |
REAL_IP_FROM_URLS |
multisite | non | URLs fournissant des IPs/réseaux de proxys de confiance (supporte file://). |
|
USE_PROXY_PROTOCOL |
no |
global | non | Activer le support PROXY protocol pour la communication directe proxyâBunkerWeb. |
!!! tip "Fournisseurs cloud"
Ajoutez les IP de vos load balancers (AWS/GCP/AzureâŠ) Ă REAL_IP_FROM pour une identification correcte.
!!! danger "ConsidĂ©rations sĂ©curitĂ©" Nâajoutez que des sources de confiance, sinon risque dâusurpation dâIP via enâtĂȘtes manipulĂ©s.
!!! info "Multiples adresses"
Avec REAL_IP_RECURSIVE, si lâenâtĂȘte contient plusieurs IPs, la premiĂšre non listĂ©e comme proxy de confiance est retenue comme IP client.
Exemples
=== "Basique (derriĂšre reverse proxy)"
```yaml
USE_REAL_IP: "yes"
REAL_IP_FROM: "192.168.1.0/24 10.0.0.5"
REAL_IP_HEADER: "X-Forwarded-For"
```
Redirect
Prise en charge STREAM â
Le plugin Redirect fournit des redirections HTTP simples et efficaces. Il permet de rediriger des visiteurs dâune URL Ă une autre, pour un domaine entier, des chemins prĂ©cis, avec ou sans conservation du chemin dâorigine.
Comment ça marche :
- Ă lâaccĂšs dâun visiteur, BunkerWeb vĂ©rifie si une redirection est dĂ©finie.
- Si activĂ©e, il redirige vers lâURL de destination.
- Vous pouvez prĂ©server le chemin dâorigine (
REDIRECT_TO_REQUEST_URI: yes). - Le code HTTP peut ĂȘtre
301(permanent) ou302(temporaire). - Idéal pour migrations, canonicals, URLs obsolÚtes.
Comment lâutiliser
- Source :
REDIRECT_FROM(ex./,/old-page). - Destination :
REDIRECT_TO. - Type :
REDIRECT_TO_REQUEST_URIpour conserver le chemin. - Code :
REDIRECT_TO_STATUS_CODE(301ou302).
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
REDIRECT_FROM |
/ |
multisite | oui | Chemin source Ă rediriger. |
REDIRECT_TO |
multisite | oui | URL de destination. Laisser vide pour désactiver. | |
REDIRECT_TO_REQUEST_URI |
no |
multisite | oui | Conserver le chemin dâorigine en lâajoutant Ă lâURL de destination. |
REDIRECT_TO_STATUS_CODE |
301 |
multisite | oui | Code de statut HTTPÂ : 301 (permanent) ou 302 (temporaire). |
!!! tip "Choisir le bon code"
301 pour une redirection permanente (migrations, canonicals). 302 pour temporaire.
!!! info "Conservation du chemin"
Avec REDIRECT_TO_REQUEST_URI: yes, /blog/post-1 vers https://new.com devient https://new.com/blog/post-1.
Exemples
=== "Multiples chemins"
```yaml
REDIRECT_FROM: "/blog/"
REDIRECT_TO: "https://blog.example.com/"
REDIRECT_TO_REQUEST_URI: "yes"
REDIRECT_TO_STATUS_CODE: "301"
REDIRECT_FROM_2: "/shop/"
REDIRECT_TO_2: "https://shop.example.com/"
REDIRECT_TO_REQUEST_URI_2: "no"
REDIRECT_TO_STATUS_CODE_2: "301"
REDIRECT_FROM_3: "/"
REDIRECT_TO_3: "https://new-domain.com"
REDIRECT_TO_REQUEST_URI_3: "no"
REDIRECT_TO_STATUS_CODE_3: "301"
```
=== "Domaine entier"
```yaml
REDIRECT_TO: "https://new-domain.com"
REDIRECT_TO_REQUEST_URI: "no"
REDIRECT_TO_STATUS_CODE: "301"
```
=== "Conserver le chemin"
```yaml
REDIRECT_TO: "https://new-domain.com"
REDIRECT_TO_REQUEST_URI: "yes"
REDIRECT_TO_STATUS_CODE: "301"
```
=== "Temporaire"
```yaml
REDIRECT_TO: "https://maintenance.example.com"
REDIRECT_TO_REQUEST_URI: "no"
REDIRECT_TO_STATUS_CODE: "302"
```
=== "Sousâdomaine â chemin"
```yaml
REDIRECT_TO: "https://example.com/support"
REDIRECT_TO_REQUEST_URI: "yes"
REDIRECT_TO_STATUS_CODE: "301"
```
Redis
Prise en charge STREAM â
Le plugin Redis intĂšgre Redis ou Valkey Ă BunkerWeb pour la mise en cache et lâaccĂšs rapide aux donnĂ©es. Essentiel en haute disponibilitĂ© pour partager sessions, mĂ©triques et autres informations entre plusieurs nĆuds.
Comment ça marche :
- Activé, BunkerWeb se connecte au serveur Redis/Valkey configuré.
- Les données critiques (sessions, métriques, sécurité) y sont stockées.
- Plusieurs instances partagent ces données pour un clustering fluide.
- Prend en charge déploiements standalone, auth par mot de passe, SSL/TLS et Redis Sentinel.
- Reconnexion automatique et timeouts configurables pour la robustesse.
Comment lâutiliser
- Activer :
USE_REDIS: yes. - Connexion : hÎte/IP et port.
- Sécurité : identifiants si requis.
- Avancé : base, SSL et timeouts.
- Haute dispo : configurez Sentinel si utilisé.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_REDIS |
no |
global | non | Activer lâintĂ©gration Redis/Valkey (mode cluster). |
REDIS_HOST |
global | non | HĂŽte/IP du serveur Redis/Valkey. | |
REDIS_PORT |
6379 |
global | non | Port Redis/Valkey. |
REDIS_DATABASE |
0 |
global | non | NumĂ©ro de base (0â15). |
REDIS_SSL |
no |
global | non | Activer SSL/TLS. |
REDIS_SSL_VERIFY |
yes |
global | non | Vérifier le certificat SSL du serveur. |
REDIS_TIMEOUT |
5 |
global | non | Timeout (secondes). |
REDIS_USERNAME |
global | non | Nom dâutilisateur (Redis â„ 6.0). | |
REDIS_PASSWORD |
global | non | Mot de passe. | |
REDIS_SENTINEL_HOSTS |
global | non | HÎtes Sentinel (séparés par espaces, hÎte:port). |
|
REDIS_SENTINEL_USERNAME |
global | non | Utilisateur Sentinel. | |
REDIS_SENTINEL_PASSWORD |
global | non | Mot de passe Sentinel. | |
REDIS_SENTINEL_MASTER |
mymaster |
global | non | Nom du master Sentinel. |
REDIS_KEEPALIVE_IDLE |
300 |
global | non | Intervalle keepalive TCP (secondes) pour connexions inactives. |
REDIS_KEEPALIVE_POOL |
3 |
global | non | Nb max de connexions conservées dans le pool. |
!!! tip "Haute disponibilité" Configurez Redis Sentinel pour un failover automatique en production.
!!! warning "SĂ©curitĂ©" - Mots de passe forts pour Redis et Sentinel - Envisagez SSL/TLS - Ne pas exposer Redis sur Internet - Restreignez lâaccĂšs au port Redis (pareâfeu, segmentation)
Exemples
=== "Configuration basique"
```yaml
USE_REDIS: "yes"
REDIS_HOST: "localhost"
REDIS_PORT: "6379"
```
=== "Configuration sécurisée"
```yaml
USE_REDIS: "yes"
REDIS_HOST: "redis.example.com"
REDIS_PORT: "6379"
REDIS_PASSWORD: "your-strong-password"
REDIS_SSL: "yes"
REDIS_SSL_VERIFY: "yes"
```
=== "Redis Sentinel"
```yaml
USE_REDIS: "yes"
REDIS_SENTINEL_HOSTS: "sentinel1:26379 sentinel2:26379 sentinel3:26379"
REDIS_SENTINEL_MASTER: "mymaster"
REDIS_SENTINEL_PASSWORD: "sentinel-password"
REDIS_PASSWORD: "redis-password"
```
=== "Tuning avancé"
```yaml
USE_REDIS: "yes"
REDIS_HOST: "redis.example.com"
REDIS_PORT: "6379"
REDIS_PASSWORD: "your-strong-password"
REDIS_DATABASE: "3"
REDIS_TIMEOUT: "3"
REDIS_KEEPALIVE_IDLE: "60"
REDIS_KEEPALIVE_POOL: "5"
```
Reporting
(PRO)
Prise en charge STREAM â
Regular reporting of important data from BunkerWeb (global, attacks, bans, requests, reasons, AS...). Monitoring pro plugin needed to work.
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_REPORTING_SMTP |
no |
global | non | Enable sending the report via email. |
USE_REPORTING_WEBHOOK |
no |
global | non | Enable sending the report via webhook. |
REPORTING_SCHEDULE |
weekly |
global | non | The frequency at which reports are sent. |
REPORTING_WEBHOOK_URLS |
global | non | List of webhook URLs to receive the report in Markdown (separated by spaces). | |
REPORTING_SMTP_EMAILS |
global | non | List of email addresses to receive the report in HTML format (separated by spaces). | |
REPORTING_SMTP_HOST |
global | non | The host server used for SMTP sending. | |
REPORTING_SMTP_PORT |
465 |
global | non | The port used for SMTP. Please note that there are different standards depending on the type of connection (SSL = 465, TLS = 587). |
REPORTING_SMTP_FROM_EMAIL |
global | non | The email address used as the sender. Note that 2FA must be disabled for this email address. | |
REPORTING_SMTP_FROM_USER |
global | non | The user authentication value for sending via the from email address. | |
REPORTING_SMTP_FROM_PASSWORD |
global | non | The password authentication value for sending via the from email address. | |
REPORTING_SMTP_SSL |
SSL |
global | non | Determine whether or not to use a secure connection for SMTP. |
REPORTING_SMTP_SUBJECT |
BunkerWeb Report |
global | non | The subject line of the email. |
Reverse proxy
Prise en charge STREAM â ïž
Le plugin Reverse Proxy offre des capacitĂ©s de proxy transparentes pour BunkerWeb, vous permettant de router les requĂȘtes vers des serveurs et services backend. Cette fonctionnalitĂ© permet Ă BunkerWeb d'agir comme une façade sĂ©curisĂ©e pour vos applications tout en offrant des avantages supplĂ©mentaires tels que la terminaison SSL et le filtrage de sĂ©curitĂ©.
Comment ça marche :
- Lorsqu'un client envoie une requĂȘte Ă BunkerWeb, le plugin Reverse Proxy la transmet Ă votre serveur backend configurĂ©.
- BunkerWeb ajoute des en-tĂȘtes de sĂ©curitĂ©, applique des rĂšgles WAF et effectue d'autres contrĂŽles de sĂ©curitĂ© avant de transmettre les requĂȘtes Ă votre application.
- Le serveur backend traite la requĂȘte et renvoie une rĂ©ponse Ă BunkerWeb.
- BunkerWeb applique des mesures de sécurité supplémentaires à la réponse avant de la renvoyer au client.
- Le plugin prend en charge le proxying de flux HTTP et TCP/UDP, permettant un large éventail d'applications, y compris les WebSockets et d'autres protocoles non-HTTP.
Comment lâutiliser
Suivez ces étapes pour configurer et utiliser la fonctionnalité Reverse Proxy :
- Activer la fonctionnalité : Mettez le paramÚtre
USE_REVERSE_PROXYĂyespour activer la fonctionnalitĂ© de reverse proxy. - Configurer vos serveurs backend : SpĂ©cifiez les serveurs en amont Ă l'aide du paramĂštre
REVERSE_PROXY_HOST. - Ajuster les paramÚtres du proxy : Affinez le comportement avec des paramÚtres optionnels pour les délais d'attente, les tailles de tampon, et d'autres paramÚtres.
- Configurer les options spécifiques au protocole : Pour les WebSockets ou des exigences HTTP spéciales, ajustez les paramÚtres correspondants.
- Mettre en place la mise en cache (optionnel) : Activez et configurez la mise en cache du proxy pour améliorer les performances pour le contenu fréquemment accédé.
Guide de configuration
=== "Configuration de base"
**ParamĂštres principaux**
Les paramÚtres de configuration essentiels activent et contrÎlent la fonctionnalité de base du reverse proxy.
!!! success "Bénéfices du Reverse Proxy"
- **Amélioration de la sécurité :** Tout le trafic passe par les couches de sécurité de BunkerWeb avant d'atteindre vos applications
- **Terminaison SSL :** Gérez les certificats SSL/TLS de maniÚre centralisée tandis que les services backend peuvent utiliser des connexions non chiffrées
- **Gestion des protocoles :** Prise en charge de HTTP, HTTPS, WebSockets, et d'autres protocoles
- **Interception des erreurs :** Personnalisez les pages d'erreur pour une expérience utilisateur cohérente
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------------------- | ------ | --------- | -------- | ---------------------------------------------------------------------------------------------------------------- |
| `USE_REVERSE_PROXY` | `no` | multisite | no | **Activer le Reverse Proxy :** Mettre à `yes` pour activer la fonctionnalité de reverse proxy. |
| `REVERSE_PROXY_HOST` | | multisite | yes | **HÎte Backend :** URL complÚte de la ressource proxifiée (proxy_pass). |
| `REVERSE_PROXY_URL` | `/` | multisite | yes | **URL d'emplacement :** Chemin qui sera proxifié vers le serveur backend. |
| `REVERSE_PROXY_BUFFERING` | `yes` | multisite | yes | **Mise en tampon de la réponse :** Active ou désactive la mise en tampon des réponses de la ressource proxifiée. |
| `REVERSE_PROXY_KEEPALIVE` | `no` | multisite | yes | **Keep-Alive :** Active ou désactive les connexions keepalive avec la ressource proxifiée. |
| `REVERSE_PROXY_CUSTOM_HOST` | | multisite | no | **HĂŽte personnalisĂ© :** Remplace l'en-tĂȘte Host envoyĂ© au serveur en amont. |
| `REVERSE_PROXY_INTERCEPT_ERRORS` | `yes` | multisite | no | **Intercepter les erreurs :** Intercepte et réécrit les réponses d'erreur du backend. |
!!! tip "Bonnes pratiques"
- Spécifiez toujours l'URL complÚte dans `REVERSE_PROXY_HOST`, y compris le protocole (http:// ou https://)
- Utilisez `REVERSE_PROXY_INTERCEPT_ERRORS` pour fournir des pages d'erreur cohérentes sur tous vos services
- Lors de la configuration de plusieurs backends, utilisez le format de suffixe numéroté (par exemple, `REVERSE_PROXY_HOST_2`, `REVERSE_PROXY_URL_2`)
=== "ParamĂštres de connexion"
**Configuration des connexions et des délais d'attente**
Ces paramÚtres contrÎlent le comportement des connexions, la mise en tampon et les valeurs de délai d'attente pour les connexions proxifiées.
!!! success "Bénéfices"
- **Performance optimisée :** Ajustez les tailles de tampon et les paramÚtres de connexion en fonction des besoins de votre application
- **Gestion des ressources :** ContrÎlez l'utilisation de la mémoire grùce à des configurations de tampon appropriées
- **Fiabilité :** Configurez des délais d'attente appropriés pour gérer les connexions lentes ou les problÚmes de backend
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------------------------- | ------ | --------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
| `REVERSE_PROXY_CONNECT_TIMEOUT` | `60s` | multisite | yes | **Délai de connexion :** Temps maximum pour établir une connexion avec le serveur backend. |
| `REVERSE_PROXY_READ_TIMEOUT` | `60s` | multisite | yes | **Délai de lecture :** Temps maximum entre les transmissions de deux paquets successifs depuis le serveur backend. |
| `REVERSE_PROXY_SEND_TIMEOUT` | `60s` | multisite | yes | **Délai d'envoi :** Temps maximum entre les transmissions de deux paquets successifs vers le serveur backend. |
| `PROXY_BUFFERS` | | multisite | no | **Tampons :** Nombre et taille des tampons pour lire la réponse du serveur backend. |
| `PROXY_BUFFER_SIZE` | | multisite | no | **Taille du tampon :** Taille du tampon pour lire la premiÚre partie de la réponse du serveur backend. |
| `PROXY_BUSY_BUFFERS_SIZE` | | multisite | no | **Taille des tampons occupĂ©s :** Taille des tampons qui peuvent ĂȘtre occupĂ©s Ă envoyer une rĂ©ponse au client. |
!!! warning "Considérations sur les délais d'attente"
- Des délais trop courts peuvent interrompre des connexions légitimes mais lentes
- Des délais trop longs peuvent laisser des connexions ouvertes inutilement, épuisant potentiellement les ressources
- Pour les applications WebSocket, augmentez considérablement les délais de lecture et d'envoi (300s ou plus recommandé)
=== "Configuration SSL/TLS"
**ParamĂštres SSL/TLS pour les connexions Backend**
Ces paramÚtres contrÎlent la maniÚre dont BunkerWeb établit des connexions sécurisées avec les serveurs backend.
!!! success "Bénéfices"
- **Chiffrement de bout en bout :** Maintenez des connexions chiffrées du client au backend
- **Validation des certificats :** ContrĂŽlez la validation des certificats des serveurs backend
- **Support SNI :** Spécifiez l'indication du nom du serveur (SNI) pour les backends hébergeant plusieurs sites
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ---------------------------- | ------ | --------- | -------- | ---------------------------------------------------------------------------------------------- |
| `REVERSE_PROXY_SSL_SNI` | `no` | multisite | no | **SSL SNI :** Active ou désactive l'envoi du SNI (Server Name Indication) à l'amont. |
| `REVERSE_PROXY_SSL_SNI_NAME` | | multisite | no | **Nom SSL SNI :** Définit le nom d'hÎte SNI à envoyer à l'amont lorsque le SSL SNI est activé. |
!!! info "Explication du SNI"
L'Indication du Nom du Serveur (SNI) est une extension TLS qui permet Ă un client de spĂ©cifier le nom d'hĂŽte auquel il tente de se connecter pendant la nĂ©gociation. Cela permet aux serveurs de prĂ©senter plusieurs certificats sur la mĂȘme adresse IP et le mĂȘme port, permettant ainsi de servir plusieurs sites web sĂ©curisĂ©s (HTTPS) Ă partir d'une seule adresse IP sans que tous ces sites n'utilisent le mĂȘme certificat.
=== "Support des protocoles"
**Configuration spécifique aux protocoles**
Configurez la gestion de protocoles spéciaux, notamment pour les WebSockets et autres protocoles non-HTTP.
!!! success "Bénéfices"
- **Flexibilité des protocoles :** Le support des WebSockets permet des applications en temps réel
- **Applications web modernes :** Activez des fonctionnalités interactives nécessitant une communication bidirectionnelle
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ------------------ | ------ | --------- | -------- | ----------------------------------------------------------------------- |
| `REVERSE_PROXY_WS` | `no` | multisite | yes | **Support WebSocket :** Active le protocole WebSocket sur la ressource. |
!!! tip "Configuration WebSocket"
- Lors de l'activation des WebSockets avec `REVERSE_PROXY_WS: "yes"`, envisagez d'augmenter les valeurs des délais d'attente
- Les connexions WebSocket restent ouvertes plus longtemps que les connexions HTTP typiques
- Pour les applications WebSocket, une configuration recommandée est :
```yaml
REVERSE_PROXY_WS: "yes"
REVERSE_PROXY_READ_TIMEOUT: "300s"
REVERSE_PROXY_SEND_TIMEOUT: "300s"
```
=== "Gestion des en-tĂȘtes"
**Configuration des en-tĂȘtes HTTP**
ContrĂŽlez quels en-tĂȘtes sont envoyĂ©s aux serveurs backend et aux clients, vous permettant d'ajouter, de modifier ou de prĂ©server des en-tĂȘtes HTTP.
!!! success "Bénéfices"
- **ContrÎle de l'information :** Gérez précisément les informations partagées entre les clients et les backends
- **AmĂ©lioration de la sĂ©curitĂ© :** Ajoutez des en-tĂȘtes liĂ©s Ă la sĂ©curitĂ© ou supprimez ceux qui pourraient divulguer des informations sensibles
- **Support d'intĂ©gration :** Fournissez les en-tĂȘtes nĂ©cessaires Ă l'authentification et au bon fonctionnement du backend
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------------------------- | --------- | --------- | -------- | ------------------------------------------------------------------------------------------------- |
| `REVERSE_PROXY_HEADERS` | | multisite | yes | **En-tĂȘtes personnalisĂ©s :** En-tĂȘtes HTTP Ă envoyer au backend, sĂ©parĂ©s par des points-virgules. |
| `REVERSE_PROXY_HIDE_HEADERS` | `Upgrade` | multisite | yes | **Cacher les en-tĂȘtes :** En-tĂȘtes HTTP Ă cacher aux clients lorsqu'ils sont reçus du backend. |
| `REVERSE_PROXY_HEADERS_CLIENT` | | multisite | yes | **En-tĂȘtes client :** En-tĂȘtes HTTP Ă envoyer au client, sĂ©parĂ©s par des points-virgules. |
| `REVERSE_PROXY_UNDERSCORES_IN_HEADERS` | `no` | multisite | no | **Underscores dans les en-tĂȘtes :** Active ou dĂ©sactive la directive `underscores_in_headers`. |
!!! warning "Considérations de sécurité"
Lors de l'utilisation de la fonctionnalitĂ© de reverse proxy, soyez prudent quant aux en-tĂȘtes que vous transmettez Ă vos applications backend. Certains en-tĂȘtes peuvent exposer des informations sensibles sur votre infrastructure ou contourner les contrĂŽles de sĂ©curitĂ©.
!!! example "Exemples de format d'en-tĂȘte"
En-tĂȘtes personnalisĂ©s vers les serveurs backend :
```
REVERSE_PROXY_HEADERS: "X-Real-IP $remote_addr;X-Forwarded-For $proxy_add_x_forwarded_for;X-Forwarded-Proto $scheme"
```
En-tĂȘtes personnalisĂ©s vers les clients :
```
REVERSE_PROXY_HEADERS_CLIENT: "X-Powered-By BunkerWeb;X-Frame-Options SAMEORIGIN"
```
=== "Authentification"
**Configuration de l'authentification externe**
Intégrez avec des systÚmes d'authentification externes pour centraliser la logique d'autorisation à travers vos applications.
!!! success "Bénéfices"
- **Authentification centralisĂ©e :** Mettez en Ćuvre un point d'authentification unique pour plusieurs applications
- **Sécurité cohérente :** Appliquez des politiques d'authentification uniformes sur différents services
- **ContrĂŽle amĂ©liorĂ© :** Transmettez les dĂ©tails d'authentification aux applications backend via des en-tĂȘtes ou des variables
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| --------------------------------------- | ------ | --------- | -------- | --------------------------------------------------------------------------------------------------------- |
| `REVERSE_PROXY_AUTH_REQUEST` | | multisite | yes | **RequĂȘte d'authentification :** Active l'authentification via un fournisseur externe. |
| `REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL` | | multisite | yes | **URL de connexion :** Redirige les clients vers l'URL de connexion en cas d'échec de l'authentification. |
| `REVERSE_PROXY_AUTH_REQUEST_SET` | | multisite | yes | **Variables d'authentification :** Variables à définir à partir du fournisseur d'authentification. |
!!! tip "Intégration de l'authentification"
- La fonctionnalitĂ© de requĂȘte d'authentification permet la mise en Ćuvre de microservices d'authentification centralisĂ©s
- Votre service d'authentification doit renvoyer un code de statut 200 pour une authentification réussie ou 401/403 en cas d'échec
- Utilisez la directive auth_request_set pour extraire et transmettre des informations du service d'authentification
=== "Configuration avancée"
**Options de configuration supplémentaires**
Ces paramÚtres offrent une personnalisation plus poussée du comportement du reverse proxy pour des scénarios spécialisés.
!!! success "Bénéfices"
- **Personnalisation :** Incluez des extraits de configuration supplémentaires pour des exigences complexes
- **Optimisation des performances :** Affinez la gestion des requĂȘtes pour des cas d'usage spĂ©cifiques
- **Flexibilité :** Adaptez-vous aux exigences uniques de l'application avec des configurations spécialisées
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| --------------------------------- | ------ | --------- | -------- | ----------------------------------------------------------------------------------------------------- |
| `REVERSE_PROXY_INCLUDES` | | multisite | yes | **Configurations supplémentaires :** Incluez des configurations additionnelles dans le bloc location. |
| `REVERSE_PROXY_PASS_REQUEST_BODY` | `yes` | multisite | yes | **Passer le corps de la requĂȘte :** Active ou dĂ©sactive la transmission du corps de la requĂȘte. |
!!! warning "Considérations de sécurité"
Soyez prudent lorsque vous incluez des extraits de configuration personnalisés car ils peuvent outrepasser les paramÚtres de sécurité de BunkerWeb ou introduire des vulnérabilités s'ils ne sont pas correctement configurés.
=== "Configuration du cache"
**ParamÚtres de mise en cache des réponses**
Améliorez les performances en mettant en cache les réponses des serveurs backend, réduisant ainsi la charge et améliorant les temps de réponse.
!!! success "Bénéfices"
- **Performance :** Réduisez la charge sur les serveurs backend en servant du contenu mis en cache
- **Latence réduite :** Temps de réponse plus rapides pour le contenu fréquemment demandé
- **Ăconomies de bande passante :** Minimisez le trafic rĂ©seau interne en mettant en cache les rĂ©ponses
- **Personnalisation :** Configurez exactement quoi, quand et comment le contenu est mis en cache
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ---------------------------- | ---------------------------------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------- |
| `USE_PROXY_CACHE` | `no` | multisite | no | **Activer le cache :** Mettre à `yes` pour activer la mise en cache des réponses du backend. |
| `PROXY_CACHE_PATH_LEVELS` | `1:2` | global | no | **Niveaux de chemin du cache :** Comment structurer la hiérarchie du répertoire de cache. |
| `PROXY_CACHE_PATH_ZONE_SIZE` | `10m` | global | no | **Taille de la zone de cache :** Taille de la zone de mémoire partagée utilisée pour les métadonnées du cache. |
| `PROXY_CACHE_PATH_PARAMS` | `max_size=100m` | global | no | **ParamÚtres du chemin de cache :** ParamÚtres supplémentaires pour le chemin de cache. |
| `PROXY_CACHE_METHODS` | `GET HEAD` | multisite | no | **MĂ©thodes de cache :** MĂ©thodes HTTP qui peuvent ĂȘtre mises en cache. |
| `PROXY_CACHE_MIN_USES` | `2` | multisite | no | **Utilisations min. pour cache :** Nombre minimum de requĂȘtes avant qu'une rĂ©ponse ne soit mise en cache. |
| `PROXY_CACHE_KEY` | `$scheme$host$request_uri` | multisite | no | **Clé de cache :** La clé utilisée pour identifier de maniÚre unique une réponse mise en cache. |
| `PROXY_CACHE_VALID` | `200=24h 301=1h 302=24h` | multisite | no | **Validité du cache :** Durée de mise en cache pour des codes de réponse spécifiques. |
| `PROXY_NO_CACHE` | `$http_pragma $http_authorization` | multisite | no | **Pas de cache :** Conditions pour ne pas mettre en cache les rĂ©ponses mĂȘme si elles sont normalement cachables. |
| `PROXY_CACHE_BYPASS` | `0` | multisite | no | **Contournement du cache :** Conditions sous lesquelles contourner le cache. |
!!! tip "Bonnes pratiques de mise en cache"
- Ne mettez en cache que le contenu qui ne change pas fréquemment ou qui n'est pas personnalisé
- Utilisez des durĂ©es de cache appropriĂ©es en fonction du type de contenu (les ressources statiques peuvent ĂȘtre mises en cache plus longtemps)
- Configurez `PROXY_NO_CACHE` pour éviter de mettre en cache du contenu sensible ou personnalisé
- Surveillez les taux de réussite du cache et ajustez les paramÚtres en conséquence
!!! danger "Utilisateurs de Docker Compose - Variables NGINX"
Lorsque vous utilisez Docker Compose avec des variables NGINX dans vos configurations, vous devez échapper le signe dollar ($) en utilisant des doubles signes dollar ($$). Cela s'applique à tous les paramÚtres contenant des variables NGINX comme $remote_addr, $proxy_add_x_forwarded_for, etc.
Sans cet échappement, Docker Compose essaiera de substituer ces variables par des variables d'environnement, qui n'existent généralement pas, ce qui entraßnera des valeurs vides dans votre configuration NGINX.
Exemples de configuration
=== "Proxy HTTP de base"
Une configuration simple pour proxifier les requĂȘtes HTTP vers un serveur d'application backend :
```yaml
USE_REVERSE_PROXY: "yes"
REVERSE_PROXY_HOST: "http://application:8080"
REVERSE_PROXY_URL: "/"
REVERSE_PROXY_CONNECT_TIMEOUT: "10s"
REVERSE_PROXY_SEND_TIMEOUT: "60s"
REVERSE_PROXY_READ_TIMEOUT: "60s"
```
=== "Application WebSocket"
Configuration optimisée pour une application WebSocket avec des délais d'attente plus longs :
```yaml
USE_REVERSE_PROXY: "yes"
REVERSE_PROXY_HOST: "http://websocket-app:8080"
REVERSE_PROXY_URL: "/"
REVERSE_PROXY_WS: "yes"
REVERSE_PROXY_CONNECT_TIMEOUT: "10s"
REVERSE_PROXY_SEND_TIMEOUT: "300s"
REVERSE_PROXY_READ_TIMEOUT: "300s"
```
=== "Emplacements multiples"
Configuration pour router différents chemins vers différents services backend :
```yaml
USE_REVERSE_PROXY: "yes"
# Backend API
REVERSE_PROXY_HOST: "http://api-server:8080"
REVERSE_PROXY_URL: "/api/"
# Backend Admin
REVERSE_PROXY_HOST_2: "http://admin-server:8080"
REVERSE_PROXY_URL_2: "/admin/"
# Application Frontend
REVERSE_PROXY_HOST_3: "http://frontend:3000"
REVERSE_PROXY_URL_3: "/"
```
=== "Configuration du cache"
Configuration avec mise en cache du proxy activée pour de meilleures performances :
```yaml
USE_REVERSE_PROXY: "yes"
REVERSE_PROXY_HOST: "http://application:8080"
REVERSE_PROXY_URL: "/"
USE_PROXY_CACHE: "yes"
PROXY_CACHE_VALID: "200=24h 301=1h 302=24h"
PROXY_CACHE_METHODS: "GET HEAD"
PROXY_NO_CACHE: "$http_authorization"
```
=== "Gestion avancĂ©e des en-tĂȘtes"
Configuration avec manipulation personnalisĂ©e des en-tĂȘtes :
```yaml
USE_REVERSE_PROXY: "yes"
REVERSE_PROXY_HOST: "http://application:8080"
REVERSE_PROXY_URL: "/"
# En-tĂȘtes personnalisĂ©s vers le backend
REVERSE_PROXY_HEADERS: "X-Real-IP $remote_addr;X-Forwarded-For $proxy_add_x_forwarded_for;X-Forwarded-Proto $scheme"
# En-tĂȘtes personnalisĂ©s vers le client
REVERSE_PROXY_HEADERS_CLIENT: "X-Powered-By BunkerWeb;X-Frame-Options SAMEORIGIN"
```
=== "Intégration de l'authentification"
Configuration avec authentification externe :
```yaml
USE_REVERSE_PROXY: "yes"
REVERSE_PROXY_HOST: "http://application:8080"
REVERSE_PROXY_URL: "/"
# Configuration de l'authentification
REVERSE_PROXY_AUTH_REQUEST: "/auth"
REVERSE_PROXY_AUTH_REQUEST_SIGNIN_URL: "https://login.example.com"
REVERSE_PROXY_AUTH_REQUEST_SET: "$auth_user $upstream_http_x_user;$auth_role $upstream_http_x_role"
# Backend du service d'authentification
REVERSE_PROXY_HOST_2: "http://auth-service:8080"
REVERSE_PROXY_URL_2: "/auth"
```
Reverse scan
Prise en charge STREAM â
Le plugin Reverse Scan protÚge contre les tentatives de contournement via proxy en scannant certains ports cÎté client pour détecter des proxys/serveurs ouverts. Il aide à identifier et bloquer les clients qui tentent de masquer leur identité ou leur origine.
Comment ça marche :
- Ă la connexion dâun client, BunkerWeb tente de scanner des ports spĂ©cifiques sur lâIP du client.
- Les ports de proxy courants (80, 443, 8080, etc.) sont vérifiés.
- Si des ports ouverts sont dĂ©tectĂ©s (signe dâun proxy), la connexion est refusĂ©e.
- Cela ajoute une couche contre bots/outils automatisés et utilisateurs malveillants.
Comment lâutiliser
- Activer :
USE_REVERSE_SCAN: yes. - Ports : personnalisez
REVERSE_SCAN_PORTS. - Timeout : ajustez
REVERSE_SCAN_TIMEOUTpour lâĂ©quilibre sĂ©curitĂ©/performance. - Suivi : consultez les logs et la web UI.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_REVERSE_SCAN |
no |
multisite | non | Activer lâanalyse des ports cĂŽtĂ© client. |
REVERSE_SCAN_PORTS |
22 80 443 3128 8000 8080 |
multisite | non | Ports à vérifier (séparés par des espaces). |
REVERSE_SCAN_TIMEOUT |
500 |
multisite | non | Délai max par port en millisecondes. |
!!! warning "Performance" Scanner de nombreux ports ajoute de la latence. Limitez la liste et adaptez le timeout.
!!! info "Ports de proxy courants" La configuration par défaut inclut 80, 443, 8080, 3128 et SSH (22). Adaptez selon votre modÚle de menace.
Exemples
=== "Basique"
```yaml
USE_REVERSE_SCAN: "yes"
REVERSE_SCAN_TIMEOUT: "500"
REVERSE_SCAN_PORTS: "80 443 8080"
```
=== "Approfondi"
```yaml
USE_REVERSE_SCAN: "yes"
REVERSE_SCAN_TIMEOUT: "1000"
REVERSE_SCAN_PORTS: "22 80 443 3128 8080 8000 8888 1080 3333 8081"
```
=== "Optimisé performance"
```yaml
USE_REVERSE_SCAN: "yes"
REVERSE_SCAN_TIMEOUT: "250"
REVERSE_SCAN_PORTS: "80 443 8080"
```
=== "Haute sécurité"
```yaml
USE_REVERSE_SCAN: "yes"
REVERSE_SCAN_TIMEOUT: "1500"
REVERSE_SCAN_PORTS: "22 25 80 443 1080 3128 3333 4444 5555 6588 6666 7777 8000 8080 8081 8800 8888 9999"
```
Robots.txt
Prise en charge STREAM â
Le plugin Robots.txt gÚre le fichier robots.txt de votre site, indiquant aux robots les zones autorisées/interdites.
Comment ça marche :
ActivĂ©, BunkerWeb gĂ©nĂšre dynamiquement /robots.txt Ă la racine. Les rĂšgles sont agrĂ©gĂ©es dans lâordre :
- DarkVisitors (si
ROBOTSTXT_DARKVISITORS_TOKEN)Â : bloque des bots/IA connus selonROBOTSTXT_DARKVISITORS_AGENT_TYPESetROBOTSTXT_DARKVISITORS_DISALLOW. - Listes communautaires (
ROBOTSTXT_COMMUNITY_LISTS). - URLs personnalisées (
ROBOTSTXT_URLS). - RĂšgles manuelles (
ROBOTSTXT_RULE[_N]).
Ensuite, les rĂšgles Ă ignorer (ROBOTSTXT_IGNORE_RULE[_N], PCRE) sont filtrĂ©es. Sâil ne reste rien, un User-agent: * + Disallow: / par dĂ©faut est appliquĂ©. Des sitemaps (ROBOTSTXT_SITEMAP[_N]) peuvent ĂȘtre ajoutĂ©s.
DarkVisitors
DarkVisitors fournit un robots.txt dynamique pour bloquer des bots/IA. Inscrivezâvous et obtenez un bearer token.
Comment lâutiliser
- Activer :
USE_ROBOTSTXT: yes. - RÚgles : via DarkVisitors, listes communautaires, URLs ou variables
ROBOTSTXT_RULE. - Filtrer (optionnel)Â :
ROBOTSTXT_IGNORE_RULE_N. - Sitemaps (optionnel)Â :
ROBOTSTXT_SITEMAP_N. - AccÚs :
http(s)://votre-domaine/robots.txt.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_ROBOTSTXT |
no |
multisite | non | Active/désactive la fonctionnalité. |
ROBOTSTXT_DARKVISITORS_TOKEN |
multisite | non | Jeton Bearer pour lâAPI DarkVisitors. | |
ROBOTSTXT_DARKVISITORS_AGENT_TYPES |
multisite | non | Types dâagents (sĂ©parĂ©s par virgules) Ă inclure depuis DarkVisitors. | |
ROBOTSTXT_DARKVISITORS_DISALLOW |
/ |
multisite | non | Valeur du champ Disallow envoyĂ©e Ă lâAPI DarkVisitors. |
ROBOTSTXT_COMMUNITY_LISTS |
multisite | non | IDs de listes communautaires (séparés par espaces). | |
ROBOTSTXT_URLS |
multisite | non | URLs supplémentaires (supporte file:// et auth basique). |
|
ROBOTSTXT_RULE |
multisite | oui | RĂšgle individuelle robots.txt. |
|
ROBOTSTXT_HEADER |
multisite | oui | EnâtĂȘte (peut ĂȘtre encodĂ© Base64). | |
ROBOTSTXT_FOOTER |
multisite | oui | Pied de page (peut ĂȘtre encodĂ© Base64). | |
ROBOTSTXT_IGNORE_RULE |
multisite | oui | Motif PCRE dâignorance de rĂšgles. | |
ROBOTSTXT_SITEMAP |
multisite | oui | URL de sitemap. |
Exemples
Basique (manuel)
USE_ROBOTSTXT: "yes"
ROBOTSTXT_RULE: "User-agent: *"
ROBOTSTXT_RULE_1: "Disallow: /private"
ROBOTSTXT_SITEMAP: "https://example.com/sitemap.xml"
Sources dynamiques (DarkVisitors + liste)
USE_ROBOTSTXT: "yes"
ROBOTSTXT_DARKVISITORS_TOKEN: "your-darkvisitors-token-here"
ROBOTSTXT_DARKVISITORS_AGENT_TYPES: "AI Data Scraper"
ROBOTSTXT_COMMUNITY_LISTS: "robots-disallowed"
ROBOTSTXT_IGNORE_RULE: "User-agent: Googlebot-Image"
Combiné
USE_ROBOTSTXT: "yes"
ROBOTSTXT_DARKVISITORS_TOKEN: "your-darkvisitors-token-here"
ROBOTSTXT_COMMUNITY_LISTS: "ai-robots-txt"
ROBOTSTXT_URLS: "https://example.com/my-custom-rules.txt"
ROBOTSTXT_RULE: "User-agent: MyOwnBot"
ROBOTSTXT_RULE_1: "Disallow: /admin"
ROBOTSTXT_IGNORE_RULE: "User-agent: Googlebot-Image"
ROBOTSTXT_SITEMAP: "https://example.com/sitemap.xml"
EnâtĂȘte/Pied de page
USE_ROBOTSTXT: "yes"
ROBOTSTXT_HEADER: "# This is a custom header"
ROBOTSTXT_RULE: "User-agent: *"
ROBOTSTXT_RULE_1: "Disallow: /private"
ROBOTSTXT_FOOTER: "# This is a custom footer"
ROBOTSTXT_SITEMAP: "https://example.com/sitemap.xml"
Pour en savoir plus : documentation robots.txt.
SSL
Prise en charge STREAM â
Le plugin SSL fournit un chiffrement SSL/TLS robuste pour vos sites protégés par BunkerWeb. Il permet des connexions HTTPS sécurisées en configurant protocoles, suites cryptographiques et paramÚtres associés.
Comment ça marche :
- Lors dâune connexion HTTPS, BunkerWeb gĂšre la nĂ©gociation SSL/TLS selon vos rĂ©glages.
- Le plugin impose des protocoles modernes et des suites fortes, et désactive les options vulnérables.
- Des paramÚtres de session optimisés améliorent les performances sans sacrifier la sécurité.
- La présentation des certificats suit les bonnes pratiques pour compatibilité et sécurité.
Comment lâutiliser
- Protocoles : choisissez les versions via
SSL_PROTOCOLS. - Suites : sélectionnez un niveau via
SSL_CIPHERS_LEVELou des suites personnalisĂ©es viaSSL_CIPHERS_CUSTOM. - Redirections : configurez la redirection HTTPâHTTPS avec
AUTO_REDIRECT_HTTP_TO_HTTPSet/ouREDIRECT_HTTP_TO_HTTPS.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
REDIRECT_HTTP_TO_HTTPS |
no |
multisite | non | Rediriger tout HTTP vers HTTPS. |
AUTO_REDIRECT_HTTP_TO_HTTPS |
yes |
multisite | non | Redirection auto si HTTPS détecté. |
SSL_PROTOCOLS |
TLSv1.2 TLSv1.3 |
multisite | non | Protocoles SSL/TLS supportés (séparés par des espaces). |
SSL_CIPHERS_LEVEL |
modern |
multisite | non | Niveau de sécurité des suites (modern, intermediate, old). |
SSL_CIPHERS_CUSTOM |
multisite | non | Suites personnalisées (liste séparée par :) qui remplacent le niveau. |
!!! tip "Test SSL Labs" Testez votre configuration via Qualys SSL Labs. Une configuration BunkerWeb bien réglée atteint généralement A+.
!!! warning "Protocoles anciens" SSLv3, TLSv1.0 et TLSv1.1 sont dĂ©sactivĂ©s par dĂ©faut (vulnĂ©rabilitĂ©s connues). Activezâles uniquement si nĂ©cessaire pour clients hĂ©ritĂ©s.
Exemples
=== "Sécurité moderne (défaut)"
```yaml
LISTEN_HTTPS: "yes"
SSL_PROTOCOLS: "TLSv1.2 TLSv1.3"
SSL_CIPHERS_LEVEL: "modern"
AUTO_REDIRECT_HTTP_TO_HTTPS: "yes"
REDIRECT_HTTP_TO_HTTPS: "no"
```
=== "Sécurité maximale"
```yaml
LISTEN_HTTPS: "yes"
SSL_PROTOCOLS: "TLSv1.3"
SSL_CIPHERS_LEVEL: "modern"
AUTO_REDIRECT_HTTP_TO_HTTPS: "yes"
REDIRECT_HTTP_TO_HTTPS: "yes"
```
=== "Compatibilité héritée"
```yaml
LISTEN_HTTPS: "yes"
SSL_PROTOCOLS: "TLSv1.2 TLSv1.3"
SSL_CIPHERS_LEVEL: "old"
AUTO_REDIRECT_HTTP_TO_HTTPS: "no"
```
=== "Suites personnalisées"
```yaml
LISTEN_HTTPS: "yes"
SSL_PROTOCOLS: "TLSv1.2 TLSv1.3"
SSL_CIPHERS_CUSTOM: "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305"
AUTO_REDIRECT_HTTP_TO_HTTPS: "yes"
```
Security.txt
Prise en charge STREAM â
Le plugin Security.txt met en Ćuvre le standard Security.txt (RFC 9116) sur votre site. Il facilite lâaccĂšs aux politiques de sĂ©curitĂ© et fournit un moyen standardisĂ© de signaler des vulnĂ©rabilitĂ©s.
Comment ça marche :
- Une fois activé, BunkerWeb expose
/.well-known/security.txtĂ la racine du site. - Le fichier contient vos politiques, contacts et informations pertinentes.
- Les chercheurs en sĂ©curitĂ© et outils automatisĂ©s le trouvent Ă lâemplacement standard.
- Le contenu est dĂ©fini via des paramĂštres simples (contacts, clĂ©s de chiffrement, politiques, remerciementsâŠ).
- BunkerWeb formate automatiquement selon la RFCÂ 9116.
Comment lâutiliser
- Activer :
USE_SECURITYTXT: yes. - Contacts : précisez au moins un moyen de contact via
SECURITYTXT_CONTACT. - Informations additionnelles : configurez expiration, chiffrement, remerciements, URL de politiqueâŠ
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_SECURITYTXT |
no |
multisite | non | Activer le fichier security.txt. |
SECURITYTXT_URI |
/.well-known/security.txt |
multisite | non | URI dâaccĂšs au fichier. |
SECURITYTXT_CONTACT |
multisite | oui | Moyens de contact (ex. mailto:security@example.com). |
|
SECURITYTXT_EXPIRES |
multisite | non | Date dâexpiration (format ISOÂ 8601). | |
SECURITYTXT_ENCRYPTION |
multisite | oui | URL de clés de chiffrement pour échanges sécurisés. | |
SECURITYTXT_ACKNOWLEDGEMENTS |
multisite | oui | URL de remerciements pour les chercheurs. | |
SECURITYTXT_POLICY |
multisite | oui | URL de la politique de sécurité (procédure de signalement). | |
SECURITYTXT_HIRING |
multisite | oui | URL dâoffres dâemploi sĂ©curitĂ©. | |
SECURITYTXT_CANONICAL |
multisite | oui | URL canonique du fichier security.txt. | |
SECURITYTXT_PREFERRED_LANG |
en |
multisite | non | Langue prĂ©fĂ©rĂ©e (code ISO 639â1). |
SECURITYTXT_CSAF |
multisite | oui | Lien vers le provider-metadata.json du fournisseur CSAF. |
!!! warning "Expiration requise"
Le champ Expires est obligatoire. Si absent, BunkerWeb définit par défaut une expiration à un an.
!!! info "Contacts essentiels" Fournissez au moins un moyen de contact : email, formulaire, téléphone, etc.
!!! warning "HTTPS obligatoire"
Toutes les URLs (sauf mailto: et tel:) DOIVENT utiliser HTTPS. BunkerWeb convertit les URL nonâHTTPS pour la conformitĂ©.
Exemples
=== "Basique"
```yaml
USE_SECURITYTXT: "yes"
SECURITYTXT_CONTACT: "mailto:security@example.com"
SECURITYTXT_POLICY: "https://example.com/security-policy"
```
=== "Complet"
```yaml
USE_SECURITYTXT: "yes"
SECURITYTXT_CONTACT: "mailto:security@example.com"
SECURITYTXT_CONTACT_2: "https://example.com/security-contact-form"
SECURITYTXT_EXPIRES: "2023-12-31T23:59:59+00:00"
SECURITYTXT_ENCRYPTION: "https://example.com/pgp-key.txt"
SECURITYTXT_ACKNOWLEDGEMENTS: "https://example.com/hall-of-fame"
SECURITYTXT_POLICY: "https://example.com/security-policy"
SECURITYTXT_HIRING: "https://example.com/jobs/security"
SECURITYTXT_CANONICAL: "https://example.com/.well-known/security.txt"
SECURITYTXT_PREFERRED_LANG: "en"
SECURITYTXT_CSAF: "https://example.com/provider-metadata.json"
```
=== "Contacts multiples"
```yaml
USE_SECURITYTXT: "yes"
SECURITYTXT_CONTACT: "mailto:security@example.com"
SECURITYTXT_CONTACT_2: "tel:+1-201-555-0123"
SECURITYTXT_CONTACT_3: "https://example.com/security-form"
SECURITYTXT_POLICY: "https://example.com/security-policy"
SECURITYTXT_EXPIRES: "2024-06-30T23:59:59+00:00"
```
Self-signed certificate
Prise en charge STREAM â
Le plugin Certificat autoâsignĂ© gĂ©nĂšre et gĂšre automatiquement des certificats SSL/TLS directement dans BunkerWeb, pour activer HTTPS sans autoritĂ© de certification externe. IdĂ©al en dĂ©veloppement, rĂ©seaux internes ou dĂ©ploiements rapides dâHTTPS.
Comment ça marche :
- Une fois activĂ©, BunkerWeb gĂ©nĂšre un certificat autoâsignĂ© pour vos domaines configurĂ©s.
- Le certificat inclut tous les noms de serveurs définis, assurant une validation correcte.
- Les certificats sont stockés de façon sécurisée et chiffrent tout le trafic HTTPS.
- Le renouvellement est automatique avant expiration.
!!! warning "Avertissements navigateurs" Les navigateurs afficheront des alertes de sĂ©curitĂ© car un certificat autoâsignĂ© nâest pas Ă©mis par une AC de confiance. En production, prĂ©fĂ©rez Letâs Encrypt.
Comment lâutiliser
- Activer :
GENERATE_SELF_SIGNED_SSL: yes. - Algorithme : choisissez via
SELF_SIGNED_SSL_ALGORITHM. - Validité : durée en jours via
SELF_SIGNED_SSL_EXPIRY. - Sujet : champ subject via
SELF_SIGNED_SSL_SUBJ.
!!! tip "Mode stream"
En mode stream, configurez LISTEN_STREAM_PORT_SSL pour dĂ©finir le port dâĂ©coute SSL/TLS.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
GENERATE_SELF_SIGNED_SSL |
no |
multisite | non | Activer la gĂ©nĂ©ration automatique de certificats autoâsignĂ©s. |
SELF_SIGNED_SSL_ALGORITHM |
ec-prime256v1 |
multisite | non | Algorithme : ec-prime256v1, ec-secp384r1, rsa-2048, rsa-4096. |
SELF_SIGNED_SSL_EXPIRY |
365 |
multisite | non | Validité (jours). |
SELF_SIGNED_SSL_SUBJ |
/CN=www.example.com/ |
multisite | non | Sujet du certificat (identifiant le domaine). |
Exemples
=== "Basique"
```yaml
GENERATE_SELF_SIGNED_SSL: "yes"
SELF_SIGNED_SSL_ALGORITHM: "ec-prime256v1"
SELF_SIGNED_SSL_EXPIRY: "365"
SELF_SIGNED_SSL_SUBJ: "/CN=mysite.local/"
```
=== "Certificats courte durée"
```yaml
GENERATE_SELF_SIGNED_SSL: "yes"
SELF_SIGNED_SSL_ALGORITHM: "ec-prime256v1"
SELF_SIGNED_SSL_EXPIRY: "90"
SELF_SIGNED_SSL_SUBJ: "/CN=dev.example.com/"
```
=== "Test en RSA"
```yaml
SERVER_NAME: "test.example.com"
GENERATE_SELF_SIGNED_SSL: "yes"
SELF_SIGNED_SSL_ALGORITHM: "rsa-4096"
SELF_SIGNED_SSL_EXPIRY: "365"
SELF_SIGNED_SSL_SUBJ: "/CN=test.example.com/"
```
Sessions
Prise en charge STREAM â
Le plugin Sessions fournit une gestion robuste des sessions HTTP dans BunkerWeb pour suivre de maniĂšre sĂ©curisĂ©e lâĂ©tat utilisateur entre requĂȘtes. Indispensable pour la persistance dâauthentification et des fonctionnalitĂ©s comme la protection antibot.
Comment ça marche :
- à la premiÚre interaction, BunkerWeb crée un identifiant de session unique.
- Il est stocké de maniÚre sécurisée dans un cookie navigateur.
- Aux requĂȘtes suivantes, lâidentifiant permet dâaccĂ©der aux donnĂ©es de session.
- Le stockage peut ĂȘtre local ou dans Redis en environnement distribuĂ©.
- Les sessions sont gérées automatiquement avec des timeouts configurables.
- Un secret cryptographique signe les cookies de session.
Comment lâutiliser
- Secret : définissez un
SESSIONS_SECRETfort et unique. - Nom : personnalisez
SESSIONS_NAMEsi souhaité. - Délais : ajustez
SESSIONS_IDLING_TIMEOUT,SESSIONS_ROLLING_TIMEOUT,SESSIONS_ABSOLUTE_TIMEOUT. - Cluster : activez
USE_REDIS: yeset configurez Redis pour partager les sessions entre nĆuds.
ParamĂštres
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
SESSIONS_SECRET |
random |
global | non | Clé de signature des cookies (forte, aléatoire, unique). |
SESSIONS_NAME |
random |
global | non | Nom du cookie de session. |
SESSIONS_IDLING_TIMEOUT |
1800 |
global | non | Inactivité max (secondes) avant invalidation. |
SESSIONS_ROLLING_TIMEOUT |
3600 |
global | non | Durée max (secondes) avant renouvellement obligatoire. |
SESSIONS_ABSOLUTE_TIMEOUT |
86400 |
global | non | Durée max (secondes) avant destruction, activité ou non. |
SESSIONS_CHECK_IP |
yes |
global | non | DĂ©truire la session si lâIP change. |
SESSIONS_CHECK_USER_AGENT |
yes |
global | non | DĂ©truire la session si lâUserâAgent change. |
!!! warning "SĂ©curitĂ©" - SESSIONS_SECRET doit ĂȘtre fort (â„32 caractĂšres), confidentiel et identique sur toutes les instances. - Utilisez des variables dâenvironnement/secrets pour Ă©viter le clair.
!!! tip "Clusters" - USE_REDIS: yes et mĂȘme SESSIONS_SECRET/SESSIONS_NAME sur tous les nĆuds.
Exemples
=== "Basique (instance unique)"
```yaml
SESSIONS_SECRET: "your-strong-random-secret-key-here"
SESSIONS_NAME: "myappsession"
SESSIONS_IDLING_TIMEOUT: "1800"
SESSIONS_ROLLING_TIMEOUT: "3600"
SESSIONS_ABSOLUTE_TIMEOUT: "86400"
```
=== "Sécurité renforcée"
```yaml
SESSIONS_SECRET: "your-very-strong-random-secret-key-here"
SESSIONS_NAME: "securesession"
SESSIONS_IDLING_TIMEOUT: "900"
SESSIONS_ROLLING_TIMEOUT: "1800"
SESSIONS_ABSOLUTE_TIMEOUT: "43200"
SESSIONS_CHECK_IP: "yes"
SESSIONS_CHECK_USER_AGENT: "yes"
```
=== "Cluster + Redis"
```yaml
SESSIONS_SECRET: "your-strong-random-secret-key-here"
SESSIONS_NAME: "clustersession"
SESSIONS_IDLING_TIMEOUT: "1800"
SESSIONS_ROLLING_TIMEOUT: "3600"
SESSIONS_ABSOLUTE_TIMEOUT: "86400"
USE_REDIS: "yes"
# Configurez la connexion Redis
```
=== "Sessions longue durée"
```yaml
SESSIONS_SECRET: "your-strong-random-secret-key-here"
SESSIONS_NAME: "persistentsession"
SESSIONS_IDLING_TIMEOUT: "86400"
SESSIONS_ROLLING_TIMEOUT: "172800"
SESSIONS_ABSOLUTE_TIMEOUT: "604800"
```
UI
Prise en charge STREAM â
Integrate easily the BunkerWeb UI.
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_UI |
no |
multisite | non | Use UI |
UI_HOST |
global | non | Address of the web UI used for initial setup |
User Manager
(PRO)
Prise en charge STREAM â
Add the possibility to manage users on the web interface
| ParamÚtre | Valeur par défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USERS_REQUIRE_2FA |
no |
global | non | Require two-factor authentication for all users |
Whitelist
Prise en charge STREAM â ïž
Le plugin Whitelist vous permet de définir des clients de confiance qui contournent les autres filtres de sécurité. Les visiteurs correspondant aux rÚgles sont immédiatement autorisés et passent avant les autres contrÎles. Pour bloquer des clients indésirables, voir Blacklist.
Comment ça marche :
- Vous dĂ©finissez des critĂšres (IP/rĂ©seaux, rDNS, ASN, UserâAgent, URI).
- Si un visiteur correspond Ă une rĂšgle (et pas Ă une rĂšgle dâignore), il est autorisĂ© et bypass tous les contrĂŽles.
- Sinon, il suit le parcours de sécurité standard.
- Les listes peuvent ĂȘtre mises Ă jour automatiquement depuis des sources externes.
!!! info "Mode stream" En stream, uniquement IP, rDNS et ASN sont évalués.
ParamĂštres
Général
| ParamÚtre | Défaut | Contexte | Multiple | Description |
|---|---|---|---|---|
USE_WHITELIST |
no |
multisite | non | Activer la whitelist. |
=== "Adresse IP"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| -------------------------- | ------ | --------- | -------- | ---------------------------------------------------- |
| `WHITELIST_IP` | | multisite | non | IP/réseaux (CIDR) autorisés. |
| `WHITELIST_IGNORE_IP` | | multisite | non | IP/réseaux ignorés (bypassent les vérifications IP). |
| `WHITELIST_IP_URLS` | | multisite | non | URLs contenant IP/réseaux à autoriser. |
| `WHITELIST_IGNORE_IP_URLS` | | multisite | non | URLs contenant IP/réseaux à ignorer. |
=== "Reverse DNS"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ---------------------------- | ------ | --------- | -------- | -------------------------------------------- |
| `WHITELIST_RDNS` | | multisite | non | Suffixes rDNS autorisés. |
| `WHITELIST_RDNS_GLOBAL` | `yes` | multisite | non | Vérifier seulement les IP globales si `yes`. |
| `WHITELIST_IGNORE_RDNS` | | multisite | non | Suffixes rDNS ignorés. |
| `WHITELIST_RDNS_URLS` | | multisite | non | URLs contenant des suffixes rDNS autorisés. |
| `WHITELIST_IGNORE_RDNS_URLS` | | multisite | non | URLs contenant des suffixes rDNS Ă ignorer. |
=== "ASN"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| --------------------------- | ------ | --------- | -------- | ------------------------------------ |
| `WHITELIST_ASN` | | multisite | non | NumĂ©ros dâAS autorisĂ©s. |
| `WHITELIST_IGNORE_ASN` | | multisite | non | AS ignorés (bypassent la vérif ASN). |
| `WHITELIST_ASN_URLS` | | multisite | non | URLs de listes dâAS autorisĂ©s. |
| `WHITELIST_IGNORE_ASN_URLS` | | multisite | non | URLs de listes dâAS Ă ignorer. |
=== "UserâAgent"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| ---------------------------------- | ------ | --------- | -------- | -------------------------------------------- |
| `WHITELIST_USER_AGENT` | | multisite | non | Motifs (regex PCRE) de UserâAgent autorisĂ©s. |
| `WHITELIST_IGNORE_USER_AGENT` | | multisite | non | Motifs ignorés. |
| `WHITELIST_USER_AGENT_URLS` | | multisite | non | URLs de motifs UserâAgent autorisĂ©s. |
| `WHITELIST_IGNORE_USER_AGENT_URLS` | | multisite | non | URLs de motifs UserâAgent Ă ignorer. |
=== "URI"
| ParamÚtre | Défaut | Contexte | Multiple | Description |
| --------------------------- | ------ | --------- | -------- | ------------------------------------ |
| `WHITELIST_URI` | | multisite | non | Motifs dâURI (regex PCRE) autorisĂ©s. |
| `WHITELIST_IGNORE_URI` | | multisite | non | Motifs dâURI ignorĂ©s. |
| `WHITELIST_URI_URLS` | | multisite | non | URLs de motifs dâURI autorisĂ©s. |
| `WHITELIST_IGNORE_URI_URLS` | | multisite | non | URLs de motifs dâURI Ă ignorer. |
Travailler avec des fichiers de listes locaux
Les paramĂštres *_URLS fournis par les plugins Whitelist, Greylist et Blacklist utilisent le mĂȘme tĂ©lĂ©chargeur. Lorsque vous rĂ©fĂ©rencez une URL file:/// :
- Le chemin est rĂ©solu dans le conteneur du scheduler (dans un dĂ©ploiement Docker il sâagit gĂ©nĂ©ralement de
bunkerweb-scheduler). Montez-y vos fichiers et vĂ©rifiez que lâutilisateur scheduler possĂšde un accĂšs en lecture. - Chaque fichier est un texte encodĂ© en UTF-8 avec une entrĂ©e par ligne. Les lignes vides sont ignorĂ©es et les commentaires doivent commencer par
#ou;. Les commentaires//ne sont pas pris en charge. - Valeur attendue selon le type de liste :
- Listes IP acceptent des adresses IPv4/IPv6 ou des réseaux CIDR (par exemple
192.0.2.10ou2001:db8::/48). - Listes rDNS attendent un suffixe sans espaces (par exemple
.search.msn.com). Les valeurs sont automatiquement converties en minuscules. - Listes ASN peuvent contenir uniquement le numéro (
32934) ou le numĂ©ro prĂ©fixĂ© parAS(AS15169). - Listes User-Agent sont traitĂ©es comme des motifs PCRE et la ligne complĂšte est conservĂ©e (espaces compris). Placez vos commentaires sur une ligne sĂ©parĂ©e pour Ă©viter quâils ne soient interprĂ©tĂ©s comme motif.
- Listes URI doivent commencer par
/et peuvent utiliser des jetons PCRE tels que^ou$.
- Listes IP acceptent des adresses IPv4/IPv6 ou des réseaux CIDR (par exemple
Exemples de fichiers conformes :
# /etc/bunkerweb/lists/ip-whitelist.txt
192.0.2.10
198.51.100.0/24
# /etc/bunkerweb/lists/ua-whitelist.txt
(?:^|\s)FriendlyScanner(?:\s|$)
TrustedMonitor/\d+\.\d+