Dès l’instant où votre serveur dispose d’une adresse IP publique, il devient une cible. Des bots parcourent le web en continu pour tenter de se connecter en root avec des mots de passe communs.
Ce guide n’est pas de la paranoïa, c’est de l’hygiène numérique. Voici la procédure standard pour tout nouveau déploiement Linux (Debian/Ubuntu/CentOS).
1. La Règle d’Or : Jamais de Root
Le Risque : L’utilisateur root a tous les droits. Si un attaquant devine son mot de passe, il a les clés du royaume. De plus, root est le nom d’utilisateur le plus testé par les bots.
La Solution : Créez un utilisateur “normal” qui pourra s’élever temporairement (sudo).
# Créer l'utilisateur (remplacez 'operateur' par votre pseudo)
adduser operateur
# Lui donner les droits sudo (Debian/Ubuntu)
usermod -aG sudo operateur
# Sur CentOS/RedHat, le groupe est souvent 'wheel'
usermod -aG wheel operateur
Une fois fait, connectez-vous avec ce nouvel utilisateur avant de continuer.
2. La Forteresse SSH
Le protocole SSH est votre porte d’entrée. C’est aussi la première porte que les attaquants essaient de défoncer.
A. Clés SSH > Mots de passe
Les mots de passe sont faibles (interceptables, devinables). Les clés cryptographiques (Ed25519 ou RSA 4096) sont mathématiquement inviolables par force brute actuelle.
Sur votre machine locale (votre PC), générez une paire de clés si ce n’est pas déjà fait :
ssh-keygen -t ed25519 -C "admin@mon-pc"
Envoyez la clé publique vers le serveur :
ssh-copy-id operateur@ip-du-serveur
B. Verrouiller la configuration & Changer le Port
Nous allons dire au serveur de refuser les mots de passe, de bannir root, et de déplacer SSH sur un port non-standard (ex: 2222). Cela réduit drastiquement les logs de tentatives de brute-force (les bots scannent surtout le 22).
Éditez /etc/ssh/sshd_config :
sudo nano /etc/ssh/sshd_config
Modifiez ces lignes :
# Désactiver l'accès root direct
PermitRootLogin no
# Désactiver l'authentification par mot de passe (Clés UNIQUEMENT)
PasswordAuthentication no
# Changer le port (choisissez un nombre entre 1024 et 65535)
Port 2222
⚠️ ATTENTION : Ne redémarrez pas SSH tout de suite ! Vous devez d’abord ouvrir le firewall, sinon vous serez enfermé dehors.
C. Ajuster le Firewall et SELinux (Critique)
Si vous changez le port, vous devez prévenir le système.
1. Ouvrir le port dans le Firewall :
- Debian/Ubuntu (UFW) :
sudo ufw allow 2222/tcp sudo ufw reload - CentOS/RHEL (Firewalld) :
sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
2. Gérer SELinux (CentOS/RHEL uniquement) : Si SELinux est actif (ce qui est recommandé), il bloquera SSH sur un port non-standard. Autorisez-le :
sudo dnf install policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 2222
3. Redémarrer SSH : Maintenant que la voie est libre, appliquez la config.
sudo systemctl restart sshd
D. Comment se connecter au nouveau port ?
Votre ancienne commande ssh user@ip ne fonctionnera plus (elle vise le port 22 par défaut).
Méthode manuelle :
ssh -p 2222 operateur@ip-du-serveur
Méthode automatique (recommandée) :
Créez un fichier ~/.ssh/config sur votre ordinateur local :
nano ~/.ssh/config
Ajoutez-y :
Host mon-serveur
HostName ip-du-serveur
User operateur
Port 2222
IdentityFile ~/.ssh/id_ed25519
Désormais, tapez simplement ssh mon-serveur pour vous connecter.
⚠️ IMPORTANT : Ne fermez pas votre terminal actuel ! Ouvrez un nouveau terminal et testez la connexion. Si vous vous êtes trompé, vous gardez une session active pour réparer.
3. Le Mur (Firewall)
Un serveur ne doit exposer que ce qui est strictement nécessaire. Par défaut, tout doit être bloqué.
Debian / Ubuntu (UFW)
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Note : Si vous avez changé le port SSH à l'étape précédente,
# assurez-vous qu'il est bien autorisé (ex: sudo ufw allow 2222/tcp)
sudo ufw enable
CentOS / RHEL (Firewalld)
Sur ces systèmes, firewalld est le standard.
sudo systemctl enable --now firewalld
# Vérifiez vos ports ouverts
sudo firewall-cmd --list-all
# Recharger pour appliquer si besoin
sudo firewall-cmd --reload
Le Risque évité : Si vous installez une base de données (Redis, Mongo, MySQL) qui écoute par défaut sur toutes les interfaces, le firewall empêchera un attaquant externe de s’y connecter.
4. Fail2Ban : Le Videur
Même avec des clés SSH, les bots vont spammer votre port 22. Fail2Ban surveille les logs et bannit temporairement les IP qui échouent trop souvent.
Debian / Ubuntu
sudo apt install fail2ban
CentOS / RHEL
Vous avez besoin du dépôt EPEL (Extra Packages for Enterprise Linux) :
sudo dnf install epel-release
sudo dnf install fail2ban fail2ban-firewalld
sudo systemctl enable --now fail2ban
5. Mises à Jour Automatiques
La faille de sécurité la plus dangereuse est celle qui a été corrigée il y a 6 mois mais que vous n’avez pas appliquée.
Debian / Ubuntu (Unattended-Upgrades)
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
CentOS / RHEL (DNF-Automatic)
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
Par défaut, il télécharge. Pour qu’il installe, éditez /etc/dnf/automatic.conf et mettez apply_updates = yes.
6. Bonus : Audit & Monitoring
Sécuriser, c’est bien. Surveiller, c’est mieux.
Logwatch (Rapport quotidien)
Cet outil analyse vos logs et vous envoie un résumé par mail chaque matin (tentatives SSH, erreurs sudo, espace disque).
# Debian/Ubuntu
sudo apt install logwatch
# CentOS/RHEL
sudo dnf install logwatch
Configurez l’email de réception dans /usr/share/logwatch/default.conf/logwatch.conf (copiez-le dans /etc/logwatch/conf/ avant modification).
Rkhunter (Chasseur de Rootkits)
Il scanne le système à la recherche de fichiers modifiés ou de signatures de rootkits connus.
# Debian/Ubuntu
sudo apt install rkhunter
# CentOS/RHEL (via EPEL)
sudo dnf install rkhunter
Lancez un scan manuel : sudo rkhunter --check.
7. Le Coin des Sorciers (Commandes Cryptiques)
Parce que parfois, une ligne de Bash vaut mille clics. Voici des commandes illisibles mais redoutables pour l’admin aguerri.
Tunnel SSH Inversé (Accès de secours) : Ouvre un port sur votre machine locale qui redirige vers le SSH du serveur distant (utile derrière un NAT).
ssh -f -N -T -R 22222:localhost:22 user@votre-pc-externe
Générateur de mot de passe paranoïaque : Pas besoin de LastPass pour générer du chaos.
tr -dc 'A-Za-z0-9!@#$%^&*' </dev/urandom | head -c 32; echo
Nettoyer les logs Docker (Quand /var explose) : Une commande chirurgicale pour vider les logs JSON sans redémarrer les conteneurs.
truncate -s 0 /var/lib/docker/containers/*/*-json.log
Espionner les connexions suspectes en temps réel :
Qui parle à qui ? (Nécessite net-tools ou iproute2)
ss -tunapl | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
Vérifier l’expiration d’un certificat SSL distant : Sans navigateur, juste avec OpenSSL.
echo | openssl s_client -servername google.com -connect google.com:443 2>/dev/null | openssl x509 -noout -dates
La Bombe Iptables (Bloquer une IP insistante) : Bannissement immédiat et silencieux.
sudo iptables -I INPUT -s 192.168.1.50 -j DROP
Résumé du Protocole
- Créer un utilisateur
sudo. - Installer sa clé SSH.
- Interdire
rootet les mots de passe dans SSH. - Activer le Firewall (UFW) en n’ouvrant que le strict nécessaire.
- Installer Fail2Ban.
Votre serveur n’est pas invulnérable, mais il ne s’offre plus au premier venu. Vous êtes passé d’une maison porte ouverte à un bunker verrouillé.
STATUT : SÉCURITÉ_ACTIVE