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.