申请免费试用、咨询电话:400-8352-114
文章来源:泛普软件
防火墙基础
每一位Linux的新用户都会在某种程度上开始考虑在这以新的特殊的操作系统上安装防火墙系统,最终,每个人都遇到了iptable的概念,在早期,用户可能并不知道iptable是什么意思,甚至没有听到过这个术语,这一实事令人非常失望,要知道有效的iptable管理对于Linux网络环境的安全是至关重要的。
在下文中,我将假设您曾听说过防火墙这个词,并且对防火墙与计算机与网络的关系有些模糊的认识,简而言之,防火墙提供并强制实现了允许与拒绝通过某些特定端口对特定网络上的计算机进行访问的规则,对大多数Windows用户而言,提到防火墙时,他们往往会想到Windows防火墙、ZoneAlarm、诺顿防火墙或者他们会认为是一个“硬件防火墙”,比如很多可以从Circuit City或是Best Buy等地方买到的低廉的路由器设备。
Windows防火墙和ZoneAlarm(还有很多其他产品)有时被称作“软件防火墙”,事实上,它们和硬件防火墙在概念上有一些区别,从实际的角度看,它们在概念上最大的不同是其所提供的安全程度的差别。因为软件防火墙位于本地系统,它提供的是减弱了的安全性:当未经授权的访问触及到软件防火墙时,它已经触及了软件防火墙所要保护的系统,当然,这并不是说您不应该使用这样的软件防火墙,而是说它们仅仅是一个额外的安全层,如果使用得当,它可以提高你网络的整体安全,但您永远不要用软件防火墙来替代独立的硬件防火墙。
作为防火墙来讲,Windows防火墙和ZoneAlarm的质量都很低,即使ZoneAlarm Pro版(比免费版本的要好很多,并且令人难以置信地优于Windows XP系统中有着深深的漏洞的Windows防火墙)也不能算是一个强大的防火墙,诺顿防火墙在某些方面比上述的产品要好,比如它能够提供更佳的安全性,但在某些方面又比较差,比如它难以进行配置,掩藏了它所做的工作,这比ZoneAlarm还要差(但和Windows防火墙是相同的),通常,诺顿防火墙可能会把很多东西搅在一起而没有给用户任何的提示,除了“哦,这可能又是诺顿搞的”。
总而言之,这些运行在Windows系统上的主流防火墙软件的主要问题在于它们没有运行在足够低的层次来提供真正有意义的安全,还有其他一些基于Windows系统的防火墙软件提供了更为基础的防火墙功能,它们使用Windows核心Socket的API,但是Windows操作系统所设计和驱动的这些API提供了潜在的“泄漏”,所以即使是这些基于Windows Socket层的防火墙(比如iSafer Winsock Firewall)也可以被黑客通过聪明的办法解决,这主要依赖于您在网络连接中所使用的一系列硬件和驱动程序等。
最后,这些基于Windows系统的防火墙的问题主要在于这些位于操作系统上层的软件试图让操作系统在控制网络信息包之前放弃对这些信息的控制,这样才可以对信息流进行有效过滤。
免费的UNIX防火墙
免费版本的UNIX拥有更好的包过滤模型,例如在Linux有netfilter项目,netfilter工作在整合了操作系统内核的网络通信过滤上,负责在netfilter中实施与执行的控制规则的管理系统被称作iptable;在OpenBSD操作系统中也有类似的机制,被称作pf,在iptable和pf的相互比较中,都有许多被引用过的优点与缺点。
无论如何,iptable和pf作为防火墙系统来讲都极其出色,尽管我没有做过详尽的调查,但在零售电子产品的市场中至少有一半的硬件防火墙实际上运行着嵌入了Linux内核与netfilter的系统,有些运行着iptable,有些则运行着替代iptable的古怪的混合事物,这样做让所有的事情的工作方式与种不同,也许是为了阻止人们对在幕后工作的路由器于防火墙设备施加更多的控制。不管怎样,如果您购买了路由器/防火墙设备,您就有了合理的机会运行iptable作为防火墙,即使您从没在任何设备上安装过Linux。
由于Linux(和其他免费版本的UNIX)的开放式与模块化设计,与内核集成的包过滤功能比较容易实现,并且在近几年中得以不断提高,因此,这促成了防火墙功能与这些操作系统的网络界面之间的“联姻”,在理论上,这基本上也提供了一个难以渗透的网络模型。
当然,在理论上,理论和实践是相同的,但是,在实践中它们是不同的。在实践中,您能从这种安全模型中获得的安全取决于您有效定义防火墙规则以及过滤规则管理系统的灵活性与功能性,比如在我们讨论的环境中,就是iptable。
iptable的前任被称作ipchain,迄今为止,它是与iptable最相似的,区别在于ipchain的配置和管理要比iptable复杂一些,而且,ipchain是没有状态的,而iptable是有状态的。这意味着iptable可以根据当前网络通信的运行状态来实施防火墙规则:例如,规则可以根据某一特定端口的数据流量来部署,而不止是简单地封锁这一端口。这使得iptable在确保系统安全方面比ipchain更加有用。更有趣的是,ZoneAlarm在很少的情况下也是有状态的,但它的这种状态在很大程度上是无法配置的,因此其状态操作的好处可以被自动脚本绕过,如果写脚本的人要知道他或她在做什么。
iptable基础
无论您在外部使用的是哪种防火墙,对于给定的机器在适当的位置进行恰当的iptable配置总是一个好主意。根据用途的不同,每一个单独的机器可能会有不同的包过滤需求,因此,外部防火墙设备的配置应该最大程度上允许本地系统去做其所需要做的事情,同时,每个单独的机器也应该能在最大程度上拒绝其侥幸的可能,而不需牺牲其关键功能。
当您开始安装一台Linux机器的时候,它可能已经有了某些形式的iptable配置。在某些Linux的发布版本中,可能会包含好几页长的复杂规则,设计这些规则的目的在于让用户使用上百个应用软件于服务,而用户可能根本就不会碰它们;这就是想的太多的发布版本这些年所做的,比如Mandrake。最小化的系统有一个趋势,就是将所有的设置都设为“允许”,给出了极端简单但是本质上没有意义的配置,这样的配置假设用户会对配置进行改动,这样做其实等同与安装了安全软件而根本没有进行任何设置,实际上,想的太多的方式也并没有比不进行配置的安全方式更有效。
有一些用户界面工具可以在更高的层面、更抽象并以更“友好”的方式来管理您的系统安全配置,这样,您就不必针对单个表格的定义和规则管理命令来对iptable进行手动配置了,您可以通读帮助页面来完整地了解如何直接配置iptable,这只需要简单的在命令行输入“man iptables”即可。
另一方面,这些用户界面的防火墙管理工具,包括了支持CLI的工具,比如Bastille,和带有漂亮颜色与可以点击的按钮的GUI工具,比如KDE的Guarddog。基于浏览器界面的服务器管理系统Webmin也具备iptable的管理能力。甚至有些Linux的发布版本的整个目的就是为了提供一个iptable的GUI前台、一定的配置功能、合理健全的默认配置、路由服务配置界面的整合以及其它常用的网络防火墙设备的功能。
我发现如果提供更多的相关知识可以在管理网络与系统安全的iptable方面具备更好的能力,这些基础知识的任务在于让CLI iptable的管理更加简单和容易,这样您可以更好的理解这篇文章的内容。
简单iptable管理
当您管理一台供私人使用的电脑时,您可能要做一些以前从没有做过的事情,它将帮助您实现一步一步完成的系统,这样事情就变得简单和容易一些了,在您继续学习的过程中,拥有这样的系统将帮助您学习在初试设置的基础上进行提高,也许最重要的是您要知道如果有些事情搅在一起了,如何撤销这种损害。
由于这些原因,这篇简要指南将集中在通过三种简便有效的命令与一个您选择的文本编辑器对iptable的管理。这些命令是iptables、iptables-save和iptables-restore,对于文本编辑器的选择,我最喜欢的是vim,您可以按个人的喜好选择。
当您开始管理一个含有很多用户的网络时(对于“很多”,我指的是至少超过五个用户),您开始需要通过自动操作来减少工作量,同时减少在多个计算机上的重复操作。一个标准的iptable配置可以照原样被部署在您网络中所有的工作站上,这是网络管理中很重要的一部分工作,这可以在实现操作环境规范中安全性与管理性的同时,减少您花在配置每一台机器接入网络的时间。
这还包括很多原因:标准配置的简单部署、简单执行、公司安全策略的定义,以及集中式的防火墙配置测试等等。正由于这些原因,这篇指南将集中在使用iptables、iptables-save和iptables-restore命令对iptable进行管理,当然,还有一个您自己选择的文本编辑器。
备份
当然,您所要做的第一件事情就是备份您原有的iptable配置,这样当您今后遇到麻烦的时候就可以简单地还原它了。备份的工作非常简单也不需要太多思考,但需要您做出一些决定,您可以在命令行中通过“iptables –L”命令来看一下当前的iptable配置,但这一命令并没有提供当前配置的太多的信息,如果为了今后重复使用而对现有配置进行备份,您需要使用iptables-save命令,输入“iptables-save”,不需要任何参数,输出的结果将显示netfilter在系统中运行时的iptable规则,这些正是我们所要存储的数据。
您所要做出的第一个决定是在什么地方存储您的iptable配置文件,一种选择是在很多使用说明中所建议的:在/var/lib/iptables目录中使用(或创建)一个目录来存储您的配置文件,另一种方法:既然在配置iptable时您是根用户(root user),那就可以存储在/root目录或任何一个子目录中。
在其他的情况下,您一定要确认您选择的目录路径和文件名不会模糊不清使您会忘记它们或忘记如何找到它们。如果您将它们存储在明为iptable的目录中,那么将原有的iptable配置存储为saved.cfg就足够了,如果不是的话,您可以将它存储为iptables.saved,如果您需要使用三个字母的扩展名,或许您可以用iptables.bak的名字。
假设您要将文件存储在/var/lib/iptables/saved.cfg,那么您备份现有配置的方法如下:首先,浏览到该目录(使用诸如cd /var/lib/iptables的命令),然后输入命令iptables-save > saved.cfg。
如果您对此不熟悉的话,“>”字符是一个非常有用而且应用广泛的外壳程序操作符,通常用于“重定向”。基本上,它将命令左边的内容输出到重定向操作符右边的文件中,还有另一个方向的重定向操作符“<”,我后面会用到它,基本上,它做的是相反的事情(如您所猜测的):它获取重定向操作符右手边的文件中的内容,然后发送到命令的左手边,通过运行iptables-save > saved.cfg,您可以生成一个空文件,然后将iptables-save的输出结果存在该文件中。
如果您感觉您需要撤销您对iptable设置所做出的所有改变,并恢复到发布版本的初试状态(假设这就是您弄乱这些设置之前的状态),您可以简单地输入iptables-restore < saved.cfg,如果您当前工作目录不是/var/lib/iptables ,那可以使用iptables-restore < /var/lib/iptables/saved.cfg命令。
有了这些知识的武装,您已经具备了实现我所描述的iptable管理系统所需的大部分信息,当然我不会残忍地让您去完成自己的配置,毕竟从在这一刻开始将要生成最初的实现,在后面的学习中也将越来越容易。
刷新设置
在新系统上备份了最初的iptable配置之后,我们要做的下一件事情就是将iptable设置刷新为:
iptables -F -t filter
iptables -F -t nat, and
iptables -F -t mangle
从技术上讲,这三个命令中的第一个并不需要使用“-t filter”参数,因为过滤列表是iptable命令的默认目标,但是写清楚这个参数也不会造成损害,如果需要查找iptable配置中更多的表格,您可以参考用户手册中的说明。
您或许并不需要亲自实施这项任务,尽管这样做不会造成任何损害,我有时这样做是因为我偶尔要从零开始创建新的iptable配置,我发现从零开始要比从一个模板配置开始容易些,就像我后面将要提供的例子一样。
当然,这接下来的步骤就要使用我在应用Linux的工作中从帮助文件和其他参考资料中获取的iptable规则的操作知识来制作一个有价值的、安全的iptable配置。您可以从接收这个免费的成果中获益,在接下来的几节中我将介绍这个适度安全的配置模板。(zdnet)