Protocollo 47 contro porta TCP 47: due intestazioni, due regole
Un numero di protocollo e una porta vivono in intestazioni diverse, quindi una regola non può sostituire l'altra. PPTP separa le due cose, e una casella porta non può esprimere GRE.
Le reti degli hotel e i firewall delle conferenze mostrano spesso una casella di autorizzazione personalizzata, e qualcuno vi digita 47 sperando che PPTP funzioni. La regola viene creata, il tunnel fallisce comunque, e il tentativo successivo usa un numero diverso. L'errore sta nel pacchetto stesso: IPv4 ha un campo di protocollo che nomina ciò che segue l'intestazione IP, mentre TCP e UDP hanno campi di porta che esistono solo quando sei dentro una di quelle intestazioni. Non sono due grafie dello stesso permesso.
L'intestazione IPv4 nomina il protocollo successivo
Il campo di protocollo è un byte nell'intestazione IPv4, e contiene un numero che descrive il carico utile: 6 per TCP, 17 per UDP, 47 per GRE, 50 per ESP. Tutto ciò che filtra pacchetti legge quel valore prima di guardare più a fondo, perché l'intestazione più interna ha senso solo una volta noto il tipo. Cambia una porta più avanti nella conversazione, e questo campo non si è mosso.
Una regola scritta contro il protocollo 47 descrive quindi il livello IP. Nessuna porta partecipa alla decisione.
Le porte esistono dentro TCP e UDP, da nessun'altra parte
Le porte sono identificatori di sedici bit dentro le intestazioni TCP e UDP, e il loro compito è separare conversazioni che condividono un indirizzo. Un'intestazione GRE porta un valore di tipo di protocollo, spesso un EtherType, più chiavi opzionali per il multiplexing. Perciò l'espressione porta 47 non nomina nulla con cui un pacchetto GRE possa corrispondere.
Le interfacce dei firewall differiscono in quanto di tutto ciò espongono. Alcune accettano un numero di protocollo, altre offrono un elenco con nomi, e poche accettano solo TCP o UDP con porte.
PPTP usa entrambi i livelli insieme
PPTP è l'esempio più chiaro perché divide deliberatamente il suo lavoro tra i due. La connessione di controllo è una sessione TCP verso la porta 1723, e il percorso dati è GRE, protocollo 47, senza alcuna porta coinvolta. Un firewall che consente 1723 e nulla altro lascia iniziare la negoziazione e poi scarta il carico utile. Il tunnel sembra bloccarsi dopo l'autenticazione invece di non riuscire a connettersi, ed è per questo che il sintomo viene spesso segnalato come problema di password.
| Path | Outer protocol | Port |
|---|---|---|
| Control channel | TCP, protocol 6 | 1723 |
| Data channel | GRE, protocol 47 | None |
Leggi le due righe separatamente quando scrivi la regola, e controlla ciascuna rispetto alla sintassi del fornitore. Una riga richiede una porta, l'altra richiede un numero di protocollo, e nessuna singola voce copre entrambe.
Perché una pagina di inoltro porte non può esprimere GRE
Un modulo di inoltro che accetta solo TCP e UDP non può descrivere GRE, qualunque sia il nome del modulo. La traduzione degli indirizzi aggiunge una seconda difficoltà, perché GRE non ha porte e il traduttore deve seguire invece l'identificatore di chiamata. Alcuni router domestici includono un assistente che lo gestisce; molti no, e nessuna voce di autorizzazione TCP aggiuntiva creerà quel comportamento.
Dove un tunnel moderno è il requisito reale, scegli un progetto che usi deliberatamente TCP o UDP anziché sperare che un traduttore indovini correttamente.
L'incapsulamento decide cosa vede il filtro
L'incapsulamento cambia il pacchetto esterno, e il pacchetto esterno è ciò a cui una regola corrisponde. ESP nativo è il protocollo 50, mentre il transito NAT avvolge ESP dentro UDP 4500 perché sopravviva alla traduzione degli indirizzi. Un filtro che consente UDP 4500 non vede mai il protocollo 50, e un filtro scritto per il protocollo 50 non corrisponde mai alla forma incapsulata.
Chiedi su quale incapsulamento client e gateway si sono accordati, poi scrivi la regola per quella forma esterna e nulla di più.
Scrivi la regola in modo che qualcuno possa verificarla
Esprimi ogni regola come famiglia di indirizzi, protocollo esterno, porte di trasporto se presenti, direzione ed entrambi gli estremi. Un revisore può confrontare quella frase con una cattura di pacchetti e giungere a un verdetto. Un'istruzione ad aprire 47 non può essere verificata da nessuno, ed è così che sopravvive per anni nelle procedure.
Aggiungi il test che lo dimostra: connettiti mentre catturi sull'interfaccia esterna, e conferma il protocollo esterno e la porta che compaiono davvero nella traccia.