Linux 多用途防火墙简介

作者:Jeff Regan

高速互联网连接正变得越来越普及,并受到家庭电脑用户的欢迎。ADSL(非对称数字用户线路)、北电网络的 1MB 调制解调器和有线调制解调器都提供了比我们大多数人都非常熟悉的标准 56K POTS(普通老式电话服务)调制解调器快许多倍的连接速度。这些新服务的另一个巨大优势是它们始终处于连接状态。也就是说,您无需使用调制解调器拨打服务提供商来启动互联网连接。当您打开计算机时,连接已经存在,并且您的操作系统会在启动时建立链接。

与标准调制解调器一样,这些连接一次只允许一台计算机连接到互联网。在某些情况下,可以将额外的 IP 地址分配给额外的计算机,但通常提供此服务需要每月付费。

通过在您角落里积满灰尘的旧 486 上安装 Linux,您可以创建一个防火墙,以便本地 LAN 上的所有计算机都可以访问互联网,同时在彼此之间来回传输数据(参见图 1)。您甚至不需要专用 PC。更快的 PC 可以同时用于其他用途,同时充当防火墙;但是,这种方法有两个主要缺点

  • 您 LAN 上的用户可能会体验到较慢的互联网连接速度。

  • 您可能会无意中打开一个安全漏洞,允许互联网上的某人进入并破坏您的系统或文件。

An Introduction to Using Linux as a Multipurpose Firewall

图 1. 小型 LAN 配置通用图

我将讨论两种不同类型的 Linux 防火墙。第一种类型由配备 12MB RAM 和 200MB 硬盘驱动器的 486 组成,使用 Red Hat 6.0 或 Slackware 3.6。第二种类型称为 Linux 路由器项目 (LRP),使用 486、12MB RAM、1.44MB 软盘且没有硬盘驱动器。无论您安装哪种防火墙配置,都需要两块以太网网络接口卡 (NIC)。

安全

总有人在监视,并且人们总是在互联网上寻找安全性差的计算机。他们的动机可能很简单,只是感到无聊,或者更严重的是,需要找到一个可以渗透的系统,以便他们可以用它来隐藏自己,同时继续入侵其他系统,留下指向您的证据。

如果您运行的是标准 Windows 安装,您可能没有办法查看是谁试图检查您的机器。只要 Windows 中“文件和打印机共享”处于关闭状态,在大多数情况下,您是安全的。但是,有可能有人可能会在您的 PC 中发现一个新的安全漏洞并加以利用。

如果您运行的是 Linux,您可以查看您的系统日志。在对运行 Linux 防火墙的朋友进行非正式调查后,我发现平均每天有五次外部人员尝试使用 TELNET 或 FTP 闯入他们的 Linux 机器。对于防火墙,您可以关闭或限制大多数服务。一般来说,您向互联网开放的每项服务都会降低防火墙的安全性,因为每项服务都邀请某人尝试偷偷进入您的系统。例如,如果您打开 TELNET,有人可以使用它来闯入。一种更安全的替代方案是将 TELNET 限制为某些传入 IP 地址,例如您可能用于从工作场所访问家庭系统的 IP 地址。如果您没有计划从互联网 TELNET 或 FTP 进入您的防火墙,并且您的所有流量都来自本地 LAN 内部,您可以相当严格地锁定您的防火墙。随时了解新的安全漏洞及其修复程序始终是一个好主意。请访问 http://www.cert.org/ 获取更多信息。

操作理论

拥有防火墙有很多原因,我已经提到了一些。它们包括

  • 确保您内联网上的本地流量不会泄漏到互联网。

  • 允许在您的 LAN 中充分使用文件和打印机共享,而无需担心不必要的入侵。

  • 为您的 LAN 提供安全保障。

  • 允许您自己和授权用户访问您的 LAN 以读取电子邮件、收听 MP3 或访问文件备份。

LAN 和互联网流量路由

当您使用 Windows “网上邻居”从 LAN 上的另一台本地 PC 复制文件,或者当您从 LAN 上的另一台 PC FTP 文件时,该流量没有理由进入互联网。如果您有一个直接连接到 LAN 的高速调制解调器,它将发送出该数据,因为它无法知道不应将其发送到那里。默认情况下,它会发送它看到的所有流量,尽管它不太可能通过链中的下一个路由器,但它正在发送不需要存在的数据。这可能会影响本地 LAN 的整体速度。您可能不希望此特定流量通过互联网传输,因此防火墙会阻止它。

