Dans le monde merveilleux du self-hosting, on aime bien mettre des trucs en ligne. Un petit blog par-ci, une application de gestion de recettes par-là, un outil de monitoring... Et puis un jour, on se rend compte que "mettre en ligne", ça veut aussi dire "exposer à l'Internet". Et l'Internet, c'est pas toujours très sympa. Les bots, les scanners, les tentatives d'injection SQL, les XSS... Bref, un joyeux bordel qui peut vite transformer un projet perso en une source de stress.
Il y a quelques temps, je me suis retrouvé avec une petite application PHP, pas forcément blindée de partout, qui se prenait quelques requêtes un peu louches. Rien de critique, mais ça m'a rappelé que la sécurité, ça ne se délègue pas. On peut faire confiance à son code (plus ou moins), mais une couche de protection externe, ça ne fait jamais de mal. C'est là que l'idée d'un WAF (Web Application Firewall) a commencé à me trotter dans la tête. Et parmi les options open-source pour mon homelab, je suis tombé sur BunkerWeb.
BunkerWeb, le gardien de votre homelab ?
BunkerWeb, c'est un peu le videur costaud devant la boîte de nuit de vos applications web. Il se positionne comme un pare-feu applicatif web open-source de nouvelle génération et un proxy inverse. En gros, toutes les requêtes HTTP/HTTPS passent par lui avant d'atteindre votre application. Son but est clair : protéger vos services (sites, API, etc.) contre tout ce qui traîne sur l'OWASP Top 10, les bots un peu trop curieux et même les attaques DDoS. L'idée, c'est d'avoir des services "sécurisés par défaut".
Sous le capot, on trouve du NGINX, ce bon vieux serveur web qui fait le taf, et surtout ModSecurity. ModSecurity, pour ceux qui ne connaissent pas, c'est un moteur WAF qui permet d'appliquer des règles de détection et de blocage. BunkerWeb l'intègre nativement et, cerise sur le gâteau, il est maintenu par Bunkerity SAS, une boîte française. Ça ne change rien techniquement, mais c'est toujours sympa de le savoir.
Installation à la Docker : la simplicité avant tout
Pour un homelabber comme moi, Docker, c'est la vie. Et BunkerWeb joue le jeu à fond. L'installation est super simple avec l'image bunkerity/bunkerweb-all-in-one:latest (ou la version GHCR si vous préférez). Ça inclut l'UI, l'API et tout le nécessaire. On peut y aller avec un simple docker run, mais pour intégrer ça proprement dans une architecture existante, un bon vieux docker-compose.yaml, c'est quand même plus propre.
Imaginons que j'aie une application PHP qui tourne dans un conteneur et que je veuille mettre BunkerWeb devant. Voici à quoi pourrait ressembler un docker-compose.yaml basique :
services:
bunkerweb:
image: bunkerity/bunkerweb-all-in-one:1.6.17 # On cible une version stable
container_name: bunkerweb
restart: unless-stopped
ports:
- "80:8080" # HTTP
- "443:8443" # HTTPS
volumes:
- ./bunkerweb-data:/data # Pour la persistance des configs et logs
environment:
- SERVER_NAME=monapp.mondomaine.fr
- AUTO_LETS_ENCRYPT=yes # Certificats SSL gratuits et auto-renouvelés
- USE_MODSECURITY=yes
- USE_MODSECURITY_CRS=yes # Activation des règles OWASP Core Rule Set
- USE_ANTIBOT=captcha # Protection anti-bot
- USE_GZIP=yes
- # D'autres variables de configuration peuvent être ajoutées ici
networks:
- app_network
my_php_app:
image: my_php_app_image:latest # Votre image d'application PHP
container_name: my_php_app
restart: unless-stopped
environment:
- APP_ENV=prod
networks:
- app_network
networks:
app_network:
driver: bridge
Quelques points importants ici :
- J'utilise l'image
bunkerity/bunkerweb-all-in-one:1.6.17pour avoir une version stable. Les versions comme 1.6.18-rc2 sont dispo si on aime vivre dangereusement. - Les ports 80 et 443 de l'hôte sont mappés vers les ports internes 8080 et 8443 de BunkerWeb. C'est lui qui va gérer le trafic entrant.
- Le volume
./bunkerweb-data:/dataest crucial pour que votre configuration et les logs persistent même si le conteneur est recréé. - Les variables d'environnement sont super pratiques pour la configuration initiale.
SERVER_NAMEpour le nom de domaine,AUTO_LETS_ENCRYPT=yespour avoir des certificats SSL gratuits gérés automatiquement,USE_MODSECURITY=yesetUSE_MODSECURITY_CRS=yespour activer le cœur de la protection (l'OWASP Core Rule Set). - L'
app_networkpermet à BunkerWeb de communiquer avec votre application PHP sans l'exposer directement sur le réseau hôte.
Après un simple docker compose up -d, votre application est désormais derrière BunkerWeb. Magique ? Non, juste pratique.
Configuration et personnalisation : affûtez votre défense
La beauté de BunkerWeb, c'est qu'il est configurable à l'aide de ces fameuses variables d'environnement, mais aussi via son interface web (on y vient...). L'activation de l'OWASP Core Rule Set (CRS) avec USE_MODSECURITY_CRS=yes est un excellent point de départ. Ça vous protège contre une grande majorité des menaces courantes.
Mais comme souvent avec les WAF, il peut y avoir des faux positifs. Une requête légitime peut être bloquée parce qu'elle ressemble à une attaque. C'est là qu'on peut affiner les règles. BunkerWeb permet d'inclure des configurations NGINX personnalisées et des règles ModSecurity spécifiques. Si une règle CRS bloque un truc qui ne devrait pas, on peut la désactiver ou la modifier. C'est un peu un jeu d'équilibriste entre sécurité maximale et fonctionnalité.
Pour vous aider à démarrer avec la configuration, il y a même un générateur de paramètres en ligne très sympa sur config.bunkerweb.io. Ça permet de générer la liste de variables d'environnement sans se prendre la tête.
Et si vous voulez aller plus loin, BunkerWeb propose un système de plugins. On peut y ajouter ClamAV pour l'analyse antivirus, CrowdSec pour la détection d'intrusion collaborative, ou même des intégrations de notifications pour Discord ou Slack. Pour un homelab, c'est déjà pas mal de pouvoir étendre les capacités de la sorte.
Le dashboard : une beauté intérieure (surtout)
Alors, parlons de l'éléphant dans la pièce, ou plutôt du dashboard. L'angle de départ de cet article mentionnait un "dashboard qui pique les yeux". Et c'est vrai qu'en général, on s'attend à des interfaces modernes, pleines de graphiques animés et de dégradés subtils. La documentation officielle et le marketing de Bunkerity décrivent l'interface web comme "awesome" et "user-friendly".
Mon avis ? Elle est... fonctionnelle. On y trouve tout ce qu'il faut : la gestion des paramètres, l'état des plugins, les logs d'attaques bloquées. C'est clair, les informations sont là, mais on n'est clairement pas sur du Grafana ou du Netdata. C'est une interface d'admin, pas un concours de design. Et franchement, pour un outil qui est censé tourner en arrière-plan et vous protéger, l'esthétique passe après l'efficacité. On ne passe pas sa vie sur le dashboard d'un WAF. L'important, c'est qu'il fasse le boulot et qu'on puisse y trouver l'info quand on en a besoin. Et ça, il le fait très bien.
Verdict maison : pour qui est fait BunkerWeb ?
Après avoir mis les mains dedans, mon avis est plutôt positif pour un usage homelab/self-hosting.
Points forts :
- Facilité d'intégration avec Docker : En quelques lignes de
docker-compose.yaml, c'est en place et fonctionnel. - Protection robuste : Basé sur NGINX et ModSecurity avec l'OWASP CRS, c'est une base solide contre les menaces courantes.
- Open-source et actif : Le projet est bien maintenu par Bunkerity SAS, et la communauté est présente.
- Gestion des certificats Let's Encrypt : C'est un détail, mais ça simplifie énormément la vie.
- Flexibilité : Les variables d'environnement, le générateur de config et les plugins offrent pas mal d'options.
Points faibles :
- Consommation de ressources : Les notes de recherche mentionnent 2 (v)CPU et 8 Go de RAM pour les tests, et 4 (v)CPU / 16 Go de RAM pour la production. Pour un petit homelab avec peu de services, ça peut être un peu lourd si on est juste en ressources. Il faut en être conscient.
- L'interface web : Comme je l'ai dit, elle est efficace, mais visuellement, elle ne va pas gagner de prix. Ça ne me dérange pas personnellement, mais certains pourraient être rebutés.
- Courbe d'apprentissage ModSecurity : Si vous devez affiner les règles et gérer les faux positifs, comprendre ModSecurity peut prendre un peu de temps. Ce n'est pas spécifique à BunkerWeb, c'est inhérent à l'utilisation d'un WAF.
BunkerWeb est une solution excellente pour ceux qui veulent ajouter une couche de sécurité sérieuse à leurs applications auto-hébergées sans se ruiner en solutions propriétaires. Si vous avez déjà un serveur Docker et que vous n'avez pas peur de mettre les mains dans un docker-compose.yaml, il mérite clairement d'être testé. Pour un site web perso ou une petite application critique, c'est un excellent bouclier.
Alternatives et le mot de la fin
Bien sûr, BunkerWeb n'est pas le seul sur le marché. Vous pourriez utiliser NGINX ou Apache HTTP Server avec ModSecurity directement, mais BunkerWeb simplifie grandement l'intégration et la gestion. Pour des solutions plus "cloud", on trouve Cloudflare WAF, ou des options commerciales comme F5 WAF. Mais pour le self-hosting, le côté open-source et le contrôle total sur l'infrastructure de BunkerWeb sont de vrais atouts.
En fin de compte, la sécurité, c'est une question de couches. BunkerWeb ajoute une couche importante à votre défense. Et même si son dashboard n'est pas le plus sexy du monde, il fait le travail. Et c'est bien ça le principal, non ?