nftables规则无法正确匹配特定SNMP社区字符串“pawan”的问题求助
nftables规则无法正确匹配特定SNMP社区字符串“pawan”的问题求助
我正在尝试用nftables [v1.0.2 (Lester Gooch)] 丢弃包含SNMP社区字符串pawan的数据包,目前遇到了规则不生效的问题,希望能得到大家的帮助。
我的操作步骤与思路
首先我创建了过滤表和输入链:
nft add table ip filter nft 'add chain ip filter input { type filter hook input priority 0; policy accept; }'
接下来我想通过nftables的原始负载表达式来匹配目标SNMP数据包,根据官方文档的说明,@th(传输层头部)相关的匹配需要使用比特单位的偏移量和长度。
我的匹配逻辑如下:
- SNMP社区字符串“pawan”对应的十六进制值是
0x706177616e - 我计算了UDP负载的起始位置:以太网头14字节 + 默认无选项的IP头20字节 + UDP头8字节 = 数据包的第42字节,也就是UDP负载从这里开始
- “pawan”在数据包中从第48字节开始,所以相对于UDP负载的偏移是
48-42=6字节,转换成比特就是6*8=48比特 - 字符串长度是5字节,对应比特长度为
5*8=40比特
基于这个逻辑,我添加了这条规则:
nft add rule ip filter input udp dport 161 @th,48,40 0x706177616e drop
遇到的问题
这条规则并没有按预期生效,当我用nft list ruleset查看当前规则集时,发现内核解析后的规则完全变了:
table ip filter { chain input { type filter hook input priority filter; policy accept; udp dport 161 udp checksum 112 @th,64,24 0x77616e drop } }
明明我配置的是@th,48,40,但内核却错误地解析成了udp checksum 112 @th,64,24,导致规则根本无法匹配目标数据包。
有没有大佬能帮我分析一下哪里出了问题?或者我是不是应该换一种方式来配置这个SNMP社区字符串的匹配规则?非常感谢大家的帮助!
备注:内容来源于stack exchange,提问作者Pa1
相关产品推荐
相关产品推荐