无论操作系统如何,我们 PC 上的 TCP/IP 设置之一是“默认路由”。当在我们的本地 LAN 上找不到目标 IP 地址时(这由子网掩码确定),则使用默认路由。在本例中,默认路由将指向防火墙本地 LAN 侧的 NIC 的 IP 地址(图 1 中的以太网 0)。此 IP 地址通常以 1 结尾。例如,如果您的本地 LAN 的网络地址为 192.168.0.0,子网掩码为 255.255.255.0,则您有 192.168.0.1 到 192.168.0.254 可用于本地 IP 地址(有关 Linux NET-3-HOWTO 的更多信息,请参阅资源)。在这种情况下,192.168.0.1 通常会分配给防火墙上的 NIC。

任何旨在寻址我们本地 LAN 外部 IP 地址的流量都将进入防火墙。防火墙将用防火墙的 IP 地址(由您的 ISP 分配)替换(伪装)发起数据包的本地 LAN 中 PC 的源地址,这样对于互联网而言,流量看起来像是来自防火墙,并且来自有效的 IP 地址。任何与此原始数据包相关的返回数据包都将经过反向转换,以便流量找到返回原始 PC 的路径。

可以设置规则以允许某些数据包通过防火墙或被完全阻止。默认情况下,没有任何数据包可以通过。需要一小部分规则来支持 TELNET、HTTP、IMAP 和 POP3 等功能,并且需要一些额外的规则来允许 RealAudio 或在线游戏等其他功能正常运行。(游戏可能更难设置,因为每个游戏都不同。)

网络设计

表 1

在图 1 中,您可以看到典型的中小型 LAN/防火墙配置的外观。您需要确定您的网络中有多少台 PC,以及其中有多少台将连接到互联网。为您的内部网络选择的 IP 地址将由网络的大小决定。表 1 显示了哪些 IP 地址组已预留用于专用 LAN,例如我们正在设计的 LAN。在大多数情况下,C 类网络地址就足够了,因为它将允许我们的 LAN 中最多有 253 台主机或 PC,为一个 IP 地址留给防火墙。表 2 显示了一个示例配置。

表 2

完整的防火墙将在几个阶段构建。这些阶段包括构建和配置硬件、安装和配置 Linux、配置网卡、构建新内核、建立网络之间的路由,然后引入安全措施并锁定 PC 和本地 LAN。

构建硬件

首先,您必须决定要构建哪种类型的系统。如果您只想将防火墙用于防火墙/路由目的,那么一旦设置并运行后,它就不需要键盘或显示器。实际上,许多系统无需显卡即可运行;但是,您可能希望手头留一个,以防系统故障。可以通过经由 TELNET 通过本地 LAN 连接到防火墙,或者在笔记本电脑上使用调制解调器程序(例如 Hyperterm)并通过串行端口连接到防火墙来完成软件更改。这种类型的配置非常适合 LRP。如果您确实希望在您的机器上有一些用户阅读电子邮件(本地或通过 TELNET),您将需要硬盘驱动器和足够的 RAM 来处理该任务。如果您不加载不需要的软件包(例如 X 服务器或源代码),并且您的用户牢记空间限制,则 200MB 硬盘驱动器和 16MB RAM 就可以满足此需求。如果您计划让 LAN 将您的防火墙 PC 用于其他功能,您将需要在所有方面对其进行相应的升级:内存、硬盘驱动器大小和处理器速度。

您的防火墙中至少需要两块网卡。一块网卡将面向互联网,另一块将面向您的本地网络(图 1)。如果您买不起集线器并且只有几台 PC 需要连接,您可以在防火墙中安装多块网卡,每台 PC 一块,并将以太网电缆布线为“环回”电缆。如今,在某些市场上可以廉价地找到 ISA 网卡,并且可能比以太网集线器更便宜。在您的防火墙机器中使用两块以上的网卡将需要在您的防火墙中设置更多规则,但这很容易处理。

如果您的网卡是跳线式网卡,使用非易失性 RAM (NVRAM) 来记住其设置(I/O 地址、IRQ 等),您将需要网卡的 DOS 配置磁盘。大多数网卡的配置软件都可以在网卡制造商的网站或一些有用的 Windows 驱动程序存储库站点上找到。

