Linux 2.4有状态防火墙设计(一)

发表于:2007-07-01来源:作者:点击数: 标签:
第一章 关于本教程 我应该学习这门教程吗? 本教程演示了如何使用 .net filter 来建立功能强大的 Linux 有状态防火墙。您需要的只是使用 Linux 2.4 内核的现有 Linux 系统。安装了 Linux 2.4 内核的膝上型计算机、工作站、路由器或 服务器 都符合要求。 您应
第一章 关于本教程

我应该学习这门教程吗?


本教程演示了如何使用.netfilter 来建立功能强大的 Linux 有状态防火墙。您需要的只是使用 Linux 2.4 内核的现有 Linux 系统。安装了 Linux 2.4 内核的膝上型计算机、工作站、路由器或服务器都符合要求。

您应该相当熟悉标准网络术语,如 IP 地址、源和目标端口号、TCP、UDP 和 ICMP 等。学完本教程后,您将会懂得如何创建 Linux 有状态防火墙,而且会有几个示例配置可供您在自己的项目中使用。

关于作者


如果有关于本教程内容的技术问题,请通过 drobbins@gentoo.org 联系作者 Daniel Robbins。

Daniel Robbins 居住在新墨西哥州的 Albuquerque。他是 Gentoo Technologies, Inc. 的总裁兼 CEO,Gentoo Linux(用于 PC 的高级 Linux)和 Portage 系统(Linux 的下一代移植系统)的创始人。他还是 Macmillan 书籍 Caldera OpenLinux Unleashed、SuSE Linux Unleashed 和 Samba Unleashed 的合作者。Daniel 自二年级起就与计算机某些领域结下不解之缘,那时他首先接触的是 Logo 程序语言,并沉溺于 Pac-Man 游戏中。这也许就是他至今仍担任 SONY Electronic Publishing/Psygnosis 的首席图形设计师的原因所在。Daniel 喜欢与妻子 Mary 和新出生的女儿 Hadassah 一起共度时光。


第二章 首要步骤


定义目标


在本教程中,我们将创建 Linux 有状态防火墙。此防火墙将会在 Linux 膝上型计算机、工作站、服务器或路由器上运行;其主要目的是只允许某些类型的网络通信流通过。为了增加安全性,我们将配置防火墙,使它删除或拒绝我们不感兴趣的通信流,以及可能会造成安全性威胁的通信流。

获取工具


开始设计防火墙之前,需要做两件事。首先,需要确保 "iptables" 命令可用。作为 root,输入 "iptables",查看它是否存在。如果不存在,那么需要先安装它。以下是安装方法:访问 http://netfilter.samba.org,下载可以找到的 iptables.tar.gz 的最新版本(目前是 iptables-1.1.2.tar.gz)。然后,输入以下命令来安装它(为简便起见,省略了输出):


# tar xzvf iptables-1.1.2.tar.gz
# cd iptables-1.1.2
# make
# make install

内核配置,第 1 部分

安装之后,应该有一个 "iptables" 命令可供使用,还有一个方便的 iptables 帮助页面("man iptables")。好;现在只需要确保已在内核中构建了必需的功能。本教程假设您编译自己的内核。进入 /usr/src/linux,输入 "make menuconfig" 或 "make xconfig";我们将启用一些内核网络功能。

内核配置,第 2 部分


在 "Networking options" 部分中,确保至少启用了以下选项:


<*> Packet socket
[*] Network packet filtering (replaces ipchains)
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: advanced router
[*] IP: policy routing
[*] IP: use netfilter MARK value as routing key
[*] IP: fast network address translation
[*] IP: use TOS value as routing key

然后,在 "IP: Netfilter Configuration --->" 菜单中,启用每个选项,这样我们就拥有了完整的 netfilter 功能。虽然我们不会使用所有 netfilter 功能,但最好启用它们,这样您可以在以后进行一些实验。


内核配置,第 3 部分


"Networking options" 类别下有一个网络选项不应该启用:明确拥塞通知。让这个选项保留禁用状态:


[ ] IP: TCP Explicit Congestion Notification support

如果启用了这个选项,那么 Linux 机器将不能继续与 8% 的因特网进行网络通信。启用 ECN 时,Linux 机器发送出的一些包将会设置 ECN 位;不过,这个位会使许多网际路由器感到困惑,因此一定要禁用 ECN。

好,现在已根据我们的需要正确配置了内核,编译一个新的内核,安装它,然后重新引导。现在开始使用 netfilter :)


防火墙设计基础


在创建防火墙时,"iptables" 命令是我们的朋友。我们使用它与内核中的网络包过滤规则进行交互。我们将使用 "iptables" 命令来新建规则、列出现有规则、刷新规则和设置缺省包处理策略。这就意味着要创建防火墙,需要输入一系列 iptables 命令,这就是我们首先要讨论的内容(此时请别输入此命令!)……

# iptables -P INPUT DROP

您现在看到的是一个几乎“完美”的防火墙。如果输入此命令,您将会得到难以置信的完美保护,它可以防止任何形式的进入恶意攻击。那是因为此命令告诉内核删除所有进入网络包。虽然这个防火墙非常安全,但它有点傻。但在继续讨论之前,让我们研究一下此命令是如何执行操作的。

设置链策略

"iptables -P" 命令用于为包过滤规则链设置缺省策略。在本示例中,iptables -P 用于为 INPUT 链设置缺省策略,INPUT 是一个内置链,包括了应用于每个进入包的规则。通过将缺省策略设置成 DROP,告诉内核应该删除(即,废弃)到达 INPUT 规则链末端的任意包。而且,由于我们还没有对 INPUT 链添加任何规则,因此所有包都会到达此链的末端,而且所有包都会被删除。

再次声明,这个命令本身根本没有用。但是,它演示了一个很好的防火墙设计策略。我们从缺省情况下删除所有包开始,然后逐步开放防火墙,这样它将会满足我们的需要。这种做法可以确保防火墙会尽可能安全。

原文转自:http://www.ltesting.net