Protokol 47 verzus port TCP 47: dve hlavičky, dve pravidlá
Číslo protokolu a port žijú v rôznych hlavičkách, takže jedno pravidlo nemôže nahradiť druhé. PPTP obe oddeľuje a pole portu nedokáže vyjadriť GRE.
Hotelové siete a konferenčné firewally často ponúkajú vlastné pole povolenia a niekto doň napíše 47 v očakávaní, že PPTP bude fungovať. Pravidlo sa vytvorí, tunel stále zlyháva a ďalší pokus použije iné číslo. Chyba je v samotnom pakete: IPv4 má pole protokolu, ktoré pomenúva, čo nasleduje po hlavičke IP, kým TCP a UDP majú polia portu, ktoré existujú len vtedy, keď ste vnútri jednej z týchto hlavičiek. Nie sú to dva prepisy toho istého povolenia.
Hlavička IPv4 pomenúva nasledujúci protokol
Pole protokolu je v hlavičke IPv4 jeden bajt a obsahuje číslo opisujúce obsah: 6 pre TCP, 17 pre UDP, 47 pre GRE, 50 pre ESP. Všetko, čo filtruje pakety, číta túto hodnotu predtým, než sa pozrie hlbšie, pretože hlbšia hlavička má zmysel až po zistení typu. Zmeňte neskôr v komunikácii port a toto pole sa nepohlo.
Pravidlo napísané proti protokolu 47 teda opisuje vrstvu IP. Žiadny port sa na rozhodnutí nezúčastňuje.
Porty existujú vnútri TCP a UDP, nikde inde
Porty sú šestnásťbitové identifikátory vnútri hlavičiek TCP a UDP a ich úlohou je oddeliť komunikácie, ktoré zdieľajú jednu adresu. Hlavička GRE nesie hodnotu typu protokolu, často EtherType, plus voliteľné kľúče na multiplexovanie. Preto výraz port 47 nepomenúva nič, s čím by sa paket GRE mohol zhodovať.
Rozhrania firewallov sa líšia tým, koľko z toho zobrazujú. Niektoré prijímajú číslo protokolu, iné ponúkajú pomenovaný zoznam a niekoľko ich prijíma len TCP alebo UDP s portmi.
PPTP používa obe vrstvy naraz
PPTP je najjasnejší príklad, pretože svoju prácu zámerne delí medzi obe vrstvy. Riadiace spojenie je relácia TCP na port 1723 a dátová cesta je GRE, protokol 47, bez akéhokoľvek portu. Firewall, ktorý povoľuje 1723 a nič iné, nechá vyjednávanie začať a potom zahodí obsah. Tunel vyzerá, akoby po overení visel, namiesto toho, aby sa nepripojil, a preto sa príznak často hlási ako problém s heslom.
| Path | Outer protocol | Port |
|---|---|---|
| Control channel | TCP, protocol 6 | 1723 |
| Data channel | GRE, protocol 47 | None |
Čítajte oba riadky oddelene, keď píšete pravidlo, a každý overte proti syntaxi výrobcu. Jeden riadok potrebuje port, druhý potrebuje číslo protokolu a žiadna jediná položka nezakrýva oboje.
Prečo stránka na presmerovanie portov nedokáže vyjadriť GRE
Formulár presmerovania, ktorý prijíma iba TCP a UDP, nedokáže opísať GRE, nech sa formulár volá akokoľvek. Preklad adries pridáva druhú ťažkosť, pretože GRE nemá porty a prekladač musí namiesto toho sledovať identifikátor hovoru. Niektoré domáce routery majú pomocníka, ktorý to zvládne; mnohé nie, a žiadna ďalšia položka povolenia TCP také správanie nevytvorí.
Tam, kde je skutočnou požiadavkou moderný tunel, zvoľte návrh, ktorý zámerne používa TCP alebo UDP, namiesto toho, aby ste dúfali, že prekladač uhádne správne.
Zapuzdrenie rozhoduje, čo filter vidí
Zapuzdrenie mení vonkajší paket a pravidlo sa zhoduje práve s vonkajším paketom. Natívne ESP je protokol 50, kým prechod cez NAT zabalí ESP do UDP 4500, aby prežil preklad adries. Filter, ktorý povoľuje UDP 4500, nikdy nevidí protokol 50, a filter napísaný pre protokol 50 nikdy nesedí na zabalenú podobu.
Opýtajte sa, na akom zapuzdrení sa klient a brána dohodli, a potom napíšte pravidlo pre presne ten vonkajší tvar a nič viac.
Napíšte pravidlo tak, aby ho niekto mohol skontrolovať
Vyjadrite každé pravidlo ako rodinu adries, vonkajší protokol, transportné porty, ak nejaké sú, smer a oba koncové body. Recenzent môže túto vetu porovnať so zachytením paketov a dospieť k verdiktu. Pokyn otvoriť 47 nemôže nikto skontrolovať, a práve preto prežíva roky v prevádzkových príručkách.
Pridajte test, ktorý to dokazuje: pripojte sa pri zachytávaní na vonkajšom rozhraní a potvrďte vonkajší protokol a port, ktoré sa v stope skutočne objavia.