制作一张 DOS 软盘启动盘,并将每张网卡的配置程序放在软盘上方便使用。

表 3

一次安装一块网卡并启动您的 PC。运行该网卡的配置软件,并设置 I/O 地址和 IRQ 设置。确保您没有将网卡配置为已被其他网卡使用的设置。对于 I/O 地址,您可能遇到的唯一问题是带有专有控制器的旧 CD-ROM 驱动器(参见表 3)。配置完成后,卸下网卡,插入下一块网卡并重复该过程。一旦您单独配置了您的网卡,您就可以将它们全部安装在防火墙中。在我的防火墙中,我的第一块网卡设置为 I/O 地址 300 和 IRQ 12,而我的第二块网卡设置为 I/O 地址 320 和 IRQ 15。

现在是安装 Linux 的时候了。以下示例配置基于 Linux 内核 2.2.9。如果您从网络或最近的 CD 安装 Linux 发行版,您可能会发现其中包含此内核。如果不是,您可以从 https://linuxkernel.org.cn/ 获取它。发行版越新,您遇到过时库或实用程序的可能性就越小。我们将用于控制防火墙的实用程序之一称为 ipchains。此程序仅在内核版本 2.2.x 及更高版本上运行。如果您计划使用早期版本的内核,您将需要找到 ipfwadm。始终最好使用最新的(但不一定是最新)内核版本。按照您的发行版提供的说明进行操作,并安装发行版。如果 CD 上的默认内核不是 2.2.x 变体,请不要担心;无论如何,您稍后都需要构建一个新的内核。如果您正在构建一个小型系统,您将希望尽可能少地安装发行版。至少,您需要安装基本文件和网络支持。

配置网络

在安装过程中的某个时刻,系统会要求您配置以太网接口(端口)。通常,您只能在安装期间配置其中一个接口。其余接口可以通过编辑配置文件来配置。或者,Red Hat 6 提供了一个基于 GUI 的应用程序,称为 netcfg;但是,它需要您安装 X 服务器,如果您硬盘驱动器空间紧张或不打算将显示器连接到 PC,我不建议这样做。当您遇到第一个接口(通常称为 eth0)的配置请求时,您应该输入有关您的本地 LAN 的信息。在表 2 中的示例中,我们将此接口配置为

IP address: 192.168.0.1
Subnet Mask: 255.255.255.0

列表 1

防火墙(而不是 LAN 内部的 PC)的默认网关是您的 ISP 提供的网关。如果您的 ISP 提供的子网掩码以 .0 结尾,则您的 ISP 网关 IP 地址通常以 .1 结尾,例如 193.181.132.1。在发行版的设置和安装完成后,您将必须添加有关您的第二个以太网接口(通常称为 eth1)的其他信息。我们将需要编辑或创建 Slackware(列表 1)和 Red Hat 6.0(Red Hat 边栏)的配置文件。

Red Hat 配置文件

如果您的 NIC 卡都是同一类型或都使用相同的驱动程序,您必须告诉 Linux 在启动时搜索多个该类型的卡。LILO 提供了一种很好的方法来做到这一点,它适用于我尝试过的大多数以太网驱动程序。编辑文件 /etc/lilo.conf 并在文件顶部的 LILO 全局部分附近添加以下行

append="ether=0,0,eth1"

如果您有两块以上的以太网卡,您将添加

append="ether=0,0,eth1 ether=0,0,eth2"
您还可以通过在一行中使用以下内容显式定义所有卡,而不是仅仅告诉系统查找额外的卡
append="ether=irq_card0,io=0xaddress0,eth0 ether=irq_card1,io=0xaddress1,eth1"
在我上面配置的卡的示例中,然后我可以使用
append="ether=12,0x300,eth0 ether=15,0x320,eth1"
不要忘记在您完成编辑文件后键入 lilo,以便读取并安装新的 lilo 参数,但更重要的是在此时,以便您知道您没有在 LILO 配置文件中创建任何错误。

暂时不要重新启动,因为我们仍然需要构建一个内核来支持我们的各种硬件和防火墙需求。

构建内核

列表 2

需要各种配置才能使内核运行。列表 2 显示了我在我的系统中使用的设置。如果您以前从未构建过内核,请参阅 David Bandel 在 1997 年 11 月第 43 期Linux Journal 中的“Linux 内核安装”。快速摘要如下

cd /usr/src/linux
make menuconfig

