0%
Durcissement de sécurité d'un serveur Linux en 10 étapes essentielles

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

I

InSkillCoach

· min

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 !

InSkillCoach

À 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+
685
54

Commentaires

Les commentaires sont alimentés par GitHub Discussions

Connectez-vous avec GitHub pour participer à la discussion

Lien copié !