O kernel começa com três listas de regras na tabela `filter'; tais listas são denominadas firewall chains ou apenas chains. As três chains chamam-se INPUT, OUTPUT e FORWARD.
Para os fãs de ASCII-art, as chains estão organizadas da seguinte forma: (Nota: é uma organização bem distinta dos kernels 2.0 e 2.2!)
_____ Entrada / \ Saída -->[Decisão de]-->|FORWARD|-------> [Roteamento] \_____/ ^ | | v ____ ___ / \ / \ |OUTPUT| |INPUT| \____/ \___/ ^ | | --> Processamento Local --
Os três "círculos" representam as chains mencionadas acima. Quando o pacote atinge um círculo no diagrama, a chain é examinada a fim de decidir o destino do pacote. Se a chain diz para rejeitar (DROP) o pacote, ele é descartado, mas se a chain diz para aceitar o pacote (ACCEPT), ele continua a viajar no diagrama.
Uma chain é uma lista de regras. Cada regra diz `se o cabeçalho do pacote se parece com isso, então aqui está o que deve ser feito com o pacote'. Se a regra não associa-se com o pacote, então a próxima regra na chain é consultada. Se não há mais regras a consultar, o kernel analiza a política da chain para decidir o que fazer. Em um sistema preocupado com segurança, a política diz ao kernel para rejeitar (DROP) o pacote.