La sécurité n'est pas une fonctionnalité ; c'est un processus continu. Dans le paysage des menaces moderne, laisser une configuration Linux par défaut exposée est une invitation à la compromission. En tant que développeurs et administrateurs système, nous devons adopter une mentalité de « refus par défaut ». Ce guide couvre les couches de défense essentielles que vous devez mettre en œuvre pour sécuriser vos serveurs de production contre les attaques courantes et avancées. Nous allons au-delà des tutoriels de base pour aborder des techniques de durcissement pratiques et prêtes pour la production, qui équilibrent sécurité et utilisabilité.
Verrouiller l'accès SSH
Le Secure Shell (SSH) est le point d'entrée principal pour la plupart des attaques. Une mauvaise configuration de SSH est la cause principale des compromissions de serveurs. Votre première étape consiste à éliminer les méthodes d'authentification faibles.
1. Désactiver l'authentification par mot de passe : Imposer l'utilisation de la cryptographie à clé publique.
2. Changer le port par défaut : Bien que ce ne soit pas une sécurité par l'opacité, le déplacement du port 22 réduit le bruit des bots de balayage automatisés.
3. Restreindre les utilisateurs : Autoriser uniquement des comptes administratifs spécifiques à se connecter.
# /etc/ssh/sshd_config
# Désactiver la connexion par mot de passe et l'accès root
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
# Restreindre l'accès à des utilisateurs spécifiques
AllowUsers deploy admin
# Changer le port par défaut (optionnel)
Port 2222
# Imposer des algorithmes d'échange de clés robustes
KexAlgorithms curve25519-sha256, diffie-hellman-group-exchange-sha256
Après avoir modifié ces paramètres, testez dans une session séparée avant de fermer votre session actuelle pour vous assurer de ne pas vous verrouiller à l'extérieur.
Mise en œuvre du contrôle d'accès obligatoire (MAC)
Les permissions Unix traditionnelles (lecture/écriture/exécution) sont insuffisantes pour les environnements complexes. Les systèmes MAC comme SELinux (standard pour RHEL/Fedora) et AppArmor (standard pour Ubuntu/Debian) appliquent des politiques aux processus, indépendamment de l'utilisateur qui les exécute. Si un serveur web est compromis, le MAC l'empêche d'accéder à des fichiers sensibles comme /etc/shadow ou d'escalader les privilèges.
Pour SELinux, utilisez les outils semanage et audit2allow pour affiner les politiques. Pour AppArmor, définissez des profils en utilisant les profils situés dans /etc/apparmor.d/.
# Vérifier l'état de SELinux
getenforce
# Afficher les derniers refus AVC pour comprendre pourquoi les processus sont bloqués
ausearch -m avc -ts recent
Défense au niveau réseau : Pare-feu et Fail2ban
Un pare-feu agit comme votre gardien. Utilisez firewalld pour les systèmes basés sur RHEL ou ufw pour les systèmes basés sur Debian. Assurez-vous d'ouvrir uniquement les ports strictement nécessaires pour vos services (par exemple, 443 pour HTTPS, votre port SSH personnalisé).
Fail2ban complète votre pare-feu en surveillant les fichiers journaux pour les tentatives d'accès échouées et en bloquant dynamiquement les adresses IP fautives. Il est crucial pour atténuer les attaques par force brute.
# Installer et activer fail2ban
sudo apt-get install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Créer /etc/fail2ban/jail.local pour personnaliser
[sshd]
enabled = true
port = 2222
filter = sshd
maxretry = 3
bantime = 1h
Durcissement système et audit
Le durcissement consiste à minimiser la surface d'attaque. Cela inclut la désactivation des services inutilisés (comme FTP ou Telnet), l'application de l'ajustement des paramètres du noyau et l'activation de la journalisation d'audit.
Utilisez auditd pour suivre les modifications des fichiers système critiques. Vous pouvez configurer des règles de surveillance pour alerter les administrateurs si /etc/passwd ou /etc/sudoers est modifié.
# Surveiller les modifications des fichiers critiques
sudo auditctl -w /etc/passwd -p wa -k identity
sudo auditctl -w /etc/sudoers -p wa -k sudoers
# Vérifier les journaux d'audit
sudo ausearch -k identity
De plus, assurez-vous que vos paramètres de noyau sont durcis. Ajoutez les éléments suivants à /etc/sysctl.conf pour prévenir les attaques par redirection ICMP et activer la protection contre le spoofing IP :
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
Conclusion
La sécurité des serveurs n'est pas une tâche ponctuelle, mais une responsabilité continue. En combinant des configurations SSH robustes, le contrôle d'accès obligatoire, le bannissement dynamique des IP via Fail2ban et un audit rigoureux, vous construisez une défense multicouche. Examinez régulièrement vos journaux, maintenez votre logiciel à jour et testez vos mesures de durcissement. N'oubliez pas que la meilleure stratégie de sécurité est celle que votre équipe peut réellement maintenir. Commencez par les bases, ajoutez de la complexité au besoin et privilégiez toujours le principe du moindre privilège dans votre conception système.