查看许多屏幕,阅读帮助和它指向的任何其他参考文档。这将帮助您确定您需要的选项。在您完成选择您的选项后,保存内核,然后键入

make dep
make bzlilo
make modules
make modules_install
生成的文件,名为 vmlinuz 的新内核文件和一个新的 System.map 文件,很可能位于根目录 / 中。您将需要将 System.map 文件复制到根目录,如下所示
cp /System.map root
还要确保文件 /etc/lilo.conf 及其中的行 image=IMAGENAME(其中 IMAGENAME 是在启动时使用的内核的名称和位置)是正确的。如果它没有指向正确的位置,请更改它并重新执行 lilo 命令以完成设置新内核的过程。

这将构建并安装 Linux 内核,更新 LILO 以反映新内核,并安装各种模块,例如对 RealAudio 的支持,默认情况下 RealAudio 被防火墙阻止。

列表 2 仅包括使防火墙功能正常运行所需的那些选项。其他选项(例如处理器类型)被省略,因为这些选项特定于您用于此项目的硬件。作为一项规则,我尽可能少地将内容放入内核中,并且我尽量减少模块的使用。如果您不确定列表 2 中显示的选项是如何使用的,或者它在内核配置程序中的哪个位置显示,您可以通过单击该部分中的项目的帮助来匹配项目。您将在帮助页面的顶部找到其配置文件名。同样,如果它未在列表 2 中显示,并且您不需要它来使您的硬件运行或支持某些其他功能,则应将其设置为关闭。

如果您正在构建一个裸机系统,并且打算在其他地方编译内核,请务必首先将您的内核保存在该机器上,并将该 PC 的内核配置保存在备用文件中(参见内核配置程序菜单的底部)。构建完成后,您需要通过飞盘网或 LAN 将文件复制到防火墙 PC。不要忘记也复制安装在 /lib/modules/2.2.9 中的模块。

现在是时候重新启动 PC 并祈祷一切顺利了。如果一切正常,两块以太网卡都将被识别,并且它们都将被配置。当系统完全启动后,以 root 身份登录并键入 ifconfig。它应该显示有关三个接口的详细信息

  • lo0:本地环回接口

  • eth0:指向您的本地 LAN 的以太网端口

  • eth1:指向互联网的以太网端口

您还可以键入 route 并查看哪些默认路由已启动。它应该显示到互联网的默认路由,以及有关您的本地 LAN 的一些信息。此时,防火墙应该能够同时看到您的本地 LAN 和互联网。如果您此时将高速调制解调器连接到 eth1 端口,您应该能够 ping 互联网上的站点(例如,ping www.linuxjournal.com)并看到大约每秒一次的响应返回。按 CTRL-c 停止 ping。某些高速调制解调器需要学习您的以太网卡的 MAC 地址,并且仅在每次打开时才这样做。因此,如果您要将调制解调器连接到与之前连接的以太网卡不同的以太网卡,您将必须关闭调制解调器和您的防火墙 PC 的电源,打开调制解调器的电源,等待几秒钟,然后打开 PC 的电源。如果您不这样做,您可能会发现您根本无法访问互联网。

锁定防火墙

我们目前有一台 Linux PC,连接在两个网络的中间。它可以同时看到这两个网络,并且这两个网络也可以看到它。该 PC 也完全开放,所有默认端口都已打开。我们希望尽可能地限制这一点。人们总是在寻找入侵系统的新方法。我们越是将此防火墙锁定在外部,我们就越不容易受到攻击。没有什么是完美的,确保人们被拒之门外的唯一真正方法是在您不在时拔下您的以太网连接。由于这对我们大多数人来说是不可取的,因此这是次好的选择。

现在需要做的是禁用我们不需要的所有服务。如果您要将其制成真正的防火墙,您可以禁用几乎所有内容,除了 TELNET 和 FTP,并且这两个将仅限于来自您的 LAN 内部和受信任的外部 IP 地址的端口。

列表 3

文件 /etc/inetd.conf(如列表 3 所示)是配置这些端口的位置。此文件影响终止于防火墙而不是通过防火墙的流量。禁用 POP3 或 IMAP 之类的服务是可以接受的,因为当您从网络内部的 PC 获取邮件时,此流量将通过防火墙(但不会停止)到达您的 ISP 的 POP3 或 IMAP 邮件服务器。

