Retour au blog

Sécuriser son serveur Linux : les 10 commandements

10 avril 2024 Dedimarco
linux sécurité serveur devops
Sécuriser son serveur Linux : les 10 commandements

En tant que développeur freelance depuis 2008, j’ai eu l’occasion de gérer des dizaines de serveurs Linux en production. La sécurité n’est pas un luxe : c’est une nécessité absolue. Chaque serveur exposé à Internet reçoit des milliers de tentatives d’intrusion par jour. Voici mes 10 commandements pour protéger efficacement votre serveur Linux.

1. Désactiver l’authentification par mot de passe SSH

Le protocole SSH est le point d’entrée principal de votre serveur. La première mesure de sécurité consiste à bannir les mots de passe au profit des clés cryptographiques.

# Générer une paire de clés Ed25519 (recommandé en 2024+)
ssh-keygen -t ed25519 -C "votre@email.com"

# Copier la clé publique sur le serveur
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@votre-serveur

Ensuite, modifiez /etc/ssh/sshd_config :

PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes

Les clés Ed25519 sont aujourd’hui le standard de facto : elles offrent un excellent compromis entre sécurité et performance, avec des clés plus courtes que RSA pour une sécurité équivalente.

2. Changer le port SSH par défaut

Le port 22 est constamment scruté par les bots. Déplacer SSH vers un port non standard réduit considérablement le bruit dans vos logs.

# /etc/ssh/sshd_config
Port 2222

Cette mesure seule ne suffit pas — elle ne fait que réduire la surface de détection automatisée. Mais couplée aux autres mesures, elle contribue à une stratégie de défense en profondeur.

3. Désactiver le login root

Le compte root est la cible numéro un des attaquants. Il doit être désactivé pour la connexion SSH directe :

# /etc/ssh/sshd_config
PermitRootLogin no

Utilisez un utilisateur dédié avec des droits sudo pour les opérations d’administration :

# Créer un utilisateur dédié
adduser admin
usermod -aG sudo admin

4. Configurer un firewall avec UFW

Un firewall est non négociable. UFW (Uncomplicated Firewall) offre une interface simple pour iptables/nftables :

# Politique par défaut : tout bloquer en entrée
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Autoriser uniquement les ports nécessaires
sudo ufw allow 2222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Activer le firewall
sudo ufw enable
sudo ufw status verbose

La règle d’or : autorisez uniquement ce dont vous avez besoin explicitement. Tout le reste doit être bloqué.

5. Installer et configurer Fail2Ban

Fail2Ban surveille les logs de connexion et bannit automatiquement les adresses IP qui multiplient les tentatives échouées :

sudo apt install fail2ban -y

Créez une configuration locale dans /etc/fail2ban/jail.local :

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

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

Relancez le service et vérifiez les bans actifs :

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

6. Maintenir le système à jour

Les mises à jour de sécurité sont votre première ligne de défense contre les failles connues. Sur Debian/Ubuntu :

# Mise à jour manuelle
sudo apt update && sudo apt upgrade -y

# Configuration des mises à jour automatiques de sécurité
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

Le service unattended-upgrades installera automatiquement les correctifs de sécurité, garantissant que votre serveur reste protégé sans intervention quotidienne.

7. Mettre en place une stratégie de sauvegarde

Aucune sécurité n’est complète sans sauvegardes. La règle des 3-2-1 est un bon point de départ :

  • 3 copies de vos données
  • 2 supports de stockage différents
  • 1 copie hors site

Pour un serveur web typique, un script de sauvegarde automatisé peut ressembler à :

#!/bin/bash
# backup.sh - Sauvegarde quotidienne
BACKUP_DIR="/backup/$(date +%Y-%m-%d)"
mkdir -p "$BACKUP_DIR"

# Sauvegarde des fichiers du site
tar -czf "$BACKUP_DIR/site.tar.gz" /var/www/

# Sauvegarde de la base de données
mysqldump --all-databases | gzip > "$BACKUP_DIR/databases.sql.gz"

# Rotation : garder les 30 derniers jours
find /backup -type d -mtime +30 -exec rm -rf {} +

# Synchronisation vers un stockage distant
rsync -avz /backup/ user@backup-server:/backups/

Planifiez avec cron et testez régulièrement la restauration. Une sauvegarde que vous n’avez jamais testée n’existe pas.

8. Monitorer son serveur

Le monitoring vous permet de détecter les anomalies avant qu’elles ne deviennent des incidents. Plusieurs outils sont essentiels :

Pour le système :

# Surveiller les ressources en temps réel
htop

# Analyser l'espace disque
df -h

# Vérifier les processus actifs
ps aux --sort=-%mem | head -20

Pour les logs de sécurité :

# Dernières tentatives de connexion échouées
sudo grep "Failed password" /var/log/auth.log | tail -20

# Utilisateurs actuellement connectés
who
last

Pour un monitoring continu, des outils comme Prometheus + Grafana, ou des solutions SaaS comme UptimeRobot et Sentry, fournissent des alertes proactives.

9. Durcir les permissions de fichiers

Les mauvaises permissions de fichiers sont une porte ouverte aux attaquants. Appliquez le principe du moindre privilège :

# Permissions pour les fichiers de configuration SSH
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# Permissions pour les fichiers web
sudo chown -R www-data:www-data /var/www/
sudo find /var/www/ -type d -exec chmod 755 {} \;
sudo find /var/www/ -type f -exec chmod 644 {} \;

# Restreindre l'accès aux fichiers sensibles
chmod 600 /etc/shadow
chmod 644 /etc/passwd

10. Désactiver les services inutiles

Chaque service actif représente une surface d’attaque potentielle. Inventoriez et désactivez ce que vous n’utilisez pas :

# Lister les services actifs
systemctl list-units --type=service --state=running

# Désactiver un service inutile
sudo systemctl disable --now bluetooth
sudo systemctl disable --now avahi-daemon

Vérifiez également les ports ouverts :

sudo ss -tlnp

Conclusion

La sécurité d’un serveur Linux n’est pas un événement ponctuel mais un processus continu. Ces 10 commandements constituent une base solide qui élimine la grande majorité des vecteurs d’attaque automatisés. L’important est de mettre en place une défense en profondeur : chaque couche de sécurité compense les faiblesses potentielles des autres.

En tant que freelance, la responsabilité de la sécurité de vos serveurs repose entièrement sur vos épaules. Investissez du temps dans ces bonnes pratiques dès le départ — vous éviterez des incidents bien plus coûteux à résoudre après coup.