ESP és el protocol IP 50, no el port TCP 50: què cal permetre
Els números de protocol i els números de port són espais de noms diferents. Una regla per al port TCP 50 no permet res, i el NAT traversal mou ESP a UDP 4500.
Els formularis de tallafoc demanen un port TCP, i l’entrada òbvia és 50. Aquesta entrada no permet res, perquè ESP és el número de protocol IP 50 i els números de protocol no són ports. Els dos espais de noms comparteixen enters petits i res més, i l’error és invisible fins que IKE acaba i el trànsit protegit no arriba mai.
Dos espais de noms que comparteixen números petits
Una capçalera IP porta un camp de protocol que anomena el que ve a continuació: 6 per a TCP, 17 per a UDP, 1 per a ICMP, 50 per a ESP, 51 per a AH. Una capçalera TCP o UDP porta números de port, que seleccionen un procés a l’amfitrió de destinació. El protocol 50 i el port TCP 50 són valors sense relació que un diàleg pot fer semblar intercanviables.
Per això una regla de redirecció de ports no pot expressar ESP natiu. No hi ha cap port de destinació ESP per redirigir, i un dispositiu que només entén regles de ports no té cap vocabulari per a aquest paquet. La regla correcta anomena el protocol IP. Qualsevol diàleg de ports és l’instrument equivocat per a aquest paquet.
La confusió té una segona meitat. Quan el paquet està xifrat, tot el que hi ha a dins és opac, inclosa la capçalera TCP de la connexió original. Un tallafoc que inspecciona ports en aquest paquet està mirant la capçalera exterior, que en el cas natiu no té ports per inspeccionar.
ESP natiu, després l’alternativa encapsulada
L’ESP natiu es transporta directament com a protocol IP, cosa que és eficient i incòmoda a parts iguals. És eficient perquè no hi ha cap capçalera extra, i incòmoda perquè qualsevol dispositiu que faci traducció d’adreces i ports no el pot seguir. El NAT traversal existeix per resoldre-ho, embolcallant el paquet ESP dins d’UDP perquè el traductor tingui ports per reescriure.
| 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 |
Les dues formes són desplegaments alternatius del mateix canal de dades, no capes d’un. Permetre ESP natiu no permet la forma encapsulada, i permetre UDP 4500 no permet el trànsit natiu, així que un conjunt de regles ha de coincidir amb el desplegament en lloc de cobrir tots dos per accident.
La detecció també importa aquí. Els extrems decideixen entre les formes durant la negociació, i el canvi sol passar quan es detecta un NAT entre ells. Un camí que canvia després d’establir el túnel pot, per tant, moure el trànsit a un espai de noms que les vostres regles no cobrien mai.
Llegeix quina forma fa servir realment la connexió
Pregunta a l’extrem en lloc d’endevinar-ho pel tallafoc. A Linux, l’entrada d’estat informa si l’associació fa servir encapsulació UDP i quins ports hi intervenen. Una captura respon la mateixa pregunta des del cable, i totes dues són més ràpides que llegir un conjunt de regles i esperar.
ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'
La primera ordre mostra un tipus d’encapsulació quan s’usa NAT traversal i res quan no. La segona mostra quina de les dues formes travessa realment la interfície, cosa que resol les discussions sobre una configuració que sobre el paper sembla correcta.
La contraevidència pertany al mateix pas. Una regla que informa de zero coincidències us diu que el paquet no hi va arribar mai, i això és una qüestió d’encaminament o de selector, no de tallafoc.
Després confirmeu el canal de control per separat. IKE té els seus propis ports i els seus propis registres, i una negociació completada sense dades és exactament la separació de què tracta aquest article.
Escriu la regla a l’espai de noms correcte
Una regla de protocol i una regla de port són instruccions diferents, així que l’eina ha d’expressar la que voleu. A nftables la coincidència de protocol és explícita, i l’alternativa encapsulada rep la seva pròpia regla UDP. Mantingueu les dues regles adjacents perquè la parella sigui visible en la revisió.
nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept
Resistiu la temptació d’ampliar qualsevol de les regles per compensar un diagnòstic erroni. Un permet-ho tot per al protocol ESP a cada interfície, o un permís UDP de qualsevol a qualsevol, arregla un símptoma i elimina el control que intentàveu configurar. El flux estret suportat gairebé sempre és suficient un cop es coneix la forma.
Finalment, mantingueu les capes clares quan el túnel funciona i l’aplicació no. Els paquets que arriben a la passarel·la encara necessiten reenviament, una ruta de tornada i una política que els admeti, i res d’això no ho expressa una regla ESP. El port que falta explica una fallada concreta, no totes les fallades d’IPsec. Mantingueu la correcció de la regla i la comprovació d’encaminament com dues conclusions separades.
Registreu la forma que heu observat, la regla de protocol que heu afegit i el comptador que heu vist després. Tres línies, i la propera persona pot distingir un error d’espai de noms d’un d’encaminament en un minut en lloc d’una tarda.