我有一台摄像头,可以通过手机应用程序从制造商的云平台访问。同时,我拥有一台运行 Linux 的路由器,我想对其进行编程以阻止摄像头访问互联网。这应该在我的要求下发生,而不是作为永久规则。我正在使用防火墙的iptables
命令来实现这一点,但令人沮丧的情况是当它不起作用时。我在防火墙的前向链中插入了两条规则,如下所示:
iptables -I FORWARD -s camera_local_ip_addr -j DROP
iptables -I FORWARD -d camera_local_ip_addr -j DROP
偶尔这种方法会奏效,尤其是当我重新启动已插入规则的摄像头或最近建立连接时。但大多数时候,由于某些我不知道的原因,这种方法无法正常工作。例如,我插入规则,连接断开,5 小时后,当我删除规则时,连接按预期重新建立,但从那一刻起,我无法再使用相同的程序阻止它。有时插入这些规则根本不起作用。我尝试使用以下方法监控防火墙流量:
watch -n 1 iptables -L FORWARD -nvx
这表明第一条规则的数据包数量在增加;这应该意味着数据包被丢弃了,但实际上,我仍然可以通过网络外的移动应用程序访问摄像头(WiFi 关闭)。在某个时候,我认为这可能是由于 DHCP 租约造成的,并插入了一条规则以允许端口 67 和 68 上的 UDP 流量,但它没有起作用。但是,我认为 DHCP 请求无论如何都不会通过 FORWARD 过滤器。
所以我的问题是:为什么这个程序有时有效,但大多数时候无效?还有其他方法可以通过编程阻止相机的互联网访问吗?
提前谢谢!
答案1
作为提高复杂 iptable 规则可靠性的通用方法,应用 DROP 策略并明确允许(白名单)您想要的所有内容(一个简单的示例是:允许 icmp、dhcp 和来自 DHCP 分配地址的所有内容)
对于您当前的问题,请考虑相机可以使用以下方法来避免您当前的规则:
- 当您仅限制 IPv4 流量时,通过 IPv6 连接
- 当您仅限制一个地址时,使用多个地址(是的,即使某些设备只有一个物理以太网端口,它们也会这样做)
- 出现 DHCP 错误时,返回到硬编码的默认地址,该地址恰好与 DHCP 分配的地址来自同一子网,因此无论如何都会转发其流量