发布网友 发布时间:2022-04-22 07:11
共2个回答
热心网友 时间:2022-06-17 07:05
Linux下DMZ构建
保护网络最常见的方法就是使用防火墙。防火墙作为网络的第一道防线,通常放置在*和需要保护的网络之间。最简单的情况是直接将防火墙放置在*和企业网络之间,所有流入企业网络的数据流量都将通过防火墙,使企业的所有客户机及服务器都处于防火墙的保护下。这对于一些中小企业来说是简单易行的,而且这种解决方法在某些情况下也表现不错。然而这种结构毕竟比较简单。企业中有许多服务器、客户机等资源需要保护,不同的资源对安全强度的要求也不同。不能用对待客户机的安全级别来对待服务器,这样服务器将会很危险;同样,也不能用对待服务器的安全级别来对待客户机,这样用户会感觉很不方便。
针对不同资源提供不同安全级别的保护,可以考虑构建一个叫做“Demilitarized Zone”(DMZ)的区域。DMZ可以理解为一个不同于*或内网的特殊网络区域。DMZ内通常放置一些不含机密信息的公用服务器,比如Web、Mail、FTP等。这样来自*的访问者可以访问DMZ中的服务,但不可能接触到存放在内网中的公司机密或私人信息等。即使DMZ中服务器受到破坏,也不会对内网中的机密信息造成影响。
许多防火墙产品都提供了DMZ的接口(一般老的防火墙都只有两个口,即做不了DMZ,现在的防火墙一般都有三个或四个接口)。硬件防火墙由于使用专门的硬件芯片,所以在性能和流量上有绝对的优势。软件防火墙的性价比非常好,一般企业使用起来效果不错。如果使用Linux防火墙,其成本将更低。这里将介绍的是在Linux防火墙上划分DMZ区域的方法。
构建DMZ的策略
Linux从2.4内核开始,正式使用iptables来代替以前的ipfwadm和ipchains,实现管理Linux的包过滤功能。Linux的包过滤通过一个叫netfilter的内核部件来实现。netfilter内建了三个表,其中默认表Filter中又包括3个规则链,分别是负责外界流入网络接口的数据过滤的INPUT链、负责对网络接口输出的数据进行过滤的OUTPUT链,以及负责在网络接口之间转发数据过滤的FORWARD链。要构建一个带DMZ的防火墙,需要利用对这些链的设定完成。首先要对从连接外部网络的网卡(eth0)上流入的数据进行判断,这是在INPUT链上完成。如果数据的目标地址属于DMZ网段,就要将数据转发到连接DMZ网络的网卡(eth1)上;如果是内部网络的地址,就要将数据转发到连接内部网络的网卡(eth2)上。表1显示了各个网络之间的访问关系。
表1 网络间访问关系表
内网 * DMZ
内网 / Y Y
* N / Y
DMZ N N /
根据表1,可以明确以下六条访问控制策略。
1.内网可以访问*
内网的用户显然需要自由地访问*。在这一策略中,防火墙需要进行源地址转换。
2.内网可以访问DMZ
此策略是为了方便内网用户使用和管理DMZ中的服务器。
3.*不能访问内网
很显然,内网中存放的是公司内部数据,这些数据不允许*的用户进行访问。
4.*可以访问DMZ
DMZ中的服务器本身就是要给外界提供服务的,所以*必须可以访问DMZ。同时,*访问DMZ需要由防火墙完成对外地址到服务器实际地址的转换。
5.DMZ不能访问内网
很明显,如果违背此策略,则当入侵者攻陷DMZ时,就可以进一步进攻到内网的重要数据。
6.DMZ不能访问*
此条策略也有例外,比如DMZ中放置邮件服务器时,就需要访问*,否则将不能正常工作。
DMZ的实现
根据以上访问控制策略可以设定Linux防火墙的过滤规则。下面将在一个虚构的网络环境中,探讨如何根据以上六条访问控制策略建立相应的防火墙过滤规则。这里的讨论和具体应用会有所区别,不过这种讨论将有助于实际应用。用户在实际应用时可根据具体的情况进行设置。该虚拟环境的网络拓扑如图1。
图1 DMZ网络拓扑图
如图1所示,路由器连接Internet和防火墙。作为防火墙的Linux服务器使用三块网卡:网卡eth0与路由器相连,网卡eth1与DMZ区的Hub相连,网卡eth2与内网Hub相连。作为一个抽象的例子,我们用“[内网地址]”来代表“192.168.1.0/24”之类的具体数值。同理还有“[*地址]”和“[DMZ地址]”。
对于防火墙,原则之一就是默认禁止所有数据通信,然后再打开必要的通信。所以在防火墙脚本的最初,需要清空系统原有的规则,然后将INPUT、OUTPUT、FORWARD的默认规则设置为丢弃所有数据包。
对应的防火墙脚本片段如下:
# Flush out the tables and delete all user-defined chains
/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
接下来,逐一解释六种策略的实现。
1.内网可以访问*
对应的防火墙脚本片段如下:
/sbin/iptables -t nat -A POSTROUTING -s [内网地址] -d [*地址] -o eth0 -j SNAT --to [NAT的真实IP]
当数据从连接*的eth0流出时,要将来自内网的数据包的源地址改成Internet上的真实IP,这样才能和*的主机进行通信。“[NAT的真实IP]”表示分配给NAT用户的真实IP,有几个就写几个,以空格分开,但至少要写一个。
2.内网可以访问DMZ
对应的防火墙脚本片段如下:
/sbin/iptables -A FORWARD -s [内网地址] -d [DMZ地址] -i eth2 -j ACCEPT
以上命令允许所有来自内网、目的地为DMZ的数据包通过。
3.*不能访问内网
对应的防火墙脚本片段如下:
/sbin/iptables -t nat -A PREROUTING -s [*地址] -d [内网地址] -i eth0 -j DROP
以上命令将来自*、去往内网的数据包全部丢弃。
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] -i eth0 --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -d [*地址] -s [HTTP服务器的实际IP] -i eth1 --sport 80 ! --syn -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -s [*地址] -d [DMZ地址] -i eth0 -j DROP
该防火墙脚本片段将开放HTTP服务,使得只有访问DMZ中HTTP服务的数据包才能通过防火墙。
设置得当,Linux会能成为很好的防火墙。需要补充的是,任何一种防火墙都只能提供有限的保护。设置好防火墙不等于网络就是安全的,很多单位学校防火墙基本上是一个心理安慰的工具,连基本的策略都是全部any,所以关键在于综合运用各种安全手段。
热心网友 时间:2022-06-17 07:05
给你一份资料,不知道能不能帮上忙
http://www.it-waibao.com/it-waibao/termCommentate/fhc/100_154_1393.html