利用路由表限制非信任设备访问LAN

最近遇到了这么一个需求:某内网中需要安装一个网络电视终端(就是盒子),但是这个盒子经过检查,系统版本过低,安全隐患大,又不开源难root,上面的应用软件也是非信任的开发者运营的。最近也有“盒子”被作为肉鸡/botnet的新闻。

本来可以利用VLAN划分一个专用VLAN给IOT设备使用,但IOT设备使用的是对服务器的API,即便客户端(比如手机)在同一网络,也不会与IOT设备直接连接,而是通过服务器的API间接连接。因此IOT设备划分专用VLAN与其他子网隔开可行。

但是电视终端除了看电视外,还需要承担投屏等任务,如果限制子网间的连接就不能使用。此外某些协议只会扫描本/24子网,网段不同问题更多。

我在网上找了一下,有说用防火墙的,感觉配置复杂。后来发现可以直接用路由表:

禁止不受信任的客户端访问/24中部分目的地址、但允许其访问部分目的地址、允许访问外网地址(哪怕通过子网中的路由器)。

假设现在有电视盒子X1、IOT设备、遥遥领先设备若干,把他们MAC地址记录并作固定IP映射,编入子网中的一个特定部分(比如192.168.1.200-220)。

把DHCP池设定为 192.168.1.100-150,这里面连接的客户端主要是手机,手机通常是严格禁止外部传入的连接,也不太会有可直接利用的漏洞。

其他工作站等需要暴露端口的设备固定IP到其他段。

下面要求,192.168.1.200-220 段的设备,可以与下面的主机互访:

1,192.168.100-150 手机使用的DHCP地址段

2,192.168.1.2 DNS服务器(DHCP推送公共DNS也可,不使用路由器作为DNS是防范风险)

3,Internet上的地址

以Mikrotik为例:

1,建立地址列表

untrusted 192.168.200-220

protected 192.168.1.1, 192.168.1.3-192.168.1.99, 192.168.1.151-192.168.1.199, 192.168.1.221-192.168.1.254

2,建立一个空路由表,比如drop,类型FIB。

3,建立一个空路由,目的地址写192.168.1.0/24,路由表drop,没有下一跳,直接黑洞。

4,防火墙建立Mangle, prerouting, 源地址列表 untrusted,目的地址列表 protected, Mark routing,Mark= drop,Passthrough。

这样,来自源地址列表 untrusted的主机只能以protected范围之外的IP作为目的地址发包,同时DHCP池中的设备可以与他们连接,完成投屏等任务。

如果不需要解析内部DNS,可以让DHCP直接推送公共DNS,比如114.114.114.114。之所以不让路由器本身转发DNS,是因为这样必将要求允许untrusted设备访问路由器本身,增大风险。

这样可以有效防止这些存在漏洞风险的设备成为渗透的跳板。

同时,建议禁用UPnP功能(这个年代了,真的没什么需要UPnP了)。

当然,还是很难防止端口反弹等常见攻击手段,所以内网也不是高枕无忧的,除了VLAN,路由表等硬性限制,注意不要有弱口令、经常打补丁,禁止未经授权的访问。一些常见接口也要做HTTPS处理,最好下班了搞个定时开关,把这些劳什子设备都关掉才是真。