如何从tcpdump输出获取from..to偏移量以与iptables字符串匹配模块一起使用

时间:2016-06-13 04:39:02

标签: iptables tcpdump netfilter

我正在尝试使用字符串匹配模块在我的iptables规则中使用'from'和'to'偏移量。这是来自tcpdump工具的输出数据包:

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
05:49:49.631211 IP xxx.xxx.xxx.xxx.57625 > xxx.xxx.xxx.xxx.13333: Flags [S],   seq 1036987151, win 29200, options [mss 1460,sackOK,TS val 770422252 ecr 0,nop,wscale 7], length 0
0x0000:  4514 003c 9ee3 4000 3a06 9772 bca5 2e4d  E..<..@.:..r...M
0x0010:  b009 6f56 e119 2f4f 3dcf 2b0f 0000 0000  ..oV../O=.+.....
0x0020:  a002 7210 6e7e 0000 0204 05b4 0402 080a  ..r.n~..........
0x0030:  2deb b5ec 0000 0000 0103 0307            -........... 

我正在寻找他们的起始位置的十六进制单位是:

bca5 2e4d b009 6f56

我的目标是让这个iptables规则正常工作:

 iptables -A INPUT -p tcp --dport 13333 -m string --from xx --to yy --algo bm --hex-string "|bca52e4db0096f56|" -j DROP

顺便说一句,我的规则在没有使用from-to offset的情况下工作正常。

任何帮助将不胜感激。 最好的问候。

1 个答案:

答案 0 :(得分:1)

要回答原始问题,您可以使用:

 iptables -A INPUT -p tcp --dport 13333 -m string --from 12 --to 20 --algo bm --hex-string "|bca52e4db0096f56|" -j DROP

但是,还有更多要获得最终答案,因为您希望通过添加这两个选项来提高iptables的效率。

我发现有点令人失望,似乎--to选项无效。

我将man iptables的原始相关内容粘贴到CentOS release 6.5 (Final)

--from offset
Set the offset from which it starts looking for any matching. If not passed, default is 0.
--to offset
Set the offset from which it starts looking for any matching. If not passed, default is the packet size.

如您所见,选项--to的说明错误,我的实验使用--to选项的结果也是错误的。但是,--from选项可以正常工作。

最后的答案是坏包的一部分代表ip协议的 src ip和dest ip ,所以你可以使用(我不会在你的数据包内容中使用ip)你的隐私问题的问题,但是ip已经曝光,所以也许你可以改变你的问题):

 iptables -A INPUT -p tcp --dport 13333 -s xx.xx.xx.xx -d xx.xx.xx.xx -j DROP

更新,请使用模块u32:

iptables -A INPUT -p tcp --dport 13333 -m u32 --u32 "12=0xbca52e4d && 16=0xb0096f56" -j DROP