Dans ce tutoriel, je vais vous présenter BunkerWeb puis vous expliquer comment le déployer dans votre environnement avec Docker et configurer un service qui est site qui sera protéger par BunkerWeb.
BunkerWeb c’est quoi ?
Bunkerweb est une solution WAF (Web Application Firewall) qui va vous permettre de publier vos applications Web sur Internet en les sécurisant.
Pour faire « simple », c’est un reverse proxy basé sur Nginx qui embarque avec lui tout les éléments qui vont permettre de sécuriser vos applications comme :
- ModSecurity qui est la couche WAF qui va permettre de détecter les requêtes malveillantes
- DNSBL : vérifier que l’adresse IP du client qui accède à l’application n’est pas sur liste noir
- ReverseScan
- Badbehavior : comportement suspect qui génère des codes d’erreurs 400 et 404 , généralement les bots de découverte
- Antibot : ajoute un Captcha pour s’assurer que l’utilisateur est humain
- Geoip
- HTTPS avec des Let’s Encrypt ou des certificats personnalisés
- Blacklist / Greylist / Whitelist
- ….
Il est aussi possible d’ajouter des plugins pour ajouter des éléments de sécurité comme :
- Crowdsec
- ClamAV
Le gros plus par rapport à une installation classique de Nginx, c’est que BunkerWeb permet de faire toutes la configuration de vos applications (services) avec une interface Web pour les personnes qui sont fâchées avec les lignes de commandes.
Pour finir sur les possibilités, il est aussi possible d’utiliser des fichiers de configuration si des options de Nginx ne sont pas disponibles dans BunkerWeb.
BunkerWeb est Open source, le Github se trouve ici : https://github.com/bunkerity/bunkerweb
Il existe plus « version » :
- Gratuite que l’on va voir dans ce tutoriel
- Pro qui permet d’avoir du support et des fonctionnalités supplémentaires comme le Monitoring, l’export Prometheus, Let’s Encrypt au niveau DNS et le Reporting
- Un version Cloud
Pour finir BunkerWeb est Français … Cocorico
Dans ce tutoriel, je vais principalement aborder la configuration de BunkerWeb en tant que Reverse proxy, il est aussi prévu pour s’intégrer avec Docker et Kubernetes pour automatiser la publication de vos applications conteneurisés.
De quoi vous avez besoin pour déployer BunkerWeb
D’un environnement Linux avec Docker d’installé, le tutoriel suivant Ubuntu 22.04 : installer Docker peut vous aider si vous n’avez jamais installer Docker.
En terme de ressource, cela va dépendre principalement du nombre de service que vous allez publier et du trafic.
Pour information, j’ai fait des tests sur un conteneur LCX sur Proxmox avec la configuration suivante :
- 1 CPU
- 1Go de Ram
- 20Go d’espace disque
Vous aurez également besoin d’un enregistrement DNS pour l’accès à la console d’administration de BunkerWeb, celui-ci doit pointer sur votre serveur Linux.
Si vous souhaitez également comprendre les différents éléments que l’on va déployer pour faire fonctionner BunkerWeb, je vous invite à lire les concepts avant.
En résumé voici les éléments à comprendre, la solution BunkerWeb s’appuie sur plusieurs services Docker pour fonctionner :
- bunkerweb : c’est le service frontale où est installé Nginx et qui va traiter les requêtés.
- bw-scheduler : c’est en quelque sorte le « cerveau », il s’occupe du stockage et de la génération des configurations pour bunkerweb et exécute différentes tâches.
- bw-ui : c’est le service qui nous permet d’avoir une interface Web
Déployer BunkerWeb avec Docker
Le principal avantage d’utiliser Docker, c’est que l’on va déployer BunkerWeb très facilement sans rien n’avoir besoin d’installer, il va juste falloir configurer notre fichier docker-compose.yml.
Si vous avez l’habitude de lire mes articles, une fois n’est pas coutume, je vais me placer à l’emplacement suivant sur mon serveur linux : /containers/bunkerweb
Voici mon fichier docker-compose.yml :
Voici les éléments que vous devez modifier :
- bunkerweb.demo.lan : par l’url (enregistrement DNS) que vous avez choisi pour l’accès à l’interface Web
- changeme_mysql : mot de passe MariaDB du compte bunkerweb
- changeme_adminpassword : mot de passe du compte admin pour accéder à l’interface Web qui doit être complexe.
Une fois le fichier docker-compose.yml
sur votre serveur au bon emplacement, entrer la commande suivante pour télécharger les images :
sudo docker compose pull
Une fois les images téléchargées, entrer la commande suivante pour démarrer les conteneurs et accéder aux logs.
sudo docker compose up -d && sudo docker compose logs -f
Patienter pendant le premier démarrage qui prend un peu de temps du fait de l’initialisation de BunkerWeb et de la base de données, dans les logs vérifier qu’il n’y a pas d’erreur.
Pour quitter les logs appuyer sur les touches Ctrl+C
Depuis un navigateur Web, entrer l’url de l’interface Web, vous devriez arriver sur le formulaire ci-dessous, vous devriez également avoir une erreur de certificat car celui-ci n’est pas connu.
Entrer les identifiants configurés dans le fichier docker-compose.yml
admin et le mot de passe.
Une fois connecté, vous arrivez sur la page d’accueil de l’interface Web.
Notre BunkerWeb est déployé, il nous reste maintenant à configurer des services.
Si vous souhaitez des exemples de déploiement de BunkerWeb, il y a plus exemple sur le dépôt Github : https://github.com/bunkerity/bunkerweb/tree/master/examples
Configurer un service dans BunkerWeb
On va maintenant passer à la configuration d’un service, qui est le nom des publications sur BunkerWeb,
Dans ce premier tutoriel dédié à BunkerWeb, je ne vais pas parcourir toutes les options, nous verrons cela dans d’autres articles.
Depuis le menu de navigation, cliquer sur Services 1.
Sur la page des services, on peut voir qu’il y en à déjà un de configuré, c’est celui-ci qui nous permet d’accéder à l’interface Web et ces paramètres se trouvent dans le fichier docker-compose.yml
.
Cliquer sur le bouton NEW SERVICE 1.
Commencer par configurer le paramètre Server name 1 qui est le nom fqdn (DNS) de votre application.
Ensuite cliquer sur GENERAL 1 puis rechercher le plugin Reverse proxy 2 et cliquer dessus.
Cocher la case Use reverse proxy 1.
Ensuite dans la partie inférieure de la page de configuration, indiquer l’url 1 vers le serveur de destination.
Pour finir aller en bas et cliquer sur le bouton SAVE 1.
Notre service est créé et on peut voir les différents plugins qui sont activés comme le MODSECURITY, BAD BEHAVIOR …
On peut maintenant tester notre service, si vous faites un test avec un site en production, avant de modifier l’enregistrement DNS je vous conseille d’utiliser le fichier hosts de votre ordinateur.
Depuis un navigateur accéder à votre application, il est possible que vous ayez une erreur de certificat car par défaut il va utiliser un certificat autosigné.
Astuces et dépannages
Afin que vous puissiez profiter pleinement de BunkerWeb avec ce premier tutoriel, voici quelques points pour aider dans la prise en main.
Afficher les logs Web – access_log
Pour voir les logs Web en directe, il faut passer par la machine Linux ou docker est installé et afficher les logs avec la commande suivante :
sudo docker compose logs -f
Désactiver la redirection HTTP vers HTTPS
Dans la configuration du service, dans le plugins MUSCELLANEOUS, décocher les case Redirect HTTP to HTTPS et Auto redirect HTTP to HTTPS.
Certificat Let’s Encrypt
Dans la configuration du service, aller sur le plugin LET’S ENCRYPT puis cocher la case Automatic Let’s Encrypt et indiquer votre adresse email.
Accès au service bloquer
Par défaut la configuration de BunkerWeb est assez agressive, en regarder les logs, ajuster la configuration du plugin LIMIT, BAD BEHAVIOR et MODSECURITY
Ce premier tutoriel s’arrête ici, j’espère qu’il vous a donné envie de découvrir et d’utiliser BunkerWeb.
Dans de futur tutoriel, nous verrons comment configurer son propre certificat, mettre en place Crowdsec et la configuration avancée des services notamment des paramètres de sécurité.