请记住,您选择保持开放的端口和地址越多,您就需要越密切地监视您的防火墙以防入侵尝试。我们已将 TELNET 和 FTP 保持开放,因此我们将希望将两个网络上的源 IP 地址限制为我们希望允许进入的那些地址。

设置服务

这通过编辑文件 /etc/hosts.deny 和 /etc/hosts.allow 来完成。通过编辑这些文件,您可以拒绝所有人访问,除了少数特定的地址或地址范围,或者您可以默认允许所有人进入,并在以后当您发现来自这些点的恶意访问时禁用有问题的 IP 地址。如果是这种情况,请务必密切关注您的系统日志。有关更多详细信息,请参阅“设置服务”边栏。从某种意义上说,我们可以保持 inetd.conf 不变,并通过 /etc/hosts.deny 表限制人们对这些端口的访问;但是,始终最好以多种方式锁定端口。

默认情况下,大多数 UNIX 系统不允许 root 从控制台以外的任何位置登录。如果您的系统未按这种方式设置,则应按这种方式设置。您至少会希望减慢可能想要进入您的系统的人的速度。如果他们无法直接以 root 身份登录,这是一个额外的安全优势。检查文件 /etc/securetty。在 Red Hat 6.0 中,在表中查找 pty1、pty2 等条目。在 Slackware 中,在表中查找 ttyp0、ttyp1 等条目。如果这些条目存在,则允许在这些 TELNET tty 上进行 root 登录;因此,删除这些条目。表中的其他剩余条目涵盖您的各种控制台和串行端口。

由于您无法以 root 身份远程登录,并且您没有带有显示器和键盘的控制台,因此最好向防火墙添加第二个用户,以确保您可以“su to root”来在防火墙上工作。

useradd -g 100 -d /home/USER -s /bin/tcsh -c\
 'YOURNAME' USER passwd USER

-g 控制此用户将属于哪个组。在本例中,使用了 100,因为这是 Red Hat 6.0 中的用户组。如果这对您不起作用,请查看 /etc/group 以查找合适的组。您的姓名 是您想要放入用户帐户的“姓名”字段的任何内容,用户 是为用户选择的 ID,即,我可能会选择使用 jeff 作为我的 ID。

停止额外进程

在一个小型系统中,我们希望运行的唯一进程是与防火墙运行相关的进程。这意味着禁用进程:除了一个或两个控制台、Sendmail 和您不需要的任何其他进程之外的所有进程。您可以通过键入以下内容来查看当前正在运行的内容

ps -xa

为了防止 Sendmail 下次启动,您将需要移动或编辑它启动的文件。Linux 通常在运行级别 3 中启动。在 Red Hat 6.0 中,您可以通过查看 /etc/inittab 并查找读取 id:3:initdefault: 的行来检查这一点。3 表示运行级别 3。因此,在 /etc/rc.d/rc3.d 中,有一个名为 S80sendmail 的文件。将此文件移动到 80sendmail,如下所示

mv /etc/rc.d/rc3.d/S80sendmail\
/etc/rc.d/rc3.d/80sendmail

某些程序(如 elm)需要 Sendmail 正在运行才能正常运行。这对外面的世界打开了一个潜在的漏洞,因为它也意味着端口 25 将对可能的攻击甚至是邮件中继开放——允许互联网上的其他人使用您的防火墙发送垃圾邮件。关闭端口 25 访问是防止此问题的最简单方法。其他解决方案可以在 http://www.sendmail.org/ 上找到。

在 Slackware 中,编辑 /etc/rc.d/rc.M 并更改行

/usr/sbin/sendmail -bd -q15m

/usr/sbin/sendmail -bm -q15m

在 Red Hat 6.0 中,编辑 /etc/rc.d/rc3.d/S80sendmail 并更改行

daemon /usr/sbin/sendmail $([ "$DAEMON" = yes ] && echo -bd) \

daemon /usr/sbin/sendmail $([ "$DAEMON" = yes ] && echo -bm) \
创建防火墙

目前,我们有一台相当安全的 PC,但它无法传递从本地 LAN 到互联网的网络流量。现在是时候设置和配置规则了,这些规则将使我们的防火墙发挥作用。如前所述,这些规则允许可接受的数据包通过防火墙,同时仍然为不可接受的数据包提供各种级别的安全性。

http://www.rustcorp.com/ipchains/ 下载(使用 FTP)ipchains 软件包。按照您从软件包中获得的安装说明将其安装在您的系统上。

