首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nftables错误:语法错误,意外鞍

nftables错误:语法错误,意外鞍
EN

Unix & Linux用户
提问于 2021-07-15 20:39:24
回答 1查看 1.2K关注 0票数 3

我想将规则arp saddr ip 192.168.2.1 counter accept添加到我的Nftables防火墙中。当使用sudo nft -f /etc/nftables2.conf读取配置文件时,我会收到错误消息。

代码语言:javascript
复制
/etc/nftables2.conf:26:21-15: Error: syntax error, unexpected saddr 
                 arp saddr ip 192.168.2.1 counter accept
                                   ^^^^^^

所涉表格:

代码语言:javascript
复制
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。有人能指出我的错误所在吗?我有点迷茫..耽误您时间,实在对不起。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-07-16 22:33:15

你的规则是正确的。但是您的nftable版本有点太老了。下面是声明,包括您的示例:

[宣布]nftable 0.9.1发布

嗨!Netfilter项目自豪地展示了:nftable 0.9.1这个版本包含修补程序和新特性,可以在Linux >= 5.2中使用。

...

  • ARP发送者和目标IPv4地址匹配,例如。表arp { chain y{ type filter钩子输入优先级筛选器;策略接受;arp鞍ip 192.168.2.1计数器数据包1字节46 }}此更新源自192.168.2.1地址的ARP数据包的规则计数器。

所以您可能需要内核>= 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读取了一个工作规则集,使其显示为原始有效载荷,并将十进制输出转换为十六进制(除了有效负载偏移量和长度):

代码语言:javascript
复制
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;
    }
}

使用维基百科的链接很容易读到:

  • 偏移量112 (以位为单位)以字节为单位偏移14 :发送方协议地址(又名saddr ip )。
  • 32位长度: IPv4地址长度0xc0a80201表示192.168.2.1
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/658586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档