Ты должен разобраться как работает фаервол. Случайно подобрать правила не получится. Надо вникнуть. самое непонятное это
recv. Сейчас объясню для чего оно используется.
Дело в том, что есть некоторые сложности в сборе трафика. Допустим у нас есть 3 интерфейса. трафик может бегать между ними тремя в разных направлениях. Куда нам поставить коллектор чтобы зафиксировать его, не теряя ничего? Если фиксировать на каждом интерфейсе, то трафик может быть засчитан дважды: на входящем и на исходящем интерфейсе.
Поэтому в nodeny принята такая схема: коллектор слушает 2 порта (divert 1 и divert 2). То, что попадает в порт №1 - считается исходящим трафиком клиента, №2 - входящим.
Следовательно вся суть заключается в посылке в нужный порт нужных данных.
Рассмотрим стандартный фаервол, который идет вместе с nodeny. Там есть такой кусок кода:
${f} add 400 skipto 450 ip from any to any recv ${ifOut}
${f} add 420 divert 1 ip from any to any
${f} add 450 divert 2 ip from any to any
${f} add 490 allow ip from any to any
правило 400 дословно переводится так: если пакет пришел с внешнего интерфейса, то перейти на строку 450. Обратите внимание, что
пришел с интерфейса.
via ${ifOut} и recv ${ifOut} совершенно разные вещи. Т.е пакет может быть отловлен на внутреннем интерфейсе, но будет известно, что он пришел с внешнего интерфейса.
В данном примере (в стандартном фаере nodeny) любой пакет пришедший на 400 правило уже гарантированно покидает внутренний интерфейс, т.е направлен клиенту. Поэтому можно было бы просто написать:
${f} add 400 divert 2 ip from any to any
т.е указание начислить трафик клиенту, на которого идет пакет. Почему же там 2 divert-а? А только потому, что если внутренних интерфейсов несколько, то нужно не только начислять этот трафик клиенту, на который идет пакет, но и как исходящий трафик клиенту, к которому идет пакет.
Сложно объяснил?) Наверное да, проще не получается.