# Sécuriser sshd avec fail2ban

Cédrix - 2024-07-24

#debian #sshd #fail2ban #php #bash

---

## Introduction

Le fichier [/etc/fail2ban/jail.local](_files/fail2ban/etc/fail2ban/jail.local) est un fichier de configuration pour Fail2Ban qui spécifie les "jails" à surveiller et les actions à entreprendre en cas de tentatives de connexion échouées ou malveillantes. Chaque jail est configurée pour surveiller un service particulier (comme SSH, Postfix, ou Pure-FTPd) en utilisant des fichiers de filtre définis dans des fichiers séparés, comme [/etc/fail2ban/filter.d/sshd.conf](_files/fail2ban/etc/fail2ban/filter.d/sshd.conf).

Pour renforcer la sécurité de nos services, nous allons configuré Fail2Ban pour surveiller et bloquer les tentatives de connexion malveillantes.

## Configurer les règles de filtrage sshd (Ban2Fail)

La configuration du fichier `/etc/fail2ban/filter.d/sshd.conf` pour Fail2Ban permet de définir les règles de filtrage des journaux SSH pour détecter et bloquer les tentatives de connexion malveillantes. Voici une explication détaillée des différentes sections et lignes de ce fichier :

### [INCLUDES]

Cette section inclut des configurations communes à partir du fichier `common.conf`. Cela permet de partager des paramètres communs entre plusieurs fichiers de configuration.

### [DEFAULT]

- **_daemon = sshd** : Définit le démon à surveiller, ici `sshd` (le serveur SSH).
- **__pref** et **__suff** : Définit les préfixes et suffixes facultatifs qui peuvent apparaître dans les journaux SSH, pour tenir compte des variations entre différentes versions et configurations de SSH.
- **__on_port_opt** : Définit des options supplémentaires pour le port, comme "port" ou "on".
- **__authng_user** : Modèle pour les utilisateurs en cours d'authentification ou invalides.
- **__alg_match** : Modèle pour les erreurs de correspondance d'algorithmes.
- **__pam_auth** : Définit le mécanisme d'authentification PAM utilisé.

### [Definition]

- **prefregex** : Expression régulière pour identifier les lignes de log pertinentes.

- **cmnfailre** : Définit plusieurs expressions régulières pour détecter les échecs d'authentification communs, les utilisateurs invalides, les tentatives d'accès refusées, etc.

- **mdre-normal** : Modèles pour les messages normaux de déconnexion.
- **mdre-ddos** : Modèles pour les tentatives de déni de service (DDoS).
- **mdre-extra** : Modèles pour des erreurs supplémentaires spécifiques.
- **mdre-aggressive** : Combine les modèles `ddos` et `extra`.

- **publickey** : Paramètre pour gérer les échecs d'authentification par clé publique.

- **failregex** : Définit les expressions régulières principales utilisées pour détecter les tentatives d'accès échouées.

- **mode** : Définit le mode de détection, qui peut être `normal`, `ddos`, `extra` ou `aggressive`.

- **journalmatch** : Filtre pour les journaux systemd, spécifique au service SSH (`sshd.service`).


## Vérifier la jail sshd (Fail2Ban)

```
sudo fail2ban-client status sshd
```

La commande `sudo fail2ban-client status sshd` est utilisée pour vérifier l'état du service Fail2Ban pour la jail spécifique `sshd`. Cette jail est configurée pour protéger le serveur SSH contre les tentatives de connexion non autorisées ou échouées.

Voici comment cette commande fonctionne et ce que chaque partie signifie :

1. **sudo** : Exécute la commande avec des privilèges administratifs.
2. **fail2ban-client** : Interface en ligne de commande pour interagir avec le service Fail2Ban.
3. **status** : Paramètre de la commande Fail2Ban pour afficher l'état.
4. **sshd** : Nom de la jail pour laquelle l'état est demandé.

### Exemple de sortie de la commande

Lors de l'exécution de la commande, la sortie pourrait ressembler à ceci :

```
Status for the jail: sshd
|- Filter
|  |- Currently failed: 2
|  |- Total failed: 56
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned: 12
   `- Banned IP list:   203.0.113.45
```

### Explication des résultats

- **Currently failed** : Nombre de tentatives de connexion échouées actuellement enregistrées.
- **Total failed** : Nombre total de tentatives de connexion échouées depuis la dernière réinitialisation.
- **File list** : Liste des fichiers de log surveillés pour détecter les tentatives de connexion échouées, généralement `/var/log/auth.log` pour SSH.
- **Currently banned** : Nombre d'adresses IP actuellement bannies.
- **Total banned** : Nombre total d'adresses IP bannies depuis la dernière réinitialisation.
- **Banned IP list** : Liste des adresses IP actuellement bannies.

