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 firewall-i često prikazuju posebno polje za dozvolu, i neko u njega upiše 47 očekujući da će PPTP raditi. Pravilo se kreira, tunel i dalje ne uspijeva, a sljedeći pokušaj koristi drugi broj. Greška je u samom paketu: IPv4 ima polje protokola koje imenuje šta slijedi nakon IP zaglavlja, dok TCP i UDP imaju polja porta koja postoje samo kad ste unutar jednog od tih zaglavlja. To nisu dva pisanja iste dozvole.
IPv4 zaglavlje imenuje sljedeći protokol
Polje protokola je jedan 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 polje se nije pomjerilo.
Pravilo napisano protiv protokola 47 stoga opisuje IP sloj. Nijedan port uopšte ne učestvuje u odluci.
Portovi postoje unutar TCP i UDP, nigdje drugdje
Portovi su šesnaestobitni identifikatori unutar TCP i UDP zaglavlja, a njihov posao je da razdvoje razgovore koji dijele jednu adresu. GRE zaglavlje nosi vrijednost tipa protokola, često EtherType, plus opcionalne ključeve za multipleksiranje. Zato izraz port 47 ne imenuje ništa s čime bi se GRE paket mogao poklopiti.
Firewall sučelja se razlikuju po tome koliko toga otkrivaju. Neki prihvataju broj protokola, neki nude imenovanu listu, a rijetki prihvataju samo TCP ili UDP s portovima.
PPTP koristi oba sloja istovremeno
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 ikakvog porta. Firewall koji dozvoljava 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 reda odvojeno kad pišete pravilo i provjerite svaki prema sintaksi proizvođača. Jedan red zahtijeva port, drugi zahtijeva broj protokola, i nijedan jedini unos ne pokriva oboje.
Zašto stranica za prosljeđivanje portova ne može izraziti GRE
Obrazac za prosljeđivanje koji prihvata 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 prevodilac 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 dozvole neće stvoriti takvo ponašanje.
Tamo gdje je savremeni tunel stvarni zahtjev, odaberite dizajn koji namjerno koristi TCP ili UDP umjesto da se nadate da će prevodilac tačno pogoditi.
Enkapsulacija odlučuje šta filter vidi
Enkapsulacija mijenja vanjski paket, a vanjski paket je ono s čime se pravilo poklapa. Izvorni ESP je protokol 50, dok NAT prolaz umotava ESP unutar UDP 4500 da bi preživio prevođenje adresa. Filter koji dozvoljava UDP 4500 nikada ne vidi protokol 50, a filter napisan za protokol 50 nikada se ne poklapa 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 neko može provjeriti
Izrazite svako pravilo kao porodicu adresa, vanjski protokol, transportne portove ako ih ima, smjer i oba kraja. Recenzent može uporediti tu rečenicu sa snimkom paketa i doći do presude. Uputu da se otvori 47 niko 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 interfejsu i potvrdite vanjski protokol i port koji se stvarno pojavljuju u tragu.