Sécurité & Monitoring11 min de lecture

Durcissement Linux VPS : checklist agence après livraison

Votre agence livre un VPS et chaque technicien applique « à peu près la même chose » — sans runbook écrit, sans trace. Le jour d'un incident, vous ne pouvez pas prouver que la configuration de sécurité convenue a été posée. Ce guide part du point où le tutoriel individuel s'arrête : standardisation, délégation et traçabilité pour un parc de serveurs clients.

Pourquoi un runbook formalisé change tout pour une agence

Un développeur isolé peut appliquer mentalement cinq commandes après chaque livraison. Une agence ne le peut pas : plusieurs techniciens, des dizaines de VPS clients, des nuits de garde tournantes. Quand un client signale un accès suspect six mois après la mise en production, la question n'est pas « est-ce que vous avez sécurisé le serveur ? » mais « pouvez-vous le prouver ? »

La traçabilité est devenue une exigence contractuelle et réglementaire. La directive NIS2 (transposition en droit national en cours) et le RGPD imposent aux prestataires qui traitent des données de personnes physiques de documenter les mesures de sécurité mises en œuvre. Sans runbook versionné et sans journal auditd, votre agence ne dispose d'aucune pièce opposable.

Ce guide ne redécrit pas l'installation de fail2ban ou d'UFW — les articles Protéger un VPS avec fail2ban et Pare-feu UFW sur VPS le font en détail. Il part du niveau supérieur : comment standardiser, déléguer et tracer ces gestes à l'échelle d'un portefeuille clients.

Ce que ce runbook apporte à votre agence

  • Reproductibilité : chaque technicien exécute exactement les mêmes étapes, dans le même ordre, sur chaque nouveau VPS client.
  • Traçabilité : auditd enregistre qui a fait quoi, quand, sur quelle commande — preuve conservable en cas d'incident ou d'audit client.
  • Délégation sans risque : un junior peut livrer un serveur durci sans avoir à improviser, parce que le runbook contient les décisions à sa place.
  • Défense contractuelle : une clause de sécurité dans votre contrat de maintenance n'est défendable qu'avec un journal d'exécution daté.
  • Réduction de la surface d'attaque : la checklist élimine les oublis classiques — root SSH laissé ouvert, auditd non activé — qui sont les points d'entrée les plus exploités.
  • Cohérence inter-clients : même base sécurisée pour tous, différences uniquement là où le cahier des charges client l'exige.

Prérequis et périmètre de la checklist

Cette checklist cible Ubuntu 24.04 LTS et Debian 12 (Bookworm), les deux distributions les plus courantes sur VPS en 2026. Les commandes ont été vérifiées sur ces systèmes ; sur AlmaLinux ou Rocky Linux, les noms de paquets et les chemins de service diffèrent.

Prérequis minimaux du VPS : 1 vCPU, 1 Go de RAM (2 Go recommandés si fail2ban et auditd tournent ensemble), 20 Go SSD. ServOrbit livre chaque VPS avec accès root SSH immédiat et console KVM incluse, ce qui permet d'appliquer ce runbook dès la première minute — sans passer par un ticket d'accès intermédiaire à l'hébergeur.

La checklist est organisée en sept blocs, dans l'ordre d'application. Elle s'arrête au périmètre système de base : la sécurisation des applications (backoffice exposé, surfaces d'attaque applicatives) est traitée séparément dans Backoffice exposé : les surfaces d'attaque oubliées sur VPS.

Bloc 1 — Mises à jour et inventaire initial

01

Mise à jour du système et inventaire

La première action après connexion root est d'amener le système à son niveau de correctifs courant.

apt update && apt upgrade -y
apt install -y auditd audispd-plugins curl gnupg2 ufw fail2ban

Notez dans votre runbook : la date, la version du noyau (uname -r), et la liste des paquets installés (dpkg -l > /root/inventory-$(date +%F).txt). Ce fichier d'inventaire constitue la baseline du serveur à la livraison — c'est la pièce que vous produirez si un client conteste l'état initial de sa machine.

Référence CIS Benchmark : contrôle CIS 1.1 (Ubuntu Linux 24.04 LTS Benchmark, section « Initial Setup »).

02

Activer les mises à jour automatiques de sécurité

apt install -y unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades

Vérifiez que la ligne Unattended-Upgrade::Allowed-Origins inclut bien ${distro_id}:${distro_codename}-security. Pour un parc clients, activez les mises à jour automatiques et planifiez une revue mensuelle des mises à jour non-sécurité — elles demandent une validation humaine.

Référence CIS : contrôle CIS 1.9 (Ensure updates, patches, and additional security software are installed).

Bloc 2 — Utilisateur sudo et verrouillage root

01

Créer un utilisateur dédié à l'administration

