> ## Content Index
> Fetch the complete content index at: https://infrabook.fr/llms.txt
> Use this file to discover other available public pages before exploring further.

# Sécuriser un serveur Debian
- URL: https://infrabook.fr/securiser-un-serveur-debian/
- Published: 2026-09-21T21:12:32.000Z
- Updated: 2026-09-21T21:12:32.000Z
- Author: YN
- Tags: Debian, Sécuritsation, Fail2ban, UFW

Un serveur Debian fraîchement installé fonctionne avec une configuration relativement sobre, mais quelques réglages supplémentaires permettent de réduire fortement sa surface d'attaque.

Cette procédure présente une base de durcissement adaptée à un serveur Debian accessible à distance : mises à jour, compte administrateur, SSH, pare-feu, protection contre les tentatives de connexion et mises à jour automatiques.

> **Information —** Cette procédure convient à Debian 12 et Debian 13\. Certaines commandes nécessitent les privilèges `root`.

---

## 1\. Mettre le système à jour

Avant de modifier la configuration du serveur, commencez par mettre à jour la liste des paquets :

```bash
apt update

```

Installez ensuite les mises à jour disponibles :

```bash
apt upgrade -y

```

Pour appliquer également les mises à jour pouvant modifier certaines dépendances :

```bash
apt full-upgrade -y

```

Supprimez les paquets devenus inutiles :

```bash
apt autoremove --purge -y

```

Vérifiez si un redémarrage est recommandé :

```bash
test -f /var/run/reboot-required && echo "Un redémarrage est nécessaire"

```

---

## 2\. Créer un compte administrateur

Il est préférable d'éviter d'utiliser directement le compte `root` pour l'administration quotidienne du serveur.

Installez `sudo` si nécessaire :

```bash
apt install sudo -y

```

Créez un nouvel utilisateur :

```bash
adduser admin

```

Remplacez `admin` par le nom d'utilisateur souhaité.

Ajoutez ensuite cet utilisateur au groupe `sudo` :

```bash
usermod -aG sudo admin

```

Vérifiez son appartenance aux groupes :

```bash
groups admin

```

Le groupe `sudo` doit apparaître dans le résultat.

Testez ensuite la connexion avec ce nouvel utilisateur avant de continuer.

```bash
ssh admin@IP_DU_SERVEUR

```

Testez également `sudo` :

```bash
sudo whoami

```

Le résultat attendu est :

```text
root

```

> **Attention —** Ne désactivez pas l'accès `root` en SSH avant d'avoir vérifié que le nouveau compte administrateur fonctionne correctement.

---

## 3\. Configurer une authentification SSH par clé

Une clé SSH permet d'éviter l'utilisation d'un mot de passe pour les connexions distantes.

Depuis votre poste client, générez une clé si vous n'en possédez pas déjà :

```bash
ssh-keygen -t ed25519

```

La clé publique se trouve généralement dans :

```text
~/.ssh/id_ed25519.pub

```

Copiez-la sur le serveur :

```bash
ssh-copy-id admin@IP_DU_SERVEUR

```

Testez ensuite la connexion :

```bash
ssh admin@IP_DU_SERVEUR

```

La connexion doit fonctionner avec la clé SSH.

> **Important —** Conservez votre session SSH actuelle ouverte pendant les modifications suivantes. Elle permettra de corriger la configuration en cas d'erreur.

---

## 4\. Durcir la configuration SSH

Plutôt que de modifier directement `/etc/ssh/sshd_config`, créez un fichier de configuration dédié :

```bash
nano /etc/ssh/sshd_config.d/99-hardening.conf

```

Ajoutez :

```text
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no

MaxAuthTries 3
LoginGraceTime 30

X11Forwarding no

```

Enregistrez le fichier.

Ces paramètres permettent notamment de :

- désactiver la connexion SSH directe avec `root` ;
- imposer l'utilisation d'une clé SSH ;
- interdire les mots de passe vides ;
- limiter les tentatives d'authentification ;
- désactiver le transfert graphique X11.

Vérifiez impérativement la configuration avant de recharger SSH :

```bash
sshd -t

```

Si aucune erreur n'apparaît, rechargez le service :

```bash
systemctl reload ssh

```

Ouvrez **une nouvelle session SSH** pour vérifier que la connexion fonctionne toujours :

```bash
ssh admin@IP_DU_SERVEUR

```

> **Attention —** Ne fermez pas votre session SSH actuelle tant que la nouvelle connexion n'a pas été validée.

---

## 5\. Vérifier les services exposés

Avant de configurer le pare-feu, vérifiez les ports actuellement en écoute :

```bash
ss -lntup

```

Pour afficher uniquement les connexions TCP :

```bash
ss -lntp

```

Exemple :

