Désactiver le paramètre noyau de routage IP sur les interfaces IPv4
Empêche l'hôte de router des paquets entre interfaces en positionnant net.ipv4.ip_forward à 0.
Vérifié sur l’état résolu en cours d’exécution (ex. sshd -T, sysctl, systemctl show), attrape les drop-ins et Include qu’une lecture de fichier raterait. Réserve : runtime ≠ persistance ; une valeur correcte maintenant peut ne pas survivre à un redémarrage.
Pavois vérifie la configuration effective, l’état résolu et réellement appliqué, pas un fichier. Les scanners basés fichier (OVAL/SCAP, Lynis) ratent les Include, drop-ins et défauts runtime ; ce check voit ce qui est réellement en vigueur.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
Le routage IP transforme l'hôte en routeur qui relaie les paquets entre interfaces. Sur un système non destiné à router, l'activer permet à un attaquant de faire transiter du trafic entre segments réseau et de contourner les contrôles de segmentation, tout en pouvant exposer la topologie interne. Il doit rester désactivé sauf si l'hôte est une passerelle assumée.
Ce que vérifie Pavois
Pavois lit la valeur effective via kernel_parameter('net.ipv4.ip_forward'), qui reflète le noyau en cours après fusion de tous les drop-ins sysctl.conf / /etc/sysctl.d/ et des sysctl -w runtime. C'est important car des outils comme Docker, libvirt ou un VPN peuvent basculer ip_forward à 1 à chaud, seule la valeur effective le révèle, jamais /etc/sysctl.conf.
describe kernel_parameter('net.ipv4.ip_forward') do
its('value') { should cmp 0 }
end
describe command("grep -hsE '^[[:space:]]*net.ipv4.ip_forward[[:space:]]*=[[:space:]]*0([[:space:]]|$)' /etc/sysctl.conf /etc/sysctl.d/*.conf /run/sysctl.d/*.conf /usr/lib/sysctl.d/*.conf /lib/sysctl.d/*.conf 2>/dev/null") do
its('stdout') { should match(/\S/) }
endComment vérifier qu’elle est appliquée
Exécuter sysctl net.ipv4.ip_forward et attendre net.ipv4.ip_forward = 0.
Inspecter et investiguer
Confirmer avec sysctl net.ipv4.ip_forward. S'il revient sans cesse à 1, identifier la cause : vérifier un moteur de conteneurs ou un VPN actif, et inspecter les drop-ins avec sysctl --system 2>&1 | grep ip_forward et grep -r ip_forward /etc/sysctl.conf /etc/sysctl.d/.
Remédiation
Le plan de durcissement de Pavois positionne net.ipv4.ip_forward = 0 via la ressource sysctl, en le persistant dans un drop-in géré par Pavois et en l'appliquant à chaud (sans redémarrage). À exécuter avec pavois harden apply.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| key | net.ipv4.ip_forward |
|---|---|
| resource | sysctl |
| value | 0 |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Fort impact en cas de mauvaise application. NE PAS appliquer sur une machine qui doit router : routeurs, passerelles NAT, concentrateurs VPN, nœuds Kubernetes, hôtes Docker/Podman en réseau bridgé, ou hyperviseurs libvirt/KVM nécessitent tous ip_forward = 1. Le désactiver casse la connectivité conteneurs/VM/inter-sous-réseaux. Précaution : confirmer que l'hôte est un simple terminal avant d'appliquer ; s'il exécute des charges conteneurs ou de virtualisation, exclure cette règle (ces plateformes le réactivent souvent de toute façon).
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R12 | direct | 2.0 | haute |
| CIS | 1.4.3, 3.3.1, 3.3.1.1 | direct | per OS, see the benchmark table | haute |
| NIST | 3.1.20, CM-6(a), CM-7(a), CM-7(b), SC-5, SC-7(a) | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
| PCI DSS | 1.4.3 | support | 4.0.1 | moyenne |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.