Ne jamais utiliser root pour les tâches courantes. Créez un compte nominatif par technicien ou un compte de service agence :

useradd -m -s /bin/bash adminagence
usermod -aG sudo adminagence
passwd adminagence

Conseil agence : utilisez un nom de compte identifiable dans les logs (jean.dupont ou agency-admin), pas un générique admin. Quand auditd trace une action, le compte exécutant est enregistré — un nom générique rend l'audit inutilisable.

02

Désactiver le login root par SSH

sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
grep PermitRootLogin /etc/ssh/sshd_config

Attention : ne rechargez sshd qu'après avoir vérifié que votre utilisateur sudo peut se connecter et exécuter sudo su. Sinon vous vous bloquez hors du serveur.

Référence CIS : contrôle CIS 5.2.8 (Ensure SSH root login is disabled).

Bloc 3 — Authentification par clé SSH

01

Déployer la clé publique de l'agence

mkdir -p /home/adminagence/.ssh
chmod 700 /home/adminagence/.ssh
echo "<CLE_PUBLIQUE_AGENCE>" >> /home/adminagence/.ssh/authorized_keys
chmod 600 /home/adminagence/.ssh/authorized_keys
chown -R adminagence:adminagence /home/adminagence/.ssh

Conseil agence : maintenez un dépôt de clés publiques versionné (un fichier par technicien, rotation annuelle). Toute clé déployée sur un VPS client doit être référencée dans ce dépôt — c'est ce qui vous permet de révoquer un accès quand un collaborateur quitte l'équipe.

02

Désactiver l'authentification par mot de passe

Une fois la clé vérifiée (testez depuis un autre terminal avant de valider) :

sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
systemctl reload sshd

Référence CIS : contrôle CIS 5.2.11 (Ensure only approved MAC algorithms are used) et CIS 5.2.19 (Ensure SSH PasswordAuthentication is disabled).

Bloc 4 — Pare-feu UFW

01

Configurer UFW avec une politique de refus par défaut

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH agence'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw --force enable
ufw status verbose

N'ouvrez que les ports réellement utilisés par le projet client. Si l'application du client n'utilise pas de port email direct, ne l'ouvrez pas.

Pour l'installation de fail2ban et les options avancées d'UFW, consultez les guides dédiés : Protéger un VPS avec fail2ban et Pare-feu UFW sur VPS.

Référence CIS : contrôle CIS 3.5.1 (Ensure a firewall package is installed).

Bloc 5 — fail2ban

01

Activer fail2ban avec la jail SSH

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Éditez /etc/fail2ban/jail.local et ajustez la section [sshd] :

[sshd]
enabled = true
maxretry = 5
findtime = 600
bantime = 3600
systemctl enable fail2ban
systemctl start fail2ban
fail2ban-client status sshd

Pour un parc clients, envisagez CrowdSec en remplacement ou en complément : sa blocklist communautaire mutualise l'intelligence de milliers de serveurs.

Bloc 6 — auditd : le journal de traçabilité

01

Activer auditd et configurer les règles minimales

auditd est le composant que les agences oublient le plus souvent — et pourtant c'est lui qui fournit la preuve opposable en cas d'incident.

systemctl enable auditd
systemctl start auditd

Créez un fichier de règles agence dans /etc/audit/rules.d/agency.rules :

# Tracer toutes les élévations de privilèges
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/sudoers.d/ -p wa -k sudoers_changes

# Tracer les connexions SSH
-w /var/log/auth.log -p wa -k auth_log

# Tracer les modifications de fichiers de configuration système
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes

# Tracer les commandes exécutées en root
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
augenrules --load
auditctl -l

Référence CIS : contrôle CIS 4.1.1 (Ensure auditing is enabled) et CIS 4.1.3 (Ensure events that modify date and time information are collected).

02

Exporter et conserver les logs auditd

Les logs auditd doivent être conservés hors du serveur pour être opposables. Configurez un export vers votre système centralisé (rsyslog, Loki, ou un simple rsync quotidien vers un stockage agence) :

# Exemple : export rsyslog vers collecteur agence
echo ':programname, isequal, "auditd" @<IP_COLLECTEUR_AGENCE>:514' \
  >> /etc/rsyslog.d/99-auditd-remote.conf
systemctl restart rsyslog

Conservez au minimum 90 jours de logs. Le RGPD ne fixe pas de durée minimale pour les logs de sécurité, mais les référentiels comme le CIS Controls v8 (contrôle 8.3) recommandent au moins 90 jours sur site et 1 an en archive froide.

Bloc 7 — Vérification finale et fiche de livraison

Une fois les six blocs précédents exécutés, auditez l'état du serveur avant de remettre les accès au client :

# Vérifier les services actifs
systemctl is-active ufw fail2ban auditd sshd

