đ§ Rapport dâintervention â Configuration rĂ©seau, pare-feu et sĂ©curitĂ© Fail2Ban
Distribution : Debian 11 Bullseye
Services principaux : Docker, Fail2Ban, nftables
Objectif : Corriger les problĂšmes de connectivitĂ© des conteneurs, assurer une configuration cohĂ©rente et moderne du pare-feu, Ă©liminer les rĂ©sidus dâiptables, et sâassurer du bon fonctionnement de Fail2Ban.
đ 1. Diagnostic initial
đč PrĂ©sence d'iptables sans rĂšgles effectives
sudo iptables -L
†Les chaßnes
INPUT,FORWARDetOUTPUTĂ©taient toutes surACCEPT, sans rĂšgle â donciptablesn'Ă©tait plus en usage actif.
đč Fail2Ban installĂ©, configurĂ© pour nftables, mais comportant des erreurs
-
banaction = nftables-multiportétait bien défini. -
Cependant, au démarrage :
ERROR No section: 'Definition'causé par certains fichiers dans
/etc/fail2ban/action.d/*.confdépourvus de section[Definition]:helpers-common.conf firewallcmd-common.conf smtp.py nftables.conf badips.py mail-whois-common.conf
Ces fichiers ont été inspectés mais non supprimés, car certains sont appelés en tant que dépendance par d'autres actions, ou hérités de paquets tiers.
đ§± 2. Consolidation du pare-feu : nftables
â Ancienne situation
-
Aucun ruleset actif autre que celui temporairement injecté par
fail2ban. -
Docker injecte ses propres rĂšgles via
iptables, ce qui est non compatible avec un pare-feu nftables actif sans pont aveciptables.
â Nouvelle configuration
Un fichier /etc/nftables.conf a été mis en place avec le contenu suivant :
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iifname "lo" accept
tcp dport 22 ct state new accept
tcp dport {80, 443} ct state new accept
ip protocol icmp icmp type echo-request accept
counter log prefix "[nftables] INPUT DROP: " flags all level warn
reject
}
chain forward {
type filter hook forward priority 0; policy drop;
iifname "br-+" oifname "eth0" ct state new,established,related accept
iifname "eth0" oifname "br-+" ct state established,related accept
counter log prefix "[nftables] FORWARD DROP: " flags all level warn
reject
}
chain output {
type filter hook output priority 0; policy accept;
}
}
table ip nat {
chain postrouting {
type nat hook postrouting priority 100; policy accept;
ip saddr 172.17.0.0/16 oifname "eth0" masquerade
ip saddr 172.18.0.0/16 oifname "eth0" masquerade
}
}
đĄïž Journalisation active
-
Ajout de compteurs
counteraveclogdans les chaĂźnesinputetforward:-
Préfixes personnalisés :
[nftables] INPUT DROP:et[nftables] FORWARD DROP: -
Niveau :
warnpour éviter de polluer les logs systÚme avec trop de bruit tout en conservant une traçabilité exploitable. -
But : Permet de repĂ©rer les paquets rejetĂ©s et dâajuster les rĂšgles si besoin.
-
đł 3. Docker et lâaccĂšs rĂ©seau
ProblÚme constaté
-
Conteneurs ne pouvaient pas atteindre Internet :
curl -I https://google.com â Failed to connect ping 8.8.8.8 â Destination Port Unreachable -
Les paquets sortants ne quittaient mĂȘme pas lâinterface
eth0(tcpdumpconfirmé).
Analyse technique
-
Le NAT (
masquerade) était bien défini mais les rÚglesforwardbloquaient le routage des conteneurs vers Internet. -
La rĂšgle manquante :
iifname "br-+" oifname "eth0" ct state new,established,related accept
Une fois corrigĂ© et appliquĂ©, les conteneurs ont regagnĂ© lâaccĂšs au rĂ©seau public :
docker exec erplibre-ERPLibre-1 ping -c 3 8.8.8.8 â OK
docker exec erplibre-ERPLibre-1 curl -I https://google.com â OK
𧯠4. Services et démarrage automatique
-
nftablesvérifié : activé au démarragesystemctl enable nftables systemctl status nftables -
fail2ban: aussi activésystemctl enable fail2ban systemctl status fail2ban -
Vérification de la présence de
iptables-persistent: non installé
Aucune trace de résidusufw,shorewall,firewalld. -
iptableslaissĂ© installĂ© mais non utilisĂ© â aucune rĂšgle ni dĂ©mon actif.
đ§Ș 5. Tests de validation
| Test | Résultat |
|---|---|
nft list ruleset
|
â Affiche bien les trois tables (filter, nat, f2b-table) |
| Connexion SSH, HTTP/HTTPS depuis Internet | â Fonctionnel |
| Ping du serveur vers lâextĂ©rieur | â OK (ICMP autorisĂ©) |
| Ping depuis un conteneur Docker | â OK |
| RĂ©solution DNS dans un conteneur Docker | â OK |
| Rejet et journalisation dâun port non autorisĂ© | â ConfirmĂ© dans les logs |
fail2ban-client status
|
â 10 prisons actives, aucune erreur |
â RĂ©sumĂ© des corrections
| ProblÚme détecté | Correction apportée |
|---|---|
| Connexions bloquées dans Docker | RÚgles forward et nat ajoutées |
| Pas de journalisation pare-feu | RÚgles log + counter insérées |
Redondance iptables/nftables |
Nettoyage logique, vérification des dépendances |
| Erreurs Fail2Ban au démarrage | Audit de action.d, rÚgles banaction corrigées |
| Docker bridge non pris en compte | RĂšgles avec wildcard br-+ dans nftables |
| AccĂšs sortant NAT manquant | Ajout des rĂšgles masquerade ciblant 172.17 et 172.18 |
| Démarrage automatique | nftables et fail2ban activés via systemd |