Le noyau contient à la base trois listes de règles dans la table `filter'; ces listes sont appelées chaînes de pare-feu ou simplement chaînes. Les trois chaînes sont nommées INPUT, OUTPUT et FORWARD.
Pour les fans de l'art ASCII, les chaînes sont arrangées comme suit : (Note : c'est un agencement très différent des noyaux 2.0 et 2.2 !)
_____ Entrée / \ Sortie --> [Décision] ---->|FORWARD|-----> [de routage] \_____/ ^ | | v ____ ___ / \ / \ |OUTPUT| |INPUT| \____/ \___/ ^ | | ---> Processus local ---
Les trois cercles représentent les trois chaînes mentionnées ci-dessus. Lorsqu'un paquet atteint un cercle dans le diagramme, cette chaîne est examinée pour décider du sort du paquet. Si la chaîne stipule de DÉTRUIRE (`DROP') le paquet, il est supprimé ici, mais si la chaîne stipule d'ACCEPTER (`ACCEPT') le paquet, il continue sa route dans le diagramme.
Une chaîne est un liste de vérification de règles. Chaque règle énonce `si l'en-tête du paquet est comme ceci, voilà ce qu'il convient de faire du paquet'. Si une règle ne concorde pas avec le paquet, alors la règle suivante est examinée. Finalement, s'il ne reste plus de chaînes à examiner, le noyau consulte la règle par défaut de la chaîne pour prendre une décision. Dans un système sécuritaire et consciencieux, cette politique par défaut devrait DÉTRUIRE le paquet.