所有Linux防火墙用同一种方式工作,一系列iptables命令按顺序执行将防火墙规则载入内核内存空间,所有进入网络接口的数据包被内核用这些规则进行评估和控制,这些规则组织在一个表里(以前甚至现在也偶尔被叫做链表),规则可以从任何表在任何时间通过iptables命令插入、附加、修改和删除,并且立即生效。
创建一个Linux防火墙策略使用最多的方法是从零开始编写一个iptables启动脚本,然后象管理其他在init.d下的启动脚本一样进行管理,我就是这样管理我的Linux防火墙的,如果你理解网络的话它工作得很好,使用起iptables命令来你也会感到舒适,你不用对多个不同的防火墙分别管理或者在任何给定的防火墙上使用大于两个的不同策略。
学习如何编写你自己的iptables脚本,请参考http://www.fwbuilder.org/和http://www.netfilter.org/。正如我前面说的那样,我不能在这里简单地阐述这个主题,(注意不同的Linux发行版控制启动脚本的方法不一样),如果你想全部利用iptables的强大功能,包括NAT,自定义链表和数据包损坏,这才是真正的最好的方法。
假设你不能或不会,但又想直接编写一个iptables脚本,这里有一些工具提示能帮助到你。
个人(本地)防火墙
首先我要在这里介绍的iptables工具是在你的系统上已经存在的,今天,几乎所有的Linux发行版在安装工具中都包括了防火墙向导,这个向导用于创建一个本地策略,也就是说,一个个人防火墙脚本,它仅仅能保护本地主机。
这些向导都以相同的方式工作,他们问你哪个本地服务允许外部主机访问,例如:如果我在一个SMTP邮件服务器上安装了Linux,我仅会允许TCP端口25的入站连接(SMTP),也可能允许TCP端口22(ssh,我需要用它进行远程管理)。
基于你的应答,这个向导将创建一个包含iptables命令的启动脚本,允许你指定了到服务/端口的入站请求,阻止其他所有的入站(来自外部)请求,允许所有的出站(来自本地)网络通讯。
但是,第三个命令【即允许所有出站通讯】违背了Ranum的原则(拒绝所有没有明确允许的通讯),难道不是吗?是的,确实是这样,这就是为什么我要为本地防火墙策略自己编写我的iptables脚本的原因了,你需要自己判断所处的位置,你可以允许一些入站,允许所有出站,这是最简单的本地防火墙策略了,如果你担心恶意软件的伤害就要手工写有更多限制的脚本,或者使用一个比Linux安装程序更复杂的防火墙工具。
注意与Linux安装程序其他功能相比而言,这些防火墙向导通常可以在以后再次运行,例如:在SUSE中通过点击‘YaST安全和用户防火墙模块’。
两个网络防火墙工具
我们已经谈论了最困难的方法(自己编写iptables启动脚本)和最容易的方法(用Linux安装程序自动生成一个本地防火墙脚本),但是,还是有许多其他工具用于生成和管理复杂的防火墙脚本的,最流行的两个工具是Shorewall(http://www.shorewall.net/)和Firewall Builder(http://www.fwbuilder.org/)。
结论
几年前,《Linux Journal》将iptables提名为年度安全工具,这真的是一个不平常的成就,如果你比较关心网络安全,你将希望一探iptables的强大功能,当然不止我在本文描述的内容了,开始从iptables(8)帮助页【译者注:man 8 iptables或man iptables 8】作为学习起点,然后在Netfilter主页(http://www.netfilter.org/)上看HOW-TO进行提高。
无论你是用iptables保护你的笔记本电脑还是你的整个企业网络,我都希望你从本文找到有用的内容。安全至上!