我想将规则arp saddr ip 192.168.2.1 counter accept添加到我的Nftables防火墙中。当使用sudo nft -f /etc/nftables2.conf读取配置文件时,我会收到错误消息。
/etc/nftables2.conf:26:21-15: Error: syntax error, unexpected saddr
arp saddr ip 192.168.2.1 counter accept
^^^^^^所涉表格:
table arp filter {
chain input {
type filter hook input priority 0; policy drop;
arp saddr ip 192.168.2.1 counter accept
}
chain output {
type filter hook input priority 0; policy accept;
}
}我不能把它修好。首先,我尝试了不同的IP,然后我尝试了相同的saddr ether <MAC of device>,而不是IP地址,但得到了相同的结果。我在最新的Raspberry Pi操作系统上使用nftables版本0.9.0。有人能指出我的错误所在吗?我有点迷茫..耽误您时间,实在对不起。
发布于 2021-07-16 22:33:15
你的规则是正确的。但是您的nftable版本有点太老了。下面是声明,包括您的示例:
嗨!Netfilter项目自豪地展示了:nftable 0.9.1这个版本包含修补程序和新特性,可以在Linux >= 5.2中使用。
...
所以您可能需要内核>= 5.2 (如果需要的话还不清楚),但是需要nftable >= 0.9.1。
对于内核:https://www.raspberrypi.org/software/operating-systems/显示Raspberry目前附带了5.10.x内核,所以这是一个没有意义的点。
对于nftable版本,虽然它是通常不推荐,但您可以尝试使用buster-backports获得一个更新的nftables版本,当前的版本为0.9.6。如果您发现这不适合RPi,则应该从(Debian)源重新编译您自己的支持包。
注意: wiki有点滞后,可能并不总是完全准确。当然,一旦功能存在,手册页通常会更精确。例:
buster的0.9.0版本:
ARP报头表达式 arp ARP报头字段
versus buster-backport的版本0.9.6:
ARP报头表达式 arp {htype \ ptype _ ether _ hlen _ plen _plen_s操作_
的方法
如果您真的不能为这种简单的情况更改nftable,那么可以使用原始有效载荷表达式来代替熟悉ARP协议,同时要记住,这个协议的目的不仅仅是在以太网和IPv4上使用,因此有一些通用的部分在通常的IPv4 (例如: hlen=6、plen=4)中是常量。
无论如何,我使用nftable 0.9.0读取了一个工作规则集,使其显示为原始有效载荷,并将十进制输出转换为十六进制(除了有效负载偏移量和长度):
table arp filter {
chain input {
type filter hook input priority 0; policy drop;
@nh,112,32 0xc0a80201 counter accept
}
chain output {
type filter hook input priority 0; policy accept;
}
}使用维基百科的链接很容易读到:
saddr ip )。https://unix.stackexchange.com/questions/658586
复制相似问题