ESP je IP protokol 50, ne TCP port 50: co povolit
Čísla protokolů a čísla portů jsou různé jmenné prostory. Pravidlo pro TCP port 50 nepovolí nic a NAT traversal přesouvá ESP do UDP 4500.
Formuláře firewallu se ptají na TCP port a zřejmá odpověď je 50. Tato položka nepovolí nic, protože ESP je IP protokol číslo 50 a čísla protokolů nejsou porty. Oba jmenné prostory sdílejí malá celá čísla a nic jiného, a chyba zůstává neviditelná, dokud IKE neskončí a chráněný provoz nikdy nedorazí.
Dva jmenné prostory, které sdílejí malá čísla
IP hlavička nese pole protokolu, které pojmenovává, co následuje: 6 pro TCP, 17 pro UDP, 1 pro ICMP, 50 pro ESP, 51 pro AH. Hlavička TCP nebo UDP nese čísla portů, která vybírají proces na cílovém hostiteli. Protokol 50 a TCP port 50 jsou nesouvisející hodnoty, ale dialog je může udělat zaměnitelnými.
Proto pravidlo pro přesměrování portů nedokáže vyjádřit nativní ESP. Neexistuje cílový port ESP, který by se dal přesměrovat, a zařízení, které rozumí jen pravidlům pro porty, pro tento paket nemá vůbec žádný slovník. Správné pravidlo místo toho pojmenovává IP protokol. Jakýkoli dialog o portech je pro tento paket nesprávný nástroj.
Zmatek má i druhou polovinu. Když je paket zašifrovaný, vše uvnitř je neprůhledné, včetně TCP hlavičky původního spojení. Firewall, který v takovém paketu zkoumá porty, se dívá na vnější hlavičku, která v nativním případě žádné porty ke zkoumání nemá.
Nativní ESP, pak zapouzdřená alternativa
Nativní ESP se přenáší přímo jako IP protokol, což je stejně efektivní jako nepohodlné. Efektivní je proto, že neexistuje žádná další hlavička, a nepohodlné proto, že každé zařízení provádějící překlad adres a portů ho nedokáže sledovat. NAT traversal existuje právě proto, že ESP paket zabalí do UDP, aby překladač měl porty k přepsání.
| Form on the wire | How it is identified | What the firewall must permit |
|---|---|---|
| IKE negotiation | UDP with a destination port | UDP 500, and 4500 once traversal is detected |
| Native ESP | IP protocol 50 in the outer header | The protocol itself, with no port to name |
| ESP inside UDP | UDP 4500 carrying an ESP payload | The UDP port pair, which translation devices can track |
Obě formy jsou alternativní nasazení téhož datového kanálu, nikoli vrstvy jednoho. Povolení nativního ESP nepovoluje zapouzdřenou formu a povolení UDP 4500 nepovoluje nativní provoz, takže sada pravidel musí odpovídat nasazení, ne omylem pokrývat obojí.
I detekce je zde důležitá. Koncové body se mezi formami rozhodují během vyjednávání a přepnutí obvykle nastane, když je mezi nimi zjištěn NAT. Cesta, která se po navázání tunelu změní, tak může provoz přesunout do jmenného prostoru, který vaše pravidla nikdy nepokrývala.
Přečtěte si, kterou formu spojení skutečně používá
Zeptejte se koncového bodu, místo abyste hádali z firewallu. V Linuxu položka stavu hlásí, zda asociace používá UDP zapouzdření a které porty jsou zapojené. Zachycení paketů odpovídá na stejnou otázku z vedení a obojí je rychlejší než číst sadu pravidel a doufat.
ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'
První příkaz ukáže typ zapouzdření, když je NAT traversal v použití, a nic, když není. Druhý ukáže, která ze dvou forem skutečně prochází rozhraním, což ukončí spory o konfiguraci, která na papíře vypadá správně.
Protiargument patří do stejného kroku. Pravidlo, které hlásí nulu zásahů, vám říká, že paket k němu nikdy nedorazil, a to je otázka směrování nebo selektoru, ne firewallu.
Potom potvrďte řídicí kanál zvlášť. IKE má své vlastní porty a své vlastní záznamy a dokončené vyjednávání bez dat je přesně to rozdělení, o kterém je tento článek.
Napište pravidlo ve správném jmenném prostoru
Pravidlo protokolu a pravidlo portu jsou různé instrukce, takže nástroj musí vyjádřit tu, kterou máte na mysli. V nftables je shoda protokolu explicitní a zapouzdřená alternativa dostane vlastní UDP pravidlo. Držte obě pravidla vedle sebe, aby byla dvojice při kontrole vidět.
nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept
Nešiřte ani jedno z pravidel, abyste vykompenzovali chybnou diagnózu. Povolení všeho pro protokol ESP na každém rozhraní nebo povolení UDP odkudkoli kamkoli opraví symptom a odstraní kontrolu, kterou jste se snažili nastavit. Úzký podporovaný tok téměř vždy stačí, jakmile je forma známá.
Nakonec, držte vrstvy správně, když tunel funguje a aplikace ne. Pakety přicházející na bránu stále potřebují předávání, zpětnou trasu a politiku, která je propustí, a nic z toho pravidlo ESP nevyjadřuje. Chybějící port vysvětluje konkrétní selhání, ne každé selhání IPsec. Držte opravu pravidla a kontrolu směrování jako dva oddělené závěry.
Zapište formu, kterou jste pozorovali, pravidlo protokolu, které jste přidali, a čítač, který jste potom viděli. Tři řádky a příští člověk rozezná chybu jmenného prostoru od chyby směrování za minutu místo odpoledne.