Dans le monde de l'infrastructure as code et du développement cloud-native, le serveur n'est plus une simple machine ; il est le fondement de l'intégrité de votre application. Cependant, une installation Linux par défaut est rarement sécurisée par défaut. Elle est conçue pour la compatibilité et la facilité d'utilisation, pas pour se défendre contre une attaque incessante de robots automatisés et d'attaquants expérimentés. Cet article explore l'approche multicouche pour sécuriser votre environnement Linux, allant au-delà de la simple protection par mot de passe pour adopter une stratégie robuste de défense en profondeur.
La première ligne de défense : Durcissement de SSH
Le Shell Sécurisé (SSH) est souvent la première porte qu'un attaquant tente d'ouvrir. Les configurations par défaut sont notoirement insécures, laissant le port 22 ouvert aux tentatives de force brute. Pour durcir SSH, nous devons restreindre les méthodes d'accès et limiter l'exposition.
Commencez par désactiver la connexion en tant que root et l'authentification par mot de passe. Privilégiez plutôt les paires de clés SSH, qui sont exponentiellement plus difficiles à craquer. Mettez à jour votre fichier /etc/ssh/sshd_config avec les directives suivantes :
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers deployer admin
Après avoir apporté ces modifications, redémarrez le service SSH. Notez qu'avant de fermer votre session actuelle, assurez-vous de pouvoir vous connecter avec votre nouvelle clé afin d'éviter d'être bloqué. De plus, envisagez de changer le port SSH par défaut pour un nombre élevé non standard afin de réduire le bruit généré par les scanners automatisés.
Contrôle d'accès contextuel : SELinux et AppArmor
Lorsqu'une vulnérabilité dans une application comme Apache ou Nginx est exploitée, l'attaquant obtient souvent les privilèges de ce service. Les systèmes de Contrôle d'Accès Obligatoire (MAC) tels que SELinux (basé sur Red Hat) et AppArmor (basé sur Debian) empêchent cela en confinant les programmes à un ensemble limité de ressources.
SELinux fonctionne selon trois modes : Enforcing (appliqué), Permissive (tolérant) et Disabled (désactivé). N'exécutez jamais SELinux en mode désactivé si vous souhaitez une sécurité réelle. En mode Enforcing, il bloque activement les accès non autorisés. Pour les développeurs préoccupés par le débogage, des outils comme audit2allow peuvent aider à générer des modules de politique pour les actions légitimes qui ont été incorrectement signalées.
# Vérifier l'état actuel
sestatus
# Voir les journaux d'accès refusé
sudo ausearch -m avc -ts recent
Bien qu'AppArmor soit généralement plus facile à configurer, SELinux offre un contrôle plus fin. Choisissez celui qui correspond à votre distribution et à l'expertise de votre équipe, mais assurez-vous qu'il est actif.
Périmètre réseau : Pare-feu et prévention des intrusions
Votre pare-feu agit comme un gardien. Que vous utilisiez iptables, nftables ou un outil de plus haut niveau comme ufw (Uncomplicated Firewall), le principe reste le même : ne whitelist que ce qui est nécessaire. Bloquez tout le trafic entrant par défaut et autorisez uniquement les ports 22 (SSH), 80 (HTTP) et 443 (HTTPS).
Cependant, même un pare-feu bien configuré ne peut pas arrêter une requête valide émanant d'un acteur malveillant utilisant un mot de passe faible. C'est ici que Fail2ban intervient. Fail2ban surveille les fichiers journaux pour détecter les tentatives de connexion échouées répétées et bannit temporairement les adresses IP fautives. C'est un outil essentiel pour atténuer les attaques par force brute.
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status sshd
Visibilité et conformité : Audit
Vous ne pouvez pas sécuriser ce que vous ne pouvez pas voir. Le Framework d'audit Linux offre un moyen puissant de surveiller les appels système, les accès aux fichiers et les commandes utilisateur. En configurant des règles d'audit, vous pouvez détecter des anomalies telles qu'un processus de serveur web tentant d'écrire dans /etc/passwd.
Concentrez vos efforts d'audit sur les répertoires critiques comme /etc, /var/log et /root. Assurez-vous que les journaux d'audit sont transférés vers un serveur de journalisation centralisé pour empêcher les attaquants de falsifier les journaux locaux s'ils obtiennent un accès.
Durcissement du système : La dernière couche
Enfin, mettez en œuvre des pratiques générales de durcissement du système. Cela inclut le maintien à jour de votre noyau et de vos paquets, la suppression des services inutiles et le renforcement des politiques de mots de passe via passwd et les configurations PAM. Examinez régulièrement les comptes utilisateur pour vous assurer qu'aucun privilège dormant ou excessif n'existe.
Conclusion
La sécurité des serveurs n'est pas une configuration ponctuelle ; c'est un processus continu. En combinant le durcissement de SSH, les systèmes MAC comme SELinux, des règles de pare-feu strictes, la prévention automatisée des intrusions avec Fail2ban et un audit complet, vous créez un environnement résilient capable de résister aux attaques courantes et sophistiquées. Traitez votre serveur Linux avec le respect qu'il mérite, et vos applications suivront le mouvement.