Durcissement de sécurité d'un serveur Linux en 10 étapes essentielles
Guide pratique pour sécuriser efficacement vos serveurs Linux contre les menaces actuelles, avec des commandes concrètes et des explications détaillées
InSkillCoach
Durcissement de sécurité d’un serveur Linux en 10 étapes essentielles
La sécurisation d’un serveur Linux est une compétence fondamentale pour tout administrateur système. Avec l’augmentation des cyberattaques et des tentatives d’intrusion, il est crucial de mettre en place une stratégie de durcissement (hardening) efficace dès le déploiement initial du serveur.
Ce guide détaille 10 étapes essentielles pour renforcer significativement la sécurité de vos serveurs Linux, qu’ils soient hébergés dans votre infrastructure ou dans le cloud.
1. Maintenir le système à jour
La base de toute stratégie de sécurité commence par des mises à jour régulières. Les correctifs de sécurité sont publiés fréquemment pour combler les vulnérabilités découvertes.
Pour Debian/Ubuntu :
# Mise à jour de la liste des paquets
sudo apt update
# Installation des mises à jour
sudo apt upgrade -y
# Mise à jour du noyau et des paquets critiques
sudo apt dist-upgrade -y
Pour RHEL/CentOS/Fedora :
# Mise à jour de tous les paquets
sudo dnf update -y
# ou avec yum sur les systèmes plus anciens
sudo yum update -y
Conseil pro : Configurez des mises à jour automatiques de sécurité avec unattended-upgrades
sur Debian/Ubuntu ou dnf-automatic
sur Fedora/RHEL.
# Sur Debian/Ubuntu
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# Sur RHEL/CentOS 8/Fedora
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
2. Sécuriser SSH
SSH est souvent la principale porte d’entrée vers votre serveur, ce qui en fait une cible privilégiée pour les attaquants.
Modifier le port par défaut
Éditez le fichier /etc/ssh/sshd_config
:
# Remplacez 22 par un port non standard (entre 1024 et 65535)
Port 2222
Désactiver l’authentification par mot de passe
PasswordAuthentication no
ChallengeResponseAuthentication no
Configurer l’authentification par clé
Sur votre machine locale :
# Créer une paire de clés si vous n'en avez pas
ssh-keygen -t ed25519 -a 100
# Copier la clé publique sur le serveur
ssh-copy-id -i ~/.ssh/id_ed25519.pub utilisateur@serveur
Limiter l’accès root et les utilisateurs autorisés
PermitRootLogin no
AllowUsers utilisateur1 utilisateur2
Appliquer les changements
sudo systemctl restart sshd
3. Configurer un pare-feu
Un pare-feu correctement configuré est essentiel pour contrôler le trafic entrant et sortant.
UFW (Uncomplicated Firewall) pour Debian/Ubuntu
# Installation
sudo apt install ufw
# Configuration de base
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Autoriser SSH (sur le port modifié si nécessaire)
sudo ufw allow 2222/tcp
# Autoriser d'autres services selon les besoins
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Activer le pare-feu
sudo ufw enable
Firewalld pour RHEL/CentOS/Fedora
# Installation si nécessaire
sudo dnf install firewalld
# Activation du service
sudo systemctl enable --now firewalld
# Configuration de base
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Si vous avez modifié le port SSH
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-port=2222/tcp
# Appliquer les changements
sudo firewall-cmd --reload
4. Installer et configurer Fail2ban
Fail2ban surveille les journaux de votre système et bloque temporairement les adresses IP qui montrent des signes d’activité malveillante.
# Installation
sudo apt install fail2ban # Debian/Ubuntu
sudo dnf install fail2ban # RHEL/CentOS/Fedora
# Création d'un fichier de configuration local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Éditez /etc/fail2ban/jail.local
pour personnaliser la configuration :
[DEFAULT]
# Bannir une IP pendant 1 heure (3600 secondes)
bantime = 3600
# Bannir après 5 tentatives échouées
maxretry = 5
# Période d'observation des tentatives (en secondes)
findtime = 600
[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
maxretry = 3
Activez et démarrez le service :
sudo systemctl enable --now fail2ban
5. Partitionnement sécurisé et options de montage
Si vous configurez un nouveau serveur, envisagez un schéma de partitionnement qui inclut des partitions séparées pour /home
, /tmp
, /var
, /var/log
et /var/log/audit
pour éviter qu’un remplissage d’espace n’affecte le système entier.
Pour les systèmes existants, sécurisez les options de montage dans /etc/fstab
:
# Montage de /tmp avec noexec, nosuid et nodev
/dev/sdXY /tmp ext4 defaults,nosuid,nodev,noexec 0 0
# Montage de /home avec nosuid et nodev
/dev/sdXZ /home ext4 defaults,nosuid,nodev 0 0
Si vous n’avez pas de partitions séparées, vous pouvez utiliser des systèmes de fichiers temporaires :
# Ajouter au /etc/fstab
tmpfs /tmp tmpfs defaults,nosuid,nodev,noexec,size=1G 0 0
Appliquez les changements :
sudo mount -o remount /tmp
6. Sécuriser le noyau avec sysctl
Modifiez /etc/sysctl.conf
pour renforcer les paramètres de sécurité du noyau :
# Désactiver le transfert IP si ce n'est pas un routeur
net.ipv4.ip_forward = 0
# Protection contre les attaques de type Spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Ignorer les réponses ICMP broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Protection contre les attaques SYN flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
# Protection contre les attaques de type martian packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# Désactiver les pings (optionnel)
net.ipv4.icmp_echo_ignore_all = 1
# Désactiver le protocole IPv6 si non utilisé
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
Appliquez les changements :
sudo sysctl -p
7. Auditer et limiter les paquets installés
Minimisez la surface d’attaque en n’installant que les paquets nécessaires.
Lister les paquets installés
# Debian/Ubuntu
dpkg -l
# RHEL/CentOS/Fedora
rpm -qa
Supprimer les paquets inutiles
# Debian/Ubuntu
sudo apt remove paquet-inutile
sudo apt autoremove
# RHEL/CentOS/Fedora
sudo dnf remove paquet-inutile
Vérifier les services en cours d’exécution
sudo systemctl list-units --type=service --state=active
Désactiver les services non essentiels
sudo systemctl disable service-non-essentiel
sudo systemctl stop service-non-essentiel
8. Configurer un système de détection d’intrusion
AIDE (Advanced Intrusion Detection Environment) est un outil de vérification d’intégrité qui détecte les modifications non autorisées des fichiers système.
# Installation
sudo apt install aide # Debian/Ubuntu
sudo dnf install aide # RHEL/CentOS/Fedora
# Initialiser la base de données
sudo aideinit
# ou
sudo aide --init
# La commande crée une base de données dans /var/lib/aide/aide.db.new
# Sur certains systèmes, il faut la renommer
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# Vérifier régulièrement l'intégrité
sudo aide --check
Configurez une tâche cron pour des vérifications régulières :
echo "0 4 * * * root /usr/sbin/aide --check | mail -s 'AIDE Integrity Check' admin@example.com" | sudo tee /etc/cron.d/aide-check
9. Renforcer la politique des mots de passe
Une politique de mots de passe forte est essentielle, même si vous utilisez l’authentification par clé SSH.
Installez libpam-pwquality
pour Debian/Ubuntu ou pam_pwquality
pour RHEL/CentOS/Fedora.
sudo apt install libpam-pwquality # Debian/Ubuntu
sudo dnf install pam_pwquality # RHEL/CentOS/Fedora
Éditez le fichier /etc/pam.d/common-password
(Debian/Ubuntu) ou /etc/security/pwquality.conf
(RHEL/CentOS/Fedora) :
# Exemple pour Debian/Ubuntu dans /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 reject_username enforce_for_root
# Exemple pour RHEL/CentOS/Fedora dans /etc/security/pwquality.conf
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
difok = 3
Pour configurer l’expiration des mots de passe :
sudo chage -M 90 -m 7 -W 14 utilisateur
Cette commande :
- Force le changement de mot de passe tous les 90 jours (
-M 90
) - Impose un minimum de 7 jours entre les changements (
-m 7
) - Avertit l’utilisateur 14 jours avant l’expiration (
-W 14
)
10. Surveiller et auditer le système
La surveillance des logs est cruciale pour détecter les tentatives d’intrusion.
Configurer la journalisation centraliste
Pour une infrastructure plus large, envisagez de mettre en place un serveur de journalisation centralisé.
Configurer auditd pour une journalisation avancée
# Installation
sudo apt install auditd audispd-plugins # Debian/Ubuntu
sudo dnf install audit # RHEL/CentOS/Fedora
# Activer au démarrage
sudo systemctl enable --now auditd
Éditez /etc/audit/rules.d/audit.rules
pour ajouter des règles personnalisées :
# Surveiller les modifications des fichiers de configuration
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd_config
# Surveiller les échecs d'authentification
-a always,exit -F arch=b64 -S open -F a1&01003 -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S open -F a1&01003 -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S open -F a1&01003 -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S open -F a1&01003 -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access
Rechargez les règles :
sudo auditctl -R /etc/audit/rules.d/audit.rules
Surveiller les connexions avec LogWatch
# Installation
sudo apt install logwatch # Debian/Ubuntu
sudo dnf install logwatch # RHEL/CentOS/Fedora
# Exécution manuelle
sudo logwatch --output mail --mailto admin@example.com --detail high
Configurez une tâche cron pour des rapports quotidiens en éditant /etc/cron.daily/00logwatch
.
Conclusion
La sécurisation d’un serveur Linux est un processus continu qui nécessite de la vigilance et des mises à jour régulières. Ces 10 étapes vous permettront d’établir une base solide pour protéger vos systèmes contre la majorité des menaces courantes.
N’oubliez pas que cette liste n’est pas exhaustive. Selon votre environnement et vos besoins spécifiques, vous pourriez avoir besoin de mesures supplémentaires comme :
- La mise en place de solutions de sauvegarde automatisées
- L’implémentation d’une solution de contrôle d’accès basée sur les rôles (RBAC)
- L’utilisation d’un système de prévention d’intrusion (IPS)
- La configuration d’un VPN pour l’accès à distance
- L’implémentation de SELinux ou AppArmor pour le contrôle d’accès obligatoire
La sécurité est un équilibre entre fonctionnalité et protection. Adaptez toujours ces recommandations à vos besoins spécifiques et n’hésitez pas à consulter la documentation officielle de votre distribution Linux pour des conseils adaptés à votre environnement.
Quelles sont les mesures de sécurité que vous avez trouvées les plus efficaces pour vos serveurs Linux ? Partagez votre expérience en commentaires !
À propos de InSkillCoach
Expert en formation et technologies
Coach spécialisé dans les technologies avancées et l'IA, porté par GNeurone Inc.
Certifications:
- AWS Certified Solutions Architect – Professional
- Certifications Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
Commentaires
Les commentaires sont alimentés par GitHub Discussions
Connectez-vous avec GitHub pour participer à la discussion