我使用以下 nftables 配置将可以使用路由器的计算机列入白名单:
table bridge filter {
set authorized {
typeof ether saddr
flags constant
elements = {
aa:aa:aa:aa:aa:aa,
ff:ff:ff:ff:ff:ff
}
}
set authorized2 {
typeof ether daddr
flags constant
elements = {
aa:aa:aa:aa:aa:aa,
ff:ff:ff:ff:ff:ff
}
}
chain input {
type filter hook input priority 0; policy drop;
ether saddr @authorized accept
ether daddr @authorized2 accept
}
}
除类型外,这两组完全相同。
有什么方法可以为两者指定和仅使用一组saddr
并daddr
避免重复 MAC 地址吗?
答案1
很简单:与手册页中可以检查的typeof ether saddr
类型相同typeof ether daddr
nft(8)
:
ether {daddr | saddr | type}
表 37. 以太网标头表达式类型
关键词 描述 类型 爸爸 目的MAC地址 以太地址 萨德尔 源MAC地址 以太地址 类型 以太类型 以太类型
这意味着可以使用下面 3 种等效方法之一定义单个集合,并获得相同的结果。以前不存在视觉区别nftables0.9.4其中引入使用第一列中的定义的新关键字作为使用第三列中的定义的关键字typeof
的替代。type
原始
type
关键字(需要检查文档以了解确切类型)type ether_addr
或较新的
typeof
关键字(可以或多或少地重用使用它的规则中的词汇表)任何一个
typeof ether saddr
或者
typeof ether daddr
所以最终规则集可以写成:
table bridge filter {
set authorized {
typeof ether saddr
flags constant
elements = {
aa:aa:aa:aa:aa:aa,
ff:ff:ff:ff:ff:ff
}
}
chain input {
type filter hook input priority 0; policy drop;
ether saddr @authorized accept
ether daddr @authorized accept
}
}
注意:当前规则集接受该集合中的任何内容或该集合中的任何内容。不匹配两个都同时。另外,由于它是输入钩子而不是向前钩子,必须接受目标 MAC 地址是自己的 MAC 地址看起来有点奇怪(当然,在混淆时,不应该设置第一个字节多播位,它作为源无效。但是如果目标是匹配广播目的地,这是一种方法)。