在命令行上使用 nftables 更改策略

在命令行上使用 nftables 更改策略

使用 iptables,我可以将例如 INPUT 策略更改为iptables -P INPUT DROPdrop。是否有任何选项可以执行相同操作nft

编辑/etc/nftables.conf当然可以起作用但这不是我想要的。

答案1

是的,您可以重新定义已经存在的基础链的策略而不更改其内容。没有单独的关键字,它仍然是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:如果存在,则允许更改链策略而无需钩子

如果存在现有的基础链,我们必须允许更改默认策略而不指示钩子信息。

然而,如果链不存在,我们必须强制钩子属性的存在。

签字人:Pablo Neira Ayuso[电子邮件保护]

在此之前(大约内核 4.1),必须再次提供基本链定义(顺便说一下,它不能更改):

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

相关内容