ITSkillsCenter
Cybersécurité

Comment sécuriser un serveur Linux (VPS)

6 min de lecture

Pourquoi sécuriser votre VPS est la premiere chose a faire

Un VPS (Virtual Private Server) exposé sur internet est attaque en permanence. Des bots automatises scannent les ports ouverts, tentent des connexions SSH avec des mots de passe courants, et exploitent les services non mis a jour. Si vous hebergez un site WordPress, une application ou un serveur mail pour votre entreprise au Sénégal, un VPS non sécurisé sera compromis en quelques heures.

Ce guide couvre les étapes essentielles pour sécuriser un serveur Ubuntu/Debian fraichement installé chez un hébergeur comme DigitalOcean, Hetzner, OVH ou Contabo.

Étape 1 : Mise a jour du système

Premiere chose a faire après la connexion initiale en root :

apt update && apt upgrade -y

Cette commande met a jour la liste des paquets et installé toutes les mises a jour de sécurité. Faites-le régulièrement (au minimum chaque semaine) ou configurez les mises a jour automatiques :

apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades

Choisissez « Yes » pour activer les mises a jour de sécurité automatiques.

Étape 2 : Créer un utilisateur non-root

Ne jamais travailler en root au quotidien. Créez un utilisateur avec des droits sudo :

adduser déployer
usermod -aG sudo déployer

Testez la connexion avec ce nouvel utilisateur avant de désactiver root :

ssh déployer@VOTRE_IP

Vérifiez que sudo fonctionne :

sudo apt update

Étape 3 : Authentification par clé SSH

Les mots de passe sont vulnerables aux attaques par brute force. Les clés SSH sont incomparablement plus sures.

Sur votre ordinateur local :

ssh-keygen -t ed25519 -C "votre@email.com"

Appuyez Entree pour le chemin par défaut (~/.ssh/id_ed25519). Ajoutez un mot de passe (passphrase) pour protéger la clé.

Copier la clé publique sur le serveur :

ssh-copy-id déployer@VOTRE_IP

Ou manuellement :

cat ~/.ssh/id_ed25519.pub | ssh déployer@VOTRE_IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Testez la connexion par clé (pas de mot de passe demande) :

ssh déployer@VOTRE_IP

Étape 4 : Sécuriser la configuration SSH

Editez le fichier de configuration SSH :

sudo nano /etc/ssh/sshd_config

Modifications essentielles :

Paramètre Valeur Pourquoi
Port 2222 (ou autre port non-standard) Réduit les attaques automatisees sur le port 22
PermitRootLogin no Interdit la connexion directe en root
PasswordAuthentication no Force l’utilisation des clés SSH
PubkeyAuthentication yes Active l’authentification par clé
MaxAuthTries 3 Limite les tentatives de connexion
AllowUsers déployer Seul cet utilisateur peut se connecter en SSH

Redemarrez SSH pour appliquer :

sudo systemctl restart sshd

IMPORTANT : Gardez votre session SSH actuelle ouverte et testez la nouvelle configuration dans un autre terminal AVANT de fermer. Si la config est mauvaise, vous pourriez vous verrouiller hors du serveur.

Étape 5 : Configurer le pare-feu (UFW)

UFW (Uncomplicated Firewall) est le pare-feu le plus simple sous Ubuntu :

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp comment "SSH"
sudo ufw allow 80/tcp comment "HTTP"
sudo ufw allow 443/tcp comment "HTTPS"
sudo ufw enable

Vérifiez les règles :

sudo ufw status verbose

Regles selon vos services :

Service Port Commande UFW
SSH (port personnalise) 2222 sudo ufw allow 2222/tcp
HTTP 80 sudo ufw allow 80/tcp
HTTPS 443 sudo ufw allow 443/tcp
MySQL (local uniquement) 3306 NE PAS ouvrir — accès local seulement
PostgreSQL (local uniquement) 5432 NE PAS ouvrir — accès local seulement

Étape 6 : Installer Fail2Ban contre le brute force

Fail2Ban surveille les logs et bloque automatiquement les IP qui echouent trop de connexions :

sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Configuration recommandee dans [sshd] :

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

3 échecs en 10 minutes = IP bannie pendant 1 heure.

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

Étape 7 : Sécuriser les services web (Nginx/Apache)

Headers de sécurité Nginx :

Ajoutez dans votre bloc server {} :

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self'" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
server_tokens off;

SSL/TLS avec Let’s Encrypt (gratuit) :

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d votredomaine.com -d www.votredomaine.com

Certbot configuré automatiquement la redirection HTTP → HTTPS et le renouvellement automatique du certificat.

Étape 8 : Sécuriser MySQL/MariaDB

sudo mysql_secure_installation

Repondez :

  • Set root password : Yes (mot de passe fort)
  • Remove anonymous users : Yes
  • Disallow root login remotely : Yes
  • Remove test database : Yes
  • Reload privilege tables : Yes

Créer un utilisateur dedie par application :

CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'MotDePasseComplexe123!';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;

Chaque application doit avoir son propre utilisateur MySQL avec des droits limites a sa base de données.

Étape 9 : Sauvegardes automatiques

Un serveur sans sauvegarde est un serveur que vous acceptez de perdre.

Script de sauvegarde quotidienne :

#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/home/déployer/backups"
mkdir -p $BACKUP_DIR

# Sauvegarde base de données
mysqldump -u root -p'VotreMotDePasse' --all-databases | gzip > $BACKUP_DIR/db_$DATE.sql.gz

# Sauvegarde fichiers web
tar -czf $BACKUP_DIR/web_$DATE.tar.gz /var/www/

# Supprimer les sauvegardes de plus de 30 jours
find $BACKUP_DIR -type f -mtime +30 -delete

# Copie vers stockage externe (Google Drive via rclone)
rclone copy $BACKUP_DIR remote:backups-vps/

Automatisez avec cron :

crontab -e
# Sauvegarde tous les jours a 3h du matin
0 3 * * * /home/déployer/scripts/backup.sh >> /var/log/backup.log 2>&1

Étape 10 : Surveillance et alertes

Surveiller les connexions :

# Dernires connexions reussies
last -n 20

# Tentatives echouees
sudo grep "Failed password" /var/log/auth.log | tail -20

# Qui est connecté maintenant
who

Surveiller l’espace disque :

df -h

Installer un outil de surveillance léger :

sudo apt install logwatch -y

Logwatch envoie un résumé quotidien par email des événements du serveur.

Checklist sécurité VPS

  • ☐ Système mis a jour (apt update && apt upgrade)
  • ☐ Mises a jour automatiques configurees (unattended-upgrades)
  • ☐ Utilisateur non-root créé avec sudo
  • ☐ Cles SSH configurees
  • ☐ Connexion root désactivée dans sshd_config
  • ☐ Authentification par mot de passe désactivée
  • ☐ Port SSH change (pas 22)
  • ☐ Pare-feu UFW activé avec règles minimales
  • ☐ Fail2Ban installé et configuré
  • ☐ SSL/TLS activé (Let’s Encrypt)
  • ☐ Headers de sécurité web configurés
  • ☐ MySQL sécurisé (pas de root distant, pas de base test)
  • ☐ Sauvegardes automatiques en place
  • ☐ Surveillance des logs activée
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité