
3 avril 2026
Après avoir utilisé Nginx Proxy Manager pour exposer plusieurs services auto-hébergés, j’ai voulu renforcer la couche reverse proxy sans perdre la simplicité de gestion. J’ai donc migré vers NPMplus, un fork de Nginx Proxy Manager, puis ajouté CrowdSec et une restriction géographique basée sur MaxMind. Le tout est déployé avec Docker Compose pour garder une stack reproductible et facile à mettre à jour.
Nginx Proxy Manager faisait bien le travail pour gérer les domaines, les certificats et les redirections. NPMplus reprend cette base sous forme de fork, avec une interface familière, tout en ouvrant plus de possibilités côté sécurité. Je voulais surtout une meilleure intégration avec CrowdSec, plus de contrôle sur les accès et une configuration plus adaptée à mon usage actuel.
J’ai gardé Docker Compose comme point d’entrée unique. L’idée est de pouvoir relancer ou déplacer la stack sans reconstituer chaque service à la main. Les volumes contiennent la configuration de NPMplus, les logs analysés par CrowdSec et la base GeoIP utilisée pour les restrictions géographiques.
Schéma simplifié du Compose : NPMplus reçoit le trafic, écrit les logs, CrowdSec les analyse, puis le composant de remédiation applique les décisions. La base MaxMind est montée en volume pour permettre les restrictions géographiques.
La migration s’est faite service par service. J’ai d’abord repris les proxy hosts existants, vérifié les destinations internes, puis contrôlé les certificats et les règles d’accès. Cette étape est importante : une erreur dans le reverse proxy peut rendre un service inaccessible ou, pire, exposer quelque chose qui ne devrait pas l’être.

CrowdSec ajoute une couche de détection au-dessus du reverse proxy. Il lit les logs, reconnaît certains comportements suspects et produit des décisions de blocage. Dans la console, je peux suivre l’état du moteur, les scénarios actifs, les blocklists utilisées et le composant de remédiation lié à NPMplus.
Le point intéressant est que la protection ne dépend plus uniquement des règles écrites à la main. Les blocklists communautaires et les scénarios CrowdSec permettent de filtrer une partie du trafic opportuniste : scans web, IP déjà connues pour des attaques ou comportements répétés sur des routes inexistantes.

Pour certains services, je n’ai pas besoin d’accepter du trafic mondial. J’ai donc ajouté une restriction géographique basée sur MaxMind. Le principe est simple : la base GeoIP permet d’identifier le pays associé à une IP, puis le plugin applique une règle d’autorisation ou de blocage selon le proxy host concerné.
Ce n’est pas une protection absolue : un VPN ou un relais peut contourner ce type de filtre. Mais c’est une bonne réduction de surface d’exposition pour des services destinés à un usage personnel ou familial, surtout combinée avec CrowdSec et une authentification forte quand c’est nécessaire.
Cette migration m’a permis de garder la simplicité de NPM tout en renforçant la sécurité du reverse proxy. NPMplus centralise la gestion des hôtes, CrowdSec filtre une partie du trafic malveillant, et MaxMind ajoute une restriction géographique utile pour les services qui n’ont pas vocation à être accessibles partout. Le fait de tout garder dans un Docker Compose rend la stack plus lisible et plus simple à redéployer.