Aller au contenu

Filtrage par chemin inverse

Filtrage par chemin inverse (en anglais reverse path filtering) : contrôle du noyau qui rejette un paquet entrant si la machine ne répondrait pas à sa source par l'interface où il est arrivé, ce qui écarte une partie des adresses usurpées (RFC 3704).

Sous Linux, il se règle par le paramètre net.ipv4.conf.<interface>.rp_filter : 0 désactivé, 1 mode strict (la route de retour doit passer par l'interface d'arrivée), 2 mode lâche (il suffit que la source soit joignable par une interface quelconque). Ubuntu et le fichier 50-default.conf de systemd règlent 2. La valeur effective est le maximum de conf/all et de conf/<interface> : écrire net.ipv4.conf.all.rp_filter = 1 ne suffit pas si une interface est restée à 2. On écrit donc le motif net.ipv4.conf.*.rp_filter = 1 dans un fichier de /etc/sysctl.d/, puis on vérifie avec sysctl -a --pattern 'net.ipv4.conf.*.rp_filter'.

Le mode strict casse le routage asymétrique, par exemple une instance qui reçoit par son IP publique et répond par le réseau privé : les paquets sont jetés sans message, sauf avec log_martians = 1, qui fait apparaître martian source dans journalctl -k. Si l'asymétrie est voulue, on revient au mode lâche pour l'interface concernée et on inscrit l'écart. Le paramètre ne concerne qu'IPv4 ; nftables offre un équivalent pour les deux familles (fib saddr . iif oif missing drop).

Dans les cours

Voir aussi