设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

企业应用开源防火墙安全保障实战演练:PartII

2013-7-16 10:38| 发布者: joejoe0332| 查看: 2990| 评论: 0|原作者: 李洋|来自: ibm

摘要:   实战应用 IPTables 完成 NAT 功能  NAT 简介  在传统的标准的 TCP/IP 通信过程中,所有的路由器仅仅是充当一个中间人的角色,也就是通常所说的存储转发,路由器并不会对转发的数据包进行修改,更为确切的说 ...

  一个具体的应用实例


  为了更加系统和全面地介绍 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 权限执行以下命令:

 #ifconfig eth0 add 210.95.33.100 netmask 255.255.255.0  #ifconfig eth0 add 210.95.33.200 netmask 255.255.255.0 

 

(2)成功升级内核后安装 IPTables,然后执行以下脚本载入相关模块:

 modprobe ip_tables  modprobe ip_nat_ftp 

 

(3)对防火墙接收到的目的 IP 地址为 210.95.33.100 和 210.95.33.200 的所有数据包进行 DNAT:

 #iptables -A PREROUTING -i eth0 -d 210.95.33.100 -j DNAT --to 172.168.92.100  #iptables -A PREROUTING -i eth0 -d 210.95.33.200 -j DNAT --to 172.168.92.200 

 

(4)对防火墙接收到的源 IP 地址为 172.168.92.100 和 172.168.92.200 的数据包进行 SNAT:

 #iptables -A POSTROUTING -o eth0 -s 172.168.92.100 -j SNAT --to 210.95.33.100  #iptables -A POSTROUTING -o eth0 -s 172.168.92.200 -j SNAT --to 210.95.33.200 

 

  这样,所有目的 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


  DMZ 原理


  DMZ 是英文“DeMilitarized Zone”的缩写,中文名称为“隔离区”,也称“非军事化区”。它是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓冲区,这个缓冲区位于企业内部网络和外部网络之间的小网络区域内,在这个小网络区域内可以放置一些必须公开的服务器设施,如企业 Web 服务器、FTP 服务器和论坛等。另一方面,通过这样一个 DMZ 区域,更加有效地保护了内部网络,因为这种网络部署,比起一般的防火墙方案,对攻击者来说又多了一道关卡。网络结构如图 1 所示。网络设备开发商利用这一技术,开发出了相应的防火墙解决方案。DMZ 通常是一个过滤的子网,DMZ 在内部网络和外部网络之间构造了一个安全地带。


  图 1.DMZ 示意图


图 1 DMZ 示意图
 

  DMZ 防火墙方案为要保护的内部网络增加了一道安全防线,通常认为是非常安全的。同时它提供了一个区域放置公共服务器,从而又能有效地避免一些互联应用需要公开,而与内部安全策略相矛盾的情况发生。在 DMZ 区域中通常包括堡垒主机、Modem 池,以及所有的公共服务器,但要注意的是电子商务服务器只能用作用户连接,真正的电子商务后台数据需要放在内部网络中。在这个防火墙方案中,包括两个防火墙,外部防火墙抵挡外部网络的攻击,并管理所有内部网络对 DMZ 的访问。内部防火墙管理 DMZ 对于内部网络的访问。内部防火墙是内部网络的第三道安全防线 ( 前面有了外部防火墙和堡垒主机 ),当外部防火墙失效的时候,它还可以起到保护内部网络的功能。而局域网内部,对于 Internet 的访问由内部防火墙和位于 DMZ 的堡垒主机控制。在这样的结构里,一个黑客必须通过三个独立的区域 ( 外部防火墙、内部防火墙和堡垒主机 ) 才能够到达局域网。攻击难度大大加强,相应内部网络的安全性也就大大加强,但投资成本也是最高的。


  构建 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 和内外网的访问关系

  内网 外网 DMZ
内网 / 允许 允许
外网 禁止 / 允许
DMZ 禁止 禁止 /

 

  根据表 1,可以明确以下六条访问控制策略:


  • 内网可以访问外网:内网的用户显然需要自由地访问外网。在这一策略中,防火墙需要进行源地址转换。
  • 内网可以访问 DMZ:此策略是为了方便内网用户使用和管理 DMZ 中的服务器。
  • 外网不能访问内网:内网中存放的是公司内部数据,这些数据不允许外网的用户进行访问。
  • 外网可以访问 DMZ:DMZ 中的服务器本身就是要给外界提供服务的,所以外网必须可以访问 DMZ。同时,外网访问 DMZ 需要由防火墙完成对外地址到服务器实际地址的转换。
  • DMZ 不能访问内网:很明显,如果违背此策略,则当入侵者攻陷 DMZ 时,就可以进一步进攻到内网的重要数据。
  • DMZ 不能访问外网:此条策略在有的情况下可能会有例外,比如 DMZ 中放置邮件服务器时,就需要访问外网,否则将不能正常工作。


  DMZ 的具体实现


  根据以上访问控制策略可以设定 Linux 防火墙的过滤规则。下面将在一个虚构的网络环境中,探讨如何根据以上六条访问控制策略建立相应的防火墙过滤规则。这里的讨论和具体应用会有所区别,不过这种讨论将有助于实际应用。用户在实际应用时可根据具体的情况进行设置。该虚拟环境的网络拓扑如图 2 所示。


  图 2.DMZ 网络拓扑图


