Rețelele hoteliere și firewall-urile de conferință afișează adesea o casetă de permisiune personalizată, iar cineva tastează 47 în ea sperând că PPTP va funcționa. Regula este creată, tunelul tot eșuează, iar următoarea încercare folosește alt număr. Greșeala stă în pachetul însuși: IPv4 are un câmp de protocol care numește ce urmează după antetul IP, în timp ce TCP și UDP au câmpuri de port care există doar când te afli în interiorul unuia dintre acele antete. Nu sunt două grafii ale aceleiași permisiuni.

Antetul IPv4 numește următorul protocol

Câmpul de protocol este un octet în antetul IPv4 și conține un număr care descrie încărcătura utilă: 6 pentru TCP, 17 pentru UDP, 47 pentru GRE, 50 pentru ESP. Orice filtrează pachete citește acea valoare înainte de a privi mai adânc, fiindcă antetul mai adânc are sens doar după ce tipul este cunoscut. Schimbă un port mai târziu în conversație, iar acest câmp nu s-a mișcat.

Prin urmare, o regulă scrisă împotriva protocolului 47 descrie stratul IP. Niciun port nu participă la decizie.

Porturile există în interiorul TCP și UDP, nicăieri altundeva

Porturile sunt identificatori de șaisprezece biți în interiorul antetelor TCP și UDP, iar sarcina lor este să separe conversațiile care împart o adresă. Un antet GRE poartă o valoare de tip de protocol, adesea un EtherType, plus chei opționale pentru multiplexare. De aceea expresia port 47 nu numește nimic cu care un pachet GRE s-ar putea potrivi.

Interfețele firewall-urilor diferă în cât de mult din aceasta expun. Unele acceptă un număr de protocol, altele oferă o listă cu nume, iar câteva acceptă doar TCP sau UDP cu porturi.

PPTP folosește ambele straturi simultan

PPTP este exemplul cel mai clar pentru că își împarte deliberat munca între cele două straturi. Conexiunea de control este o sesiune TCP către portul 1723, iar calea de date este GRE, protocolul 47, fără niciun port implicat undeva. Un firewall care permite 1723 și nimic altceva lasă negocierea să înceapă și apoi aruncă încărcătura utilă. Tunelul pare să se blocheze după autentificare în loc să nu se conecteze, și de aceea simptomul este adesea raportat ca problemă de parolă.

PathOuter protocolPort
Control channelTCP, protocol 61723
Data channelGRE, protocol 47None

Citește cele două rânduri separat când scrii regula și verifică fiecare față de sintaxa producătorului. Un rând are nevoie de un port, celălalt are nevoie de un număr de protocol, și nicio singură intrare nu le acoperă pe amândouă.

De ce o pagină de redirecționare a porturilor nu poate exprima GRE

Un formular de redirecționare care acceptă doar TCP și UDP nu poate descrie GRE, oricum s-ar numi formularul. Traducerea adreselor adaugă o a doua dificultate, fiindcă GRE nu are porturi, iar traducătorul trebuie să urmărească în schimb identificatorul apelului. Unele routere de consum vin cu un ajutor care se ocupă de asta; multe nu, și nicio intrare suplimentară de permisiune TCP nu va crea acel comportament.

Acolo unde cerința reală este un tunel modern, alege un proiect care folosește deliberat TCP sau UDP în loc să spere că un traducător ghicește corect.

Encapsularea decide ce vede filtrul

Encapsularea schimbă pachetul exterior, iar pachetul exterior este cel cu care o regulă se potrivește. ESP nativ este protocolul 50, în timp ce traversarea NAT înfășoară ESP în UDP 4500 ca să supraviețuiască traducerii adreselor. Un filtru care permite UDP 4500 nu vede niciodată protocolul 50, iar un filtru scris pentru protocolul 50 nu se potrivește niciodată cu forma înfășurată.

Întreabă pe ce encapsulare au căzut de acord clientul și gateway-ul, apoi scrie regula pentru exact acea formă exterioară și nimic mai mult.

Scrie regula astfel încât cineva să o poată verifica

Exprimă fiecare regulă ca familie de adrese, protocol exterior, porturi de transport dacă există, direcție și ambele extremități. Un recenzent poate compara acea propoziție cu o captură de pachete și poate ajunge la un verdict. O instrucțiune de a deschide 47 nu poate fi verificată de nimeni, și de aceea supraviețuiește ani în manualele de proceduri.

Adaugă testul care dovedește asta: conectează-te în timp ce capturezi pe interfața exterioară și confirmă protocolul și portul exterioare care apar efectiv în urmă.

Articole similare