Retour aux articles
Security7 min de lecture

Durcissement des serveurs Linux en production

Configurations de sécurité essentielles incluant le hardening SSH, les règles firewall, fail2ban et la conformité aux benchmarks CIS.

2024-07-05

Durcissement des serveurs Linux en production

Chaque serveur exposé à internet est une cible. Que vous gériez une seule VM ou une flotte de centaines, le durcissement sécuritaire n'est pas optionnel — c'est la base. Voici les configurations essentielles que j'applique à chaque serveur Linux en production.

Durcissement SSH

SSH est la porte d'entrée de votre serveur. Verrouillez-la :

# /etc/ssh/sshd_config

# Désactiver la connexion root
PermitRootLogin no

# Désactiver l'authentification par mot de passe
PasswordAuthentication no
PubkeyAuthentication yes

# Restreindre à des utilisateurs spécifiques
AllowUsers deploy admin

# Utiliser des algorithmes d'échange de clés robustes
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

# Limiter les tentatives d'authentification
MaxAuthTries 3
LoginGraceTime 30

# Désactiver les fonctionnalités inutilisées
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no

# Changer le port par défaut
Port 2222

Après avoir modifié sshd_config, testez toujours avec une nouvelle session avant de fermer celle en cours. Se retrouver enfermé dehors d'un serveur distant n'est pas une partie de plaisir.

Firewall avec UFW

J'utilise UFW (Uncomplicated Firewall) pour sa simplicité, soutenu par iptables :

# Réinitialiser et définir les défauts
ufw --force reset
ufw default deny incoming
ufw default allow outgoing

# Autoriser SSH sur le port personnalisé
ufw allow 2222/tcp comment 'SSH'

# Autoriser le trafic web
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'

# Limiter le débit SSH
ufw limit 2222/tcp

# Activer
ufw --force enable

La règle limit bloque automatiquement les IPs qui tentent plus de 6 connexions en 30 secondes — une protection brute-force simple mais efficace.

Fail2ban

Fail2ban surveille les fichiers de log et bannit les IPs qui montrent des patterns malveillants :

# /etc/fail2ban/jail.local

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw

[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 3

[nginx-http-auth]
enabled = true
logpath = /var/log/nginx/error.log

[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.log

Avec cette configuration, trois tentatives SSH échouées en 10 minutes entraînent un bannissement d'une heure. Pour les attaquants persistants, je configure des durées de bannissement progressives en utilisant le jail recidive de fail2ban.

Mises à jour de sécurité automatiques

Activez les mises à jour automatiques pour les correctifs de sécurité :

apt install unattended-upgradesdpkg-reconfigure -plow unattended-upgrades

Configurez /etc/apt/apt.conf.d/50unattended-upgrades :

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";

Conformité aux benchmarks CIS

Les benchmarks CIS (Center for Internet Security) fournissent des directives de durcissement complètes. Les vérifications clés incluent :

# Vérifier les permissions sur /etc/passwd
chmod 644 /etc/passwd
chmod 600 /etc/shadow

# Désactiver les systèmes de fichiers inutilisés
echo "install cramfs /bin/true" >> /etc/modprobe.d/disable-filesystems.conf
echo "install freevxfs /bin/true" >> /etc/modprobe.d/disable-filesystems.conf

# Définir le sticky bit sur les répertoires world-writable
df --local -P | awk '{if (NR!=1) print $6}' | \
  xargs -I '{}' find '{}' -xdev -type d -perm -0002 2>/dev/null | \
  xargs -I '{}' chmod a+t '{}'

# Auditer les événements système
apt install auditd
systemctl enable auditd

Pour la vérification automatisée de conformité, j'utilise des outils comme lynis qui audite le système par rapport aux benchmarks CIS et fournit un score de durcissement avec des recommandations actionnables.

Monitoring et alerting

Le durcissement sans monitoring est incomplet. Au minimum, mettez en place :

  • Agrégation des logs : Expédiez les logs vers un emplacement central (Azure Monitor, ELK, Grafana Loki)
  • Monitoring d'intégrité des fichiers : Utilisez AIDE ou OSSEC pour détecter les modifications non autorisées
  • Notifications de connexion : Recevez des alertes lors de connexions SSH depuis des IPs inattendues

La sécurité est un processus continu, pas une configuration ponctuelle. Révisez les configurations régulièrement, maintenez les systèmes à jour, et partez toujours du principe que quelque chose essaie d'entrer.

Partager cet article

LinkedInTwitter

Besoin d'aide pour votre infrastructure ?

Discutons de votre projet et trouvons la meilleure solution ensemble.

Prendre contact