Brannmursskjemaer spør etter en TCP-port, og det opplagte svaret er 50. Det svaret tillater ingenting, fordi ESP er IP-protokoll nummer 50, og protokollnumre er ikke porter. De to navnerommene deler små heltall og ingenting annet, og feilen er usynlig til IKE er ferdig og den beskyttede trafikken aldri kommer frem.

To navnerom som deler små tall

En IP-header bærer et protokollfelt som navngir det som kommer neste: 6 for TCP, 17 for UDP, 1 for ICMP, 50 for ESP, 51 for AH. En TCP- eller UDP-header bærer portnumre, som velger en prosess på målverten. Protokoll 50 og TCP-port 50 er urelaterte verdier, men en dialogboks kan få dem til å se utbyttbare ut.

Det er derfor en videresendingsregel for porter ikke kan uttrykke innebygd ESP. Det finnes ingen ESP-målport å videresende, og en enhet som bare forstår portregler, har ikke noe ordforråd for den pakken i det hele tatt. Den riktige regelen navngir IP-protokollen i stedet. Enhver portdialog er feil verktøy for den pakken.

Forvirringen har en andre halvdel. Når pakken er kryptert, er alt inni den ugjennomsiktig, inkludert TCP-headeren til den opprinnelige forbindelsen. En brannmur som inspiserer porter i den pakken, ser på den ytre headeren, som i det innebygde tilfellet ikke har noen porter å inspisere.

Innebygd ESP, deretter det innkapslede alternativet

Innebygd ESP bæres direkte som en IP-protokoll, noe som er like effektivt som det er upraktisk. Effektivt fordi det ikke finnes noen ekstra header, og upraktisk fordi ingen enhet som oversetter adresser og porter kan følge det. NAT-traversering finnes for å løse dette, ved å pakke ESP-pakken inn i UDP slik at oversetteren har porter å skrive om.

Form on the wireHow it is identifiedWhat the firewall must permit
IKE negotiationUDP with a destination portUDP 500, and 4500 once traversal is detected
Native ESPIP protocol 50 in the outer headerThe protocol itself, with no port to name
ESP inside UDPUDP 4500 carrying an ESP payloadThe UDP port pair, which translation devices can track

De to formene er alternative utplasseringer av samme datakanal, ikke lag av én. Å tillate innebygd ESP tillater ikke den innkapslede formen, og å tillate UDP 4500 tillater ikke innebygd trafikk, så et regelsett må samsvare med utplasseringen i stedet for å dekke begge ved et uhell.

Oppdagelse er også viktig her. Endepunktene velger mellom formene under forhandlingen, og byttet skjer vanligvis når en NAT oppdages mellom dem. En rute som endrer seg etter at tunnelen er etablert, kan derfor flytte trafikken til et navnerom reglene dine aldri dekket.

Les hvilken form forbindelsen faktisk bruker

Spør endepunktet i stedet for å gjette fra brannmuren. På Linux rapporterer tilstandsoppføringen om assosiasjonen bruker UDP-innkapsling og hvilke porter som er involvert. En pakkefangst svarer på det samme spørsmålet fra ledningen, og begge er raskere enn å lese et regelsett og håpe.

ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'

Den første kommandoen viser en innkapslingstype når NAT-traversering er i bruk, og ingenting når den ikke er det. Den andre viser hvilken av de to formene som faktisk passerer grensesnittet, og det avgjør diskusjoner om en konfigurasjon som ser riktig ut på papiret.

Motbevis hører hjemme i samme trinn. En regel som rapporterer null treff, forteller deg at pakken aldri nådde den, og det er et ruting- eller selektorspørsmål, ikke et brannmursspørsmål.

Bekreft deretter kontrollkanalen separat. IKE har sine egne porter og sine egne logger, og en fullført forhandling uten data er nøyaktig den delingen denne artikkelen handler om.

Skriv regelen i riktig navnerom

En protokollregel og en portregel er forskjellige instruksjoner, så verktøyet må uttrykke den du mener. I nftables er protokolltreffet eksplisitt, og det innkapslede alternativet får sin egen UDP-regel. Hold de to reglene ved siden av hverandre slik at paret er synlig i gjennomgangen.

nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept

Ikke utvid noen av reglene for å kompensere for en feildiagnose. En tillat-alt for ESP-protokollen på hvert grensesnitt, eller en UDP-tillatelse fra hvor som helst til hvor som helst, retter et symptom og fjerner kontrollen du prøvde å sette opp. Den smale støttede flyten er nesten alltid nok når formen er kjent.

Til slutt, hold lagene riktig når tunnelen virker og applikasjonen ikke. Pakker som kommer til gatewayen trenger fortsatt videresending, en returrute og en policy som slipper dem inn, og ingen av disse uttrykkes av en ESP-regel. Den manglende porten forklarer en bestemt feil, ikke hver IPsec-feil. Hold regelislingen og rutingkontrollen som to separate konklusjoner.

Noter formen du observerte, protokollregelen du la til, og telleren du så etterpå. Tre linjer, og neste person kan skille en navneromsfeil fra en rutingfeil på ett minutt i stedet for en ettermiddag.

Relaterte artikler