iptables实战系列:构建DMZ

系统 Linux
DMZ防火墙方案为要保护的内部网络增加了一道安全防线,通常认为是非常安全的。同时它提供了一个区域放置公共服务器,从而又能有效地避免一些互联应用需要公开,而与内部安全策略相矛盾的情况发生。要注意的是电子商务服务器只能用作用户连接,真正的电子商务后台数据需要放在内部网络中。

1、 DMZ原理

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

DMZ示意图
图1  DMZ示意图

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

2、构建DMZ

1.构建原则

Linux从2.4内核开始,正式使用iptables来代替以前的ipfwadm和ipchains,实现管理Linux的包过滤功能。Linux的包过滤通过一个叫netfilter的内核部件来实现。netfilter内建了三个表,其中默认表Filter中又包括3个规则链,分别是负责外界流入网络接口的数据过滤的INPUT链、负责对网络接口输出的数据进行过滤的OUTPUT链,以及负责在网络接口之间转发数据过滤的FORWARD链。

要在Linux系统中构建一个带DMZ的防火墙,需要利用对这些链的设定完成。首先要对从连接外部网络的网卡(eth0)上流入的数据进行判断,这是在INPUT链上完成。如果数据的目标地址属于DMZ网段,就要将数据转发到连接DMZ网络的网卡(eth1)上;如果是内部网络的地址,就要将数据转发到连接内部网络的网卡(eth2)上。表1显示了各个网络之间的访问许可关系:

DMZ和内外网的访问关系
表1  DMZ和内外网的访问关系

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

◆内网可以访问外网:内网的用户显然需要自由地访问外网。在这一策略中,防火墙需要进行源地址转换。

◆内网可以访问DMZ:此策略是为了方便内网用户使用和管理DMZ中的服务器。

◆外网不能访问内网:内网中存放的是公司内部数据,这些数据不允许外网的用户进行访问。

◆外网可以访问DMZ:DMZ中的服务器本身就是要给外界提供服务的,所以外网必须可以访问DMZ。同时,外网访问DMZ需要由防火墙完成对外地址到服务器实际地址的转换。

◆DMZ不能访问内网:很明显,如果违背此策略,则当入侵者攻陷DMZ时,就可以进一步进攻到内网的重要数据。

◆DMZ不能访问外网:此条策略在有的情况下可能会有例外,比如DMZ中放置邮件服务器时,就需要访问外网,否则将不能正常工作。

2.DMZ的具体实现

根据以上访问控制策略可以设定Linux防火墙的过滤规则。下面将在一个虚构的网络环境中,探讨如何根据以上六条访问控制策略建立相应的防火墙过滤规则。这里的讨论和具体应用会有所区别,不过这种讨论将有助于实际应用。用户在实际应用时可根据具体的情况进行设置。该虚拟环境的网络拓扑如图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也能成为很好的防火墙。需要补充的是,无论何种防火墙都只能提供有限的保护。设置好防火墙不等于网络就是安全的,关键在于综合运用各种安全手段。 

【编辑推荐】

  1. iptables实战系列:通过NAT转发实现私网对外发布信息
  2. iptables 中文man页面
  3. iptables入门:邮件服务器简单防护
责任编辑:yangsai 来源: 51CTO.com
相关推荐

2011-08-18 10:22:44

2011-09-06 16:31:58

iptablesNAT转发

2011-03-15 09:10:43

iptables防火墙

2011-09-27 11:09:13

2011-03-15 10:48:47

2011-03-15 17:12:11

2021-05-17 09:27:07

项目实战优化项目构建时间

2012-09-27 10:21:00

2012-09-28 09:44:32

2017-05-26 11:00:38

Python算法

2014-11-03 09:31:55

2020-08-24 11:48:49

人工智能

2011-08-10 10:48:48

2022-09-06 10:39:38

Docker镜像构建

2022-01-07 15:11:27

项目Go 框架

2022-06-24 07:08:24

OHOS自定义服务

2011-08-01 09:52:12

DMZPaaS虚拟机

2010-11-22 16:15:15

2021-12-15 09:21:59

Webpack 前端Sourcemap

2011-03-17 17:19:24

iptables
点赞
收藏

51CTO技术栈公众号