O kernel começa com tres listas de regras na tabela `filter'. Estas listas são chamadas de firwall chains (cadeias de firewall), ou só cadeias. As três cadeias são chamadas INPUT, OUTPUT e FORWARD (entrada, saída e repasse, respectivamente).
Para os fãs de ASCII-art, as cadeias são arranjadas assim: (Nota: este é um arranjo bastante diferente dos kernels 2.0 e 2.2!)
_____ Entrando / \ Saindo -->[Decisão de]-->|FORWARD|-----> [Roteamento] \_____/ ^ | | v ____ ___ / \ / \ |OUTPUT| |INPUT| \____/ \___/ ^ | | ---> Processo Local ---
Os três círculos representam as três cadeias mencionadas acima. Quando um pacote atinge um círculo no diagrama, aquela cadeia é examinada para determinar o destino do pacote. Se a cadeia disser para descartar (DROP) o pacote, ele é morto ali, mas se a cadeia disser para aceitar (ACCEPT) o pacote, então ele continua no diagrama.
Uma cadeia é uma lista de regras. Cada regra diz `se o cabeçalho do pacote se parecer com isto, então é isto o que você deve fazer com o pacote'. Se a regra não combinar com o pacote, então a próxima regra na cadeia é consultada. Finalmente, se não houver mais nenhuma regra a consultar, então o kernel examina a cadeia policy (política) para deicidir o que fazer. Em um sistema seguro, esta política geralmente diz ao kernel para descartar (DROP) o pacote.