BCP38 (pour Best Current Practice numéro 38) est un document de l’IETF qui présente les bonnes pratiques en matière de filtrage de trafic, notamment vis à vis de l’IP source. En effet, par défaut un routeur ne regarde que les IPs de destinations afin de savoir vers où envoyer le paquet, sans se soucier de savoir si l’IP source fait partie des blocs d’IP qu’il route ou pas.
Ceci a pour effet de pouvoir usurper l’IP source et de pouvoir mener des attaques sans révéler sa propre IP. Cela participe également aux attaques par amplification.
[...]
Packet Filter (ou pf) possède un module qui vérifie que le paquet envoyé aurait bien dû prendre cette route s’il avait été reçu. Si ce n’est pas le cas, le paquet est bloqué. Attention, cela veut dire que ça ne marche que dans le cas de routage symétrique ; dès que le routage est asymétrique, les paquets seront bloqués même s’ils sont légitimes. Ce module se nomme urpf-failed pour Unicast Reverse Path Forwarding. [...] Je vous conseille de toutes façons de préférer appliquer les règles de filtrage sur vos interfaces internes plutôt que vos interfaces externes.
[...]
Si l’on suit la doc de pf, il faut donc ajouter
block in quick on em1 from urpf-failed label uRPF
dans /etc/pf.conf et recharger la configuration de pfservice pf reload
[...]
L’équivalent de cette fonctionnalité avec Netfilter s’appelle rpfilter. Vous pouvez trouver un exemple à ce propos sur la la doc d’ARN.