在工作中这个原则的典型例子是DMZ或非军事区,它是一个包含某个组织的接近互联网的所有系统,图1显示了包括一个组织的工作组的内部网络、其他非共享网络资源和互联网的关系。
图1一个DMZ网络
使用防火墙从互联网和内部网(受信任的)分割出一个DMZ网络,你可以用非常细粒度的方法编写规则,来定义这3个区域内的主机如何与其他区域的主机进行交互。象这样的规则公式,你应该会认为暴露给攻击者的范围是接近无限大的,在DMZ内的主机应该被视为半受信任的,也就是说,你应该假设在DMZ内的主机可能会泄密,因此,你应该尽可能少允许从DMZ到互联网的传输。
你也应该考虑遭到破坏的DMZ内的主机对外部网络的威胁,如果一个来自互联网的攻击者破坏了你的DNS服务器,例如:甚至如果攻击者试图进入你的内部网,但被你的防火墙规则阻止了,那个攻击者仍然可以让你的组织受困,如果被破坏的服务器能连接到互联网上其他任意系统的话,甚至还会引起法律上的问题。防火墙应该给用户和系统完成它们工作需要的最小网络传输权限,非必须的数据流迟早会滥用网络。
你在图1中或许注意到了,那里使用了2个防火墙,这是个典型的夹住DMZ区域的架构,但是许多组织选择了更经济的多宿主防火墙DMZ架构(图2),它是只有一个单独的防火墙,具有多个网络接口,限制不同网络间的通讯,虽然双防火墙拓扑结构能提供更好的保护,但也有弱点,例如:外部防火墙本身在某种意义上可能泄密。只要你足够细心地编写规则,多宿主防火墙接近同样的作用。
图2 DMZ和多宿主防火墙
无论你是使用一个单一的多宿主防火墙还是成对使用防火墙,每个网络区域(内部、外部/互联网和DMZ)连接到一个专用的防火墙物理网络接口是非常重要的,是的,这让你的防火墙有单点故障,但是,如果某个网络区域内的主机路由数据包到其他网络区域不经过防火墙,你的防火墙就没有什么价值了。
我介绍的最后一个防火墙设计原则目前只能用于多接口防火墙(也就是说,不能用于本地/个人防火墙):总是使用反欺骗规则。
回顾图1中面向互联网的防火墙,它有2个网卡接口:内部(面向DMZ)和外部(面向互联网),假设图1中的内部网络使用c类网络空间192.168.55.0/24内的ip地址,DMZ使用192.168.77.0/24。
因此,防火墙能丢掉抵达互联网接口的源自这2个私有ip范围内的ip地址的任何数据包,这些数据包容易被欺骗,攻击者有时伪造这些数据包的源ip地址,试图通过防火墙或战胜其他基于源ip的认证机制(TCPwrappers,hosts.equiv等)。
事实上,在任何防火墙上面向互联网的网络接口应该丢掉源ip地址来自际任何非internet路由的ip范围的数据包,特别是那些在RFC1918中定义的:10.0.0.0/8,172.16.0.0/12和192.168.0.0/16(如果这些号码属于CIDR【译者注:无类别域间路由】标记法范围内的ip地址,如果你弄不清楚也不要着急,稍后会介绍一些iptables工具)。
为了更通俗易懂的方式说明这个重要的防火墙设计原则,你应该配置你的防火墙丢掉源ip地址方向不对的任何数据包。
以上就是所有防火墙应该做的事情,现在我们开始看看如何做这些事情。