Se blocchi tutte le connessioni in entrata, come puoi continuare a utilizzare Internet?


22

Se il tuo ISP o firewall sta bloccando tutte le connessioni in entrata, come possono i server Web inviarti comunque i dati al tuo browser? Si invia la richiesta (in uscita) e il server invia i dati (in entrata). Se blocchi tutto l'arrivo, come può rispondere il web server?

Che dire di streaming video e giochi multiplayer, dove utilizza UDP? UDP è senza connessione, quindi non è possibile stabilire alcuna connessione, quindi come lo gestirà il firewall o l'ISP?


2
Bloccare tutte le chiamate in arrivo / Inoltrare tutte le chiamate in arrivo alla segreteria telefonica? Non ti impedisce di chiamare qualcuno.
WernerCD,

Risposte:


43

"Blocco in entrata" significa che le nuove connessioni in entrata sono bloccate, ma è consentito il traffico stabilito . Quindi, se sono consentite nuove connessioni in uscita , la metà in arrivo di quella conversazione va bene.

Il firewall lo gestisce monitorando lo stato delle connessioni (tale firewall viene spesso chiamato "firewall stateful"). Vede il TCP SYN in uscita e lo consente. Rileva un SYN / ACK in entrata e può verificare che corrisponda al SYN in uscita che ha visto, lo lascia passare e così via. Se consente una stretta di mano a tre vie (ad esempio, è consentito secondo le regole del firewall), consentirà quella conversazione. E quando vedrà la fine di quella conversazione (FIN o RST) toglierà quella connessione dall'elenco dei pacchetti per consentire.

UDP è fatto in modo simile, sebbene coinvolga il firewall a ricordare abbastanza per fingere che UDP abbia una connessione o sessione (cosa che UDP non ha).


1
Per UDP, poiché non esiste una connessione effettiva, il firewall in genere monitora l'IP e la porta di destinazione dei pacchetti UDP in uscita e se esiste un pacchetto in entrata con lo stesso IP e la stessa porta di origine, supporrà che sia una risposta e lo lasci in.
WhiteWinterWolf

17

@gowenfawr ha l'immagine di alto livello in basso. Tuttavia, ho pensato di aggiungere alcuni dettagli su come viene eseguita la "corrispondenza" per il tracciamento della connessione, in quanto potrebbe sembrare magico per i non iniziati.

Ogni connessione TCP ha un numero di porta per ogni lato. Come molti tecnici sanno, i server HTTP funzionano sulla porta 80. Quando il browser si connette a un server Web, chiederà al sistema operativo di generare un numero di porta "locale", che sarà qualcosa di casuale come 29672 che non viene utilizzato da nessun altro Connessione TCP da quel computer (e il sistema operativo può farlo perché è a conoscenza di tutte le connessioni TCP attive). Quindi un pacchetto di configurazione TCP iniziale verrà inviato dall'ip della tua macchina (IP_YOURS) e dal numero di porta 29672 all'ip del server web (IP_WEBSERVER) e al numero di porta 80. A quel punto, il firewall stateful indicherà "aha, pacchetti futuri dalla porta IP_WEBSERVER 80 che va alla porta 29672 di IP_YOURS non sono nuove connessioni, sono risposte a una connessione esistente e devono essere consentite ". I firewall con stato mantengono un tavolo,


3
Questo è per lo più corretto, ma, come coppia di punti minori, i numeri di porta si fermano a 65535 (sono numeri senza segno a 16 bit) e, oltre al timeout, i pacchetti con flag FIN o RST impostati possono anche segnalare che un TCP la connessione è ora chiusa.
reirab

@reirab Oh whoops, sì, il numero di porta fallisce. In conclusione, sarebbe ovviamente possibile ispezionare i flag TCP, ma dover tenere conto della possibile perdita di pacchetti e ritrasmissione di sequenze ravvicinate è abbastanza complicato che suppongo che la maggior parte dei firewall riproponga semplicemente la voce della tabella utilizzata meno di recente invece di mantenere tracciare con precisione.

@atsby Puoi sempre modificare il tuo post e sostituire i numeri di porta con qualcosa di più adatto?

Tutte queste sono ottime informazioni. Volevo solo aggiungere una cosa alle porte discusse dai commenti sopra. Sono chiamati "porte effimere" e il loro intervallo è definito dal kernel specifico per ciascun sistema operativo. Su Linux puoi ottenerli tramite "cat / proc / sys / net / ipv4 / ip_local_port_range" --- l'intervallo predefinito è "32768 a 61000"
Arul Selvan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.