我有iptables阻止所有的UDP流量,但我想只允许某些DNS查询通过。
让我们以google.com为例。
我正在尝试使用字符串匹配来查找请求中的域名,并允许它。这就是我想出来的。
iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --string "google.com" --algo bm -j ACCEPT
我还尝试了--dport 53而不是--sport。没有骰子。
如果有人知道如何做到这一点,或者看到我的错误所在,我们将非常感谢您的帮助!
谢谢,Jarred
发布于 2013-06-19 14:24:49
我知道这有点晚了,但既然你还没有结束这个问题...
如果您查看wireshark或类似版本中的DNS请求数据包的内容,您会发现没有使用点字符。域名的每一部分都是一个经过统计的字符串,因此google.com请求的实际字节数为:
06 67 6f 6f 67 6c 65 03 63 6f 6d第一个字节(06)是google的长度,后跟6个ASCII码字符,然后是com长度的计数字节(03),最后是...你明白了吧。
要在iptables中匹配这一点,请使用以下命令:
iptables -A OUTPUT -o eth0 -p udp --port 53 -m string --hex-string "|06|google|03|com" -algo bm -j ACCEPT--hex-string参数解析提供的字符串,查找由竖线对分隔的十六进制值。竖线之外的任何内容都被解释为ASCII文本。
如果在添加条目后列出输出表,您将发现类似以下内容:
ACCEPT udp -- anywhere anywhere udp dpt:domain STRING match "|06676f6f676c6503636f6d|" ALGO name bm TO 65535您可以使用--from和--to参数限制搜索范围,从而稍微调整规则并加快速度。
发布于 2013-03-08 22:07:38
我发现这对于带点的字符串是不可靠的。
这将会起作用:
iptables -A OUTPUT -o eth0 -p udp --port 53 -m string --string google --algo bm -j ACCEPThttps://stackoverflow.com/questions/14096966
复制相似问题