我的网络分为两部分:
- 专用网络 - 仅连接受信任的个人设备(有线和无线)、网络服务器等,并具有出站互联网访问权限。还允许访问专用网络和来宾网络上的 * 所有 * 设备。
- 访客/物联网网络 - 具有出站互联网访问权限,但不应查看/访问专用网络。适用于访客和不受信任的物联网设备
我设置了 iptables 规则,允许我从我的私有网络管理 Guest/IOT 网络上的设备(仅当连接源自私有网络时),但阻止任何来自试图访问私有网络的访客的连接。
但是,我有几个 Web 服务,希望 Guest/IOT 能够访问它们,就像它们来自外部互联网一样。
我尝试将 br1 转发到“wanin”链,但这样会允许一切(因为“wanin”链上没有定义明确的 DROP)。在“wanin”链上添加最终 DROP 规则是否安全,或者这会导致问题吗?
问题:允许访客/物联网网络有限访问私有网络(就像它来自 WAN/互联网一样)的最佳方法是什么,以便只有外部暴露的服务可访问?
我的路由器刷入了 Tomato 固件并运行了防火墙配置。以下是我的 iptables 配置中相关的部分(为清晰起见,删除了一些条目)
# Generated by iptables-save
*filter
:INPUT DROP [80:9315]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [2100:759842]
:monitor - [0:0]
:shlimit - [0:0]
:upnp - [0:0]
:wanin - [0:0]
:wanout - [0:0]
-A INPUT -m state --state INVALID -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i br0 -j ACCEPT
-A INPUT -i br1 -j ACCEPT
-A FORWARD -i br1 -o br0 -j DROP
-A FORWARD -i br1 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br0 -o br1 -j ACCEPT
-A FORWARD -m account --aaddr 192.168.1.0/255.255.255.0 --aname lan
-A FORWARD -m account --aaddr 172.16.1.0/255.255.255.0 --aname lan1
-A FORWARD -i br0 -o br0 -j ACCEPT
-A FORWARD -i br1 -o br1 -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br0 -j ACCEPT
-A FORWARD -i br1 -j ACCEPT
-A FORWARD -i vlan2 -j upnp
-A wanin -d 192.168.1.200 -p tcp -m tcp --dport 80 -j ACCEPT
-A wanin -d 192.168.1.200 -p udp -m udp --dport 80 -j ACCEPT
-A wanin -d 192.168.1.200 -p tcp -m tcp --dport 443 -j ACCEPT
-A wanin -d 192.168.1.200 -p udp -m udp --dport 443 -j ACCEPT
COMMIT
答案1
如果默认策略是 DROP,则通常不需要 DROP 规则(除非您使用-j
链而不是-g
并且想要避免“返回”/进一步匹配)。
因此你可以这样做:
-A FORWARD -i br1 -o br0 -g wanin
顺便说一句,我认为您并不真正想允许 UDP 80 和 443。
您实际上不需要同时匹配 conntrack 状态和接口的额外规则。RELATED/ESTABLISHED 状态已经暗示/要求这一点。
请注意,每个链中的规则都是按顺序匹配的。拥有这些规则意味着所有流量(除了你之前丢弃的流量)都来自这些接口并通过任何接口出去:
-A FORWARD -i br0 -j ACCEPT
-A FORWARD -i br1 -j ACCEPT
而实际上被丢弃的是:
-A FORWARD -i br1 -o br0 -j DROP
取决于你什么时候附加它。
除非每个网桥都包含不同 IP 子网的主机并通过间接路由(通过“路由器的路由器部分”)进行通信,否则可能没有必要:
-A FORWARD -i br0 -o br0 -j ACCEPT
-A FORWARD -i br1 -o br1 -j ACCEPT