Hardening Linux - Bonnes pratiques
Ce guide présente les meilleures pratiques pour sécuriser un serveur Linux.
1. Gestion des utilisateurs
Créer un utilisateur non-root
# Créer un utilisateur
adduser admin
# Lui donner les droits sudo
usermod -aG sudo admin
Désactiver le login root
Une fois l'utilisateur admin configuré :
sudo nano /etc/ssh/sshd_config
PermitRootLogin no
sudo systemctl restart sshd
Politique de mots de passe
Installer et configurer libpam-pwquality :
sudo apt install libpam-pwquality
sudo nano /etc/security/pwquality.conf
# Longueur minimale
minlen = 12
# Au moins 1 majuscule
ucredit = -1
# Au moins 1 minuscule
lcredit = -1
# Au moins 1 chiffre
dcredit = -1
# Au moins 1 caractère spécial
ocredit = -1
# Pas de répétition de caractères
maxrepeat = 3
Expiration des mots de passe
# Forcer le changement tous les 90 jours
sudo chage -M 90 admin
# Voir la politique d'un utilisateur
sudo chage -l admin
2. Configuration SSH sécurisée
Fichier /etc/ssh/sshd_config recommandé :
# Port non standard
Port 2222
# Protocole 2 uniquement (par défaut sur les systèmes modernes)
Protocol 2
# Désactiver le login root
PermitRootLogin no
# Authentification par clé uniquement
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
# Désactiver les méthodes non utilisées
ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication no
# Limiter les utilisateurs autorisés
AllowUsers admin deployer
# Timeout et limites
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
MaxSessions 3
LoginGraceTime 60
# Désactiver les fonctionnalités inutiles
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
# Logging
LogLevel VERBOSE
# Bannière de connexion
Banner /etc/ssh/banner
Créer une bannière d'avertissement :
sudo nano /etc/ssh/banner
*******************************************************************
* ACCES RESERVE AUX PERSONNES AUTORISEES *
* Toute activite est enregistree et surveillee. *
*******************************************************************
3. Firewall UFW
Configuration de base
# Politique par défaut
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH (votre port)
sudo ufw allow 2222/tcp
# HTTP/HTTPS (si serveur web)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Activer
sudo ufw enable
Limiter les connexions (rate limiting)
# Limite SSH : 6 connexions en 30 secondes
sudo ufw limit 2222/tcp
Autoriser uniquement certaines IP
# SSH depuis une IP spécifique
sudo ufw allow from 203.0.113.50 to any port 2222
# Bloquer une IP
sudo ufw deny from 192.168.1.100
4. Mises à jour automatiques
Activer les mises à jour de sécurité automatiques
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Configuration avancée
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
};
// Redémarrer automatiquement si nécessaire
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
// Notification par email
Unattended-Upgrade::Mail "admin@votredomaine.com";
Unattended-Upgrade::MailReport "on-change";
5. Sécurisation du kernel (sysctl)
sudo nano /etc/sysctl.d/99-security.conf
# Protection contre les attaques SYN flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
# Désactiver les redirections ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Ignorer les pings broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Ignorer les réponses ICMP bogus
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Activer la protection contre le spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Désactiver le routage IP (sauf si routeur)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
# Logger les paquets suspects
net.ipv4.conf.all.log_martians = 1
# Protection contre les buffer overflows
kernel.randomize_va_space = 2
# Restreindre l'accès aux logs kernel
kernel.dmesg_restrict = 1
# Restreindre ptrace (debug)
kernel.yama.ptrace_scope = 1
Appliquer :
sudo sysctl -p /etc/sysctl.d/99-security.conf
6. Permissions des fichiers
Fichiers sensibles
# Permissions restrictives sur /etc/shadow
sudo chmod 640 /etc/shadow
# Permissions sur les clés SSH
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_*
chmod 644 ~/.ssh/id_*.pub
# Fichier sudoers
sudo chmod 440 /etc/sudoers
Trouver les fichiers à risque
# Fichiers SUID (s'exécutent avec les droits du propriétaire)
sudo find / -perm -4000 -type f 2>/dev/null
# Fichiers SGID
sudo find / -perm -2000 -type f 2>/dev/null
# Fichiers world-writable
sudo find / -perm -0002 -type f ! -path "/proc/*" ! -path "/sys/*" 2>/dev/null
# Fichiers sans propriétaire
sudo find / -nouser -o -nogroup 2>/dev/null
Supprimer les SUID inutiles
# Exemple : supprimer le SUID de /usr/bin/chsh si non utilisé
sudo chmod u-s /usr/bin/chsh
7. Services et ports
Désactiver les services inutiles
# Lister les services actifs
systemctl list-units --type=service --state=running
# Désactiver un service
sudo systemctl disable cups
sudo systemctl stop cups
# Services souvent inutiles sur un serveur
sudo systemctl disable bluetooth
sudo systemctl disable avahi-daemon
Vérifier les ports en écoute
sudo ss -tlnp
Seuls les ports nécessaires doivent être ouverts.
8. Logs et audit
Configurer la rotation des logs
sudo nano /etc/logrotate.d/custom
/var/log/auth.log {
weekly
rotate 12
compress
delaycompress
missingok
notifempty
}
Centraliser les logs (rsyslog)
sudo nano /etc/rsyslog.d/50-auth.conf
auth,authpriv.* /var/log/auth.log
Installer auditd
sudo apt install auditd
# Règles d'audit pour les fichiers sensibles
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes
sudo auditctl -w /etc/sudoers -p wa -k sudoers_changes
# Voir les logs d'audit
sudo ausearch -k passwd_changes
9. Outils de sécurité supplémentaires
Fail2ban
sudo apt install fail2ban
sudo systemctl enable fail2ban
Voir le guide Configuration Fail2ban avancée.
RKHunter (détection de rootkits)
sudo apt install rkhunter
# Mettre à jour la base
sudo rkhunter --update
# Scanner le système
sudo rkhunter --check
Lynis (audit de sécurité)
sudo apt install lynis
# Audit complet
sudo lynis audit system
ClamAV (antivirus)
sudo apt install clamav clamav-daemon
# Mettre à jour les signatures
sudo freshclam
# Scanner
sudo clamscan -r /home
10. Checklist finale
Système
- Mises à jour automatiques activées
- Services inutiles désactivés
- Sysctl sécurisé
Accès
- Utilisateur non-root créé
- Login root SSH désactivé
- Authentification par clé SSH
- Fail2ban configuré
Réseau
- Firewall UFW actif
- Seuls les ports nécessaires ouverts
- Rate limiting sur SSH
Monitoring
- Logs configurés et en rotation
- Auditd installé (optionnel)
- Alertes configurées
Important
Testez toujours vos modifications sur un environnement de test avant de les appliquer en production. Gardez une session SSH ouverte lors des modifications de configuration SSH.
Conseil
Après avoir sécurisé votre serveur, utilisez Lynis pour vérifier que vous n'avez rien oublié.