对于Internet上的系统,不管是什么情况,首先我们要明确一点:网络是不安全的。因此,虽然创建一个防火墙并不能保证系统100%安全,但却是绝对必要的。和社会上其它任何事物一样,Internet经常会受到一些无聊的或者别有用心的人的干扰,防火墙的目的就是将这类人挡在你的网络之外,同时使你仍然可以完成自己的工作。
那么构筑怎样的Linux防火墙系统才算是足够安全呢?这是一个很难回答的问题,因为不同的应用环境对安全的要求不一样。用一句比较恰当而且简单的话来回答这个问题:用户了解自己的Linux系统和设置,并且可以很好地保护好自己的数据和机密文件的安全,这对于该计算机用户来说就可以称之为他的计算机有足够的安全性。
那么到底什么是防火墙呢?防火墙是一个或一组系统,它在网络之间执行访问控制策略。实现防火墙的实际方式各不相同,但是在原则上,防火墙可以被认为是这样一对机制:一种机制是拦阻传输流通行,另一种机制是允许传输流通过。
一些防火墙偏重拦阻传输流的通行,而另一些防火墙则偏重允许传输流通过。了解有关防火墙的最重要的概念可能就是它实现了一种访问控制策略。
一般来说,防火墙在配置上是防止来自“外部”世界未经授权的交互式登录的。这大大有助于防止破坏者登录到你网络中的计算机上。一些设计更为精巧的防火墙可以防止来自外部的传输流进入内部,但又允许内部的用户可以自由地与外部通信。如果你切断防火墙的话,它可以保护你免受网络上任何类型的攻击。
防火墙的另一个非常重要的特性是可以提供一个单独的“拦阻点”,在“拦阻点”上设置安全和审计检查。与计算机系统正受到某些人利用调制解调器拨入攻击的情况不同,防火墙可以发挥一种有效的“电话监听”和跟踪工具的作用。防火墙提供了一种重要的记录和审计功能;它们经常可以向管理员提供一些情况概要,提供有关通过防火墙的传输流的类型和数量,以及有多少次试图闯入防火墙的企图等信息。
两种类型防火墙的平衡
在概念上,有两种类型的防火墙:网络级防火墙和应用级防火墙。这两种类型防火墙的差异并不如想像中那样大,最新的技术模糊了两者之间的区别,使哪个“更好”或“更坏”不再那么明显。
网络级防火墙一般根据源、目的地址做出决策,输入单个的IP包。一台简单的路由器是“传统的”网络级防火墙,因为它不能做出复杂的决策,不能判断出一个包的实际含意或包的实际出处。现代网络级防火墙已变得越来越复杂,可以保持流经它的接入状态、一些数据流的内容等有关信息。
许多网络级防火墙之间的一个重要差别是防火墙可以使传输流直接通过,因此要使用这样的防火墙通常需要分配有效的IP地址块。网络级防火墙一般速度都很快,对用户很透明。
应用级防火墙一般是运行代理服务器的主机,它不允许传输流在网络之间直接传输,并对通过它的传输流进行记录和审计。由于代理应用程序是运行在防火墙上的软件部件,因此它处于实施记录和访问控制的理想位置。
应用级防火墙可以被用作网络地址翻译器,因为传输流通过有效地屏蔽掉起始接入原址的应用程序后,从一面进来,从另一面出去。
在某些情况下,设置了应用级防火墙后,可能会对性能造成影响,会使防火墙不太透明。早期的应用级防火墙,对于最终用户不很透明,并需要对用户进行培训。应用级防火墙一般会提供更详尽的审计报告,比网络级防火墙实施更保守的安全模型。
防火墙未来的位置应当处于网络级防火墙与应用级防火墙之间的某一位置。网络级防火墙可能对流经它们的信息越来越“了解”,而应用级防火墙可能将变得更加“低级”和透明。最终的结果将是能够对通过的数据流记录和审计的快速包屏蔽系统。
Linux下的防火墙配置工具
Linux为我们提供了一个非常优秀的防火墙工具,它就是netfilter/iptables(http://www.netfilter.org/)。它完全是免费的,并且可以在一台低配置的老机器上很好地运行。netfilter/iptables功能强大,使用灵活,并且可以对流入和流出的信息进行细化的控制。
事实上,每一个主要的Linux版本中都有不同的防火墙软件套件。Iptabels(netfilter)应用程序被认为是Linux中实现包过虑功能的第四代应用程序。第一代是Linux 内核1.1版本所使用的Alan Cox从BSD Unix中移植过来的ipfw。
在2.0版的内核中,Jos Vos和其它一些程序员对ipfw进行了扩展,并且添加了ipfwadm用户工具。在2.2版内核中, Russell和Michael Neuling做了一些非常重要的改进,也就是在该内核中,Russell添加了帮助用户控制过虑规则的ipchains工具。后来,Russell又完成了其名为netfilter(http://www.netfilter.org)的内核框架。这些防火墙软件套件一般都比其前任有所改进,表现越来越出众。
netfilter/iptables已经包含在了2.4以后的内核当中,它可以实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。netfilter工作在内核内部,而iptables则是让用户定义规则集的表结构。netfilter/iptables是从ipchains和ipwadfm(IP防火墙管理)演化而来的,为了简单起见,下文中,我就将其统一称为iptables。
iptables的其它一些好的用法是为Unix、Linux和BSD个人工作站创建一个防火墙,当然也可以为一个子网创建防火墙以保护其它的系统平台。iptables只读取数据包的头,所以不会给信息流增加负担,此外它也无需进行验证。如果要想获得更好的安全性,可以将其和一个代理服务器(比如squid)相结合。