Um firewall pode inicialmente ser classificado em dois tipos básicos,
filtros de aplicação e
filtro de pacotes.
Filtro de pacotes tem condições de filtrar baseado unicamente no conteúdo de seus cabeçalhos. Apesar do iptables permitir filtragem por contexto, ainda assim ele é considerado um filtro de pacotes.
Já o Squid, por exemplo, é considerado um filtro de aplicação. Ele (Squid) tem conhecimento para analisar não apenas os cabeçalhos mas também o conteúdo de um pacote do tipo HTTP e aplicar regras de bloqueio baseado em textos (strings) contidas dentro dele. O Squid entende uma requisição HTTP, sabe o que é um GET e um POST, assim como todos os campos e dados de uma sessão HTTP. Trata-se, portanto, de um filtro de aplicação. Mesmo o iptables podendo filtrar baseado em strings, não chega nem perto do que um Squid pode fazer.
Tipicamente, determina-se como filtro de pacotes um firewall que trabalha apenas nos níveis de Rede e Transporte do modelo TCP/IP (Figura 1). Este modelo ainda conta com o nível físico, que não faz parte da pilha pois é hardware (a pilha TCP/IP tipicamente representa apenas software, tarefas que o sistema operacional deve implementar).
Resumidamente, no nível de Enlace tem-se, por exemplo, o Ethernet, onde o endereçamento é realizado através de uma informação de 48 bits conhecida como MAC ADDRESS, ou endereço de hardware (o campo Hwaddr fornecido por um ifconfig).
No nível de rede tem-se o roteamento, sendo o protocolo IPv4 o mais usado, apesar da existência da versão 6 que ainda não se popularizou. Já no nível de transporte tem-se o UDP e TCP como principais protocolos e na aplicação os programas e aplicações, como o Apache e Firefox.
Trabalhar no nível de rede significa que um filtro de pacotes pode analisar o cabeçalho deste, como IP de destino e IP de origem, enquanto que trabalhar no nível de transporte significa que pode filtrar por protocolo (UDP, TCP), porta de origem e de destino.
O iptables, mesmo sendo um filtro de pacotes, vai um pouco além disto, permitindo filtrar no nível de Enlace (MAC placa de rede) e até mesmo na aplicação. O pessoal do BSD critica muito esta postura do iptables de ser um, quase, canivete suíço que faz tudo, até o que não deveria ser, conceitualmente, tarefa de um filtro de pacotes.