Protokol 47 nasuprot TCP portu 47: dva zaglavlja, dva pravila
Broj protokola i port žive u različitim zaglavljima, pa jedno pravilo ne može zamijeniti drugo. PPTP razdvaja to dvoje, a polje za port ne može izraziti GRE.
Hotelske mreže i konferencijski vatrozidi često prikazuju posebno polje za dopuštenje, i netko u njega upiše 47 očekujući da će PPTP raditi. Pravilo se stvara, tunel i dalje ne uspijeva, a sljedeći pokušaj koristi drugi broj. Pogreška je u samom paketu: IPv4 ima polje protokola koje imenuje što slijedi nakon IP zaglavlja, dok TCP i UDP imaju polja porta koja postoje samo kad ste unutar jednog od tih zaglavlja. To nisu dva zapisa iste dozvole.
IPv4 zaglavlje imenuje sljedeći protokol
Polje protokola jedan je bajt u IPv4 zaglavlju i sadrži broj koji opisuje korisni teret: 6 za TCP, 17 za UDP, 47 za GRE, 50 za ESP. Sve što filtrira pakete čita tu vrijednost prije nego pogleda dublje, jer dublje zaglavlje ima smisla tek kad je tip poznat. Promijenite port kasnije u razgovoru, a ovo se polje nije pomaknulo.
Pravilo napisano protiv protokola 47 stoga opisuje IP sloj. Nijedan port uopće ne sudjeluje u odluci.
Portovi postoje unutar TCP i UDP, nigdje drugdje
Portovi su šesnaestobitni identifikatori unutar TCP i UDP zaglavlja, a njihov je posao razdvojiti razgovore koji dijele jednu adresu. GRE zaglavlje nosi vrijednost tipa protokola, često EtherType, plus neobavezne ključeve za multipleksiranje. Zato izraz port 47 ne imenuje ništa s čime bi se GRE paket mogao podudarati.
Sučelja vatrozida razlikuju se po tome koliko toga otkrivaju. Neki prihvaćaju broj protokola, neki nude imenovani popis, a rijetki prihvaćaju samo TCP ili UDP s portovima.
PPTP koristi oba sloja istodobno
PPTP je najjasniji primjer jer namjerno dijeli svoj posao na dva sloja. Kontrolna veza je TCP sesija prema portu 1723, a putanja podataka je GRE, protokol 47, bez ikakva porta. Vatrozid koji dopušta 1723 i ništa drugo pušta pregovore da počnu, a zatim odbacuje korisni teret. Tunel izgleda kao da visi nakon autentifikacije umjesto da se ne uspije povezati, i zato se simptom često prijavljuje kao problem s lozinkom.
| Path | Outer protocol | Port |
|---|---|---|
| Control channel | TCP, protocol 6 | 1723 |
| Data channel | GRE, protocol 47 | None |
Čitajte dva retka odvojeno kad pišete pravilo i provjerite svaki prema sintaksi proizvođača. Jedan redak zahtijeva port, drugi zahtijeva broj protokola, i nijedan pojedinačni unos ne pokriva oboje.
Zašto stranica za prosljeđivanje portova ne može izraziti GRE
Obrazac za prosljeđivanje koji prihvaća samo TCP i UDP ne može opisati GRE, kako god se obrazac zvao. Prevođenje adresa dodaje drugu poteškoću, jer GRE nema portove i prevoditelj mora umjesto toga pratiti identifikator poziva. Neki kućni routeri dolaze s pomoćnikom koji to rješava; mnogi ne dolaze, i nijedan dodatni TCP unos dopuštenja neće stvoriti takvo ponašanje.
Tamo gdje je suvremeni tunel stvarni zahtjev, odaberite dizajn koji namjerno koristi TCP ili UDP umjesto da se nadate da će prevoditelj točno pogoditi.
Enkapsulacija odlučuje što filtar vidi
Enkapsulacija mijenja vanjski paket, a vanjski paket je ono s čime se pravilo podudara. Izvorni ESP je protokol 50, dok NAT prolaz umata ESP unutar UDP 4500 da bi preživio prevođenje adresa. Filtar koji dopušta UDP 4500 nikada ne vidi protokol 50, a filtar napisan za protokol 50 nikada se ne podudara s umotanim oblikom.
Pitajte na kojoj su se enkapsulaciji klijent i gateway dogovorili, pa napišite pravilo za taj vanjski oblik i ništa više.
Napišite pravilo tako da ga netko može provjeriti
Izrazite svako pravilo kao obitelj adresa, vanjski protokol, transportne portove ako ih ima, smjer i oba kraja. Recenzent može usporediti tu rečenicu sa snimkom paketa i doći do presude. Uputu da se otvori 47 nitko ne može provjeriti, i zato ona godinama preživljava u priručnicima.
Dodajte test koji to dokazuje: povežite se dok snimate na vanjskom sučelju i potvrdite vanjski protokol i port koji se stvarno pojavljuju u tragu.