我正在编写一个隧道应用程序,其中第2层接口(TAP)作为 endpoints . 在OSX上进行测试的过程中,我注意到隧道在单个OSX机器上运行时以及当我在OSX和Linux机箱之间进行隧道传输时,我在隧道上获得了各种各样的流量 . 我想过滤掉这个流量,我想知道最好的方法是什么 .
隧道看起来像这样(注意两个 endpoints 可以在同一台机器上):
tap0 -> tunnel app -> UDP tunnel -> tunnel app -> tap1
值得注意的流量是目的端口5353和ICMP / IGMP上的Bonjour数据包 . 在TAP接口上启用了多播 . 我想阻止这种流量 . 我这样做的想法:
-
在接口上关闭多播(在OSX上不起作用,见下文)
-
使用
ebtables
-
解析来自隧道应用程序内部接口的数据包,并在那里忽略它们
有没有更好/更简单的方法来做到这一点?
我尝试在OSX接口上关闭多播(让我们称之为tap0),但是我收到了一个错误 .
$ ifconfig tap0 -multicast
ifconfig: -multicast: bad value
编辑:经过多一点狩猎后,看起来UNIX和BSD ifconfig有不同的选项 . 是否有另一种方法可以阻止OSX / BSD中给定接口上的多播/ ICMP流量?
这是ifconfig输出...
OSX(带osxtuntap):
$ ifconfig tap1
tap1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 92:d9:e6:65:5a:8c
inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
open (pid 17121)
Linux的:
$ ifconfig tunX
tunX Link encap:Ethernet HWaddr 4a:29:02:e6:b0:b9
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::4829:2ff:fee6:b0b9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
1 回答
一种可能性是在OSX中使用内置的ipfw防火墙 . 从终端,我们只能在名为tap1的虚拟网络接口上允许tcp流量:
如果我们不需要,我们也可以删除规则:
或者,可以解析以太网帧并将其从ascii转换为十六进制或十进制,然后决定如何处理它 . 您可以使用以下方法轻松检测TCP / UDP数据包(tcp为protocol = 6,udp为17) .
对于arp数据包,这不起作用 - 数据包结构有点不同 .