Nginx, Docker et Fail2ban

Posted by

Pour faciliter le déploiement de mes services et aussi pour des raisons de sécurité, j’essaye d’utiliser Docker au maximum. Ces conteneurs ne font pas directement parti du système, il est donc nécessaire d’ajuster certaines configurations.

Pré-requis

Installez Fail2ban en utilisant votre gestionnaire de paquets et déployez Nginx en utilisant Docker.

Monter les fichier

Dans mon fichier Compose, je monte directement le dossier utilisé par Nginx pour les logs.

    volumes:
      - /var/log/nginx:/var/log/nginx

Pour Kubernetes, vous devez utiliser un volume.

        volumeMounts:
          - name: nginx-logs
            mountPath: /var/log/nginx
      volumes:
        - name: nginx-logs
          hostPath:
            path: /var/log/nginx

Nous allons aussi avoir besoin de gérer ces fichier de logs, sinon ils vont grossir et remplir le disque. Créez le fichier /etc/logrotate.d/nginx insérez le contenu suivant :

/var/log/nginx/*.log {
        rotate 7
        missingok
        copytruncate
        rotate 52
        compress
        delaycompress
}

Activer les Jails

Créez le fichier de configuration /etc/fail2ban/jail.local et ajoutez

[nginx-botsearch]
enabled = true

[nginx-http-auth]
enabled = true

[nginx-limit-req]
enabled = true

Redémarrez Fail2ban

service fail2ban restart

Nous pouvons vérifier que nos Jails sont activés :

fail2ban-client status
Status
|- Number of jail:	4
`- Jail list:	nginx-botsearch, nginx-http-auth, nginx-limit-req, sshd

Le module nginx-limit-req va demander un peu plus de configuration. Vous devez activer ngx_http_limit_req_module dans Nginx, je vous laisse suivre la documentation.

Conclusion

Combiner un conteneur Nginx et Fail2ban est relativement simple mais demande quelques ajustements par rapport à une intégration native. Vous pouvez utiliser une configuration similaire pour intégrer Fail2ban avec d’autres logiciel tournant dans des conteneurs.

2 comments

  1. Bonjour,
    pourrais tu détailler les raisons de sécurités qui sous entendent l’utilisation de docker ?
    Personnellement, pour des raisons de sécurité je ne met pas de docker en production.
    Ma raison principal est un manque de confiance envers la disparité des sources. A chaque fois que je lis des articles sur la sécurité de docker, on en revient au manque de mise à jour des images de base.
    En tant qu’administrateur système la mise à jour d’un système est le critère de base de la sécurité : Un système à jour n’est pas forcement sécurisé, mais un système qui n’est pas à jour n’est pas sécurisé.

  2. Bonjour Xylle,

    Utiliser Docker dans mon contexte a de nombreux avantages :
    – Aucune dépendance aux paquets de ma distribution
    – Choix des montées en version
    – Chaque conteneur est séparé de ses voisins
    – Moins de logiciels installés directement sur la machine
    – Gestion des ressources CPU/mémoire

    Par-contre, je te rejoins sur la disparité des sources et les mises à jour. Pour éviter les problèmes de sécurité, je n’utilise que des images officielles, très simple ou provenant de sources fiables. J’ai aussi quelques images que je maintiens moi-même : https://github.com/V-Paranoiaque/docker
    Docker me permet aussi de préparer plus facilement les différents environnements de mon jeu, en local avant de déployer.

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *