Първоначално в ядрото има три списъка от правила във `filter' таблицата; тези списъци се наричат вериги с правила за филтриране (firewall chains) или просто вериги (chains). Тези три вериги се наричат INPUT (вход), OUTPUT (изход) и FORWARD (препращане).
За феновете на ASCII арта, веригите са подредени ето така: (Забележка: подреждането е доста по различно от това при ядра весрии 2.0 и 2.2 !)
_____
входящи / \ изходящи
-->[рутинг ]---> |FORWARD|------->
[решение] \_____/ ^
| |
v ____
___ / \
/ \ |OUTPUT|
|INPUT| \____/
\___/ ^
| |
----> локален процес ----
Трите кръга представляват веригите за които се спомена по-горе. Когато един пакет достигне до някой от кръговете на диаграмата се проверяват правилата в тази верига и се решава съдбата на пакета. Ако веригата каже пакета да бъде отхвърлен (DROP), то той бива заличен веднага, но ако решението е той да бъде приет (ACCEPT) пакета продължава пътя си по диаграмата.
Веригата е списък от правила. Всяко правило гласи `ако заглавната част на пакета изглежда така, то направи с този пакет ето това'. Ако пакетът не отговаря на изискванията в това правило, то се преминава към следващото във веригата. И накрая, ако няма повече правила с които да се сравни пакета ядрото решава съдбата му съгласно политиката (policy) на веригата. Обикновено, ако в една система се държи на сигурността, то политиката казва на ядрото да откаже пакета.