Назад | Перейти на главную страницу

nft vs iptables: вставка правила в начало цепочки на нескольких хостах

Я управляю несколькими хостами, которые полагаются на nft для управления брандмауэром. Мне нужно вставить правило вверху INPUT цепи на этих хостах. Под iptables, это будет так же просто, как запустить на каждом хосте:

iptables -I INPUT 1 ...

Но nft полагается на "ручки" для вставить правило в заданную позицию, что нормально при работе на одном хосте, но усложняет процесс при управлении несколькими хостами, потому что нет гарантии, что обрабатывает совпадение между хостами.

Например, прямо сейчас, в начале INPUT цепочка на двух разных хостах, у меня на одном хосте:

        chain INPUT { # handle 1
                type filter hook input priority 0; policy accept;
                iifname "ovn-k8s-gw0"  counter packets 977422 bytes 167040650 accept # handle 11

А с другой:

        chain INPUT { # handle 1
                type filter hook input priority 0; policy accept;
                iifname "ovn-k8s-gw0"  counter packets 55820 bytes 6735009 accept # handle 12

Обратите внимание, что первое правило на одном хосте - дескриптор 11 а с другой стороны 12.

Думаю, я мог бы разобраться с первым правилом с помощью чего-то вроде ...

nft list chain filter INPUT -n -a | sed -n 4p | awk '{print $NF}'

... но это плохо пахнет. Есть ли способ проинструктировать nft вставить правило по абсолютной позиции, а не по дескриптору?

Это оказалось проще, чем я думал.

В nft insert rule команда по умолчанию вставит правило в начало цепочки, если нет position аргумент.