La risposta breve
Di solito è necessario solo il tracciamento della connessione per le connessioni in uscita. Se qualsiasi dispositivo locale effettua una connessione a Internet, il firewall registra che questo specifico IP e porta hanno tentato di stabilire una connessione con l'altro IP e la porta.
Così, quando arriva la risposta da Internet, il firewall sa di lasciarlo passare, perché ha già visto un pacchetto in uscita.
Se non è stato eseguito il tracciamento della connessione, è necessario inserire regole esplicite in base a dove o da dove può viaggiare un pacchetto (ad esempio, consentire tutti i pacchetti dalla porta 80 di google.com). È facile vedere che questo renderebbe le regole del firewall piuttosto complicate.
La risposta lunga
Esistono solo sottili differenze tra le due soluzioni se utilizzate per le connessioni in entrata. Una differenza è su quale sistema si verifica il carico della CPU dei pacchetti di controllo. Se hai un computer / router / firewall dedicato (chiamato firewall da qui in poi), facendo questo, con il tracciamento della connessione abilitato, questo dispositivo controllerà almeno la plausibilità di un pacchetto. Ciò libererà il server delle applicazioni (il server che riceve i pacchetti) dal farlo.
La plausibilità si riferisce al fatto che il pacchetto proviene dall'host atteso e dalla porta prevista nel caso di UDP, e inoltre dal numero di sequenza nel caso di TCP.
Solitamente la validazione può avvenire solo all'interno del livello dell'applicazione, poiché la validità può essere garantita solo in base al protocollo nell'applicazione stessa.
Ci sono tre conseguenze da questi presupposti:
- Il carico della CPU e della rete viene spostato verso il "bordo" della rete nel caso di rilevamento dello stato. Ciò significa che il primo dispositivo (di solito) sulla rete eseguirà alcuni controlli di base del pacchetto, prima di inoltrarlo nella rete locale, mantenendo così la rete interna pulita e il carico sul firewall.
- Il server delle applicazioni dovrà solo preoccuparsi se il pacchetto è valido, cioè se i dati all'interno del pacchetto sono conformi al protocollo previsto.
- Ciò potrebbe aprire la possibilità di superare una connessione UDP, a seconda del protocollo. Se l'applicazione non ha (o non è affidabile) il modo di autenticare il mittente di un pacchetto, accetterà il carico utile corretto da qualsiasi indirizzo IP. Ad esempio in una trasmissione di dati sarebbe possibile inviare rifiuti al destinatario, se il pacchetto UDP supera la convalida.
Ciononostante la pratica comune (a meno che non sia in ambienti ad alta sicurezza) consiste nell'utilizzare il tracciamento della connessione (generale) solo per le connessioni in uscita, in modo da non dover consentire esplicitamente ad ogni server Internet di rispondere ad una richiesta dalla rete locale. Nel caso di connessioni in ingresso, in genere si consente solo di accedere alla porta (definita) (-A INPUT -p tcp -dip 80 -j ACCEPT). Ciò si applicherebbe alle nuove connessioni, ma si applicherebbe anche alle connessioni esistenti, evitando il sovraccarico, per tenere traccia della connessione. Analogamente, si inoltrano i pacchetti solo a una porta di destinazione specifica a un server delle applicazioni all'interno della rete locale.
tracciamento della connessione specifico per l'applicazione
C'è un caso che non ho menzionato ancora e questo è il tracciamento della connessione specifico per l'applicazione. Per alcuni protocolli (ftp, irc, tftp, amanda, sip e possibilmente altri, vedi link per esempio) potrebbero esserci speciali moduli iptables per consentire il tracciamento avanzato della connessione. Ad esempio in FTP, si aprirà una connessione dal client al server sulla porta 21, chiamata connessione di controllo, che dovrebbe essere aperta nel firewall con mezzi normali. All'interno di questo canale, il client e il server definiscono quindi una seconda connessione in cui verranno inviati i dati del file non elaborato. Di solito questa connessione viene stabilita dal server al client (in modalità ATTIVA). Questa porta locale e remota sono apparentemente casuali, quindi non possono essere definiti in un file di configurazione del firewall statico. Se ci fosse un firewall con iptables sulla rete del client, si negherebbe questa connessione, perché non esiste una precedente associazione. Con il tracciamento della connessione specifico per l'applicazione, il modulo guarderebbe "dentro" il contenuto del pacchetto per vedere se tale accordo è stato fatto e il firewall consentirebbe una nuova connessione in entrata sulla porta concordata, anche se prima non vi era alcuna connessione.