>>Došli jsme k tomu, že bychom měli svým zákazníkům doporučovat standard
>>BCP38. Ten je z roku 2000 a doporučuje filtrovat odchozí provoz z vlastní
>>sítě tak, aby nebylo možné například odesílat pakety s podvrženou
>>hlavičkou odesílatele.
Jak se da nejlepe implementovat kontrola podvrzene hlavicky? Kdyz mam vnitrni sit v rozsahu napr. 192.168.1.0/24 staci nasledujici iptables pravidla? Nebo je nutne mit pravidlo misto "filter" v "mangle"?
iptables -A OUTPUT -p tcp --source 192.168.1.0/24 -j ACCEPT iptables -A OUTPUT -p tcp -j DROP iptables -A OUTPUT -p udp --source 192.168.1.0/24 -j ACCEPT iptables -A OUTPUT -p udp -j DROP
U jednoduchých sítí stačí Reverse Path Filter, který testuje, jestli pakety s danou zdrojovou adresou dostanou stejnou cestou i odpověď.
Starý způsob (funguje jen pro IPv4) je zapnout RP Filter v /etc/sysctl.conf:
net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1
Nový způsob (Linux ≥ 3.3, iptables ≥ 1.4.13) fungující i pro IPv6 je použít match rpfilter:
iptables -A PREROUTING -t raw -m rpfilter --invert -j REJECT --reject-with icmp-admin-prohibited ip6tables -A PREROUTING -t raw -m rpfilter --invert -j REJECT --reject-with adm-prohibited
iptables -A PREROUTING -t raw -m rpfilter --invert -j REJECT --reject-with icmp-admin-prohibited ip6tables -A PREROUTING -t raw -m rpfilter --invert -j REJECT --reject-with adm-prohibited
Takze jadro pozna IP pripojenych siti a ty povoli? Co kdyz budu mit nekde po ceste dalsi router s jinymi adresami? Je potreba neco nastavovat aby pakety prosly?
Když jádro dostane paket, podívá se, jestli by odpověď poslalo tam, odkud paket přišel, tedy jestli routa pro zdrojovou IP adresu míří na příchozí rozhraní. Pokud ne, tak paket zamítne. Stačí mít potom správně nastavené routování, ale to je potřeba už jen proto, aby ta síť vůbec fungovala.
Teď, když na to koukám, tak by tam mělo být DROP, REJECT vlastně nedává smysl (podvržené adrese stejně neodpovíte) a v PREROUTING ani nejde použít.