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

Изменить политику с помощью nftables в командной строке

С помощью iptables я могу изменить, например, политику INPUT с помощью iptables -P INPUT DROP уронить. Есть ли возможность сделать то же самое с nft?

Редактирование /etc/nftables.conf конечно будет работать, но я не этого хочу.

Да, вы можете переопределить политику уже существующей базовой цепочки, не изменяя ее содержание. Для этого нет отдельного ключевого слова, это все еще add:

nft add chain family mytable mychain '{ policy drop; }'

Полный пример в пространстве имен:

test.nft:

flush ruleset

table ip t {
    chain c {
        type filter hook output priority 0; policy accept;
        oif lo accept
        counter
    }
}

настроить:

# ip netns add test
# ip netns exec test nft -f test.nft

внесение изменений:

# ip netns exec test nft add 'chain ip t c { policy drop; }'
# ip netns exec test nft list ruleset
table ip t {
    chain c {
        type filter hook output priority filter; policy drop;
        oif "lo" accept
        counter packets 0 bytes 0
    }
}

Политика была изменена без изменения правил. Здесь используются nft 0.9.5 и ядро ​​5.7.x. В зависимости от версии поведение может отличаться.

Есть коммит ядра с 2015 года позволяя делать только это:

netfilter: nf_tables: позволяет изменять политику цепочки без перехвата, если он существует

Если существует базовая цепочка, мы должны разрешить изменение политики по умолчанию без указания информации о ловушке.

Однако, если цепочка не существует, мы должны обеспечить наличие атрибута hook.

Подписано: Пабло Нейра Аюсо pablo@netfilter.org

Перед этим (около ядра 4.1) нужно было снова предоставить определение базовой цепочки (которое, кстати, нельзя изменить):

# ip netns exec test nft add 'chain ip t c { type filter hook output priority 0;  policy drop; }'