# Vérifier que root ne peut pas se connecter en SSH
grep PermitRootLogin /etc/ssh/sshd_config

# Vérifier les règles UFW
ufw status verbose

# Vérifier les règles auditd chargées
auditctl -l

# Vérifier les dernières connexions
last -n 10

Produisez une fiche de livraison datée et signée (même par email) qui liste les mesures appliquées, les versions des paquets de sécurité installés, et l'emplacement du collecteur de logs. C'est ce document que votre client signe et qui constitue la preuve contractuelle de la configuration initiale.

La fiche de livraison n'est pas une formalité : un client victime d'une intrusion deux ans après la mise en production demandera à votre agence de justifier l'état du serveur à la livraison. Sans ce document, la charge de la preuve se retourne.

Runbook agence vs configuration au jugé : ce que ça change

CritèreConfiguration au jugéRunbook standardisé
ReproductibilitéDépend du technicien présentIdentique à chaque livraison
Traçabilité auditdRarement activée, config variableActivée et configurée systématiquement
Preuve en cas d'incidentAucune pièce opposableFiche de livraison datée + logs centralisés
Délégation à un juniorRisquée (oublis possibles)Possible avec le runbook comme guide
Rotation de clé SSHManuelle et oubliéeProcédure écrite, dépôt versionné
Conformité NIS2 / RGPDNon documentéeDocumentée et reproductible

Conseil d'audit mensuel. Une fois par mois, rejouez les vérifications finales du Bloc 7 sur chaque VPS client actif et archivez la sortie. Un diff entre deux audits consécutifs révèle immédiatement une modification non autorisée : un port ouvert en plus, un service fail2ban stoppé, une règle auditd manquante. Cet audit prend moins de cinq minutes par serveur quand les commandes sont dans un script.

Dépannage : erreurs fréquentes lors de l'application du runbook

Erreur 1 — sshd refuse de démarrer après modification de sshd_config
Message : sshd: /etc/ssh/sshd_config line 42: unsupported option
Cause : une directive dépréciée ou mal syntaxée. Vérifiez avec sshd -t avant de recharger le service. Sur Ubuntu 24.04, ChallengeResponseAuthentication est remplacée par KbdInteractiveAuthentication.

sshd -t && systemctl reload sshd

Erreur 2 — UFW bloque votre propre connexion SSH
Message : la session SSH se fige après ufw enable.
Cause : la règle SSH n'a pas été ajoutée avant l'activation. Passez par la console KVM ServOrbit pour accéder au serveur sans SSH, puis exécutez ufw allow 22/tcp et ufw reload.

Erreur 3 — auditd démarre mais auditctl -l retourne une liste vide
Message : List of rules: suivi de rien.
Cause : le fichier de règles n'est pas chargé. Vérifiez que votre fichier .rules est bien dans /etc/audit/rules.d/ et exécutez augenrules --load.

Erreur 4 — fail2ban ne banne pas malgré plusieurs tentatives échouées
Message : fail2ban-client status sshd montre Currently banned: 0 après 10 tentatives.
Cause : le chemin du journal SSH a changé. Sur Debian 12 et Ubuntu 24.04 avec journald, le backend de fail2ban doit être systemd dans jail.local : backend = systemd.

Erreur 5 — unattended-upgrades redémarre des services en cours de production
Cause : la configuration par défaut redémarre automatiquement les services après mise à jour. Pour un VPS client en production, désactivez le redémarrage automatique et planifiez une fenêtre de maintenance :

# Dans /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Automatic-Reboot "false";

Aller plus loin : bastionnage et surveillance continue

Cette checklist couvre le niveau 1 du durcissement système. Pour un parc clients qui exige un niveau de sécurité supérieur :

- Bastion SSH : centralisez tous les accès via un point d'entrée unique durci — voir Bastion Host sur VPS.
- CrowdSec : détection comportementale et blocklist communautaire en complément ou remplacement de fail2ban — voir Sécuriser votre VPS avec CrowdSec.
- Sauvegardes : la configuration de sécurité ne protège pas contre la perte de données — voir Sauvegardes avec BorgBackup sur VPS.
- Correctifs applicatifs : le durcissement système est inutile si les applications self-hosted ne sont pas maintenues — voir Routine de correctifs pour apps self-hosted.
- Certificats SSL : HTTPS est prérequis avant toute exposition publique — voir Certificats SSL avec Let's Encrypt sur VPS.

ServOrbit livre chaque VPS prêt pour ce runbook

Accès root SSH immédiat et console KVM incluse à la livraison : votre agence applique ce runbook dès la première connexion, pour chaque client, sans demander un accès intermédiaire à l'hébergeur. Gérez l'ensemble de votre portefeuille VPS clients depuis un espace agence centralisé.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.