В прошлых частях статьи мы ознакомились с базовыми настройками файрволла, из которых мы, в том числе, узнали, что межсетевой экран маршрутизатора последовательно проверяет пакет на соответствие правилам фильтрации сверху-вниз. Проверка прекращается в тот момент, когда пакет будет либо пропущен на следующий этап обработки трафика (Action=Accept), либо прохождение пакета будет запрещено (Action=reject,drop,tarpit).
Таким образом, если мы представим себе файрволл, состоящий из 25 правил, то выглядеть это будет следующим образом:
При этом, если пакет соответствует только правилу номер 25, он все равно будет проверен на соответствие правилам с номера 1 по номер 24, на что будут потрачены ресурсы маршрутизатора.
Ситуация осложняется тем, что есть «очень дорогие», с точки зрения процессорного времени, правила фильтрации. В этих случаях приходит на выручку возможность писать собственные цепочки (Chain) обработки правила.
Если вы когда-либо занимались программированием, то собственная цепочка очень похожа на процедуру, вызов которой осуществляется указанием в поле Action команды Jump с именем цепочки, возврат же происходит на следующее правило за вызовом цепочки, по окончании обработки трафика в цепочке, либо если в каком-либо правиле собственной цепочки было использовано Action=Return, что прервало дальнейшую обработку цепочки.