Vous venez d'acheter votre VPS, vous vous connectez en root, et maintenant... vous faites quoi ? 🤔
Si votre réponse c'est "j'installe direct nginx et je déploie", STOP ! Vous êtes à 10 minutes de créer un serveur qui va se faire hacker en moins d'une semaine.
Bonne nouvelle : configurer un VPS sécurisé, c'est pas sorcier. Il suffit de suivre les bonnes étapes, dans le bon ordre. Et c'est exactement ce qu'on va faire ensemble.
Dans ce guide, on va transformer votre VPS tout nu en forteresse sécurisée, prête à héberger vos applications en production. Et tout ça en moins d'une heure.
Ce que vous allez apprendre :
-
Sécuriser SSH et désactiver le compte root
-
Configurer le firewall firewalld
-
Garder SELinux actif (oui oui, on le garde !)
-
Installer les outils essentiels
-
Automatiser tout ça avec un script
Allez, c'est parti ! 🚀
Pourquoi Alma Linux ? (et pourquoi ce guide)
Alma Linux, c'est le successeur spirituel de CentOS. Stable, fiable, gratuit, et surtout : compatible avec RHEL. Si vous voulez un serveur qui tient la route en production sans payer une licence Red Hat, c'est LE choix.
Mais voilà le truc : un VPS fraîchement créé, c'est comme une maison sans serrures. Techniquement habitable, mais vous allez avoir des visiteurs indésirables très vite. Et par "très vite", je veux dire que votre serveur va se faire scanner et attaquer dans les 5 premières minutes de mise en ligne. Sympa, non ? 😅
Avant de commencer : Ce dont vous avez besoin
-
Un VPS Alma Linux fraîchement créé (n'importe quel hébergeur fait l'affaire)
-
L'adresse IP de votre serveur
-
Le mot de passe root (fourni par votre hébergeur)
-
Un terminal SSH sur votre machine locale
-
Linux/Mac : Terminal intégré
-
Windows : PowerShell, CMD, ou installez PuTTY
Votre hébergeur vous a normalement envoyé un email avec :
IP: 123.45.67.89
User: root
Password: VotreSuperMotDePasse
Gardez ça sous la main, on va en avoir besoin !
Étape 1 : Première connexion et reconnaissance du terrain
Se connecter en SSH
Ouvrez votre terminal et tapez :
ssh root@123.45.67.89
Remplacez 123.45.67.89 par l'IP de votre serveur.
La première fois, vous allez voir un message du genre :
The authenticity of host '123.45.67.89' can't be established.
Are you sure you want to continue connecting (yes/no)?
Tapez yes et appuyez sur Entrée. Puis entrez votre mot de passe root.
Vous êtes connecté ! Vous devriez voir quelque chose comme :
[root@localhost ~]#
Première chose : METTRE À JOUR le système
Sérieusement, faites-le maintenant. Votre serveur a probablement des failles de sécurité connues qui ont été patchées.
# Mettre à jour tous les paquets
dnf update -y
# Redémarrer si nécessaire (surtout si le kernel a été mis à jour)
reboot
Le serveur va redémarrer. Attendez 30 secondes et reconnectez-vous :
ssh root@123.45.67.89
Configurer le hostname (pour s'y retrouver)
Par défaut, votre serveur s'appelle probablement "localhost" ou un truc générique. Donnons-lui un vrai nom :
# Choisissez un nom qui a du sens pour vous
hostnamectl set-hostname mon-serveur-prod
# Vérifier
hostnamectl
Vous devriez voir votre nouveau hostname. Propre ! ✨
Étape 2 : Créer un utilisateur non-root (CRUCIAL!)
Règle d'or de la sécurité serveur : Ne JAMAIS utiliser root pour les opérations quotidiennes.
Pourquoi ? Parce que root peut TOUT faire. Une erreur de frappe et vous pouvez détruire votre serveur. Et si quelqu'un vole vos identifiants root... c'est game over.
Créer votre utilisateur
# Créer un nouvel utilisateur (remplacez 'votre-user' par votre nom)
adduser votre-user
# Définir un mot de passe fort
passwd votre-user
Choisissez un mot de passe solide. Genre vraiment solide. Pas "password123" hein. 😤
Donner les privilèges sudo
On veut que notre utilisateur puisse faire des actions admin quand nécessaire, mais en étant conscient de ce qu'il fait (avec sudo).
# Ajouter l'utilisateur au groupe wheel (qui a les droits sudo sur Alma Linux)
usermod -aG wheel votre-user
# Vérifier que ça a marché
groups votre-user
Vous devriez voir wheel dans la liste des groupes.
Tester AVANT de se déconnecter
IMPORTANT : N'ouvrez PAS une nouvelle session tout de suite. On va d'abord tester dans la session actuelle.
Ouvrez un second terminal (gardez celui avec root ouvert !) et essayez de vous connecter avec votre nouvel utilisateur :
ssh votre-user@123.45.67.89
Une fois connecté, testez sudo :
sudo whoami
Ça devrait afficher root. Si oui, parfait ! Votre utilisateur a bien les droits sudo.
Gardez ces deux sessions ouvertes pour l'instant. On va configurer SSH avant de fermer celle de root.
Étape 3 : Sécuriser SSH (le nerf de la guerre)
SSH, c'est la porte d'entrée de votre serveur. Si cette porte est mal sécurisée, tous vos autres efforts ne servent à rien.
Générer une paire de clés SSH (sur VOTRE machine locale)
Sur votre ordinateur (pas sur le serveur !), ouvrez un nouveau terminal :
# Générer une paire de clés
ssh-keygen -t ed25519 -C "votre-email@example.com"
# Appuyez sur Entrée pour accepter le chemin par défaut (~/.ssh/id_ed25519)
# Choisissez une passphrase (optionnel mais recommandé)
Vous avez maintenant deux fichiers :
-
~/.ssh/id_ed25519→ Votre clé privée (ne JAMAIS la partager) -
~/.ssh/id_ed25519.pub→ Votre clé publique (celle qu'on va mettre sur le serveur)
Copier la clé publique sur le serveur
Méthode facile (si ssh-copy-id est disponible) :
ssh-copy-id votre-user@123.45.67.89
Entrez le mot de passe de votre utilisateur, et c'est fait !
Méthode manuelle (si ssh-copy-id n'existe pas) :
# Sur votre machine locale, afficher votre clé publique
cat ~/.ssh/id_ed25519.pub
Copiez le résultat (ctrl+C).
Puis, sur le serveur, dans la session de votre nouvel utilisateur :
# Créer le dossier .ssh
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Créer le fichier des clés autorisées
nano ~/.ssh/authorized_keys
Collez votre clé publique (ctrl+V), puis sauvegardez (Ctrl+X, puis Y, puis Entrée).
# Définir les bonnes permissions
chmod 600 ~/.ssh/authorized_keys
Tester la connexion par clé
Sur votre machine locale, ouvrez un nouveau terminal et essayez :
ssh votre-user@123.45.67.89
Si tout va bien, vous êtes connecté sans mot de passe ! 🎉
Si ça ne marche pas, NE FERMEZ PAS vos sessions ouvertes. Vérifiez :
-
Les permissions des fichiers (700 pour .ssh, 600 pour authorized_keys)
-
Que vous avez bien copié la clé publique (pas la privée !)
-
Les logs SSH :
sudo tail /var/log/secure
Durcir la configuration SSH
Maintenant qu'on peut se connecter par clé, on va verrouiller SSH.
Sur le serveur, éditez la config SSH :
sudo nano /etc/ssh/sshd_config
Cherchez et modifiez ces lignes (décommentez-les si nécessaire en enlevant le #) :
# Désactiver la connexion root
PermitRootLogin no
# Désactiver l'authentification par mot de passe (seulement par clé)
PasswordAuthentication no
# Désactiver l'authentification challenge-response
ChallengeResponseAuthentication no
# Désactiver les mots de passe vides (par sécurité)
PermitEmptyPasswords no
# Utiliser seulement le protocole SSH2
Protocol 2
# Autoriser seulement certains utilisateurs (optionnel mais recommandé)
AllowUsers votre-user
Bonus - Changer le port SSH (débattu, à vous de voir) :
Par défaut, SSH écoute sur le port 22. Changer ça réduit le bruit des bots qui scannent le port 22. Mais ça ne remplace PAS une vraie sécurité.
Si vous voulez le faire :
# Cherchez la ligne "Port 22" et changez-la
Port 2222 # Ou n'importe quel port entre 1024 et 65535
Si vous changez le port, pensez à :
-
Ouvrir ce port dans le firewall (on va le faire juste après)
-
Vous connecter avec
ssh -p 2222 votre-user@123.45.67.89
Sauvegardez (Ctrl+X, Y, Entrée).
Redémarrer SSH
ATTENTION : Avant de redémarrer SSH, assurez-vous que :
-
Vous avez testé la connexion par clé et ça marche
-
Vous avez gardé au moins une session SSH ouverte (au cas où)
# Tester la configuration avant de l'appliquer
sudo sshd -t
# Si pas d'erreur, redémarrer SSH
sudo systemctl restart sshd
Testez IMMÉDIATEMENT dans un nouveau terminal :
ssh votre-user@123.45.67.89
# Ou si vous avez changé le port :
ssh -p 2222 votre-user@123.45.67.89
Si ça marche, félicitations ! SSH est maintenant sécurisé. 🔒
Si ça ne marche pas et que vous vous êtes enfermé dehors... heureusement que vous avez gardé une session ouverte ! Revenez en arrière sur la config et cherchez l'erreur.
Étape 4 : Configurer le firewall avec firewalld
Par défaut, Alma Linux utilise firewalld. C'est bien plus simple que iptables et tout aussi puissant.
Vérifier que firewalld est actif
sudo systemctl status firewalld
S'il n'est pas actif (ce qui serait bizarre), démarrez-le :
sudo systemctl start firewalld
sudo systemctl enable firewalld
Comprendre les zones firewalld
Firewalld fonctionne avec des "zones". Par défaut, vous êtes dans la zone public, qui est parfaite pour un serveur web.
# Voir la zone active
sudo firewall-cmd --get-active-zones
# Voir les règles actuelles
sudo firewall-cmd --list-all
Autoriser SSH
Si vous avez gardé le port 22 :
sudo firewall-cmd --permanent --add-service=ssh
Si vous avez changé le port (exemple 2222) :
sudo firewall-cmd --permanent --add-port=2222/tcp
Autoriser HTTP et HTTPS (pour vos sites web)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
Appliquer les changements
sudo firewall-cmd --reload
Vérifier
sudo firewall-cmd --list-all
Vous devriez voir vos services/ports autorisés.
Principe important : Firewalld bloque TOUT par défaut, sauf ce que vous autorisez explicitement. C'est exactement ce qu'on veut !
Étape 5 : SELinux (on le garde actif !)
J'en vois déjà qui pensent à setenforce 0. NON ! On ne désactive pas SELinux. Si vous avez lu mon article sur Flask et SELinux, vous savez pourquoi.
Vérifier le statut
getenforce
Ça devrait afficher Enforcing. Si c'est Permissive ou Disabled, on va le corriger.
Activer SELinux en mode enforcing
Si SELinux est désactivé :
# Éditer la config
sudo nano /etc/selinux/config
Assurez-vous que la ligne SELINUX= est à enforcing :
SELINUX=enforcing
Sauvegardez et redémarrez :
sudo reboot
Après redémarrage, vérifiez :
getenforce
# Doit afficher "Enforcing"
Installer les outils SELinux utiles
sudo dnf install -y policycoreutils-python-utils setroubleshoot-server
Ces outils vont vous sauver la vie quand vous devrez débugger SELinux plus tard.
Rappel : SELinux, c'est votre ami. Un ami un peu chiant parfois, mais qui protège votre serveur comme un chef. Apprenez à vivre avec ! 💪
Étape 6 : Installer les outils essentiels
Maintenant qu'on a un serveur sécurisé, installons les outils dont on va avoir besoin.
Les basiques
# Outils système
sudo dnf install -y vim nano wget curl git htop
# Outils de développement (optionnel mais utile)
sudo dnf groupinstall -y "Development Tools"
Python et pip (pour vos apps Flask/Django)
# Python 3.9+ est inclus par défaut, mais vérifions
python3 --version
# Installer pip et venv
sudo dnf install -y python3-pip python3-virtualenv
# Vérifier
pip3 --version
Node.js et npm (si vous en avez besoin)
# Installer Node.js LTS via les modules DNF
sudo dnf module list nodejs
sudo dnf module enable nodejs:18 -y
sudo dnf install -y nodejs
# Vérifier
node --version
npm --version
nginx (serveur web)
sudo dnf install -y nginx
# Démarrer nginx
sudo systemctl start nginx
sudo systemctl enable nginx
# Vérifier le statut
sudo systemctl status nginx
Ouvrez votre navigateur et tapez http://votre-ip. Vous devriez voir la page d'accueil nginx ! 🎉
Certbot (pour les certificats SSL gratuits)
# Installer Certbot avec le plugin nginx
sudo dnf install -y certbot python3-certbot-nginx
# Vous l'utiliserez plus tard avec :
# sudo certbot --nginx -d votre-domaine.com
Étape 7 : Installer et configurer Fail2ban
Fail2ban, c'est votre videur de boîte de nuit. Il regarde les logs, et quand quelqu'un essaie de forcer votre porte (attaques brute-force), il le ban automatiquement.
Installation
# Activer EPEL (Extra Packages for Enterprise Linux)
sudo dnf install -y epel-release
# Installer Fail2ban
sudo dnf install -y fail2ban fail2ban-systemd
# Démarrer et activer
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Configuration
# Copier la config par défaut
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Éditer la config
sudo nano /etc/fail2ban/jail.local
Cherchez la section [sshd] et modifiez :
[sshd]
enabled = true
port = ssh # Ou votre port custom si vous l'avez changé
logpath = /var/log/secure
maxretry = 3
bantime = 3600
findtime = 600
Ce que ça fait :
-
3 tentatives de connexion ratées (
maxretry) -
En 10 minutes (
findtime) -
= Ban de 1 heure (
bantime)
Sauvegardez et redémarrez :
sudo systemctl restart fail2ban
Vérifier que ça marche
# Voir le statut
sudo fail2ban-client status
# Voir les détails de la jail SSH
sudo fail2ban-client status sshd
Votre serveur est maintenant protégé contre les attaques brute-force ! 🛡️
Étape 8 : Configurer un fichier swap
Si votre VPS a peu de RAM (1-2GB), un fichier swap va vous sauver quand la RAM est pleine.
Vérifier si vous avez déjà du swap
free -h
Si la ligne Swap affiche 0B, vous n'avez pas de swap.
Créer un fichier swap (2GB recommandé pour VPS 1-2GB RAM)
# Créer un fichier de 2GB
sudo fallocate -l 2G /swapfile
# Permissions strictes (IMPORTANT pour la sécurité)
sudo chmod 600 /swapfile
# Formater en swap
sudo mkswap /swapfile
# Activer
sudo swapon /swapfile
# Vérifier
free -h
Vous devriez maintenant voir du swap !
Rendre le swap permanent
# Éditer fstab
sudo nano /etc/fstab
Ajoutez cette ligne à la fin :
/swapfile none swap sw 0 0
Sauvegardez.
Optimiser le swappiness (optionnel)
Le swappiness définit à quel point le système utilise le swap. Par défaut c'est 60, ce qui est trop pour un serveur.
# Voir la valeur actuelle
cat /proc/sys/vm/swappiness
# La mettre à 10 (recommandé pour serveur)
sudo sysctl vm.swappiness=10
# Rendre permanent
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
Parfait ! Votre serveur ne va plus crasher à cause d'un manque de RAM.
Étape 9 : Monitoring et logs
Installer htop (monitoring temps réel)
sudo dnf install -y htop
Lancez-le avec htop. C'est comme top mais en mieux. Vous voyez en temps réel :
-
CPU usage
-
RAM usage
-
Processus qui tournent
-
Swap usage
Appuyez sur F10 pour quitter.
Logs importants à connaître
# Logs SSH (connexions, tentatives ratées)
sudo tail -f /var/log/secure
# Logs système généraux
sudo journalctl -f
# Logs d'un service spécifique (exemple nginx)
sudo journalctl -u nginx -f
# Voir les logs SELinux
sudo ausearch -m avc -ts recent
Astuce : Prenez l'habitude de checker /var/log/secure de temps en temps. Vous verrez les tentatives de connexion et les bans de Fail2ban. C'est instructif ! 👀
Étape 10 : Automatisation avec un script
OK, c'est cool tout ça, mais refaire tout ça à chaque nouveau serveur, c'est chiant. Automatisons !
Voici un script qui fait 80% du boulot :
#!/bin/bash
# Script de configuration initiale VPS Alma Linux
# Usage: sudo bash initial-setup.sh
set -e # Arrêter en cas d'erreur
echo "🚀 Configuration initiale du serveur Alma Linux"
echo "==============================================="
# Couleurs pour l'affichage
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Fonction pour afficher les messages de succès
success() {
echo -e "${GREEN}✅ $1${NC}"
}
# Fonction pour afficher les erreurs
error() {
echo -e "${RED}❌ $1${NC}"
}
# Vérifier qu'on est root
if [[ $EUID -ne 0 ]]; then
error "Ce script doit être exécuté en tant que root"
exit 1
fi
echo ""
echo "📦 Étape 1: Mise à jour du système"
dnf update -y
success "Système mis à jour"
echo ""
echo "👤 Étape 2: Création de l'utilisateur"
read -p "Nom d'utilisateur à créer: " USERNAME
adduser $USERNAME
passwd $USERNAME
usermod -aG wheel $USERNAME
success "Utilisateur $USERNAME créé avec les droits sudo"
echo ""
echo "🔧 Étape 3: Installation des outils essentiels"
dnf install -y vim nano wget curl git htop epel-release
dnf groupinstall -y "Development Tools"
success "Outils de base installés"
echo ""
echo "🐍 Étape 4: Installation de Python et pip"
dnf install -y python3-pip python3-virtualenv
success "Python et pip installés"
echo ""
echo "🌐 Étape 5: Installation de nginx"
dnf install -y nginx
systemctl enable nginx
success "nginx installé et configuré pour démarrer au boot"
echo ""
echo "🔒 Étape 6: Installation de Certbot"
dnf install -y certbot python3-certbot-nginx
success "Certbot installé"
echo ""
echo "🛡️ Étape 7: Installation et configuration de Fail2ban"
dnf install -y fail2ban fail2ban-systemd
systemctl enable fail2ban
systemctl start fail2ban
# Configuration Fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
cat > /etc/fail2ban/jail.d/sshd.local <<EOF
[sshd]
enabled = true
port = ssh
logpath = /var/log/secure
maxretry = 3
bantime = 3600
findtime = 600
EOF
systemctl restart fail2ban
success "Fail2ban installé et configuré"
echo ""
echo "🔥 Étape 8: Configuration du firewall"
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
success "Firewall configuré (SSH, HTTP, HTTPS autorisés)"
echo ""
echo "💾 Étape 9: Configuration du swap (2GB)"
if [ ! -f /swapfile ]; then
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile none swap sw 0 0" >> /etc/fstab
sysctl vm.swappiness=10
echo "vm.swappiness=10" >> /etc/sysctl.conf
success "Swap de 2GB créé et configuré"
else
echo "ℹ️ Swap déjà configuré"
fi
echo ""
echo "🔍 Étape 10: Vérification SELinux"
if [ "$(getenforce)" != "Enforcing" ]; then
error "SELinux n'est pas en mode Enforcing !"
echo "Éditez /etc/selinux/config et définissez SELINUX=enforcing"
echo "Puis redémarrez le serveur"
else
success "SELinux est en mode Enforcing"
fi
# Installer les outils SELinux
dnf install -y policycoreutils-python-utils setroubleshoot-server
success "Outils SELinux installés"
echo ""
echo "================================================"
echo "🎉 Configuration de base terminée !"
echo ""
echo "⚠️ ÉTAPES MANUELLES RESTANTES:"
echo ""
echo "1. Configurez SSH pour l'utilisateur $USERNAME :"
echo " - Sur votre machine locale: ssh-copy-id $USERNAME@$(hostname -I | awk '{print $1}')"
echo " - Testez la connexion par clé SSH"
echo ""
echo "2. Durcissez la configuration SSH :"
echo " sudo nano /etc/ssh/sshd_config"
echo " - PermitRootLogin no"
echo " - PasswordAuthentication no"
echo " - AllowUsers $USERNAME"
echo " sudo systemctl restart sshd"
echo ""
echo "3. Configurez votre hostname :"
echo " sudo hostnamectl set-hostname votre-nom-de-serveur"
echo ""
echo "4. (Optionnel) Installez Node.js si nécessaire :"
echo " sudo dnf module enable nodejs:18 -y"
echo " sudo dnf install -y nodejs"
echo ""
echo "📚 Documentation complète:"
echo "https://codewithmpia.com"
echo ""
echo "Bon déploiement ! 🚀"
Utiliser le script
# Télécharger le script (ou créez-le avec nano)
nano initial-setup.sh
# Coller le script, sauvegarder
# Rendre exécutable
chmod +x initial-setup.sh
# Lancer (EN TANT QUE ROOT)
sudo bash initial-setup.sh
Le script va vous demander le nom d'utilisateur à créer, puis il fait tout automatiquement !
Note : Vous devrez quand même configurer SSH manuellement (clés, durcissement de la config), car c'est trop sensible pour être automatisé sans supervision.
Étape 11 : Sauvegardes automatiques (bonus)
Un serveur sans backup, c'est un serveur temporaire. Voici un script basique de backup :
#!/bin/bash
# Script de backup simple
# À placer dans /usr/local/bin/backup.sh
BACKUP_DIR="/var/backups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_FILE="$BACKUP_DIR/backup_$DATE.tar.gz"
# Créer le dossier de backup si nécessaire
mkdir -p $BACKUP_DIR
# Ce qu'on sauvegarde (adaptez selon vos besoins)
DIRS_TO_BACKUP="/var/www /home /etc"
echo "🗂️ Backup en cours..."
# Créer l'archive
tar -czf $BACKUP_FILE $DIRS_TO_BACKUP 2>/dev/null
# Supprimer les backups de plus de 7 jours
find $BACKUP_DIR -type f -name "backup_*.tar.gz" -mtime +7 -delete
echo "✅ Backup terminé: $BACKUP_FILE"
Automatiser avec cron
# Rendre le script exécutable
sudo chmod +x /usr/local/bin/backup.sh
# Éditer le crontab
sudo crontab -e
Ajoutez cette ligne pour un backup quotidien à 2h du matin :
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Vos données sont maintenant sauvegardées automatiquement ! 💾
Important : Ces backups sont sur le même serveur. Pour une vraie sécurité, envoyez-les ailleurs (S3, autre serveur, Backblaze, etc.). Mais c'est un bon début !
Checklist finale de sécurité ✅
Avant de déployer quoi que ce soit en production, vérifiez :
# 1. Système à jour ?
sudo dnf update
# 2. SELinux en mode Enforcing ?
getenforce # Doit afficher "Enforcing"
# 3. Firewall actif et configuré ?
sudo firewall-cmd --list-all
# 4. SSH sécurisé ?
sudo grep -E "PermitRootLogin|PasswordAuthentication" /etc/ssh/sshd_config
# 5. Fail2ban actif ?
sudo systemctl status fail2ban
# 6. Utilisateur non-root créé et fonctionnel ?
ssh votre-user@votre-ip # Doit marcher par clé
# 7. Swap configuré ?
free -h # Doit montrer du swap
# 8. Services inutiles désactivés ?
sudo systemctl list-unit-files --state=enabled # Vérifiez qu'il n'y a rien de bizarre
Si tout est ✅, vous êtes prêt pour déployer ! 🎉
Les erreurs de débutant à éviter
-
Désactiver SELinux "parce que c'est chiant" : Non. Apprenez à le configurer — lisez mon article sur SELinux : Flask + SELinux — résoudre l'erreur 502.
-
Utiliser root pour tout: C'est comme conduire une Ferrari sans freins. Techniquement possible, mais vous allez finir dans le mur.
-
Garder le mot de passe SSH activé: Les bots scannent le port 22 en permanence. Avec juste un mot de passe, c'est une question de temps avant qu'ils trouvent.
-
Oublier les mises à jour:
sudo dnf updaterégulièrement. Point. -
Pas de firewall: "Je vais le faire plus tard". Spoiler : vous ne le ferez pas. Faites-le maintenant.
-
Pas de backup: Quand (pas "si", QUAND) vous allez perdre des données, vous allez le regretter amèrement.
Commandes de maintenance utiles
# Voir l'utilisation disque
df -h
# Voir les plus gros fichiers/dossiers
du -sh /* | sort -h
# Voir les connexions réseau actives
ss -tunlp
# Voir les dernières connexions SSH
sudo last
# Nettoyer les paquets inutiles
sudo dnf autoremove
# Voir les services qui démarrent au boot
sudo systemctl list-unit-files --state=enabled
# Voir les processus qui utilisent le plus de RAM
ps aux --sort=-%mem | head -n 10
# Voir les processus qui utilisent le plus de CPU
ps aux --sort=-%cpu | head -n 10
Pour aller plus loin
Maintenant que votre serveur est configuré et sécurisé, vous pouvez :
- Déployer votre première application Flask
- Suivez mon guide : Flask + SELinux sur Alma Linux
-
Configurer HTTPS avec Let's Encrypt
bash sudo certbot --nginx -d votre-domaine.com -
Installer une base de données
-
PostgreSQL :
sudo dnf install postgresql-server -
MySQL/MariaDB :
sudo dnf install mariadb-server
- Monitoring avancé
-
Installer Prometheus + Grafana
-
Configurer des alertes email
- CI/CD
-
GitHub Actions pour déployer automatiquement
-
Webhooks pour déclencher les déploiements
Conclusion : Vous êtes prêt !
Voilà ! Vous avez maintenant un VPS Alma Linux configuré correctement et sécurisé. Ça a pris un peu de temps, mais vous pouvez dormir tranquille en sachant que :
-
Votre serveur est protégé contre les attaques courantes
-
SELinux est actif et fait son job
-
Le firewall bloque tout sauf ce qui est nécessaire
-
SSH est verrouillé comme un coffre-fort
-
Fail2ban surveille les tentatives d'intrusion
-
Vos données sont sauvegardées
Les points essentiels à retenir :
-
Ne jamais utiliser root pour les opérations quotidiennes
-
Garder le système à jour (sérieusement, faites-le)
-
SELinux, c'est votre ami (même s'il est pénible parfois)
-
Authentification par clé SSH uniquement
-
Firewall = obligatoire
-
Backups = non négociable
Et rappelez-vous : la sécurité, c'est pas un état, c'est un processus. Surveillez vos logs, mettez à jour régulièrement, et restez vigilant.
Vous avez galéré avec la config de votre VPS ? Partagez votre expérience en commentaire ! Et si ce guide vous a aidé, n'hésitez pas à le partager avec d'autres devs qui galèrent avec leur premier serveur. 😉
Bon déploiement, et que la force du terminal soit avec vous ! 🐧✨

Laisser un commentaire