列表 4

列表 4 显示了 /etc/rc.d/rc.local 文件,该文件用于启动通常不作为发行版安装一部分启动的任何进程。正是在这里,我们设置了防火墙的规则。由于我们的防火墙非常简单,我们只需要设置伪装数据包的转发。为了能够使用 FTP、RealAudio、IRC 和其他功能的全部功能,我们也需要支持它们的端口要求。许多这些功能可以使用上面的 ipchains 命令来支持,但有一些可加载的模块可以处理这个问题,例如列表 4 中的示例 rc.local 文件中显示的那些模块。请参阅 /lib/modules/2.2.9/ipv4 以获取您的内核中支持的模块列表。此目录应已在您之前构建内核时创建。

应该就是这样了。您现在可以测试您的网络防火墙了。将您本地 LAN 内部的一台 PC 设置为图 1 中显示的示例设置之一。例如,在 Windows 95 上,您将需要输入本地 LAN IP(例如 192.168.0.10)、子网掩码 255.255.255.0、网关 IP 192.168.0.1 和 ISP 提供给您的 DNS 条目。如果高速调制解调器最初连接到此 PC,则 PC 中的 DNS 条目应已设置。

要测试您的新防火墙,请尝试使用您内部 LAN 上的一台 PC 连接到网站。尝试使用 RealAudio、FTP 和您经常使用的其他功能。如果这些功能都不起作用,请尝试使用 TELNET 连接到防火墙 PC。如果您可以这样做,并且您可以从防火墙 PC ping 互联网上的站点(或通过 TELNET 访问它),请检查您的 /etc/rc.d/rc.local 文件中的规则,因为您可能没有启用 IP 转发。如果 Web 访问有效,但(例如)IRC 无效,请检查您是否正确加载了 IRC 模块。使用命令 lsmod 显示哪些模块已加载。

使用 Linux 路由器项目构建防火墙

我将描述的 LRP 配置也使用了图 1 中的设置。它是在配备 12MB 内存、1.44MB 软盘驱动器、两块 Western Digital ISA 网卡且没有硬盘驱动器的 486 上设置的。对于您的系统,请以与本文前面完整的防火墙构建相同的方式安装和配置网卡。LRP 版本 2.9.4 基于内核版本 2.0.36。此内核比上面使用的 2.2.9 旧,因此,如果您想要高级防火墙,它不提供您可能需要的某些功能。当您阅读本文时,很可能会有一个基于内核版本 2.2.x 的新版本可用。我将描述设置版本 2.9.4,如果您需要 2.2.x 的某些功能,您将拥有一个可以从中着手的基础。

LRP 使用 DOS 格式化的软盘,格式化为标准的 1.44MB 磁盘或更大的磁盘。(一个名为 2m 的实用程序可以从软盘中挤出额外的可用存储空间。)在启动时,会创建一个 RAM 磁盘,该磁盘用作实时文件系统。系统的各个部分是从以 .lrp 结尾并在软盘上找到的压缩存档文件 (tar) 创建的。一般来说,软盘可以在写保护打开的情况下运行。这意味着如果有人找到进入您的防火墙的方法,他们所做的任何更改都会在系统重新启动时消失。

LRP 有多种形式。困难的方法是创建一个磁盘,使用名为 syslinux 的程序使其可启动,并安装内核和各种所需的 LRP 文件。但是,在 ftp://ftp.linuxrouter.org/linux-router/dists/2.9.4/,您将在下载部分找到一个名为 idiot-image_1440KB_2.9.4 的文件。名称可能不太讨人喜欢,但它是开始构建 LRP 磁盘的最简单方法。在您通过 FTP 获取文件后,通过以下两种方式之一将其复制到软盘。在 DOS 中,使用您的 Linux 发行版附带的 rawrite 实用程序。在 Linux 中,键入

cp idiot-image_1440KB_2.9.4 /dev/fd0

我假设 /dev/fd0 是您的 1.44MB 软盘,但如果不是,请将 fd0 更改为正确的设备名称。

