dd-wrt:阻止VAP访问互联网

dd-wrt:阻止VAP访问互联网

我正在尝试为我的物联网设备配置辅助网络。我只想允许少数设备访问互联网,其余设备应该“监禁”到该网络。此外,IOT 网络上的所有设备都应该能够访问主网络上的 MQTT 服务器。

我的设置如下:

  • 固件:DD-WRT v3.0-r34015M kongac (12/09/2017) -更新的版本给我的无线连接带来了很多麻烦。 10 分钟后 Wifi 不断掉线,解决此问题的唯一方法是重新启动路由器。
  • 硬件:Netgear R7000

我的网络配置如下:

  • 在无线 -> 基本设置下:

    • 我添加了 VAP
    • 网络配置:桥接
    • AP 隔离:禁用
  • 在“设置”->“VLAN”下

    • 端口 2 = VLAN15(无网桥分配)
  • 在设置 -> 网络下

    • 添加了新桥 (br2)
    • 将 wl02 和 vlan15 分配给 br2
    • 将 192.168.7.0/24 分配给 br2
    • 为 br2 添加 DHCP 服务器
  • 在设置 -> 高级路由下

    • 添加了一条从 192.168.1.0/24 通过 br2 到 192.168.7.0/24 的路由

如果我不添加任何防火墙规则,我就可以从主网络访问我的物联网网络上的设备,如果我要连接到我的物联网网络,我就可以浏览网页。

经过一番搜索后,我添加了这些防火墙规则(似乎 dd-wrt ​​总是在规则前面添加,因此需要先输入 DROP):

iptables -I FORWARD -i br2 -j DROP
iptables -I FORWARD -i br2 -o br0 -d 192.168.1.38 -p tcp --dport 1883 -m state --state NEW -j ACCEPT
iptables -I FORWARD -i br0 -o br2 -m state --state NEW -j ACCEPT

因此,

  • 物联网 -> 互联网 = 被拒绝
  • 主要 -> 物联网 = 拒绝
  • 物联网 -> 192.168.1.38:1883 = 被拒绝

我确信我缺少 iptables 的某些东西,但不确定是什么。

另外,可以安全地假设添加:

iptables -I FORWARD -i br2 -o br0 -s 192.168.7.5 -m state --state NEW -j ACCEPT

将允许 192.168.7.5 访问互联网吗?

非常感谢任何指导。

更新:请求命令的输出(带有编辑的 WAN IP):

root@DD-WRT:~# ip -br link
root@DD-WRT:~# ip -4 -br address
root@DD-WRT:~# ip route
default via 73.70.220.1 dev vlan2
X.X.X.X/23 dev vlan2  proto kernel  scope link  src X.X.X.X
127.0.0.0/8 dev lo  scope link
169.254.0.0/16 dev br0  proto kernel  scope link  src 169.254.255.1
172.16.0.0/24 via 172.16.0.1 dev vlan3
172.16.0.0/24 dev vlan3  proto kernel  scope link  src 172.16.0.3
192.168.1.0/24 via 192.168.1.1 dev br0  scope link
192.168.1.0/24 dev br0  proto kernel  scope link  src 192.168.1.1
192.168.7.0/24 via 192.168.7.1 dev br2  scope link
192.168.7.0/24 dev br2  proto kernel  scope link  src 192.168.7.1
192.168.15.0/24 dev br1  proto kernel  scope link  src 192.168.15.1
root@DD-WRT:~# ip rule
0:  from all lookup local
32766:  from all lookup main
32767:  from all lookup default

答案1

第一件事:-I表示在头部插入,即前置。用于-A附加在最后。-A如果你不这样做,实际上可能不会按预期工作查看之前可能已经放置的其他 iptables 规则。因此,让我们继续使用-Ibut 并在之后增加行号来选择插入位置并按通常的顺序排列规则。

你的问题是关于处理有状态的规则。 conntrack 流NEW与第一个数据包一起。任何回复数据包都不会是新的,但会启动该ESTABLISHED状态。您的规则只允许NEW状态,因此没有任何东西可以正常工作。

不知道所有其他规则或网络设置将导致此答案中可能出现次优/重复规则,但无论如何它应该有效。

首先添加允许回复以及相关(例如:对于辅助模块udp的错误icmp或数据等帮助ftp模块)数据包的通用规则,每个方向一条规则。这些规则不允许单独的流量,因为根据定义,新的流量总是NEW(所以不是ESTABLISHED或)。RELATED因此,您只需要关心NEW状态(-m conntrack --ctstate已被取代-m state --state,因此您应该在可用时使用它,否则只需将所有这些字符串替换回-m state --state):

iptables -I FORWARD 1 -i br2 -o br0  -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 2 -i br0 -o br2  -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

现在您可以(仅)处理新流:
请注意,上一个规则和下一个规则只能合并到具有所有 3 个状态的一个规则中,或者根本不进行状态检查,因为它始终是这 3 个状态之一(好的,除了无效)

iptables -I FORWARD 3 -i br0 -o br2 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 4 -i br2 -o br0 -d 192.168.1.38 -p tcp --dport 1883 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 5 -i br2 -j DROP

对于你的最后一个问题,我怀疑你写的内容是否允许互联网访问,因为互联网可能无法在br0的界面上使用。它将在具有公共 IP 的接口上可用。这应该在不知道它是什么接口的情况下工作,只需不说明它(在前面的命令之后运行,或相应地重新排序数字。iptables-saveiptables-restore是你的朋友):

iptables -I FORWARD 5 -o br2 -d 192.168.7.5 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 6 -i br2 -s 192.168.7.5 -m conntrack --ctstate NEW -j ACCEPT

但问题中添加的那些缺失的信息肯定会有所帮助:ip -br linkip -4 -br address; ip route; ip rule(并且可能iptables-save)。那么规则可能会变得更加通用,而不会降低安全性。

更新:macmatch 来匹配 MAC 地址。

可以匹配 MAC 地址而不是 IP。该信息只能用作来源并且仅在正确的网络中才有意义。所以-o br2不能用来匹配MAC。让我们用更通用的规则替换上面的规则 5(这对于安全性来说仍然可以)。用于-R代替上面的规则5和6,请调整(再次强调:iptables-save很方便):

iptables -R FORWARD 5 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -R FORWARD 6 -i br2 -m mac --mac-source 02:03:04:05:06:07 -m conntrack --ctstate NEW -j ACCEPT

最后你得到:

iptables -I FORWARD 1 -i br2 -o br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 2 -i br0 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 3 -i br0 -o br2 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 4 -d 192.168.1.38/32 -i br2 -o br0 -p tcp -m tcp --dport 1883 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 5 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 6 -i br2 -m mac --mac-source 02:03:04:05:06:07 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 7 -i br2 -j DROP

第五个是第二个的超集,只是因为规则中可能应该添加 WAN 接口,但我不知道。

相关内容