đ§ 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
,FORWARD
etOUTPUT
étaient toutes surACCEPT
, sans rĂšgle â donciptables
n'é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/*.conf
dé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
counter
aveclog
dans les chaĂźnesinput
etforward
:-
Préfixes personnalisés :
[nftables] INPUT DROP:
et[nftables] FORWARD DROP:
-
Niveau :
warn
pour é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
(tcpdump
confirmé).
Analyse technique
-
Le NAT (
masquerade
) était bien défini mais les rÚglesforward
bloquaient 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
-
nftables
vé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
. -
iptables
laissĂ© 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 |