现在转到 http://www.linuxrouter.org/modmaker/ 并制作一个内核,其中包括对我们的网卡的硬件支持,并包括支持 FTP、RealAudio 等所需的任何模块。此网站是生成内核的一种非常好的方法。单击 2.0.36final 并勾选您需要的模块。除非您知道您不想要此列表中的少数伪装模块之一(例如 IRC)的支持,否则勾选以 ip_masq 开头的所有选项,例如 ip_masq_irc 和 ip_masq_ftp。然后向下滚动列表并找到您的硬件的驱动程序。您可能必须做一些研究,了解您的 NIC 卡所需的驱动程序。如果您不知道要选择哪个驱动程序,请在正常运行的完整 Linux 系统上运行 make menuconfig 并查看“网络设备支持”下的设备。当您找到您的网卡时,查看帮助并找出其模块名称。此模块名称是您需要在您正在查看的模块制作器屏幕上勾选的内容。如果您想支持串行端口访问以使用串行端口连接到您的防火墙进行维护,请也选择串行模块。

在您做出这些选择后,单击“创建 modules.lrp 文件”并下载 modules.lrp 的副本和内核的副本。使用 DOS copy 命令或 Linux 中的 mcopy 将这些文件复制到您的软盘。当您将下载的内核复制到软盘时,将其命名为 linux。您将必须覆盖现有的 modules.lrp 和 linux 文件。

您现在可以启动系统了。它应该启动,但可能无法识别您的一个或两个网卡,因为我们可能仍然需要向模块设置添加一些选项,如下所述。

列表 5

以 root 用户身份登录。您将看到一个菜单,其中包含各种可用的配置选项。选择 1 进入“网络设置”,然后再次选择 1 进入“网络配置(自动)”。清单 5 显示了文件 /etc/network.conf 的示例。根据您的需求在屏幕上编辑该文件,以我的示例作为参考。我在示例中尽可能详细地说明了。按 CTRL-W 保存文件,然后按 CTRL-C 返回菜单。

接下来,使用菜单选项 4 和 5 编辑 /etc/hosts.allow 和 /etc/hosts.deny 文件。现在应用的规则与构建第一个防火墙时相同。有关更多详细信息,请参阅侧边栏“设置服务”。

退出返回到主配置菜单,然后选择选项 2 进入系统设置。如果您需要之前提到的串行端口访问,则需要从菜单中选择选项 2 编辑 /etc/inittab 文件。您将在文件末尾附近找到被注释掉的串行端口访问。取消注释该行以使其生效。

清单 6

最后一步是配置模块以支持网卡,如果网卡在启动时未被自动检测到。退出返回到主配置菜单,然后选择 3 进入“软件包设置”,选择 2 进入“模块”,再选择 1 进入“内核模块”。找到显示您系统模块的行。清单 6 是 /etc/modules 文件的一个示例。对于我的 WD 以太网卡,我使用配置信息来告知 WD 驱动程序在何处找到每张网卡。

为了避免可能出现的问题,最后一步是删除 /etc/resolv.conf 文件。如果您有该文件,即使您在配置菜单中关闭了 DNS 支持,它也会被使用。

差不多就是这样了。请务必更改 root 密码,并且不要忘记通过主菜单中的备份选项将您的更改(目前,它们仅在您的 RAM 磁盘上更改)备份到软盘。您应该能够使用基本防火墙启动,并且它的功能应该与我们上面构建的防火墙类似。它的可配置性较低仅仅是因为缺少硬盘驱动器,但是您可以在此基础上进行构建。如果您退出菜单程序并进入 shell 提示符,但想要返回菜单,请键入 lrcfg 并按 ENTER

使用动态 (DHCP) 地址

某些服务提供商不会为您的连接分配 IP 地址,而是在您每次启动 PC 时以及之后定期分配一个。这被称为 DHCP,即动态主机配置协议。某些提供商允许您选择要使用的协议。使用哪种协议的决定取决于您的情况。DHCP 意味着其他人很难长时间找到您的 PC 并入侵,因为您的 IP 地址会不时更改。但是,如果您希望使用 TELNET 或 FTP 从 Internet 登录,则必须找到一种方法来通知您每次更改时防火墙的新 IP 地址。

Red Hat 6.0 可以轻松地为一个接口设置 DHCP 支持。对于面向 Internet 的 NIC,根据 Red Hat 侧边栏中的说明,编辑 /etc/sysconfig/network-scripts/ifcfg-eth1 文件并将其设置为使用 DHCP。如果您有可用的 X 服务器,您也可以通过 netcfg 编辑设置。

