在nftables中添加规则时如何指定子网掩码?含语法报错问题
在nftables中正确指定子网掩码添加规则的方法
嘿,我之前在Debian Buster上用nftables v0.9.0的时候也踩过这个坑!你遇到的syntax error, unexpected /错误,本质是没有明确指定要匹配的是源IP子网还是目的IP子网——nftables的规则语法要求必须明确标注地址类型,不像iptables有时候能省略部分参数。
正确的命令写法
1. 拦截来自指定子网的输入流量
如果你想丢弃0.0.0.0/24这个子网发来的数据包,正确的命令应该是这样:
nft add rule ip filter input ip saddr 0.0.0.0/24 drop
这里的ip saddr就是“IP源地址”的意思,告诉nftables要匹配这个子网的源IP。
2. 拦截发往指定子网的输入流量
要是你需要针对发往0.0.0.0/24子网的输入数据包做处理(比如端口转发场景),就换成ip daddr(IP目的地址):
nft add rule ip filter input ip daddr 0.0.0.0/24 drop
额外的实用技巧
如果要管理多个子网,一个个写规则太麻烦,推荐用nftables集合来简化:
- 先创建一个支持区间的IPv4地址集合:
nft add set ip filter bad_subnets { type ipv4_addr; flags interval; }
- 把需要拦截的子网都添加到集合里:
nft add element ip filter bad_subnets { 0.0.0.0/24, 192.168.1.0/24 }
- 最后用集合来匹配规则,一次搞定所有子网:
nft add rule ip filter input ip saddr @bad_subnets drop
这样后续要添加或移除子网,只需要操作集合就行,不用修改主规则,维护起来方便多了。
内容的提问来源于stack exchange,提问作者Mithokai
相关产品推荐
相关产品推荐

