# Vérifier le pare-feu

## <span style="color: windowtext;">[![fail2ban_2.png](https://docs.rakouns.bzh/uploads/images/gallery/2026-06/scaled-1680-/fail2ban-2.png)](https://docs.rakouns.bzh/uploads/images/gallery/2026-06/fail2ban-2.png)</span>

## <span style="color: windowtext;">Pourquoi cette étape est indispensable</span>

Une jail «active» côté fail2ban (<span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">fail2ban-client status</span> qui répond) ne garantit **pas** que le ban est réellement appliqué au niveau du pare-feu — surtout sur l'infra Rakouns où Docker manipule ses propres règles iptables. C'est l'erreur la plus fréquente : croire qu'une jail fonctionne juste parce qu'elle est listée comme <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">enabled</span>.

## <span style="color: windowtext;">Vérification générique : ban classique</span>

Pour une jail standard (ex : <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">sshd</span>), vérifier que la règle de ban apparaît bien dans iptables :

```
sudo iptables -L f2b-sshd -n
```

Résultat attendu après un ban :

```
Chain f2b-sshd (1 references)
target     prot opt source               destination
DROP       all  --  203.0.113.42         0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
```

## <span style="color: windowtext;">Vérification Docker : chaîne DOCKER-USER</span>

Pour les jails utilisant l'action <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">iptables-docker</span> (cas Vaultwarden et tous les services conteneurisés), c'est la chaîne <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">DOCKER-USER</span> qu'il faut inspecter, **pas** <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">INPUT</span> :

```
sudo iptables -L DOCKER-USER -n --line-numbers
```

La chaîne dédiée du service doit apparaître en première position (insérée avec -I, donc évaluée avant le reste) :

```
Chain DOCKER-USER (1 references)
num  target          prot opt source               destination
1    f2b-vaultwarden all  --  0.0.0.0/0            0.0.0.0/0
2    RETURN          all  --  0.0.0.0/0            0.0.0.0/0
```

Puis inspecter la sous-chaîne pour voir si une IP y est effectivement droppée :

```
sudo iptables -L f2b-vaultwarden -n

Chain f2b-vaultwarden (1 references)
target     prot opt source               destination
DROP       all  --  203.0.113.42         0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
```

Si la chaîne <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">f2b-vaultwarden</span> n'apparaît pas du tout dans <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">DOCKER-USER</span>, l'action <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">iptables-docker</span> n'a pas pu s'initialiser correctement : vérifier <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">actionstart</span> dans <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">iptables-docker.conf</span> (page 2) et relire les logs fail2ban (section suivante).

## <span style="color: windowtext;">Provoquer un ban de test (en sécurité)</span>

Pour valider toute la chaîne sans attendre une vraie attaque, depuis une machine **différente** de celle utilisée pour administrer le service (sinon tu te bannis toi-même de ton accès SSH/admin) :

```
# Déclencher volontairement des échecs d'auth (exemple Vaultwarden via curl)
for i in {1..6}; do
  curl -s -o /dev/null -w "%{http_code}\n" \
    -X POST https://vault.rakouns.bzh/identity/connect/token \
    -d "username=test@test.com&password=wrongpassword&grant_type=password"
done
```

Puis vérifier côté fail2ban :

```
sudo fail2ban-client status rakouns-vaultwarden
```

L'IP de test doit apparaître dans <span style="font-size: 10.5pt; line-height: 120%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">Banned IP list</span>. Pour débannir manuellement après test :

```
sudo fail2ban-client set rakouns-vaultwarden unbanip <IP_DE_TEST>
```

## <span style="color: windowtext;">Logs fail2ban : diagnostic en cas de doute</span>

```
sudo tail -f /var/log/fail2ban.log
```

Lignes à surveiller :

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="font-size: 10.5pt; line-height: 115%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">\[rakouns-vaultwarden\] Found &lt;IP&gt;</span> → un échec a été détecté par le filter (le filter fonctionne).

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span><span style="font-size: 10.5pt; line-height: 115%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">\[rakouns-vaultwarden\] Ban &lt;IP&gt;</span> → le seuil maxretry a été atteint et le ban a été déclenché (la jail fonctionne).

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span>Absence totale de Found malgré des échecs visibles dans les logs applicatifs → revenir à la Page 3 et retester le filter avec fail2ban-regex.

<span style="mso-list: Ignore;">•<span style="font: 7.0pt 'Times New Roman';"> </span></span>Found présent mais jamais de Ban → vérifier maxretry/findtime, ou que ignoreip (jail.local) n'exclut pas l'IP de test par erreur.

## <span style="color: windowtext;">Vérification post-reboot / post-recreate</span>

Deux cas fréquents sur Rakouns où le ban peut «disparaître» silencieusement :

<span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span>**Reboot du host** : les règles iptables ne sont pas persistées par défaut. Vérifier que fail2ban redémarre bien après le pare-feu/Docker (<span style="font-size: 10.5pt; line-height: 115%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">systemctl status fail2ban</span>), et que <span style="font-size: 10.5pt; line-height: 115%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">DOCKER-USER</span> est repeuplée par actionstart au démarrage du service.

<span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span>**Recréation d'un conteneur** (mise à jour d'image) : le container\_id change, donc le logpath de la jail devient invalide. Penser à relancer le script de détection automatique du chemin de log (mentionné en Page 4) puis <span style="font-size: 10.5pt; line-height: 115%; font-family: Consolas; color: black; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">fail2ban-client reload &lt;jail&gt;</span>.

## <span style="color: windowtext;">Checklist de vérification rapide</span>

```
# 1. La jail est listée et active
sudo fail2ban-client status
 
# 2. Le filter remonte des "Found" sur le service concerné
sudo fail2ban-client status rakouns-vaultwarden
 
# 3. La chaîne f2b-<service> existe dans DOCKER-USER (cas Docker)
sudo iptables -L DOCKER-USER -n
 
# 4. Les logs confirment Found -> Ban en cas d'incident réel
sudo grep "rakouns-vaultwarden" /var/log/fail2ban.log | tail -20
```