使用 Firewall Builder,第一部分
Linux 2.4 的 Netfilter 防火墙代码及其前端 iptables 获得了应有的赞誉和普及。它们已将 Linux 防火墙提升到与商业状态检测包过滤防火墙相同的水平,从功能、智能和安全性的角度来看都是如此。
Netfilter 体验唯独缺少一样东西:用户友好性。一个好的防火墙 GUI 不仅仅是非技术人员使用的拐杖。即使是最聪明的我们,如果能够借助视觉提示和提醒来构建规则,也往往能够更快地工作,并在防火墙策略中犯更少的错误。与其专注于 iptables 的命令语法,不如专注于您的防火墙需要执行的实际安全策略,这更有价值。
Firewall Builder(图 1)确实是一个优秀的防火墙 GUI。它允许您定义主机、网络和服务对象,这些对象可以在您喜欢的任意数量的不同防火墙规则集中使用和重用;它以直观而清晰的方式显示您的规则;并且由于它有意与操作系统无关,因此您可以使用 Firewall Builder 不仅为 Netfilter/iptables 生成规则集,还可以为 FreeBSD 的 ipfilter、OpenBSD 的 pf 甚至 Cisco PIX 防火墙生成规则集。
在本期和下一期中,我将向您展示如何获取和安装 Firewall Builder,然后我将解释如何使用它来轻松直观地构建您自己的 iptables 策略。首先,我们重点介绍 Firewall Builder 的安装和填充其对象数据库;下个月我们将深入探讨策略构建。
首先,关于在哪里安装和运行 Firewall Builder 的一些说明。我不认为在实际的防火墙或任何其他加固的、可公开访问的主机(称为堡垒主机)上运行 Firewall Builder 是一个好主意。简而言之,我不认为您应该在这些主机上运行 X Window 系统。
相反,您应该在您的日常工作站上运行 Firewall Builder。然后,使用 scp 或其他安全方式将您构建的防火墙脚本复制到您实际希望配置的主机。Firewall Builder 旨在以这种方式使用。
另一方面,如果您打算使用 Firewall Builder 为特定主机的本地保护(例如基于 Linux 2.4 的 Web 服务器)创建 Netfilter 脚本,那么直接在安装脚本的主机上运行 Firewall Builder 也许是可以的。但是,请确保主机上安装了 X11,并且主机本身位于适当的防火墙后面。
重要的一点是,您不需要在您想要配置的每台主机上运行 Firewall Builder。因此,您不应该在任何您在其他情况下不会运行 X Window 系统的计算机上运行它。一台运行 Firewall Builder 的主机可以为任意数量的不同主机生成脚本。我们很快就会看到这是如何实现的。
当然,Firewall Builder 项目有自己的主页,您可以在那里获取最新的软件版本和文档:www.fwbuilder.org。如果我在这里说的任何内容与您在那里读到的内容不同,我以该网站为准。Firewall Builder 的在线安装说明清晰准确,并且它们可能会在我撰写本文时到实际印刷时之间发生变化。
我将从最简单的情况开始。如果您运行 Debian 3.0,您可以直接从您的 Debian 安装源安装 Firewall Builder;Debian 有自己官方支持的 deb 包,名为 fwbuilder。 除此之外,此软件包还依赖于 Debian 软件包 libfwbuilder0、fwbuilder-iptables、libgtk1.2、libgtkmm1.2、libxslt1、libxml2 和 libsnmp4.2。
我将跳过完整的依赖项列表。如果您使用 apt-get 安装 fwbuilder,apt-get 将为您识别并安装所有必需的软件包。我还建议安装 Debian 的 fwbuilder-doc 软件包;它是可选的(因此不会被 apt-get 自动安装以满足任何依赖项),但包含全面且有用的文档。
截至 Red Hat 8.0(撰写本文时最新的 Red Hat 版本),Firewall Builder 尚未成为 Red Hat Linux 的官方组成部分。但是,Firewall Builder 团队为多个 Red Hat 版本提供了 RPM 文件;请参阅 Firewall Builder 下载站点 sourceforge.net/project/showfiles.php?group_id=5314。
您将需要 fwbuilder 和 libfwbuilder 软件包,以及至少一个 fwbuilder-ipt、fwbuilder-ipf 或 fwbuilder-pf,具体取决于您是为 Linux Netfilter/iptables、FreeBSD ipfilter 还是 OpenBSD pf 创建规则集。如果您愿意,可以安装这最后三个中的多个。由于 Firewall Builder 的最终输出是 ASCII 脚本,因此使用 Linux 系统为其他平台生成防火墙规则不成问题。
在安装 Firewall Builder 软件包之前,必须存在以下标准 Red Hat 软件包:bind-utils、gdk-pixbuf、glib、glibc、gtk+、gtkmm、libfwbuilder、libsigc++、libstdc++、libxml2、libxslt、openssl-0.9.6b、ucd-snmp 和 XFree86-libs。
此外,您还需要 gtkmm(GIMP 工具包 Minus Minus),它包含 GTK+ 的 C++ 绑定。此软件包是 Ximian GNOME 的一部分,但您也可以从 www.freshrpms.net 下载。
与 Red Hat 一样,SuSE 尚未将 Firewall Builder 纳入其官方版本。SuSE 8.1 RPM(尽管是非官方贡献的 RPM)可从 Firewall Builder 下载页面获得 (sourceforge.net/project/showfiles.php?group_id=5314)。
您将需要 fwbuilder 和 libfwbuilder 软件包,以及一个或多个 fwbuilder-ipt、fwbuilder-ipf 或 fwbuilder-pf。您还需要安装以下标准 SuSE 软件包:gcc、gdk_pixbuf、glib、glibc-2.2.4、gtk、gtkmm、libsigc++、libstdc++、libxml2、libxslt、libz、openssl-0.9.6b、ucdsnmp 和 xshared。
安装软件包后,您就可以运行 Firewall Builder 了。只有一个命令需要记住:fwbuilder。您必须运行 X Window 系统才能运行此命令。不过,您不需要是 root 用户;事实上,我不建议这样做,因为您应该始终避免不必要地以 root 用户身份执行操作。
一旦 fwbuilder 窗口启动,您就可以开始定义对象(图 2)。Firewall Builder 的全部意义在于能够使用可重用的、拖放对象来编写规则,因此显然,必须先存在对象才能编写规则。即使是 Firewall Builder 的自动策略生成向导也需要对象已经存在。
您可以使用对象来表示主机、网络(通过 IP 地址和子网掩码标识)、地址范围、TCP/IP 服务、防火墙(包括多宿主防火墙和堡垒主机)、时间范围以及其他对象的组。您可以根据您认为将在规则集中使用的对象数量定义尽可能多或尽可能少的对象。至少,您需要一个防火墙对象和至少一个网络或主机对象。为许多流行的 TCP/IP 服务提供了预定义的服务对象。
对象是从 Firewall Builder 的“插入”菜单中的对话框创建的。图 2 显示了用于创建主机对象的“插入主机”对话框。主机对象用于创建规则的定义特征是其 IP 地址。如果您希望编写通过 MAC/以太网地址匹配主机的规则,您也可以定义它。如您所见,您可以手动输入 IP 地址或通过 DNS 查找输入 IP 地址。后一个功能很方便,但它仅适用于名称可以通过运行 Firewall Builder 的系统解析的主机。
图 3 显示了“插入网络”对话框。与弹出单独窗口的“插入主机”不同,“插入网络”只是在主窗口的右侧部分打开一个空白的“新建对象”表单。此对话框实际上比“插入主机”对话框更简单;您只需要输入网络的 IP 地址和子网掩码、网络对象的名称以及可选的注释。
到目前为止,最复杂的对象是防火墙对象。初始设置本身并不太复杂;只需通过 IP 地址和子网掩码定义防火墙的接口。但是,一旦添加了防火墙对象,并且它出现在主 fwbuilder 窗口左侧的用户定义对象列表中,请单击其图标。窗口右侧应出现五个信息页面(选项卡)(图 4)。
在“常规”屏幕上,我们看到了创建防火墙对象时输入的hostname。但是,重要的是选择适当的“主机操作系统”和“平台”选项,以便 Firewall Builder 知道在将策略转换为此防火墙的防火墙脚本时使用哪个编译器引擎。
“SysInfo”屏幕仅适用于 SNMP 数据(请参阅侧边栏)。“编译/安装”屏幕是您可以设置自动安装防火墙策略的地方。如果您打算手动安装它们,您可以将此屏幕留空。希望有一天,Firewall Builder 将支持使用 SSL 自动传输和安装防火墙脚本。但是,截至撰写本文时,必须在目标防火墙上运行才能使此方法起作用的 fwbd 守护程序尚未发布。
如果您将“编译/安装”屏幕的“安装程序”选项保留为其默认值 fwbd,即使此功能尚不受支持,也不会发生任何不好的事情;编译后的防火墙规则仍然会保存到您的主目录中。“规则”菜单中的“安装”选项将灰显。另一方面,如果您将“安装程序”设置为“安装脚本”,则可以在“策略安装脚本”字段中指定自定义脚本的路径,并在下面的可选命令行参数中指定。当您在编译策略后选择“规则”®“安装”时,将执行自定义脚本。
此方法是一种方便的方式来编写脚本,例如,scp 命令,该命令将您的策略安全地复制到其目标防火墙。示例安装脚本,特别是 fwb_install,可在 Firewall Builder 下载站点 (sourceforge.net/project/showfiles.php?group_id=5314) 的 contrib 下找到。
无论您将“安装程序”设置为哪个,Firewall Builder 都会将其为此防火墙编译的脚本写入本地 ASCII 文件,该文件与防火墙对象具有相同的名称,后缀为 .fw。例如,为图 4 中的防火墙 Trillian 生成的脚本名为 trillian.fw。
继续介绍防火墙的对象属性,“防火墙”选项卡用于配置特定于您在“常规”屏幕中选择的平台的选项,在本例中为 Netfilter/iptables 特定选项(图 5)。此处的默认值适用于许多(如果不是大多数)用户,但其中几个选项值得讨论。
在“全局日志记录参数”部分,您可以控制 Firewall Builder 如何写入日志条目。默认日志级别 6:信息是可以的。就我个人而言,我只记录丢弃和拒绝的数据包,所以我喜欢将其提升到 4:警告。
在“防火墙”屏幕的“选项”部分,您可能希望选择“假设防火墙对象是 Any 的一部分”。默认情况下,内置的源/目标对象 Any 被解释为“除防火墙之外的任何主机”。这在防火墙策略构建器中并非不典型,但它可能会导致一些令人惊讶的行为。
例如,如果您的策略中的最后一条规则是一条清理规则,它设置 source=any、destination=any、service=any、action=drop 和 logging=on,您会期望任何尝试连接到防火墙且与之前的规则不匹配的连接都被记录和丢弃,对吗?确实,它们将被丢弃,但不是因为此规则。它们将被 INPUT 链的默认策略丢弃,Firewall Builder 始终将默认策略设置为 DROP。此示例清理规则仅由尝试通过防火墙的连接触发。由于防火墙本身不被假定为 Any 的一部分,因此您的清理规则仅在 FORWARD 链中实现,而不是在 INPUT 或 OUTPUT 链中实现。
选择“假设防火墙对象是 Any 的一部分”会反转此行为,并使此类清理规则以您期望的方式运行。但是,它可能会使其他事情复杂化,例如特定于防火墙接口的反欺骗规则。简而言之,这是一个权衡。我个人的偏好是不选择此选项。然后,我要么调整我的 Firewall Builder 脚本以至少在 INPUT 链中包含日志和丢弃行,要么在我的策略中添加额外的防火墙输入日志和丢弃规则。
如有疑问,请测试和调整此设置。您可以使用“全局日志记录参数”部分中的“记录所有丢弃的数据包”,但这要求您的防火墙已编译 Netfilter 并使用了 Patch-O-Matic Dropped Table 补丁。如果您安装了 Linux 发行版提供的内核,则可能不是这种情况。
防火墙对象属性的最后一个屏幕是“网络”。其中包含特定于您在“常规”屏幕中指定的主机操作系统的设置。这些选项直接更改内核的行为;如果这让您感到害怕,请忽略此屏幕。但是,如果您的防火墙是功能齐全的、保护整个网络的防火墙,而不仅仅是加固的主机,请确保将“数据包转发”设置为“开启”。
信不信由你,即使完成了所有这些工作,我们还没有完成防火墙对象的配置。在图 4 中,您可能已经注意到,在窗口左侧的对象分层视图中,防火墙 Trillian 有两个接口,eth0 和 lo。eth0 子节是在我运行“插入防火墙”对话框时自动创建的。lo(代表 Trillian 的环回接口)必须手动创建。它的创建不是自动发生的,这有点奇怪。每个防火墙,无论是多宿主主机还是堡垒主机,都需要允许其环回接口自由运行的规则(以便本地进程不会中断)。
要手动添加环回接口,请在对象列表中选择防火墙对象的图标,下拉上面的“插入”菜单,然后选择“接口”。除非您选择了“主机”或“防火墙”对象,否则“接口”选项将灰显。新的接口图标将出现在您的防火墙对象下方,并且新接口的属性将显示在右侧。在“名称”中输入接口的名称(例如,lo),然后取消选择“此接口是外部(不安全)的”。后一个选项应仅为您的外部接口和 DMZ 接口对象选中。
接下来,在新接口的对象仍处于选中状态时,再次下拉“插入”菜单并选择“地址”。现在,地址子对象将出现在新接口下方,并且其属性将显示在右侧(图 6)。输入名称、IP 地址 127.0.0.1 和子网掩码 255.0.0.0(实际上,后者将自动填写)。在某些情况下,系统具有多个环回接口,在这种情况下,地址可能会有所不同 (127.0.0.2 等)。但是,您很可能只有一个,其 IP 为 127.0.0.1。如有疑问,请在您的防火墙上执行 ifconfig -a。
一旦您定义了所有对象,或者至少足以开始编写规则的对象,请通过下拉“文件”菜单并选择“保存”来保存它们。系统将提示您在您的主目录中提供一个带有 .xml 后缀的文件名。某些脚本期望对象命名为 objects.xml 并存储在 ~ 中,但这是用户可配置的。换句话说,您可以随意命名您的对象文件,并将其放在您想要的任何位置。如果您需要调整 fwb_install 或其他策略安装脚本,请记住这些对象文件及其位置。
我将把创建与您的环境相关的其他主机、网络和防火墙对象留给您。此外,我跳过了“网络范围”和“时间”对象,这两个对象都很容易理解和使用——您可以通过自己尝试或参考 www.fwbuilder.org 上的文档来弄清楚这些。下个月,我们将使用所有这些对象来构建一些策略。同时,我希望您已经学到了足够的知识来开始并开始自行探索 Firewall Builder。祝您玩得开心!
