Il Reverse Path Filter (rp_filter) di Linux scarta i pacchetti in ingresso su un interfaccia di rete se provenienti da un indirizzo ip la cui rotta punta su un altra interfaccia.
Per esempio, immaginando un router con tre interfaccie di rete if0, if1, if2 e una default route che punta a if2. Se rp_filter (strict) e' abilitato e arriva un pacchetto con indirizzo pubblico su if0 che deve essere routato su if1, il pacchetto viene scartato. Considerando che if0, if, e if2 possono essere anche interfaccie tunnel, VPN, etc, e' molto probabile che si verifichi la condizione descritta.
Possibili valori
no (0) - No source validation.
strict (1) - If the interface is not the best reverse path the packet check will fail.
loose (2) - If the source address is not reachable via any interface the packet check will fail.
Comandi utili
Visualizzare lo stato di rp_filter sulle diverse interfaccie
# sysctl -a | grep rp_filter
Modificare
# sysctl -w net.ipv4.conf.<interface>.rp_filter=<value>
Settando rp_filter a 0 o a 2 su un interfaccia e' necessario che net.ipv4.conf.all.rp_filter sia a 0:
# sysctl -w net.ipv4.conf.all.rp_filter=0
Rendere permanenti le modifiche
Modificare il file /etc/sysctl.d/30-rp_filter.conf con i valori desiderati. Ad esempio:
net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.eth0.rp_filter=2
Link Esterni
Occhio al rp_filter - https://www.mail-archive.com/wireless%40ml.ninux.org/msg11106.html
RFC 3704 (Ingress Filtering for Multihomed Networks) - https://datatracker.ietf.org/doc/rfc3704/