
2 juin 2026
Migration de NPM vers NPMplus avec CrowdSec et MaxMind
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.
Pourquoi quitter NPM
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.
- Conserver une interface proche de NPM pour gérer les proxy hosts.
- Ajouter une remédiation CrowdSec directement au niveau du reverse proxy.
- Limiter certains accès selon le pays d’origine grâce à une base GeoIP MaxMind.
Architecture Docker Compose
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.
- NPMplus : reverse proxy, certificats et proxy hosts.
- CrowdSec : analyse des logs et création des décisions de blocage.
- Composant de remédiation : application des décisions CrowdSec côté proxy.
- MaxMind / GeoIP : association des adresses IP à un pays pour appliquer les règles 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.
Migration des proxy hosts
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.
- Vérification des ports et des destinations internes.
- Contrôle des certificats avant la bascule.
- Test des services depuis le réseau local puis depuis l’extérieur.

Ajout de CrowdSec
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.

Restriction géographique avec MaxMind
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é. La mise à jour de cette base est automatisée dans le Docker Compose, ce qui évite d’avoir une étape de maintenance manuelle à gérer.
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.
Points d’attention
- Conserver les vrais IP clients dans les logs, sinon CrowdSec et GeoIP perdent une partie de leur intérêt.
- Monter les volumes de logs et de configuration explicitement dans Docker Compose.
- Tester les restrictions géographiques depuis plusieurs réseaux avant de considérer la configuration comme fiable.
- Automatiser la mise à jour de la base MaxMind avec un conteneur dédié.
Bilan
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.