![这个 iptables NAT 可以从外部利用吗?](https://linux22.com/image/797585/%E8%BF%99%E4%B8%AA%20iptables%20NAT%20%E5%8F%AF%E4%BB%A5%E4%BB%8E%E5%A4%96%E9%83%A8%E5%88%A9%E7%94%A8%E5%90%97%EF%BC%9F.png)
您能否简单看一下这个简单的 iptables/NAT 设置,我认为它存在相当严重的安全问题(因为太简单)。
在这个网络上,有一台连接互联网的机器(运行 Debian Squeeze/2.6.32-5 和 iptables 1.4.8)作为 192.168/24 中少数客户端的 NAT/网关。
该机器有两个网卡:
eth0: internet-faced
eth1: LAN-faced, 192.168.0.1, the default GW for 192.168/24
路由表是双网卡默认的,无需手动修改:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
(externalNet) 0.0.0.0 255.255.252.0 U 0 0 0 eth0
0.0.0.0 (externalGW) 0.0.0.0 UG 0 0 0 eth0
然后启用 NAT仅仅通过这些操作,不再有 iptables 规则:
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# (all iptables policies are ACCEPT)
这可以完成工作,但我忽略了几个我认为可能存在安全问题的地方:
- 没有限制允许的源接口或源网络根本
没有防火墙部分,例如:
(将策略设置为 DROP)
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
因此,我彻夜难眠的问题是:
同一 ISP 子网中将此机器设置为默认网关的任何人都可以使用此 NAT 服务吗?
我认为是的,因为没有任何迹象表明,只要输出接口是 eth0,传入的外部连接(通过 eth0)的处理方式应该与传入的内部连接(通过 eth1)有任何不同 - 并且从路由角度来看,这对于想要访问互联网的外部和内部客户端都适用。所以如果我是对的,任何人都可以将这台机器用作开启代理通过让他的数据包在这里进行 NAT。所以请告诉我这是否正确或者为什么不对。
作为“修补程序”,我在 NAT 启动命令中添加了“-s 192.168.0.0/24”选项。我想知道不使用此选项是否确实是一个安全问题,或者只是由于我不知道的某种机制而无关紧要。由于所有策略都是 ACCEPT,因此目前没有限制将 eth1 转发到 eth0(内部到外部)。但是,目前没有限制只有 RELATED 和 ESTABLISHED 状态从 eth0 转发到 eth1(外部到内部)的实际含义是什么?
换句话说,我是否应该将策略更改为 DROP 并应用我上面提到的两个“防火墙”规则,或者缺少它们不会影响安全性?
感谢澄清!
答案1
是的,但是,该机器必须与您在 ISP 端位于同一子网中。但在这种情况下,攻击者可以简单地伪造其源 IP 地址作为您的 IP 地址,或者改用未分配的地址。但是,正如您编写的规则一样,外部攻击者可以浏览您的 LAN,但他必须应对您的服务器可能在返回路径上伪装数据包的事实。因此,您应该使用 iptables 丢弃从 eth0 到 192.168.0/16 的数据包(不,在这里使用策略路由为时已晚)。
转发无效数据包可能会导致私有地址在互联网上泄露,或者未转换的数据包到达主机。MASQUERADE 可能会拒绝伪装/取消伪装无效数据包,或者这些无效数据包甚至可能无法到达 nat 表。通常,至少丢弃处于 INVALID 状态的数据包是一个好主意。然后只接受来自 eth0 的 ESTABLISHED 或 RELATED 状态的数据包。如果您的 LAN 中的主机运行正常,我认为它不会有任何安全问题,但我还是会这样做。
答案2
1)简短回答“整个世界” -不、外部网络中的人员,是的。
您只能将网关设置为您当前的 LAN,因此任何人都externalNet
可以将您的机器设置为网关,甚至可以访问它后面的机器(例如,他可以访问192.168.0.2
NAT 后面的机器 - 数据包将被转发,但返回的数据包将被 NAT 到externalNet-ip
,他将不得不再次转换 - 这是可行的)。
“-s”规则将修复“代理”问题,但您也应该阻止所有eth0
以192.168.0.0/24
作为目的地的数据包。
2) 视情况而定。如果您信任 NAT 后面的客户端,并且希望不受任何限制,那么没问题。如果您希望阻止/仅允许某些服务,则必须阻止它们(例如,仅允许目标 tcp 端口 80、443 和 tcp/udp 端口 53 等,并阻止其他所有内容)。
如果您仅允许在传出流量上建立相关连接,那么根本无法建立连接,因此什么都不会通过。
答案3
1) 是的。ISP 以太网部分 - MAC 地址用于网关传输。
2)我建议看一下RedHat / Fedora / CentOS发行版中的默认配置,他们知道他们这样做什么以及为什么这样做: https://fedoraproject.org/wiki/How_to_edit_iptables_rules?rd=User_talk:Rforlot
顺便说一句:不要将 REJECT 与 FORWARD CHAIN 一起使用 http://bugs.centos.org/view.php?id=5636
答案4
如果我理解正确的话,假设你制定了这些拟议的规则,它应该可以减轻你的不安。
您有一个默认策略来丢弃任何影响 INPUT 或 FORWARD 链的内容。
然后,您只允许转发从外部接口进入并通过内部接口离开的 RELATED、ESTABLISHED 数据包。
因此,最后一条规则涵盖了新数据包转发的唯一方式,即只有通过内部接口进入并通过外部接口离开的数据包才会被转发。
因此,即使外部网络上的主机尝试将您的主机用作网关,新的数据包也会到达 eth0,击中前向链,然后被丢弃,因为它不满足任何规则。