```text
LISTEN 0 128 0.0.0.0:22
LISTEN 0 511 0.0.0.0:80
LISTEN 0 511 0.0.0.0:443

```

Dans cet exemple, le serveur expose :

```text
22    SSH
80    HTTP
443   HTTPS

```

Un service inutile ne devrait idéalement pas être accessible depuis le réseau.

Vous pouvez identifier le processus utilisant un port avec :

```bash
ss -lntup

```

ou :

```bash
lsof -i :PORT

```

Installez `lsof` si nécessaire :

```bash
apt install lsof -y

```

---

## 6\. Installer un pare-feu avec UFW

Installez UFW :

```bash
apt install ufw -y

```

Configurez la politique par défaut :

```bash
ufw default deny incoming
ufw default allow outgoing

```

Autorisez SSH :

```bash
ufw allow 22/tcp

```

Si le serveur héberge un site web :

```bash
ufw allow 80/tcp
ufw allow 443/tcp

```

Vérifiez les règles avant d'activer le pare-feu :

```bash
ufw show added

```

Activez ensuite UFW :

```bash
ufw enable

```

Vérifiez son état :

```bash
ufw status verbose

```

Exemple :

```text
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere

```

> **Attention —** Si votre serveur SSH utilise un autre port que `22`, adaptez impérativement la règle avant d'activer UFW.

---

## 7\. Installer Fail2ban

Fail2ban analyse les tentatives de connexion et peut temporairement bloquer les adresses effectuant trop d'échecs d'authentification.

Installez-le :

```bash
apt install fail2ban -y

```

Créez une configuration locale :

```bash
nano /etc/fail2ban/jail.local

```

Ajoutez :

```ini
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true
backend = systemd

```

Redémarrez Fail2ban :

```bash
systemctl restart fail2ban

```

Activez son démarrage automatique :

```bash
systemctl enable fail2ban

```

Vérifiez le service :

```bash
systemctl status fail2ban

```

Vérifiez ensuite la protection SSH :

```bash
fail2ban-client status sshd

```

Vous pouvez obtenir un résultat similaire à :

```text
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  `- Total failed: 0
`- Actions
   |- Currently banned: 0
   `- Total banned: 0

```

Pour afficher les adresses actuellement bannies :

```bash
fail2ban-client get sshd banip

```

---

## 8\. Activer les mises à jour de sécurité automatiques

Les correctifs de sécurité doivent être appliqués régulièrement.

Installez le mécanisme de mises à jour automatiques :

```bash
apt install unattended-upgrades -y

```

Activez-le :

```bash
dpkg-reconfigure --priority=low unattended-upgrades

```

Sélectionnez :

```text
Oui

```

Vérifiez la configuration :

```bash
cat /etc/apt/apt.conf.d/20auto-upgrades

```

Elle doit contenir des directives similaires à :

```text
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

```

Vous pouvez simuler une exécution avec :

```bash
unattended-upgrade --dry-run --debug

```

Cela permet de vérifier le fonctionnement sans installer réellement de paquet.

---

## 9\. Vérifier les comptes disposant de privilèges

Listez les membres du groupe `sudo` :

```bash
getent group sudo

```

Vérifiez également les comptes disposant d'un shell :

```bash
grep -E '/bin/(bash|sh|zsh)$' /etc/passwd

```

Un serveur ne devrait conserver que les comptes réellement nécessaires.

Pour verrouiller un compte inutilisé :

```bash
usermod -L utilisateur

```

Pour le déverrouiller :

```bash
usermod -U utilisateur

```

---

## 10\. Vérification finale

Contrôlez l'état du pare-feu :

```bash
ufw status verbose

```

Contrôlez SSH :

```bash
sshd -t
systemctl status ssh

```

Contrôlez Fail2ban :

```bash
fail2ban-client status sshd

```

Contrôlez les mises à jour disponibles :

```bash
apt update
apt list --upgradable

```

Contrôlez les services en écoute :

```bash
ss -lntup

```

Contrôlez les services en erreur :

```bash
systemctl --failed

```

Si aucun problème n'est détecté, redémarrez le serveur :

```bash
reboot

```

Après le redémarrage, reconnectez-vous et vérifiez une dernière fois :

```bash
systemctl --failed

```

```bash
ufw status

```

```bash
fail2ban-client status sshd

```

---

## Résultat

Le serveur dispose maintenant d'une première base de durcissement comprenant :

- un compte administrateur distinct de `root` ;
- une authentification SSH par clé ;
- la désactivation de la connexion SSH de `root` ;
- la désactivation de l'authentification SSH par mot de passe ;
- un pare-feu limitant les services exposés ;
- une protection contre les tentatives répétées avec Fail2ban ;
- les mises à jour de sécurité automatiques.

Cette configuration constitue une **base de sécurité**. Elle doit ensuite être adaptée au rôle du serveur et aux services qu'il héberge.