Использование собственных цепочек обработки трафика (Custom Chain)
В прошлых частях статьи мы ознакомились с базовыми настройками файрволла, из которых мы, в том числе, узнали, что межсетевой экран маршрутизатора последовательно проверяет пакет на соответствие правилам фильтрации сверху-вниз. Проверка прекращается в тот момент, когда пакет будет либо пропущен на следующий этап обработки трафика (Action=Accept), либо прохождение пакета будет запрещено (Action=reject,drop,tarpit).
Таким образом, если мы представим себе файрволл, состоящий из 25 правил, то выглядеть это будет следующим образом:
При этом, если пакет соответствует только правилу номер 25, он все равно будет проверен на соответствие правилам с номера 1 по номер 24, на что будут потрачены ресурсы маршрутизатора.
Ситуация осложняется тем, что есть «очень дорогие», с точки зрения процессорного времени, правила фильтрации. В этих случаях приходит на выручку возможность писать собственные цепочки (Chain) обработки правила.
Если вы когда-либо занимались программированием, то собственная цепочка очень похожа на процедуру, вызов которой осуществляется указанием в поле Action команды Jump с именем цепочки, возврат же происходит на следующее правило за вызовом цепочки, по окончании обработки трафика в цепочке, либо если в каком-либо правиле собственной цепочки было использовано Action=Return, что прервало дальнейшую обработку цепочки.
Все три сети LAN-WAN-DMZ загоняются в адрес лист "LAN-WAN-DMZ Net" и в фильтре пишется ровно одно правило jump, в котором указано, что весь трафик с Src.Addr.list "LAN-WAN-DMZ Net" to Dst.Addr.List "LAN-WAN-DMZ Net" отправляются обрабатываться в другую цепочку, и на выходе у нас 1 правило, а не 6. И самое приятное, что такое правило так же остается ровно одним даже если сетей будет 10+.