对于 Slackware 和 LRP 而言,这并没有那么容易。DHCPCD 是最新 Slackware 上预装的程序,但可能需要配置。对于 Slackware,您可以启动 dhcpcd INTERFACE,其中在我们的示例中,INTERFACE 将是 eth1。完成此操作后,您将创建路由表。因此,通过将此行放在 /etc/rc.d/rc.inet1 文件中来启动 DHCPCD,如清单 1 所示。您无需像之前讨论的静态 IP 示例中那样定义第二张网卡。

对于 LRP,您将必须使用 FTP 获取 DHCPCD 并在您的系统上构建它(请记住,.lrp 文件实际上是压缩(zip)文件的组,这些文件构成 tar 存档中的文件系统)。当您阅读本文时,希望可以找到适用于 LRP 的 DHCP.LRP 文件。有关 DHCP 设置的更多信息,请查看“资源”中列出的 mini-FAQ。

最新进展

在过去的几个月中,一些服务提供商推出了以太网点对点协议 (PPPOE)。顾名思义,这与大多数拨号连接使用的点对点协议 (PPP) 有些相似。引入它的原因有很多。一些原因是提供访问控制以及基于用户使用量的计费。由于它类似于拨号 PPP,因此您每次启动 PC 时以及如果您从不关闭 PC,则可能会定期分配不同的 IP 地址。在我观察到的一次安装中,我看到 IP 地址在几天到一周后的任何时间都会更改。对于试图阻止客户在其高速连接上运行网页或 FTP 服务器的服务提供商而言,不断变化的 IP 地址使他们可以轻松阻止此类用途。

为了能够使用 PPPOE 与提供商通信,您的防火墙.X 上将需要与 PPPOE 兼容的软件/驱动程序。一些服务提供商将至少提供软件和安装说明,即使不提供安装 PPPOE 软件本身的全方位技术支持。如果您的服务提供商没有提供软件,请在网上查找 PPPOE,您应该会找到足够的信息来帮助您入门。基本的防火墙配置不会更改,只会更改面向 ISP 的以太网接口的配置。

总结

我向您介绍的只是一个开始。它可能非常适合您的应用,但您可能还希望扩展其功能。我在防火墙中添加了第三张网卡,以便可以支持第二个本地 LAN 网段。这样做效果很好,因为它使我无需购买另一个集线器,并且还意味着,当我在本地 LAN 上复制文件等占用大量带宽时,我不会占用另一个本地 LAN 上的带宽,因此恰好是第二个 LAN 网段上唯一用户的用户可以毫无困难地访问 Internet。该级别的防火墙充当路由器,并允许用户打印到我的打印机或访问此网段上的文件,同时阻止外部人员这样做。

我的防火墙还充当我笔记本电脑的 DHCP 服务器(使用 dhcpd),这样,当我在旅途中或在家中时,我都可以将 PC 设置为 DHCP。

您可能考虑的其他用途包括允许少量外部用户通过防火墙上的 shell 帐户读取邮件(他们可以使用 IMAP 或 POP 收取邮件,并使用 Elm 或 Pine 等工具阅读邮件)。您还可以在防火墙上为内部 LAN 或外部 LAN 创建小型 Web 服务器。Shell 帐户和 Apache 要求您启用原本已禁用的服务。

我也曾有机会看到通过 Linux 防火墙进行的虚拟专用网络连接。这可以用于允许您通过 Internet 访问您的内部 LAN 并添加加密和其他功能。如果您经常出差,并且通常可能需要拨打长途电话才能进入您的 LAN,这将非常方便。只需在您当前所在位置拨打 ISP,即可开始使用。

您还可以通过在完整防火墙中实施其他规则来防止 IP 欺骗,从而提高整体安全性。这些规则已包含在 LRP 中。

如您所见,您可以使用那台放在壁橱里积满灰尘的旧 486 电脑做很多事情。它可以成为一个出色的防火墙,并且如果您有多台 PC 要连接到高速调制解调器,它可以为您提供一定的灵活性。请记住尽一切努力来及时了解可能有人发现的任何新的安全漏洞。查看本文末尾的资源,以了解更多关于在哪里查找更多持续安全信息的信息。

资源

An Introduction to Using Linux as a Multipurpose Firewall
Jeff Regan 是加拿大电信提供商的一名电气工程师。他于 1993 年开始使用 Linux,内核版本为 0.0.93。可以通过 jeregan@computer.org 与他联系。
加载 Disqus 评论