图 2 DMZ 网络拓扑图
 

  如图 2 所示,路由器连接 Internet 和防火墙。作为防火墙的 Linux 服务器使用三块网卡:网卡 eth0 与路由器相连,网卡 eth1 与 DMZ 区的 Hub 相连,网卡 eth2 与内网 Hub 相连。作为一个抽象的例子,我们用“[ 内网地址 ]”来代表“192.168.1.0/24”之类的具体数值。同理还有“[ 外网地址 ]”和“[DMZ 地址 ]”。


  对于防火墙,原则之一就是默认禁止所有数据通信,然后再打开必要的通信。所以在防火墙脚本的最初,需要清空系统原有的规则,然后将 INPUT、OUTPUT、FORWARD 的默认规则设置为丢弃所有数据包。


  (1)防火墙基本设置


  对应的防火墙脚本片段如下: # Flush out the tables and delete alluser-definedchains /sbin/iptables -F /sbin/iptables -X /sbin/iptables -t nat -F /sbin/iptables -t nat – X # Drop every packet /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP

 

2)六种策略的具体实现

1)内网可以访问外网

对应的防火墙脚本片段如下:

 /sbin/iptables -t nat -A POSTROUTING -s [ 内网地址 ] -d [ 外网地址 ] / -oeth0-j SNAT --to [NAT 的真实 IP] 

 

  当数据从连接外网的 eth0 流出时,要将来自内网的数据包的源地址改成 Internet 上的真实 IP,这样才能和外网的主机进行通信。“[NAT 的真实 IP]”表示分配给 NAT 用户的真实 IP,有几个就写几个,以空格分开,但至少要写一个。

2)内网可以访问 DMZ

对应的防火墙脚本片段如下:

 /sbin/iptables -A FORWARD -s [ 内网地址 ] -d [DMZ 地址 ] -i eth2-jACCEPT 

 

  以上命令允许所有来自内网、目的地为 DMZ 的数据包通过。

3)外网不能访问内网

对应的防火墙脚本片段如下:

 /sbin/iptables -t nat -A PREROUTING -s [ 外网地址 ] -d [ 内网地址 ] -i eth0-jDROP 

 

以上命令将来自外网、去往内网的数据包全部丢弃。

4)外网可以访问 DMZ

为了保护 DMZ 中的服务器,外网对 DMZ 的访问也要加以限制。通常的思路是,只允许外网访问 DMZ 中服务器所提供的特定服务,比如 HTTP。

对应的防火墙脚本片段如下:

 /sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 / -d[ 分配给 HTTP 服务器的 Internet 上的真实 IP] -s [ 外网地址 ] / -i eth0 -j DNAT--to[HTTP 服务器的实际 IP]  /sbin/iptables -A FORWARD -p tcp -s [ 外网地址 ]/  -d [HTTP 服务器的实际 IP]-ieth0 --dport 80 -j ACCEPT  /sbin/iptables -A FORWARD -p tcp -d [ 外网地址 ] / -s [HTTP 服务器的实际 IP]-ieth1 --sport 80 ! --syn -j ACCEPT  /sbin/iptables -t nat -A PREROUTING -s [ 外网地址 ] / -d [DMZ 地址 ] -ieth0-j DROP 

 

该防火墙脚本片段将开放 HTTP 服务,使得只有访问 DMZ 中 HTTP 服务的数据包才能通过防火墙。

5)DMZ 不能访问内网

对应的防火墙脚本片段如下:

 /sbin/iptables -A FORWARD -s [DMZ 地址 ] -d [ 内网地址 ] -i eth1 – jDROP 

 

以上命令将丢弃所有从 DMZ 到内网的数据包。

6)DMZ 不能访问外网

对应的防火墙脚本片段如下:

 /sbin/iptables -t nat -A POSTROUTING -p tcp --dport 25 -d[ 外网地址 ] / -s [ 邮件服务器的 IP] -o eth0 -j SNAT / --to[ 分配给 SMTP 服务器的 Internet 上的真实 IP]  /sbin/iptables -A FORWARD -p tcp -s [ 邮件服务器的 IP] -d [ 外网地址 ] / -ieth1--dport 25 -j ACCEPT  /sbin/iptables -A FORWARD -p tcp -d [ 邮件服务器的 IP] -s [ 外网地址 ]/ -ieth0--sport 25 ! --syn -j ACCEPT 

 

  以上命令先允许 DMZ 中邮件服务器连接外网的 SMTP 服务端口 (25),然后禁止其它从 DMZ 发往外网的数据包。


  针对以上基本策略例举了实现它们的基本规则。在实际应用中,需要根据具体情况进行设置。只要设置得当,Linux 也能成为很好的防火墙。需要补充的是,无论何种防火墙都只能提供有限的保护。设置好防火墙不等于网络就是安全的,关键在于综合运用各种安全手段。




酷毙
2

雷人

鲜花

鸡蛋

漂亮

刚表态过的朋友 (2 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部