Il packet filtering è uno dei metodi più comuni per creare un firewall. Questa tecnica permette di controllare l'ingresso/uscita dei pacchetti IP. Analizzando tali pacchetti esso riesce ad ottenere informazioni fino a livello di trasporto (il payload del pacchetto IP contiene il segmento a livello di trasporto, da cui possono essere analizzati gli header per prendere decisioni anche in base alle porte specificate nel livello di trasporto), tuttavia questo risulta essere anche un limite per questo tipo di firewall poiché non è in grado di ottenere maggiori informazioni dal pacchetto IP, per esempio un packet filter non è in grado di interpretare informazioni relativi al livello di applicazione. Un router che implementa la funzione di filtraggio di pacchetti è anche chiamato screening router.
Il packet filtering filtra i pacchetti IP sulla base di un insieme di regole che viene definito in corrispondenza di un router o di un altro dispositivo per l'inoltro dei pacchetti.
Si possono implementare delle regole di packet filtering per una combinazione tra: indirizzo host sorgente, protocollo (TCP, UDP, ...), applicazione (porta), indirizzo host di destinazione e tipo di pacchetto (ACK, SYN).
È opportuno impostare le proprie politiche e regole di packet filtering sulla base di due linee guida.
Il packet filtering si basa sull'esame dell'header di un pacchetto IP. L'header contiene:
Il packet filtering si può basare su uno oppure su tutti questi campi. Usando l'indirizzo sorgente o quello di destinazione, è per esempio possibile bloccare tutti i pacchetti provenienti da un indirizzo o un insieme di indirizzi, oppure instradare verso un insieme di indirizzi i pacchetti che si è deciso di lasciar entrare.
Un tradizionale firewall a filtraggio di pacchetti, come abbiamo detto, prende decisioni sui pacchetti singoli e non tenendo conto di informazioni del livello più alto (livello di applicazione). Per comprendere meglio perché un normale firewall packet filter è limitato dobbiamo chiarire alcuni aspetti. La maggior parte delle applicazioni standard che girano su TCP seguono un architettura client-server. Per esempio SMTP (Simple Mail Transfer Protocol) le email sono inviate da un client ad un server. Il client genera una nuova mail, tipicamente a partire dall'input inviato da un utente. Il server accetta le nuove email ricevute in entrata e li posiziona nell'appropriata cartella mail dell'utente destinatario. SMTP opera impostando una connessione TCP tra il client e il server, in cui il numero di porta del server, che identifica SMTP lato server è 25. Il numero di porta per SMTP lato client è un numero di porta compreso tra 1024 e 65536 ed è generato dal client SMTP.
In generale, quando una applicazione che usa TCP crea una sessione con un host remoto, crea una connessione TCP in cui il numero di porta per l'applicazione server è un numero inferiore a 1024 e il numero di porta TCP per l'applicazione client è un numero compreso tra 1024 e 65536. I numeri di porta inferiori a 1024 sono numeri di porta ben noti (well known) e sono assegnati ad servizi specifici: