我最近学习了 IPTables 和 IP 路由,以便配置单板计算机将特定机器与我的网络的其余部分隔离,同时仍然允许它访问互联网,还有一些其他规则。
我决定利用这些新知识来增强嵌入式媒体设备的安全性(也许可以防止它们显示广告和报告遥测数据)。我有一个装有 Merlin 固件的旧华硕路由器,所以我设置了它并让 SSH 正常工作。
与我之前的基于 SBC 的防火墙不同,该防火墙全新安装了 Ubuntu,iptables 是空白的,而华硕路由器自带了几条开箱即用的规则,FORWARD 表让我有点困惑:
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate DNAT
ACCEPT all -- anywhere anywhere
据我所知,这将阻止路由器正常工作。例如,如果电视想要向 Netflix 发起请求,路由器应该看到数据包来自 NIC #2 并且目的地是 WAN NIC - 而不是任何内部进程 - 因此应该通过 FORWARD 表。第一条规则不应该适用,因为数据包是新的 - 还没有任何回复给它 RELATED 或 ESTABLISHED 状态。下一条规则...应该放弃它。所以数据包没有到达 Netflix,什么也没有发生。
事实上,在我看来,这应该可以阻止路由器本身(例如管理界面)之间不直接通信的任何事情。但事实并非如此,因为连接的设备可以毫无问题地访问互联网。所以,显然我遗漏了一些东西。华硕路由器不使用 FORWARD 表吗?还是规则不是自上而下评估的? 为什么没有上述 FORWARD 表防止我的路由器无法正常作为交换机运行?
答案1
您的 IPTables 规则列表缺少每条规则的接口信息。DROP 规则很可能针对通过 WAN 接口传入的流量。
iptables-save
或者iptables -S
可用于显示创建规则的完整命令。