Per què tcpdump mostra text pla d'IPsec només en una direcció
Aquesta asimetria és un artefacte del punt de captura, no un camí de resposta trencat. Aquí teniu on buscar el trànsit intern i extern en una passarel·la IPsec de Linux.
Executeu tcpdump a la interfície exterior d'una passarel·la IPsec de Linux i veieu dues coses alhora: trames ESP entrants i, just després, els paquets interns desxifrats. A la sortida només apareix ESP. La conclusió natural és que les respostes no s'envien o que IPsec xifra una direcció i oblida l'altra. Cap de les dues no és certa.
El que veieu és un punt de captura. El nucli transforma els paquets sortints abans que el camí de transmissió del dispositiu els lliuri al sòcol de paquets, de manera que el sòcol mai no veu la forma interna que surt. A l'entrada, el paquet es captura primer com a ESP i la còpia desencapsulada es fa visible quan torna a entrar a la pila. El mateix trànsit, dues finestres d'observació diferents.
El punt de captura decideix què veieu
En una interfície normal, un sòcol AF_PACKET se situa a prop de la capa del dispositiu. Els paquets que surten de l'amfitrió passen primer pel processament de sortida d'IPsec, que converteix un segment TCP intern en un datagrama ESP o UDP-4500, i només després arriben a aquesta capa. Els paquets que arriben es copien al sòcol quan surten del cable, encara xifrats, i el resultat desxifrat es fa visible més tard quan la pila el lliura localment o l'encamina.
Aquest ordre explica completament l'asimetria. No és cap prova sobre la direcció, la política o el comportament de l'aplicació, i tractar-lo com a tal fa que la gent persegueixi una resposta que s'havia enviat correctament tot el temps. És un dels pocs trencaclosques de xarxa on l'instrument, i no la xarxa, crea l'anomalia.
Feu coincidir el filtre amb la capa que voleu
Una expressió com tcp port 443 selecciona una connexió TCP interna. A la sortida, aquesta connexió ja s'ha convertit en ESP quan es consulta el sòcol, així que el filtre no coincideix amb res. Si voleu comptar trànsit protegit, filtreu per la forma externa: protocol 50 per a ESP en cru, o port UDP 4500 quan hi ha travessa de NAT. Tots dos filtres produeixen un recompte de paquets que es pot comparar entre els dos parells, que normalment és el motiu de comptar. Cap dels dos no us diu si la petició interna va rebre resposta.
No tracteu un recompte d'UDP 4500 com un recompte de paquets ESP. IKE també utilitza aquest port per als keepalives de NAT-T i per a l'intercanvi encapsulat, així que el nombre inclou trànsit que no són les dades que volíeu mesurar. L'intercanvi IKE inicial a UDP 500 necessita el seu propi filtre si aquesta és la pregunta. Un nombre que barreja trànsit de control amb dades també fa que qualsevol estimació d'amplada de banda sigui incorrecta en un marge desconegut. Recomptes separats responen preguntes separades.
Escriviu el filtre al costat de la pregunta que respon. «Quant ESP ha sortit de la caixa» i «ha sortit la petició web de la caixa» són mesures diferents amb filtres diferents, i una sola captura no pot resoldre les dues. Sense aquesta nota, dues persones compararan nombres que mai no comptaven el mateix.
Observeu abans de la transformació, no després
Si necessiteu veure el text pla sortint, moveu el punt d'observació més enrere, abans del processament de sortida d'IPsec. NFLOG us dona un ganxo de Netfilter on una regla pot copiar paquets seleccionats a un sòcol d'espai d'usuari, que tcpdump pot llegir. La guia de bolcat de trànsit de strongSwan documenta aquest enfocament exactament per aquest motiu.
La coincidència de política limita la regla al trànsit que està a punt d'entrar en un túnel. -m policy --pol ipsec --dir out és el que fa que la regla sigui específica en lloc de registrar cada paquet que envia la caixa. Després llegiu el grup de registre amb una captura limitada: un recompte petit d'instantànies i un límit de mida eviten que el diagnòstic es converteixi en un arxiu de trànsit. Una captura limitada també és més fàcil de lliurar a un revisor sense arrossegar càrrega irrellevant. Decidiu el nombre abans de començar, no després de veure quant n'ha arribat.
iptables -I OUTPUT 1 -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5
tcpdump -ni nflog:5 -s 128 -c 20 'host 10.83.0.44 and tcp port 8443'Trieu el ganxo que coincideixi amb el flux. OUTPUT cobreix el trànsit que genera la mateixa passarel·la; el trànsit d'un client LAN passa per la cadena FORWARD i una regla a OUTPUT no el veurà mai. L'adreça i el port de dalt són marcadors de posició per a una destinació de prova aprovada.
Què demostra l'observació
NFLOG és una destinació de registre, no una decisió d'acceptació. Un paquet que hi apareix mostra que ha arribat al ganxo i ha coincidit amb la regla. No mostra que un filtre posterior l'hagi permès, que el dispositiu l'hagi transmès o que el parell hagi rebut res.
Un registre buit és igualment ambigu. Comproveu el comptador de paquets de la regla, confirmeu la direcció, confirmeu que el flux realment va coincidir amb una política IPsec i confirmeu la destinació. Només un comptador coincident en tots dos parells converteix una observació en conclusió. Després compareu els comptadors de l'associació de seguretat en tots dos parells per al mateix intent controlat, perquè els comptadors SA són el registre autoritatiu del que es va protegir i enviar.
Una trampa més: «text pla» en aquest context significa fora de la capa de xifratge d'IPsec. Una sessió HTTPS interna encara té el seu propi TLS. Capturar el paquet desencapsulat no desxifra el TLS de l'aplicació, i veure-hi HTTP llegible significa que l'aplicació mai no feia servir HTTPS.
Netegeu i compareu els dos extrems
Elimineu la regla exacta que heu inserit, pel seu propietari, tan bon punt acabi l'observació. Deixar una regla de registre al seu lloc costa CPU per cada paquet coincident i crea silenciosament un problema de retenció de dades. Suprimiu-la repetint la regla amb -D en lloc de buidar una cadena que no és vostra.
iptables -D OUTPUT -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5Si el desplegament utilitza IPsec en espai d'usuari, una interfície XFRM o descàrrega per maquinari, els punts d'observació es mouen i aquesta recepta pot no aplicar-se gens. Amb libipsec, el lloc documentat per observar el trànsit intern és el dispositiu TUN. Identifiqueu primer el camí, després trieu el punt que respon la pregunta, i espereu que les dues direccions semblin diferents només quan mireu el costat equivocat de la transformació.