Sécuriser un serveur Linux : les 10 étapes essentielles
Votre VPS ou dédié fraîchement livré est une cible ouverte. Voici les 10 mesures indispensables à appliquer immédiatement après l'installation.
La première chose à faire lorsque vous recevez un serveur Linux neuf, qu'il s'agisse d'un VPS chez OVHcloud, Scaleway ou Infomaniak, ou d'un serveur dédié, c'est de le sécuriser. Un serveur exposé sur Internet sans hardening est une cible facile : les scans automatisés commencent dans les minutes qui suivent la mise en ligne. Ce guide vous présente les 10 étapes essentielles à appliquer systématiquement sur toute nouvelle installation.
1. Mettre à jour le système
C'est la toute première action à effectuer. Connectez-vous en root et lancez une mise à jour complète du système :
# Debian / Ubuntu
apt update && apt upgrade -y
# CentOS / Rocky Linux / AlmaLinux
dnf update -y Activez ensuite les mises à jour automatiques de sécurité. Sous Ubuntu, le paquet unattended-upgrades gère cela de manière fiable. Sous Rocky Linux, configurez dnf-automatic avec le profil security. Les vulnérabilités non patchées restent le vecteur d'attaque numéro un sur les serveurs Linux.
# Ubuntu - Activer les mises à jour automatiques
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades 2. Créer un utilisateur non-root
Travailler directement en root est une mauvaise pratique. Créez un utilisateur administrateur avec les privilèges sudo :
adduser admin
usermod -aG sudo admin Utilisez cet utilisateur pour toutes vos connexions SSH quotidiennes. Le compte root ne devrait être utilisé qu'en cas d'urgence, et idéalement, sa connexion SSH devrait être désactivée (voir étape suivante).
3. Durcir la configuration SSH
SSH est la porte d'entrée principale de votre serveur. Sa configuration par défaut est trop permissive. Éditez /etc/ssh/sshd_config et appliquez ces modifications :
# Changer le port SSH (optionnel mais recommandé)
Port 2222
# Désactiver la connexion root
PermitRootLogin no
# Désactiver l'authentification par mot de passe
PasswordAuthentication no
# Autoriser uniquement l'authentification par clé
PubkeyAuthentication yes
# Limiter les utilisateurs autorisés
AllowUsers admin
# Désactiver le protocole SSH v1
Protocol 2
# Timeout des sessions inactives
ClientAliveInterval 300
ClientAliveCountMax 2 Avant de désactiver l'authentification par mot de passe, assurez-vous d'avoir copié votre clé publique sur le serveur avec ssh-copy-id admin@votre-serveur. Redémarrez SSH avec systemctl restart sshd et testez la connexion dans un nouveau terminal avant de fermer votre session active.
4. Configurer le firewall avec UFW
UFW (Uncomplicated Firewall) est le frontend le plus simple pour iptables. Il permet de définir des règles claires en quelques commandes :
# Politique par défaut : tout bloquer en entrée
ufw default deny incoming
ufw default allow outgoing
# Autoriser SSH (sur le port modifié)
ufw allow 2222/tcp
# Autoriser HTTP et HTTPS
ufw allow 80/tcp
ufw allow 443/tcp
# Activer le firewall
ufw enable
# Vérifier les règles
ufw status verbose Pour les configurations plus avancées ou les serveurs de production critiques, iptables ou nftables offrent un contrôle plus fin. Mais pour la majorité des cas d'usage, UFW est suffisant et nettement plus maintenable.
5. Installer et configurer fail2ban
fail2ban surveille les logs de vos services et bloque automatiquement les adresses IP qui montrent des comportements suspects (tentatives de brute-force, scans de vulnérabilités). C'est un indispensable :
apt install fail2ban -y
systemctl enable fail2ban Créez un fichier de configuration locale dans /etc/fail2ban/jail.local :
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
backend = systemd
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400 Avec cette configuration, toute IP qui échoue 3 fois en 10 minutes à se connecter en SSH sera bannie pendant 24 heures. Vous pouvez ajouter des jails pour Apache, Nginx, Postfix et d'autres services selon vos besoins.
6. Désactiver les services inutiles
Chaque service actif sur votre serveur est une surface d'attaque potentielle. Listez les services en écoute et désactivez ceux qui ne sont pas nécessaires :
# Lister les ports en écoute
ss -tulnp
# Désactiver un service
systemctl stop nom-du-service
systemctl disable nom-du-service Les services fréquemment inutiles sur un serveur web : rpcbind, avahi-daemon, cups, bluetooth. Chaque port fermé est un vecteur d'attaque en moins.
7. Configurer les permissions et les limites
Appliquez le principe du moindre privilège partout. Les fichiers de configuration sensibles ne doivent être lisibles que par root :
# Protéger les fichiers sensibles
chmod 600 /etc/ssh/sshd_config
chmod 600 /etc/shadow
# Sécuriser le répertoire tmp
mount -o remount,noexec,nosuid,nodev /tmp Configurez également les limites système dans /etc/security/limits.conf pour éviter qu'un processus ne consomme toutes les ressources du serveur (fork bomb, fuite mémoire).
8. Détecter les rootkits et malwares
Installez des outils de détection pour repérer toute compromission :
# Installer rkhunter et chkrootkit
apt install rkhunter chkrootkit -y
# Mettre à jour la base de données rkhunter
rkhunter --update
rkhunter --propupd
# Lancer un scan
rkhunter --check --skip-keypress
chkrootkit Planifiez des scans réguliers via cron (hebdomadaire minimum) et configurez les alertes par email pour être notifié en cas de détection. L'outil AIDE (Advanced Intrusion Detection Environment) est également recommandé pour surveiller l'intégrité des fichiers système.
9. Mettre en place les sauvegardes
La sécurité, c'est aussi la résilience. Configurez des sauvegardes automatiques régulières, stockées en dehors du serveur :
- Snapshots hébergeur : OVHcloud, Scaleway et Infomaniak proposent des snapshots automatiques. Activez-les systématiquement.
- Sauvegardes applicatives : exportez vos bases de données avec
mysqldumpoupg_dumpet envoyez-les vers un stockage externe (Object Storage S3, bucket Scaleway). - Sauvegarde fichiers : utilisez
rsyncouresticpour synchroniser les fichiers importants vers un stockage distant.
Testez régulièrement la restauration de vos sauvegardes. Une sauvegarde non testée est une sauvegarde qui ne fonctionne pas.
10. Surveiller et auditer
Un serveur sécurisé est un serveur surveillé. Mettez en place un monitoring minimal dès le premier jour :
- Logs centralisés : configurez
rsyslogoujournaldpour conserver les logs sur une durée suffisante (90 jours minimum). - Monitoring système : installez Netdata ou Prometheus + Grafana pour surveiller CPU, RAM, disque et réseau en temps réel.
- Alertes : configurez des alertes sur les événements critiques (charge CPU élevée, disque plein, connexion SSH depuis une IP inconnue).
- Audit : activez
auditdpour tracer les accès aux fichiers sensibles et les modifications de configuration.
Checklist récapitulative
- Mettre à jour le système et activer les mises à jour automatiques
- Créer un utilisateur non-root avec sudo
- Durcir SSH (clé, port, désactiver root)
- Configurer le firewall (UFW ou iptables)
- Installer fail2ban contre le brute-force
- Désactiver les services inutiles
- Verrouiller les permissions et limites système
- Installer les outils de détection (rkhunter, chkrootkit)
- Mettre en place des sauvegardes automatiques hors-serveur
- Configurer le monitoring et les alertes
Ces 10 étapes constituent le socle minimal de sécurité pour tout serveur Linux exposé sur Internet. Elles ne prennent que 30 à 45 minutes à appliquer sur un serveur neuf, mais elles réduisent considérablement votre surface d'attaque. Appliquez-les systématiquement sur chaque nouveau VPS ou dédié, et documentez vos configurations pour pouvoir les reproduire rapidement en cas de besoin.
Pour aller plus loin, consultez notre comparatif des meilleurs VPS qui intègre les critères de sécurité dans l'évaluation, ou notre guide sur les meilleurs outils de monitoring open source pour surveiller votre serveur en continu.
Alexandre Petit
Administrateur systèmes
Admin sys depuis 15 ans, je teste les offres VPS et dédiés du marché pour les développeurs et les entreprises.