一个具体的应用实例 为了更加系统和全面地介绍 NAT 的使用,下面举一个实际的例子来进行说明。假设有一家 ISP 提供园区 Internet 接入服务,为了方便管理,该 ISP 分配给园区用户的 IP 地址都是私网 IP,通过该私网 IP 用户无法向外发布信息。但是,部分用户要求建立自己的 WWW 服务器对外发布信息。我们可以再防火墙的外部网卡上绑定多个合法 IP 地址,然后通过 IP 映射使发给其中某一个 IP 地址的包转发至内部某一用户的 WWW 服务器上,然后再将该内部 WWW 服务器响应包伪装成该合法 IP 发出的包。 具体的 IP 分配如下: (1)该 ISP 分配给 A 单位 www 服务器的 IP 为: 私网 IP:172.168.92.100 公网 IP:210.95.33.100 (2)该 ISP 分配给 B 单位 www 服务器的 IP 为: 私网 IP:172.168.92.200 公网 IP:210.95.33.200 (3)Linux 防火墙的 IP 地址分别为: 内网接口 eth1:172.168.92.10 外网接口 eth0:210.95.33.1 然后,我们需要进行如下步骤地操作: (1)将分配给 A、B 单位的真实 IP 绑定到防火墙的外网接口,以 root 权限执行以下命令:
(2)成功升级内核后安装 IPTables,然后执行以下脚本载入相关模块:
(3)对防火墙接收到的目的 IP 地址为 210.95.33.100 和 210.95.33.200 的所有数据包进行 DNAT:
(4)对防火墙接收到的源 IP 地址为 172.168.92.100 和 172.168.92.200 的数据包进行 SNAT:
这样,所有目的 IP 为 210.95.33.100 和 210.95.33.200 的数据包都将分别被转发给 172.168.92.100 和 172.168.92.200; 而所有来自 172.168.92.100 和 172.168.92.200 的数据包都将分别被伪装成由 210.95.33.100 和 210.95.33.200,从而也就实现了 IP 映射。 DMZ 是英文“DeMilitarized Zone”的缩写,中文名称为“隔离区”,也称“非军事化区”。它是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓冲区,这个缓冲区位于企业内部网络和外部网络之间的小网络区域内,在这个小网络区域内可以放置一些必须公开的服务器设施,如企业 Web 服务器、FTP 服务器和论坛等。另一方面,通过这样一个 DMZ 区域,更加有效地保护了内部网络,因为这种网络部署,比起一般的防火墙方案,对攻击者来说又多了一道关卡。网络结构如图 1 所示。网络设备开发商利用这一技术,开发出了相应的防火墙解决方案。DMZ 通常是一个过滤的子网,DMZ 在内部网络和外部网络之间构造了一个安全地带。
DMZ 防火墙方案为要保护的内部网络增加了一道安全防线,通常认为是非常安全的。同时它提供了一个区域放置公共服务器,从而又能有效地避免一些互联应用需要公开,而与内部安全策略相矛盾的情况发生。在 DMZ 区域中通常包括堡垒主机、Modem 池,以及所有的公共服务器,但要注意的是电子商务服务器只能用作用户连接,真正的电子商务后台数据需要放在内部网络中。在这个防火墙方案中,包括两个防火墙,外部防火墙抵挡外部网络的攻击,并管理所有内部网络对 DMZ 的访问。内部防火墙管理 DMZ 对于内部网络的访问。内部防火墙是内部网络的第三道安全防线 ( 前面有了外部防火墙和堡垒主机 ),当外部防火墙失效的时候,它还可以起到保护内部网络的功能。而局域网内部,对于 Internet 的访问由内部防火墙和位于 DMZ 的堡垒主机控制。在这样的结构里,一个黑客必须通过三个独立的区域 ( 外部防火墙、内部防火墙和堡垒主机 ) 才能够到达局域网。攻击难度大大加强,相应内部网络的安全性也就大大加强,但投资成本也是最高的。 构建原则 Linux 从 2.4 内核开始,正式使用 IPTables 来代替以前的 Ipfwadm 和 Ipchains,实现管理 Linux 的包过滤功能。Linux 的包过滤通过一个叫 Netfilter 的内核部件来实现。Netfilter 内建了三个表,其中默认表 Filter 中又包括 3 个规则链,分别是负责外界流入网络接口的数据过滤的 INPUT 链、负责对网络接口输出的数据进行过滤的 OUTPUT 链,以及负责在网络接口之间转发数据过滤的 FORWARD 链。 要在 Linux 系统中构建一个带 DMZ 的防火墙,需要利用对这些链的设定完成。首先要对从连接外部网络的网卡 (eth0) 上流入的数据进行判断,这是在 INPUT 链上完成。如果数据的目标地址属于 DMZ 网段,就要将数据转发到连接 DMZ 网络的网卡 (eth1) 上 ; 如果是内部网络的地址,就要将数据转发到连接内部网络的网卡 (eth2) 上。表 1 显示了各个网络之间的访问许可关系:
根据表 1,可以明确以下六条访问控制策略:
DMZ 的具体实现 根据以上访问控制策略可以设定 Linux 防火墙的过滤规则。下面将在一个虚构的网络环境中,探讨如何根据以上六条访问控制策略建立相应的防火墙过滤规则。这里的讨论和具体应用会有所区别,不过这种讨论将有助于实际应用。用户在实际应用时可根据具体的情况进行设置。该虚拟环境的网络拓扑如图 2 所示。
如图 2 所示,路由器连接 Internet 和防火墙。作为防火墙的 Linux 服务器使用三块网卡:网卡 eth0 与路由器相连,网卡 eth1 与 DMZ 区的 Hub 相连,网卡 eth2 与内网 Hub 相连。作为一个抽象的例子,我们用“[ 内网地址 ]”来代表“192.168.1.0/24”之类的具体数值。同理还有“[ 外网地址 ]”和“[DMZ 地址 ]”。 对于防火墙,原则之一就是默认禁止所有数据通信,然后再打开必要的通信。所以在防火墙脚本的最初,需要清空系统原有的规则,然后将 INPUT、OUTPUT、FORWARD 的默认规则设置为丢弃所有数据包。
1)内网可以访问外网 对应的防火墙脚本片段如下:
当数据从连接外网的 eth0 流出时,要将来自内网的数据包的源地址改成 Internet 上的真实 IP,这样才能和外网的主机进行通信。“[NAT 的真实 IP]”表示分配给 NAT 用户的真实 IP,有几个就写几个,以空格分开,但至少要写一个。 2)内网可以访问 DMZ 对应的防火墙脚本片段如下:
以上命令允许所有来自内网、目的地为 DMZ 的数据包通过。 3)外网不能访问内网 对应的防火墙脚本片段如下:
以上命令将来自外网、去往内网的数据包全部丢弃。 4)外网可以访问 DMZ 为了保护 DMZ 中的服务器,外网对 DMZ 的访问也要加以限制。通常的思路是,只允许外网访问 DMZ 中服务器所提供的特定服务,比如 HTTP。 对应的防火墙脚本片段如下:
该防火墙脚本片段将开放 HTTP 服务,使得只有访问 DMZ 中 HTTP 服务的数据包才能通过防火墙。 5)DMZ 不能访问内网 对应的防火墙脚本片段如下:
以上命令将丢弃所有从 DMZ 到内网的数据包。 6)DMZ 不能访问外网 对应的防火墙脚本片段如下:
以上命令先允许 DMZ 中邮件服务器连接外网的 SMTP 服务端口 (25),然后禁止其它从 DMZ 发往外网的数据包。 针对以上基本策略例举了实现它们的基本规则。在实际应用中,需要根据具体情况进行设置。只要设置得当,Linux 也能成为很好的防火墙。需要补充的是,无论何种防火墙都只能提供有限的保护。设置好防火墙不等于网络就是安全的,关键在于综合运用各种安全手段。 |