这里,介绍一种通过floppyfw软件包将一台旧PC设置为包过滤防火墙的方法。该防火墙的特点是:1、仅需要一张软盘就可以启动运行;2、完全运行在RAM中;3、以ipchains为过滤规则。这种防火墙还支持IP地址隐藏(IP masquerading)、端口转发、并能够通过syslog将日志记录到远程主机上。所有这些工作都可以运行在一台只有8 MB RAM并且没有硬盘的计算机上,真的难以置信!
Floppyfw的作者Thomas Lundquist将它形容为“具有防火墙功能的Linux路由器(screening router)”。Floppyfw通过Linux内核启动,并且提供了实现上述防火墙功能的最小工具集。这是它的一个重要特性,因为即使一个入侵者采用某种手段进入了防火墙,他也没有很多可以对造成损害的工具可用。另外,因为防火墙完全运行在RAM中,所以只需要通过软盘重新启动就可以将系统恢复到最初的状态。
同许多其他的Linux工程一样,floppyfw具有自定制特性。但是,在这里向推荐所发现的一系列几乎可以立即执行的过滤规则,这样就可以快速构建自己的防火墙了。
硬件需求
一台比较合适的计算机(或者是足以组装一台的部件),它应该是一台386以上的计算机,基本配置如下:
最少8-MB RAM
3.5"软盘驱动器
显卡
键盘
显示器
注意,如果想让floppyfw自主运行,可能只是在配置与测试的时候才需要键盘和显示器。
需要安装一对网卡,floppyfw支持下面几种类型的网卡:
3Com 3c509
NE2000 compatibles
Tulip-based
Intel EtherExpress PCI
要保证每块网卡都有各自的中断号(IRQ)和内存地址。中断号(IRQ)和内存地址在有跳线的网卡上设置起来很简单。使用的是一对儿3Com 3c509网卡,当第一次启动计算机时,这两块网卡的配置都是IRQ 10和0x300。是用3Com公司的DOS实用程序3C5X9CFG.EXE解决这个问题的:首先,制作一个DOS启动盘,并将3C5X9CFG.EXE拷贝到该盘上;然后用这个软盘启动计算机并运行3C5X9CFG.EXE(当然,两个网卡都要插在主板上);选择其中一块网卡,为其选择一个新的IRQ和内存地址;对另外一块网卡也重新进行配置,记住,要保存新的设置。是在EtherDisk 4.3上找到3C5X9CFG.EXE的,可以在3Com的官方网站http://www.3com.com/上找到最新版本的EtherDisk。
软件需求
制作floppyfw引导盘很简单,首先需要在这里(http://www.zelow.no/floppyfw/download/)下载最新的稳定版映象),然后将映象写到软盘上:
# dd if=floppyfw-1.0.5.img of=/dev/fd0 bs=72k
配置
这个软盘是DOS (FAT)格式的,必需首先在另外一台计算机上编辑配置文件之后才能启动它。常常可以使用Linux的mtools,方法如下:
$ cd /tmp
$ mcopy a:config
$ vi config
$ mcopy config a:
如果使用的是其它操作系统,完全可以使用NotePad来完成这些工作。
实际上,floppyfw有5个配置文件:
config (主配置文件)
firewall.ini (过滤规则)
modules.lst (附加的ip_masq模块)
syslinux.cfg (内核引导参数)
syslog.cfg (syslog配置,类似于/etc/syslog.conf)
可能根本不必关心syslinux.cfg和modules.lst,在这里仅仅讨论一下主配置文件config,为了尽量说明问题,这里去掉了大部分注释内容。其中的大部分值的含义是显而易见的。只是文件最后的这些开关项可能有些不好理解:
OPEN_SHELL控制控制台的shell访问(/bin/ash)。
如果计算机的RAM 不足12 MB,将ONLY_8M置为"y"。
USE_SYSLOG决定syslogd是否运行。
SYSLOG_FLAGS表示的是syslogd启动时传递给它的一些标记信息。
文件1(ftp://ftp.mfi.com/pub/sysadmin/2001/jan2001.tar.z)中的是定制的config文件。顺便提到的是,没能让floppyfw与的拨号提供商的DHCP协调工作起来。可能他们用的是一些奇特的非标准DHCP服务器。但是,采用了一种就像是有一个静态的IP地址一样的方法解决了这个问题。到现在已经正常运行两年了,说不准的会运行多久。
过滤规则
现在来看看firewall.ini文件。与floppyfw一起发布的原始firewall.ini文件仅仅设置为基本的地址隐藏和拒绝少数几个端口。由于正在构建一个防火墙,因此必需对其进行必要的修改。但是,建立功能齐全的包过滤规则需要大量的工作。理论上讲,希望先关闭所有的端口,然后再根据将使用的服务打开必要的端口。不要紧张,其实大部分工作已经有人做好了!
是从Robert L. Zieglers的主页http://linux-firewall-tools.com/linux/faq/index.html上的ipchains示例文件着手的。
Ziegler也是《Linux Firewalls》(New Riders Publishing, ISBN: 0735709009----人民邮电出版社已经于2000年10月出版的这本书的中译本)一书的作者,他定制的规则都有很不错的注释,并且对每项设置的目的都给出了详细的解释。当需要打开某些端口时,这些注释是再宝贵不过了的!
这里采用的ipchains规则蓝本可以在这里获得http://linux-firewall-tools.com/ftp/firewall/rc.firewall.ipchains。
建议首先将这个文件通读一遍,不能随便地拿来就用。有些部分甚至包含一些带有"OR"标记的“二选一”片段,必需根据需要进行取舍。只要将前面的注释去掉,就可以激活配置项了。
在有限的软盘存储空间中存储如此大的规则文件显然是不经济的,最好将认为可能永远也用不到的部分删掉以节省磁盘空间的占用。在方便的地方保留一个原始文件的备份以防万一当然是一个比较明智的做法。如果已经完成配置并将其写到软盘中,最好为该软盘制作若干拷贝,免得软盘损坏了又给添乱。
清单2(ftp://ftp.mfi.com/pub/sysadmin/2001/jan2001.tar.z)提供了一个经过修改了的firewall.ini。为了避免进行太多的全局编辑和可能对一个或多个规则造成的破坏,在文件的开头进行了简单的变量替换,这样就可以将floppyfw的变量传给Ziegler所采用的相应的变量。某些情况下,如果没有合适的变量可用,就直接设置那些值。
根据清单2会体会到为了打开允许的内部网客户机访问一些基本的网络服务(诸如DNS、SMTP、POP、NNTP、TELNET、SSH、FTP、HTTP和WHOIS等)的端口的方法。注意,没有打开POP端口,而是采用fetchmail取得远程服务器上的邮件。如果担心从远程主机上接收邮件时可能会被别人监听的话,可以选择fetchmail。因为fetchmail有一个非常好的特性,它允许首先建立一个SSH连接,然后通过这个连接下载的邮件。这种情况下的确不需要打开POP端口。
记录日志
如果使用缺省的syslog.cfg文件,floppyfw会将所有的日志发送到控制台。是采用“无意识”(或者说是没有显示器或键盘)方式运行的防火墙计算机的,所以却省配置对来说没有什么用处。但是,想通过分析日志文件来监视防火墙当前的运行状况,下面就是的解决方法:
将内部网的一台安装了Linux操作系统的计算机配置成日志主机。为了做到这一点,确保的日志主机上的syslogd是带-r选项启动的,这个选项允许这个守侯进程接收网络上传递过来的日志消息(例如,在Red Hat系统中,需要编辑/etc/rc.d/init.d/syslog来做到这一点)。然后,配置syslog.cfg文件,一定要将192.168.1.2改成日志主机的IP地址。可以在清单3(ftp://ftp.mfi.com/pub/sysadmin/2001/jan2001.tar.z)中取得syslog.cfg文件。
一旦完成了这些文件的配置工作并且写回到了软盘中,就可以通过软盘启动并进行一些测试工作了。在确保的内部网络计算机可以相互通信的前提下,检测一下是否可以访问已经为其打开端口的外部服务。如果将日志记录在远程主机上,请密切关注/var/log/messages,否则注意力必需放在防火墙计算机的控制台屏幕上,它们提供了监视防火墙当前工作状况的线索。可能需要将的防火墙规则配置得更巧妙,但是不要忘了将修改后的结果写回软盘哦。
一定要密切关注的日志文件。当最终将防火墙投入使用后,可能会惊奇地发现有那么多的人正在在进行端口扫描或其它一些奇奇怪怪的事情,有了自己的防火墙,感觉很不错吧?
参考资料
Thomas Lundquist设计的floppyfw:http://www.zelow.no/floppyfw/
Robert L. Ziegler 编著的《Linux Firewalls》:http://linux-firewall-tools.com/linux/faq/