Protocolul 47 versus portul TCP 47: două antete, două reguli
Un număr de protocol și un port trăiesc în antete diferite, așa că o regulă nu o poate înlocui pe cealaltă. PPTP le separă pe cele două, iar o casetă de port nu poate exprima GRE.
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ă.
| Path | Outer protocol | Port |
|---|---|---|
| Control channel | TCP, protocol 6 | 1723 |
| Data channel | GRE, protocol 47 | None |
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ă.