Ce billet décrit une approche pour renforcer la sécurité de Nginx Proxy Manager (NPM) dans un environnement Docker en utilisant CrowdSec. L'objectif est d'éviter de créer une image Docker personnalisée pour NPM, ce qui compliquerait les mises à jour. L'astuce consiste à faire tourner CrowdSec sur l'hôte et à lui permettre de lire les logs de NPM, sans modifier l'image officielle.
La solution proposée fait de CrowdSec un outil de détection et le firewall bouncer de CrowdSec une solution d'application des décisions. CrowdSec analyse l'activité de NPM, identifie les comportements malveillants, et le firewall bouncer utilise iptables pour bloquer les adresses IP incriminées au niveau du réseau, protégeant ainsi les services Docker exposés.
Cette méthode privilégie la simplicité et la maintenabilité, en conservant l'image NPM officielle et en évitant les dépendances à des images personnalisées moins suivies. Le filtrage s'opère au niveau du firewall plutôt qu'au niveau du serveur web lui-même, offrant une protection par blocage d'adresses sources pour les services Docker publiés.
Ce tutoriel explique comment configurer Fail2ban pour sécuriser Nginx Proxy Manager (NPM) dans un environnement Docker. L'objectif est de bloquer les tentatives d'accès non autorisés, notamment les attaques par force brute sur l'authentification Basic Auth, sans modifier l'image Docker de NPM ni ajouter de conteneur supplémentaire.
La méthode préconisée repose sur l'analyse des logs d'accès de NPM, qui enregistrent les échecs d'authentification HTTP 401. Fail2ban, exécuté sur l'hôte Docker, surveille ces logs pour identifier les adresses IP suspectes et les bannir temporairement des ports 80 et 443. L'approche vise à rester simple (KISS) en utilisant les journaux natifs de NPM et en s'appuyant sur la configuration existante de Fail2ban sur l'hôte.
La procédure implique de localiser le fichier journal d'accès pertinent pour le Proxy Host ciblé, de créer un filtre Fail2ban spécifique pour reconnaître les échecs d'authentification 401 et d'inclure l'adresse IP du client (
L'auteur décrit la refonte de son infrastructure DNS pour éliminer les points de défaillance uniques (SPOF) et améliorer la résilience. Son ancien setup, basé sur un seul conteneur LXC combinant AdGuard Home et NPM, souffrait d'un manque de redondance et d'une résolution inefficace des noms de domaine locaux, générant du trafic inutile via le NAT (hairpin). La nouvelle architecture sépare les rôles en quatre composants : Technitium DNS Server pour la gestion des zones DNS locales et la haute disponibilité, AdGuard Home pour le filtrage avancé des requêtes, NextDNS comme résolveur chiffré en amont, et NPM pour la gestion des proxy inverses.
Technitium assure la synchronisation automatique entre deux instances, permettant une continuité de service immédiate en cas de panne d'un nœud Proxmox. AdGuard Home, déployé dans un conteneur dédié, applique des règles de filtrage personnalisées par client ou groupe, tandis que NextDNS prend le relais pour les requêtes publiques et offre une protection renforcée hors réseau. NPM, isolé dans son propre conteneur, gère les redirections des noms de domaine locaux et publics sans conflit.
Cette refonte élimine les inefficacités du hairpin NAT et garantit un filtrage cohérent, que ce soit en local ou à distance, tout en assurant une haute disponibilité grâce à la redondance des composants.
Ajouter la GeoIP à Nginx Proxy Manager (NPM 2.12+) permet de bloquer ou logger les visiteurs par pays. Il suffit d’activer les modules GeoIP via root_top.conf, de télécharger les bases GeoLite2 de Maxmind (gratuites, après inscription), et de configurer les règles de blocage dans http_top.conf. Les logs peuvent aussi être enrichis avec les infos géographiques.
L'article explore les tendances actuelles en matière d'auto-hébergement, en mettant l'accent sur l'utilisation des conteneurs et des outils de gestion associés. L'auteur partage son expérience avec diverses solutions comme Docker, Podman, et Kubernetes, ainsi que des interfaces web telles que Portainer et Dockge pour gérer les conteneurs, et des outils comme Pangolin et Nginx Proxy Manager pour les proxys inverses et VPN.