这个iptables NAT是从外部开发的吗?

请简单介绍一下iptables / NAT-Setup,我相信它有一个相当严重的安全问题(由于太简单了)。

在这个networking上,有一台连接到互联网的机器(在iptables 1.4.8上运行Debian Squeeze / 2.6.32-5)充当192.168 / 24中less数客户机的NAT /网关。

该机器有两个NIC:

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) 

这样做的工作,但我想念这几个东西,我认为这可能是一个安全问题:

  1. 允许的源接口或源networking没有任何限制
  2. 没有防火墙的部分,如:

    (将政策设置为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

因此,我的不眠之夜的问题是,而第一个对我来说更重要:

  1. 此NAT服务是否可用于将本机设置为其默认网关的同一ISP子网中的任何人?
    我会说是的,因为没有任何东西表明,只要输出接口是eth0,一个input的外部连接(通过eth0)应该被处理任何不同于传入的内部连接(通过eth1)对于想要访问互联网的外部和内部客户来说都是如此。 所以,如果我是对的,任何人都可以使用这台机器作为开放代理 ,让他的数据包在这里进行NAT。 所以请告诉我,如果这是正确的或为什么不是。
    作为一个“修补程序”,我在NAT启动命令中添加了“-s 192.168.0.0/24”选项。 我想知道,如果不使用这个选项确实是一个安全问题,或者只是由于我不知道的一些机制而无关紧要。

  2. 由于这些策略都是可接受的,因此eth0转发到eth0(内部到外部)目前没有限制。 但是,目前没有什么限制,只有RELATED和ESTABLISHED状态从eth0转发到eth1(从外部到内部)呢?
    换句话说,我是否应该将政策改为DROP,并应用上面提到的两个“防火墙”规则,还是缺less不影响安全性的规则?

感谢澄清!

  1. 是的,但是,机器必须与ISP端在同一个子网上。 但是在这种情况下,攻击者可以简单地伪造自己的源IP地址,或者使用未分配的地址。 但是,当你的规则被写入时,外部攻击者可以浏览你的局域网,但是他将不得不应对你的服务器伪装返回path上的数据包。 因此,你应该使用iptables丢弃从eth0到192.168.0 / 16的数据包(不,使用策略路由在这里太晚了)。

  2. 转发无效数据包可能导致私人地址泄漏到互联网上,或者导致到达主机的未翻译数据包。 MASQUERADE可能拒绝伪装/解除无效的数据包,或者这些无效的数据包甚至可能不能到达nat表。 至less将数据包丢在INVALID状态通常是一个好主意。 然后只接受来自eth0的ESTABLISHED或RELATED状态的数据包。 我不认为这可能有任何安全问题,如果您的局域网中的主机行为正常,但我会做它无论如何。

1)简短的回答“全世界” – ,外部networking的人, 是的

您只能将网关设置为当前的局域网,因此来自externalNet任何人都可以将您的networking设置为网关,甚至可以访问其后面的机器(例如,他可以访问NAT后面的192.168.0.2 – 数据包将被转发,但返回的数据包将被NAT到externalNet-ip ,他将不得不再次翻译 – 这是可行的)。

“-s”规则将修复“代理”问题,但是你也应该阻止所有以192.168.0.0/24为目的地的eth0数据包。

2)这取决于。 如果你信任NAT背后的客户,并且希望没有限制,那就没问题。 如果你想阻止/只允许某些服务,你必须阻止它们(例如,只允许目标TCP端口80,443和tcp / udp端口53等,并阻止其他一切)。

如果您只允许在传出stream量上build立和相关的连接,根本就没有办法build立连接,所以什么都不会通过。

1)是的。 ISP以太网部分 – MAC地址用于网关传输。

2)我build议看一下RedHat / Fedora / CentOS发行版中的默认configuration,他们知道他们在做什么和为什么这样做: https : //fedoraproject.org/wiki/How_to_edit_iptables_rules?rd=User_talk : Rforlot

顺便说一句:不要用前进链拒绝http://bugs.centos.org/view.php?id=5636

如果我正确地阅读,假设你要制定这些提议的规则,它应该减轻你的不安。

你有一个默认的策略来放弃任何击中INPUT或FORWARD链的东西。

然后,您只允许转发您的外部接口上的RELATED,ESTABLISHED数据包,并通过您的内部接口离开。

因此,新数据包转发的唯一方法是由最后一条规则覆盖,只有通过内部接口进入并通过外部接口离开的数据包才会被转发。

因此,即使外部networking上的主机试图将您的主机用作网关,一个新的数据包也会到达eth0,碰到前向链路,然后因为没有规则而被丢弃。