仅允许内部 NAS 通过 ssh 进行通信

仅允许内部 NAS 通过 ssh 进行通信

我有一个内部 NAS,我不希望它能够通过 SSH 以外的任何方式建立传出连接。

我相信路由器上的以下规则将阻止 192.168.1.100 上的 NAS 的所有传出流量:

iptables -A OUTPUT --source 192.168.1.100 -m state --state NEW -j DROP

我不清楚的是如何允许端口 22 上建立传出的 TCP 连接。

答案1

您指定的规则可能或不可能阻止访问 - 请注意,您使用了“-A”,这意味着将规则添加到表的末尾。如果之前有允许访问的规则,那么它将覆盖该规则。此外,您拥有的规则不必要地复杂。

回答你提出的问题是

iptables -I OUTPUT -j DROP
iptables -I OUTPUT -p tcp --dport 22 -j ACCEPT

这会在输入表的开头设置一条规则以丢弃所有流量。然后,它会在这条规则前面插入一条规则以允许传出的 SSH 连接。不幸的是,这不太可能实现您想要的效果,因为 (a) 这意味着您在 NAS 上运行的任何服务都将无法工作,(b) DNS 查找将无法工作,(c) 阻止 ICMP 可能会破坏某些功能 - 尽管它在大多数情况下都有效。

根据您要执行的操作,您可以调整规则,使其允许 ICMP、传入连接和 SSH 以及如下连接:

   iptables -I OUTPUT -m state --state NEW -j DROP
   iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   iptables -I OUTPUT -p icmp -j ACCEPT
   iptables -I OUTPUT -p tcp --dport 22 -j ACCEPT
   iptables -I OUTPUT -p tcp --dport 53 -j ACCEPT
   iptables -I OUTPUT -p udp --dport 53 -j ACCEPT

我注意到这些规则侧重于传出流量。虽然这可以安全地工作,但处理传入流量通常更好 - 特别是如果您知道应该允许连接的 IP 地址范围和/或端口。您可以使用 INPUT 链来执行这些操作。也许像

iptables -I INPUT -j DROP
iptables -I INPUT -p tcp --sport 53 -j ACCEPT
iptables -I INPUT -p udp --sport 53 -j ACCEPT
iptables -I INPUT -p tcp --sport 22 -j ACCEPT
iptables -I INPUT -s 192.168.0.0/16 -j ACCEPT
iptables -I INPUT -s 10.0.0.0/8 -j ACCEPT
iptables -I INPUT -s 172.16.0.0/20 -j ACCEPT

这将允许您 LAN 上的人们(假设他们处于一个公共的 RFC1918 块中)通过所有协议与您的设备进行通信,并允许从任何地方使用 ICMP、DNS 和 SSH。

相关内容