Я управляю несколькими хостами, которые полагаются на 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
аргумент.