我有一个企业“networking设备”,允许手持设备通过WiFi连接到它。 我试图找出如何让设备访问互联网(这样它可以下载供应商更新),而不允许它访问局域网上的资源。
我将设备插入到一个Linux机箱中,以便我可以使用iptables过滤eth1上的stream量(请参阅http://i.imgur.com/qudqnOS.png )。 通常情况下,我会有防火墙上的第三个接口,这将允许我通过出站接口过滤出口,但是这次我不能。
问题是,在我的LAN上有许多不同的子网,我不想为局域网上的每个子网pipe理出口规则。 有没有办法告诉Netfilter允许端口80/443朝向互联网网关,即使出口将运行在与LAN相同的接口?
如果我正确地理解你的情况,你有一个连接到你的局域网的Linux机器,它不作为路由器。 该Linux机箱有两个以太网接口,一个连接到局域网,另一个直接连接到WiFi设备。
你不能真正过滤“网关IP”,因为在典型的情况下,网关IP的唯一使用是通过ARP来parsing网关的MAC地址是什么。 数据包被发送到该MAC地址,但其实际目标IP在LAN内不会改变。 你的路由器正在做NAT的工作; 将10.0.0.1的源IP转换为面向公众的IP,反之亦然。
你也不能根据目的MAC地址进行过滤,因为这发生在 iptables完成了过滤/路由/ mangling / etc之后。 这发生在数据包出口之前,发生在低于networking层(原始IP协议)的数据链路层(以太网)。
这可能不是最理想的情况,但你可能想看看IP套件。 这是一个netfilterfunction,可以让你定义一系列IP地址或范围,然后用一个iptables规则匹配它们。 它可以节省你不必要的iptables的麻烦,而且还可以让你从阻止局域网访问的规则中增加或者删除子网,甚至不用接触iptables。
一个例子:
ipset create lan-block hash:net # Create an ipset called 'lan-block' that will store network/mask pairs. ipset add lan-block 192.168.1.0/24 # add 192.168.1.0-192.168.1.255 to this set ipset add lan-block 172.16.0.0/16 # add 172.16.0.0-172.16.255.255 to this set ipset add lan-block 10.0.0.0/15 # add 10.0.0.0-10.1.255.255 to this set ... iptables -A FORWARD -m set --match-set lan-block src,dst -j DROP # block all packets whose source or destination is found in the set lan-block.
有关更多信息,请参阅ipset和iptables-extensions的手册页。
在一些发行版中,ipset不包括在内,但是你应该能够从你的发行版的仓库获取它。
希望这可以帮助。