Ouverture commerciale reportée le temps de finaliser nos locaux à Limoges. Être prévenu de l'ouverture

Sécuriser un VPS Debian : la check-list

VPS · 6 min de lecture · Mis à jour le 16 octobre 2026

Un VPS reçoit des tentatives de connexion dès sa mise en ligne. Les mesures ci-dessous couvrent l'essentiel pour un serveur Debian 12 ou 13. Elles tiennent compte de la manière dont les VPS HebergHub sont joints depuis Internet, ce qui change quelques conseils habituels : lisez la section suivante avant de toucher à SSH ou au pare-feu.

Comprendre l'accès à votre VPS

Votre VPS n'a pas d'adresse IP publique dédiée. Tout le trafic entrant passe par un point d'entrée commun :

Conséquences pratiques :

  1. Ne désactivez pas la connexion root (PermitRootLogin no) et ne changez pas le port SSH du VPS : l'accès par ssh.vps.heberghub.fr passerait par un chemin qui n'existe plus.
  2. Chaque VPS est déjà isolé des autres par un pare-feu côté infrastructure. Le pare-feu interne reste utile pour ne rien exposer par erreur.
  3. La console de l'espace client ne passe pas par le réseau : c'est votre filet de sécurité si une règle vous enferme dehors.

1. Mettre le système à jour

apt update && apt full-upgrade -y

Puis activez les mises à jour de sécurité automatiques :

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

Par défaut, Debian n'applique automatiquement que les correctifs de sécurité, ce qui est le bon réglage pour un serveur. Les journaux sont dans /var/log/unattended-upgrades/.

2. Changer le mot de passe root et passer aux clés

Le mot de passe initial s'affiche dans l'espace client : remplacez-le dès la première connexion.

passwd

Ajoutez ensuite votre clé publique depuis la page Accès (voir Première connexion SSH par clé) et vérifiez que la connexion par clé fonctionne dans une seconde fenêtre, sans fermer la première.

3. Durcir SSH sans se couper l'accès

Debian lit d'abord les fichiers de /etc/ssh/sshd_config.d/, et pour chaque option, la première valeur lue l'emporte. Modifier seulement /etc/ssh/sshd_config peut donc rester sans effet. Regardez ce qui est déjà présent :

ls /etc/ssh/sshd_config.d/
sshd -T | grep -Ei '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication|maxauthtries)'

Une fois votre clé en place et testée, interdisez la connexion root par mot de passe tout en gardant la connexion root par clé. Créez un fichier dont le nom passe avant les autres dans l'ordre alphabétique :

cat > /etc/ssh/sshd_config.d/00-durcissement.conf <<'EOF'
PermitRootLogin prohibit-password
PasswordAuthentication no
KbdInteractiveAuthentication no
MaxAuthTries 3
EOF
sshd -t && systemctl restart ssh

sshd -t vérifie la syntaxe avant le redémarrage : en cas d'erreur, rien n'est appliqué. Utilisez restart et non reload : dans un VPS de type conteneur, systemctl reload ssh échoue (Job for ssh.service failed) à cause de l'activation par socket. Le redémarrage de SSH ne coupe pas les sessions déjà ouvertes. Testez une nouvelle connexion dans une seconde fenêtre avant de fermer la première.

Vérifié sur un VPS conteneur et sur un VPS machine virtuelle (Debian 13) : les VPS HebergHub contiennent déjà /etc/ssh/sshd_config.d/00-heberghub.conf (PermitRootLogin yes, PasswordAuthentication yes), et les machines virtuelles aussi 50-cloud-init.conf (PasswordAuthentication yes). Le fichier 00-durcissement.conf passe avant eux dans l'ordre alphabétique ; sshd -T affiche ensuite permitrootlogin without-password (équivalent de prohibit-password) et passwordauthentication no. Une nouvelle connexion par clé fonctionne, une tentative par mot de passe est refusée (Permission denied (publickey)). Un fichier nommé 99-… serait ignoré.

4. Installer un pare-feu

Le principe : tout refuser en entrée, puis n'autoriser que ce que vous servez. Avec nftables, inclus dans Debian :

apt install -y nftables
cat > /etc/nftables.conf <<'EOF'
#!/usr/sbin/nft -f
flush ruleset

table inet filtre {
  chain entree {
    type filter hook input priority 0; policy drop;
    ct state established,related accept
    ct state invalid drop
    iif lo accept
    meta l4proto { icmp, ipv6-icmp } accept
    tcp dport 22 accept       # SSH (via ssh.vps.heberghub.fr)
    tcp dport 80 accept       # site publié sur nom.vps.heberghub.fr
    # tcp dport 25565 accept  # exemple : port d'un service ouvert depuis l'espace client
  }
}
EOF
systemctl enable --now nftables
nft list ruleset

Gardez la console de l'espace client ouverte pendant le premier essai. Si vous préférez ufw, la logique est la même (ufw default deny incoming, ufw allow 22/tcp, ufw allow 80/tcp, ufw enable).

Vérifié sur un VPS conteneur (LXC) et sur un VPS machine virtuelle, Debian 13 : avec ces règles, les ports 22 et 80 répondent et les autres sont fermés ; avec ufw, le résultat est identique et ufw status liste 22/tcp et 80/tcp. Sur un conteneur, nftables peut déjà être actif avant votre configuration : systemctl enable --now ne recharge alors pas le fichier. Appliquez-le avec systemctl restart nftables (ou nft -f /etc/nftables.conf), puis contrôlez avec nft list ruleset que policy drop apparaît. Sur une machine virtuelle, la configuration est conservée après un redémarrage. N'utilisez qu'un seul des deux outils à la fois.

5. Ne rien exposer par accident

Listez ce qui écoute sur le réseau :

ss -tulpn

6. Des comptes séparés pour les applications

Faites tourner chaque application sous son propre utilisateur sans privilège, pas en root :

adduser --system --group --home /opt/mon-app mon-app

Les secrets de l'application vont dans un fichier lisible par root seul, chargé par systemd (voir Variables d'environnement et jetons).

7. Les sauvegardes

Les VPS ne sont pas sauvegardés automatiquement : c'est à vous de le faire. Une sauvegarde utile est copiée hors du VPS, automatisée et testée par une restauration de temps en temps. Des outils comme restic ou borg chiffrent et dédupliquent les sauvegardes vers un stockage distant.

8. À savoir sur le réseau

La check-list

Besoin d'aide ?

Bloqué hors de votre VPS ? Ouvrez la console depuis l'espace client pour annuler la dernière modification. Sinon, ouvrez un ticket depuis votre espace client en décrivant ce que vous avez modifié en dernier.

Retour à la documentation