防火墙和代理伺服器 - HOWTO 作者: Mark Grennan, markg@netplus.net 译者: 赵平望 tchao@worldnet.att.net v0.4, 1996年11月8日 _________________________________________________________________ v0.4, 1996年11月8日,这篇文章主要在于说明防火墙系统的各种基本概念,并示 □在Linux为基础的个人电脑上安装作为过滤之用的防火墙和代理伺服器的详细步 骤。这份文件的HTML版本载 于http://okcforum.org/~markg/Firewall-HOWTO.html _________________________________________________________________ 1. 导言 * 1.1 读者回应 * 1.2 严正声明 * 1.3 版权宣告 (译注∶版权宣告不译) * 1.4 写这篇文章的动机 * 1.5 有待完成的工作 * 1.6 延伸读物 2. 什么是防火墙 * 2.1 防火墙的缺陷 * 2.2 防火墙的种类 3. 设置防火墙 * 3.1 硬件需求 4. 设置防火墙的软件 * 4.1 现有的套装软件 * 4.2 TIS Firewall Toolkit 和SOCKS间的差异 5. 设定Linux系统 * 5.1 编辑内核 * 5.2 设定两张网路卡 * 5.3 设定Network Addresses * 5.4 测试网路 * 5.5 加固防火墙 6. IP filtering 的设置(IPFWADM) 7. 安装TIS代理伺服器 * 7.1 取得软件 * 7.2 编辑TIS FWTK * 7.3 安装TIS FWTK * 7.4 设置TIS FWTK 8. SOCKS代理伺服器 * 8.1 设定代理伺服器 * 8.2 设置代理伺服器 * 8.3 代理伺服器 * 8.4 代理伺服器的缺点 9. 高级设置 * 9.1 注重安全的大型网路 _________________________________________________________________ 1. 导言 最初的这篇“防火墙 - HOWTO”是David Rudderdrig@execpc.com的作品。他让我 在他的原稿上增订内容,对此我深表感谢。 最近这一阵子, 防火墙(Firewall) 成了网际网路的安全问题的热门话题。但像许多其他热门话题一样,这也同时造 成了许多人对它的误解。这篇HOWTO 将会探讨什麽是防火墙?如何安装?何谓代 理伺服器(Proxy Server)?如何设定代理伺服器?以及这些技术在安全领域以 外的应用。 1.1 读者回应 如果发现这篇文章中有任何错误, 请务必通知我。人非圣贤, 孰能无过! 任何错 误我都乐于更正。来信我都会设法回覆, 但我相当忙, 如果没有收到我的回信, 还请包涵。回信地址markg@netplus.net 如果发现任何误译之处,请立即通知本文译者:赵平望 (tchao@worldnet.att.net)。 1.2 严正声明 我不对任何依照本文所做行为造成的损害负任何责任(I AM NOT RESPONSIBLE FOR ANY DAMAGES INCURRED DUE TO ACTIONS TAKEN BASED ON THIS DOCUMENT) 。这篇文章只介绍防火墙和代理伺服器的作用。要知道,我不是电脑安全问题专 家,也从来没有装成这方面的专家。我只是个喜欢读书,而且爱电脑胜过爱人类 的家伙。我希望这篇文章能帮助你熟悉这个主题, 但不保证内容绝对无误。 1.3 版权宣告 (译注∶版权宣告不译) Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions. All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator. In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs. If you have any questions, please contact Mark Grennan at . 1.4 写这篇文章的动机 尽管去年在comp.os.linux上有许多关于防火墙问题的讨论,但我发现很难找到设 定防火墙所需的资料。这篇HOWTO的原先版本提供了一些帮助,但内容仍嫌不足。 我根据David Rudder编写的Firewall HOWTO作了增订,希望这篇文章提供了足够 的资料,使你能在几小时内就能设定一个可以运作的防火墙,而不再需要花几星 期之久。 我也认为我应该略尽绵力,回报爱好Linux的朋友。 1.5 有待完成的工作 * 指导如何设定客户机 * 寻找能与Linux搭配的UDP代理伺服器 1.6 延伸读物 * NET-2 HOWTO * Ethernet HOWTO * Multiple Ethernet Mini HOWTO * Linux的联网 * PPP HOWTO * O'Reilly and Associates出版的TCP/IP Network Administrator's Guide * TIS Firewall Toolkit的文件 在Trusted Information System (TIS) 网址上收集了许多有关防火墙的文件和相 关材料。http://www.tis.com/ 此外,我也正在从事一项称为Linux安全(Secure Linux)的项目。在Secure Linux网址上,我收集了所有使Linux安全可靠的资料、文件和程式。如果你需要 这方面的资料,请来信索取。 2. 什么是防火墙 防火墙是汽车中一个部件的名称。在汽车中,利用防火墙把乘客和引擎隔开,以 便汽车引擎一旦著火,防火墙不但能保护乘客安全,而同时还能让司机继续控制 引擎。 在电脑中,防火墙是一种装置,可使个别网路不受公共部分(整个网际网 路)的影响。 此後,文中将防火墙电脑称为“防火墙”,它能同时连接受到保护 的网路和网际网路两端。但受到保护的网路无法接到网际网路,网际网路也无法 接到受到保护的网路。 如果要从受到保护的网路内部接到网际网路,就 得telnet到防火墙,然後从防火墙联上网际网路。 最简单的防火墙是dual homed系统(具有两个网路联结的系统)。如果你能相信所有你的用户,那你只要 装设一台Linux(设定时将 IP forwarding/gatewaying 设为 OFF),并让每人设 一帐户。他们随後能登录这一系统,使用telnet、FTP,阅读电子函件和使用所有 你提供的任何其他服务。根据这项设置,这一网路中唯一能与外界联系的电脑便 是这个防火墙。在这个网路中的其他电脑甚至不需要一条公用的路径。 需要再次 说明∶要使上述防火墙发挥作用,就必须相信所有用户!不过,我可不敢这么建 议。 2.1 防火墙的缺陷 用于过滤之用的防火墙的问题是这种防火墙不让网际网路进入你的网路。只有通 过过滤防火墙才能取用功能。在有代理伺服器的情况下,用户可登录到防火墙, 然後进入私有网路内的任何系统。 此外,目前几乎每天都有新型客户机和伺服器 上市。因此,得要有新的方法进入网路才能调用这些功能。 2.2 防火墙的种类 防火墙有两种。 1. IP过滤防火墙 - 除一些网路功能外阻挡一切联网功能。 2. 代理伺服器 - 替你进行网路联结。 IP过滤防火墙 IP过滤防火墙在数据包一层工作。它依据起点、终点、埠号和每一数据包中所含 的数据包种类信息控制数据包的流动。 这种防火墙非常安全,但是缺少有用的登 录记录。它阻挡别人进入个别网路,但也不告诉你何人进入你的公共系统,或何 人从内部进入网际网路。 过滤防火墙是绝对性的过滤系统。即使你要让外界的一 些人进入你的私有伺服器,你也无法让每一个人进入伺服器。 Linux从1.3.x版开 始就在内核中包含了数据包过滤软件。 代理伺服器 代理伺服器允许通过防火墙间接进入网际网路。最好的例子是先telnet系统,然 後从该处再telnet另一个系统。在有代理伺服器的系统中,这项工作就完全自动 。利用客户端软件连接代理伺服器後,代理伺服器启动它的客户端软件(代理) ,然後传回数据。 由于代理伺服器重复所有通讯,因此能够记录所有进行的工作 。 只要配置正确,代理伺服器就绝对安全,这最它最可取之处。它阻挡任何人进 入,因为没有直接的IP通路。 3. 设置防火墙 3.1 硬件需求 在□例中,所用的电脑配置是一块486-DX66芯片,16M内存和500M Linux分割。系 统内还装了两张网路卡,一张连到私有网路,另一张接到一个称为“非军事区” 的网路(译注:指公用网路),而在这个非军事区的网路上,有一个接到网际网 路的路由器(router)。 这种配置极为常见,甚至还可用一张网卡和一台数据机 通过PPP接到网际网路,但关键之处是防火墙上必须有两个IP号码。 不少人家中 都有小网路,把两、三台电脑接在一起。不妨试试把所有数据机都接在跑Linux的 电脑上(老旧的386机),然後利用负载平衡的方式把数据机都接到网际网路。利 用这种装置,如果要传输数据,两部数据机同时工作,可加倍传输的速度。 4. 设置防火墙的软件 4.1 现有的套装软件 如果只要设置一个过滤防火墙,那只要Linux和基本网路软件就够了。有一套软件 可能不在你使用的Linux版本中,称为 IP Firewall Administration工具。 (IPFWADM) 可从 http://www.xos.nl/linux/ipfwadm/取得。 如果要设置代理伺 服器,就需要一个这种套装软件。 1. SOCKS 2. TIS Firewall Toolkit (FWTK) 4.2 TIS Firewall Toolkit 和SOCKS间的差异 Trusted Information System (http://www.tis.com)提供了一系列软件,用以简 化安装防火墙的工作。 这些软件基本上同SOCKS的软件相同,但设计策略不同 。SOCKS利用一套软件执行所有与Internet有关的工作,而TIS对每一个希望使用 防火墙的utility都提供一个软件。 为了说明两者之间的不同,就以world wide web和Telnet为例吧!在SOCKS中,设定一个设置(configuration)档和一 个daemon後,telnet和WWW都能开始工作,同时其他没有关闭的功能也都能够运作 。 但在TIS中,为WWW和telnet都得设定各自的configuration档和daemon。经此 设定後,其他internet的功能仍无法运用,除非对这些功能也作出相关的设定。 如果某一功能(例如talk)没有daemon,虽然有"plug-in" daemon可用,但它不 像其他工具那样灵活,而且也不易设定。 这似乎是小事,但且大有差别。设 置SOCKS时比较可以随意。如果SOCKS伺服器的设置不太完美,从网路内部可以调 用原先并不打算提供的internet功能。如使用TIS,从网路内部只能调用系统管理 者规定的功能。 SOCKS易于设定、易于编辑,并且灵活性较高。如要管制受到保 护的网路内的使用者,则TIS的安全性较高。不过两者都提供了绝对保护,外界无 法进入。 我会说明两者的安装和设定方法。 5. 设定Linux系统 5.1 编辑内核 首先利用Linux版本重新安装Linux系统(我用RedHat 3.0.3,此後实例均以这一 版本为准)。系统中安装的软件越少,毛病和漏洞也越少,因为这些毛病和漏洞 对系统的安全都会产生问题,所以只要安装够用的最少量软件即可。 选用一个稳 定的内核。我的系统用了Linux 2.0.14的内核。 因此,这份文件以这种内核设置 为基础。 根据适当的选项(options)重新编辑内核。 如果以前没有读 过Kernel HOWTO、 Ethernet HOWTO和NET-2 HOWTO,此时不妨利用这个机会读一 读这些HOWTO。 以下是在‘make config’内与网路有关的设定。 1. 在General setup中 1. 设Networking Support 为ON 2. 在Networking Options中 1. 设Network firewalls为 ON 2. 设TCP/IP Networking为 ON 3. 设IP forwarding/gatewaying为 OFF (除非要用IP过滤) 4. 设IP Firewalling为ON 5. 设IP firewall packet loggin为 ON(不是必需,设了更好) 6. 设IP: masquerading 为OFF(不属本文范围) 7. 设IP: accounting 为ON 8. 设IP: tunneling 为OFF 9. 设IP: aliasing 为OFF 10. 设IP: PC/TCP compatibility mode 为OFF 11. 设 IP: Reverse ARP 为OFF 12. 设Drop source routed frames 为ON 3. 在Network device support项下 1. 设Network device support 为ON 2. 设Dummy net driver support 为ON 3. 设Ethernet (10 or 100Mbit) 为ON 4. 选择网路卡 现在重新编辑,重新安装内核,重新启动。网路卡应在启动的提示中显示。如果 没有抓到网路卡,查阅其他HOWTO,直到设对为止。 5.2 设定两张网路卡 电脑中如有两张网路卡,极可能需要在/etc/lilo.conf档中增加一行,说明两张 网路卡的IRQ和地址。在我的机器中,lilo.conf档增加的一行如下∶ append="ether=12,0x300,eth0 ether=15,0x340,eth1" 5.3 设定Network Addresses 这部分比较有趣,而且得要做些决定。由于不打算让网际网路进入自设网路的任 何部分,因此网路中不需要用实际的网址。在网际网路中留了一些地址可让网路 随意使用,因为自设网路总得需要地址,而且这些地址也无法进入网际网路,搅 浑全局。因此不妨选用这些地址。 在这些地址中,192.168.2.xxx是被留用的地 址,因此就用这些地址来作说明。 由于代理伺服器同时身处两个网路,因此它能居中传送两边的数据。 199.1.2.10 __________ 192.168.2.1 _ __ _ \ | | / _______________ | \/ \/ | \| |/ | | 网际网路 \-------------| 防火墙 |-------------------| 工作站 | \_/\_/\_/\_/ |_________| |______________| 如要设置过滤防火墙,依旧可用这些网址,不过得使用IP masquerading。经过这 种设定,防火墙就会转送数据包,并加附实际的IP地址送往网际网路。 在网路卡 的网际网路端(外端)得设定真正的IP地址,在以太网卡的内端设 为192.168.2.1。这是这台电脑代理/网关的IP地址。受保护的网路内的所有其他 电脑均可选用192.168.2.xxx中的任何一个作为地址(从192.168.2.2 到192.168.2.254)。 在RedHat Linux 中,得在 /etc/sysconfig/network-scripts目录下增加一个ifcfg-eth1档,以便在启动时 ,通过这个档设定网路和routing表。 ifcfg-eth1的参数可设定如下∶ #!/bin/sh #>>>Device type: ethernet #>>>Variable declarations: DEVICE=eth1 IPADDR=192.168.2.1 NETMASK=255.255.255.0 NETWORK=192.168.2.0 BROADCAST=192.168.2.255 GATEWAY=199.1.2.10 ONBOOT=yes #>>>End variable declarations 可试用这些参数使数据机与ISP自动连接。不妨看看 ipup-ppp档。 如用数据机与 网际网路连接,ISP会在连接时指定外端的IP地址。 5.4 测试网路 从测试ifconfig和route开始。如机器上有两张网路卡,各项设置应有如下情况∶ #ifconfig lo Link encap:Local Loopback inet addr:127.0.0.0 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:1620 errors:0 dropped:0 overruns:0 TX packets:1620 errors:0 dropped:0 overruns:0 eth0 Link encap:10Mbps Ethernet HWaddr 00:00:09:85:AC:55 inet addr:199.1.2.10 Bcast:199.1.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:12 Base address:0x310 eth1 Link encap:10Mbps Ethernet HWaddr 00:00:09:80:1E:D7 inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:15 Base address:0x350 route 表应看起来如下∶ #route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface 199.1.2.0 * 255.255.255.0 U 1500 0 15 eth0 192.168.2.0 * 255.255.255.0 U 1500 0 0 eth1 127.0.0.0 * 255.0.0.0 U 3584 0 2 lo default 199.1.2.10 * UG 1500 0 72 eth0 注∶ 199.1.2.0在防火墙的网际网路端,192.168.2.0在自设网路一端。 首先试 试从防火墙ping 网际网路。不妨把nic.ddn.mil作试验点。这个试验点还不错, 只是不如我预期的可靠。如果没联上,试试ping几个不是你网路上的地址。如果 仍联不上,则PPP的设定一定不对。再读一次Net-2 HOWTO,然後再试。 然後,试 验从防火墙ping保护网路内的电脑。所有网路内的电脑应能ping网路内的任何其 他一台电脑。如果不行,再读读Net-2 HOWTO,再试一次。 接著试验从保护网路 内ping防火墙以外的地址。(注意∶不属于192.168.2.xxx的任何地址)如果可以 ,表示IP Forwarding的功能没有取消。想一想这是否符合原先的构想。如果保 留IP Forwarding的功能,就别放过下面设定IP filtering的部分。 现在试试从 防火墙後ping 网际网路。利用以前试通的同一地址(例如,nic.ddn.mil)。如 果 IP Forwarding功能已经取消,就不应接通。不过如果这项功能没有取消,就 应该接通。 假设保留了IP Forwarding功能,而在自设的网路中使用实际的IP地 址(不是192.168.2.*),在这种设定下,如果无法ping 网际网路,但能够ping 网际网路边的防火墙,就得检查上一层的router有否把数据包传送到自设网路的 地址上。(可能得由ISP作这项检查) 如果保护网路的地址定为192.168.2.*,则 任何数据包都不能传送。如果没有作这些设定,而使用了IP masquerading,这项 试验应该成功。 至此,各项设定基本完成。 5.5 加固防火墙 如果通过防火墙上没有使用的功能能够随意进出防火墙,则这种防火墙也就没有 什么用处。 "骇客" 能到防火墙内作出必要的修改,供其所用。 首先关闭所有不 用的功能。先检查 /etc/inetd.conf档。这个档控制所谓的"超级伺服器"。它控 制了许多伺服器的daemon,然後在需要时启动这些daemon。 完全取消netstat、 systat、 tftp、 bootp和finger功能。取消功能的方法是把#作为功能行的行首 字母。设定完毕後,键入"kill -HUP ",执行SIG-HUP ,其中 是inetd的程序编号。inetd会再次读取配置档(inetd.conf),并从新启动系统 。 利用telnet 测试防火墙的埠号(port)15,这是netstat的埠号。如netstat 回应网路情况,系统并没有按要求正确地从新启动。 6. IP filtering 的设置(IPFWADM) 首先设定内核的IP Forwarding功能,系统应开始转送每一信息。路径表 (routing table)应已设定,因此应该可以通往任何地点,从网内可以联到网外 ,从网外也可进到网内。 但是防火墙的作用是不让任何人可以随便进出网路。 在示□系统中设定了两套指令(script),对防火墙的forwarding和accounting 作了规定。系统在运行/etc/rc.d时取用这两套指令,因此在系统启动时就对系统 作了设置。 Linux的内核自设转送一切信息的IP Forwarding系统。因此,防火墙 的指令应首先禁止一切进入系统的权利,清除上次运行後留下的任何ipfw规则。 下面的指令应能达到这项目的。 # # setup IP packet Accounting and Forwarding # # Forwarding # # By default DENY all services ipfwadm -F -p deny # Flush all commands ipfwadm -F -f ipfwadm -I -f ipfwadm -O -f 好了,现在有了绝对保险的防火墙。一切都被屏挡在外面,无法穿越防火墙一步 。当然,有些功能还是需要的,下面的一些例子可作参考。 # Forward email to your server ∶转送电子邮件到伺服器 ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.1.2.10 25 # Forward email connections to outside email servers ∶将电子邮件连到网路外的 电子邮件伺服器 ipfwadm -F -a accept -b -P tcp -S 196.1.2.10 25 -D 0.0.0.0/0 1024:65535 # Forward Web connections to your Web Server∶将Web连到Web伺服器 /sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 196.1.2.11 80 # Forward Web connections to outside Web Server∶将Web连到外界Web伺服器 /sbin/ipfwadm -F -a accept -b -P tcp -S 196.1.2.* 80 -D 0.0.0.0/0 1024:65535 # Forward DNS traffic∶转送DNS信息 /sbin/ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 196.1.2.0/24 如果想知道通过防火墙的信息来往情况,下列指令会统计所有数据包。 # Flush the current accounting rules ipfwadm -A -f # Accounting /sbin/ipfwadm -A -f /sbin/ipfwadm -A out -i -S 196.1.2.0/24 -D 0.0.0.0/0 /sbin/ipfwadm -A out -i -S 0.0.0.0/0 -D 196.1.2.0/24 /sbin/ipfwadm -A in -i -S 196.1.2.0/24 -D 0.0.0.0/0 /sbin/ipfwadm -A in -i -S 0.0.0.0/0 -D 196.1.2.0/24 如果只把电脑设为过滤防火墙,到这里就大功告成了! 7. 安装TIS代理伺服器 7.1 取得软件 TIS FWTK软件可从下列网址得到∶ftp://ftp.tis.com/. 千万记住∶从TIS下载软 件後,首先阅读README。TIS fwtk存放在伺服器的一个隐藏目录内,需要发电子 邮件给fwtk-request@tis.com 并在信文内填入SEND才能得知隐藏的目录的名字 。Subject栏内不必填入任何内容。在回覆的电子邮件内会告知存放软件的目录的 名字,有效时间为12小时,得赶快下载。 在编写本文时,FWTK的最新版本为2.0 (beta)。除了几个小地方之外,这个版本在编辑时没有问题,运行时也正常, 此处就以这一版本为例。如有最後定本时,将在以後的HOWTO中增订。 安装FWTK 时,首先在 /usr/src下建立fwtk-2.0目录。将FWTK(fwtk-2.0.tar.gz)放在这 个目录内解压(tar zxf fwtk-2.0.tar.gz)。 FWTK并无代理SSL的网路文件 ,Jean-Christophe Touvet写了一些附加资料,可 从ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z取得。 Eric Wedel写 了修订本,其中包括使用网景(Netscape)的新闻伺服器。这套软件可从下列网 址取得∶ftp://mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z 以下以Eric Wedel的版本为例。 要安装,只要在/usr/src/fwtk-2.0目录内建立 一个 ssl-gw目录,把文档放在其中即可。 在安装这个网关时,得要作些改动才 能进行编辑。 首先改变ssl-gw.c档,其中遗漏了必要的include档。 #if defined(__linux) #include #endif 其次,也没有Makefile档。不妨从其他网关目录拷贝一个,然後将网关的名字改 为ssl-gw。 7.2 编辑TIS FWTK 版本2.0的FWTK比以往任何一个版本都易于编辑。不过在编辑以前还需要对BETA版 本作一些更动。希望这些更动会加附到最後定本中。 修改方法如下∶首先进 入/usr/src/fwtk/fwtk目录,拷贝Makefile.config.linux档,以此档替 代Makefile.config档。 不要运行FIXMAKE。虽然在说明中建议执行这个程序。但 运行後会破坏每一个目录中的makefile。 修改fixmake的方法是在每一 个Makefile的sed指令的include行中添加‘.’和"。按下例更改,便可运行无碍 。 sed 's/^include[ ]*\([^ ].*\)/include \1/' $name .proto > $name 然後需要编辑Makefile.config档,但首先得作两项修改。 Makefile.config档中 的source目录应改为进行编辑的/usr/src,因此FWTKSRCDIR应作相应的改变。 FWTKSRCDIR=/usr/src/fwtk/fwtk 有些Linux系统使用gdbm数据库。Makefile.config使用dbm。例如,RedHat 3.0.3就使用dbm,因此需要作出相应更动。 DBMLIB=-lgdbm 最後需要改x-gw。BETA版内socket.c中的下列数行必需删除。 #ifdef SCM_RIGHTS /* 4.3BSD Reno and later */ + sizeof(un_name->sun_len) + 1 #endif 如在FWTK源目录中添加ssl-gw,则在Makefile的目录单中也要加上ssl-gw。 DIRS= smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw x-gw ssl-gw 完成上述修改後,运行make。 7.3 安装TIS FWTK 运行make install。 默认的安装目录是/usr/local/etc。可以改到更加安全可靠 的目录进行安装,但也可以不改,也可将其特权改为chmod 700。 现在开始设定 防火墙。 7.4 设置TIS FWTK 好!下面就比较有趣了!设定的系统要能调用这些新功能,并建立管制表管理这 些功能。 以下的说明并不是为了要重写TIS FWTK的使用手册,其目的只是为了显 示可行的设定、可能遇到的问题和解决的办法。 有三个文档组成这些controls。 * /etc/services + 告诉系统所定功能在何埠号 * /etc/inetd.conf + 当服务埠有动作时告诉inetd启动那个程式 * /usr/local/etc/netperm-table + 告诉FWTK同意和拒绝来往的用户 要FWTK发挥作用,应彻底编辑这些档案。编辑这些功能档而不正确设定 inetd.conf或netperm-table,可能使系统完全无法作用。 netperm-table档 这个档控制何人可以使用TIS FWTK的功能。首先应该想到防火墙两边的需求。网 路外面的用户在进入网路之前应首先表明身份,但网路内部的用户则可直接通过 。 在表明身份时,防火墙使用一个称为authsrv的程式,其中存有用户的ID和密 码。netperm-table中的authentication部分控制这一数据库存放何处和谁可取用 。 要不让人取用这一功能并不容易,在premit-hosts这一行中使用“*”,以致 每人都能取用这一功能。这一行的正确设定应该是“authsrv: premit-hosts localhost”,但似乎不起作用。 # # Proxy configuration table: 代理伺服器设置表 # # Authentication server and client rules authsrv: database /usr/local/etc/fw-authdb authsrv: permit-hosts * authsrv: badsleep 1200 authsrv: nobogus true # Client Applications using the Authentication server *: authserver 127.0.0.1 114 要启动数据库,以root在/var/local/etc内运行./authsrv,设立管理者的使用记 录。实际操作如下∶ 阅读FWTK文档了解如何添加用户和用户组。 # # authsrv authsrv# list authsrv# adduser admin "Auth DB admin" ok - user added initially disabled authsrv# ena admin enabled authsrv# proto admin pass changed authsrv# pass admin "plugh" Password changed. authsrv# superwiz admin set wizard authsrv# list Report for users in database user group longname ok? proto last ------ ------ ------------------ ----- ------ ----- admin Auth DB admin ena passw never authsrv# display admin Report for user admin (Auth DB admin) Authentication protocol: password Flags: WIZARD authsrv# ^D EOT # Telnet的网关(tn-gw)控制直接了当,应首先设定。 例如,允许在保护网路内 的用户不表明身份直接通过(permit-hosts 196.1.2.* -passok)。但其他用户必 需提供用户ID和密码才可使用代理伺服器(permit-hosts * -auth)。 此外,有一 个系统(196.1.2.202)也可直接使用防火墙。这只要设定inetacl-in.telnetd的内 容即可。 Telnet的timeout时间应该短暂。 # telnet gateway rules: tn-gw: denial-msg /usr/local/etc/tn-deny.txt tn-gw: welcome-msg /usr/local/etc/tn-welcome.txt tn-gw: help-msg /usr/local/etc/tn-help.txt tn-gw: timeout 90 tn-gw: permit-hosts 196.1.2.* -passok -xok tn-gw: permit-hosts * -auth # Only the Administrator can telnet directly to the Firewall via Port 24 netacl-in.telnetd: permit-hosts 196.1.2.202 -exec /usr/sbin/in.telnetd r-command如同telnet的同一方式设定。 # rlogin gateway rules: rlogin-gw: denial-msg /usr/local/etc/rlogin-deny.txt rlogin-gw: welcome-msg /usr/local/etc/rlogin-welcome.txt rlogin-gw: help-msg /usr/local/etc/rlogin-help.txt rlogin-gw: timeout 90 rlogin-gw: permit-hosts 196.1.2.* -passok -xok rlogin-gw: permit-hosts * -auth -xok # Only the Administrator can telnet directly to the Firewall via Port netacl-rlogind: permit-hosts 196.1.2.202 -exec /usr/libexec/rlogind -a 任何人均不得直接进入防火墙,其中包括FTP,因此,不要把FTP伺服器放在防火 墙上。 再者,permit-hosts行允许保护网路内的任何人自由进入网际网路,其他 人则必需表明身份。下文附上送到和收到的每份文档的记录(-log { retr stor })。 FTP的timeout开关控制在多少时间後停止试接,以及在多少时间没有动作 後,放弃试接。 # ftp gateway rules: ftp-gw: denial-msg /usr/local/etc/ftp-deny.txt ftp-gw: welcome-msg /usr/local/etc/ftp-welcome.txt ftp-gw: help-msg /usr/local/etc/ftp-help.txt ftp-gw: timeout 300 ftp-gw: permit-hosts 196.1.2.* -log { retr stor } ftp-gw: permit-hosts * -authall -log { retr stor } 通过WWW、gopher和浏览器进行的ftp由http-gw控制。最上面的两行建立一个目录 ,用于储存经由防火墙的ftp和WWW文件。在本例中,这些文件属root所有,因此 放在只有root能够进入的目录内。 WWW的连接应该短暂。它控制使用者在连接不 通时的等待时间。 # www and gopher gateway rules: http-gw: userid root http-gw: directory /jail http-gw: timeout 90 http-gw: default-httpd www.afs.net http-gw: hosts 196.1.2.* -log { read write ftp } http-gw: deny-hosts * ssl-gw实际上是一个任何人都可通过的网关。应当当心设定。在本例中,任何保 护网路中的用户,除127.0.0.* 和192.1.1.* 外,均可连接网路外的任何伺服器 ,并只能使用443至563 埠号。443至563埠号一般称为SSL埠号。 # ssl gateway rules: ssl-gw: timeout 300 ssl-gw: hosts 196.1.2.* -dest { !127.0.0.* !192.1.1.* *:443:563 } ssl-gw: deny-hosts * 下面的例子说明如何利用plug-gw连接到新闻伺服器。在本例中,保护网路内的用 户只允许连接到一个系统,即连接到它的新闻埠。 第二行使新闻伺服器将其资料 送到保护网路。 对新闻伺服器的timeout时间设定应该比较长,因为多数用户大 都联机阅读新闻。 # NetNews Pluged gateway plug-gw: timeout 3600 plug-gw: port nntp 196.1.2.* -plug-to 199.5.175.22 -port nntp plug-gw: port nntp 199.5.175.22 -plug-to 196.1.2.* -port nntp Finger网关的设定至为简单。保护网路内的用户只要首先登录,就可使用防火墙 上的finger程式。任何其他人就只收到一段message。 # Enable finger service --------设定finger功能 netacl-fingerd: permit-hosts 196.1.2.* -exec /usr/libexec/fingerd netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt 在这份HOWTO中,没有设定Mail和X-windows功能。如任何人有这方面的实例,请 发email给我。 inetd.conf的设置档 下面附上/etc/inetd.conf的全部文档。所有不需要的功能都用#符号注销。在这 份全部文档中显示取消了何种功能,以及显示如何设定新的防火墙功能。 #echo stream tcp nowait root internal #echo dgram udp wait root internal #discard stream tcp nowait root internal #discard dgram udp wait root internal #daytime stream tcp nowait root internal #daytime dgram udp wait root internal #chargen stream tcp nowait root internal #chargen dgram udp wait root internal # FTP firewall gateway --------FTP防火墙网关 ftp-gw stream tcp nowait.400 root /usr/local/etc/ftp-gw ftp-gw # Telnet firewall gateway------Telnet防火墙网关 telnet stream tcp nowait root /usr/local/etc/tn-gw /usr/local/ etc/tn-gw # local telnet services------用户的telnet功能 telnet-a stream tcp nowait root /usr/local/etc/netacl in.telnetd # Gopher firewall gateway------Gopher防火墙网关 gopher stream tcp nowait.400 root /usr/local/etc/http-gw /usr/loca l/etc/http-gw # WWW firewall gateway------WWW防火墙网关 http stream tcp nowait.400 root /usr/local/etc/http-gw /usr/local/etc/ht tp-gw # SSL firewall gateway------SSL防火墙网关 ssl-gw stream tcp nowait root /usr/local/etc/ssl-gw ssl-gw # NetNews firewall proxy (using plug-gw)------NetNews防火墙代理伺服器(使用pl ug-gw) nntp stream tcp nowait root /usr/local/etc/plug-gw plug-gw nntp #nntp stream tcp nowait root /usr/sbin/tcpd in.nntpd # SMTP (email) firewall gateway------SMTP(email)防火墙网关 #smtp stream tcp nowait root /usr/local/etc/smap smap # # Shell, login, exec and talk are BSD protocols------ Shell, login, exec and talk均属BSD协议 # #shell stream tcp nowait root /usr/sbin/tcpd in.rshd #login stream tcp nowait root /usr/sbin/tcpd in.rlogind #exec stream tcp nowait root /usr/sbin/tcpd in.rexecd #talk dgram udp wait root /usr/sbin/tcpd in.talkd #ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd #dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd # # Pop and imap mail services et al------Pop和imap mail功能 # #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d #imap stream tcp nowait root /usr/sbin/tcpd imapd # # The Internet UUCP service------网际网路UUCP功能 # #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l # # Tftp service is provided primarily for booting. Most sites # run this only on machines acting as "boot servers." Do not uncomment # this unless you *need* it. ----- Tftp功能主要用于启动。一般只有作为"boot伺 服器"时才需要tftp。因此,不要取消注销(#)符号。 # #tftp dgram udp wait root /usr/sbin/tcpd in.tftpd #bootps dgram udp wait root /usr/sbin/tcpd bootpd # # Finger, systat and netstat give out user information which may be # valuable to potential "system crackers." Many sites choose to disable # some or all of these services to improve security.------ Finger, systat and netstat会向骇客提供可贵的资料。许多网站取消一些或全部功能,以增安全。 # # cfinger is for GNU finger, which is currently not in use in RHS Linux # cfinger是GNU finger,目前在RHS Linux中并不使用。 # finger stream tcp nowait root /usr/sbin/tcpd in.fingerd #cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd #systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx #netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f ine t # # Time service is used for clock syncronization.-----时间功能用于设定时间的同 步。 # #time stream tcp nowait root /usr/sbin/tcpd in.timed #time dgram udp wait root /usr/sbin/tcpd in.timed # # Authentication-----查验用户身份 # auth stream tcp wait root /usr/sbin/tcpd in.identd -w -t120 authsrv stream tcp nowait root /usr/local/etc/authsrv authsrv # # End of inetd.conf-----inetd.cong设置档结束 /etc/services档 当用户连接到防火墙时,会接到一个已知的埠(小于1024)。例如,telnet接到 埠23。inetd deamon接到连接的动作,查看/etc/services上这些功能的名字。然 後,它会启动/etc/inetd.conf档中这个名字所指定的程式。 有时使用的功能并 不在/etc/services档中。这些功能可指定到任何想指定的埠。例如,管理员 的telnet埠(telnet-a)可设定到埠24,也可设定到埠2323,悉听尊便。如果管 理员(指你本人)要直接连接到防火墙,则需telnet到埠24而非埠23。如按照下 例设定netperm-table,则只能从保护的网路中的一个系统设定。 telnet-a 24/tcp ftp-gw 21/tcp # this named changed auth 113/tcp ident # User Verification ssl-gw 443/tcp 8. SOCKS代理伺服器 8.1 设定代理伺服器 SOCKS代理伺服器可从 ftp://sunsite.unc.edu/pub/Linux/system/Network/misc/socks-linux- src.tgz取得。该档内也有一个称为"socks-conf"的设置档可作参考。可把该档解 压,然後根据其中的说明使用该档。但使用时并不简单,应首先确定Makefile档 正确无误。 在 /etc/inetd.conf中应该增添代理伺服器。因此,应该增加以下一 行。 socks stream tcp nowait nobody /usr/local/etc/sockd sockd 这样伺服器才会在需要时运行。 8.2 设置代理伺服器 SOCKS需要两个设置档进行设定。一个设置档设定进入取用的权限,另一个设置档 设定路径,以便找到适当的代理伺服器。权限档应在伺服器上,路径档应在每一 台UNIX机上。DOS机和Macintosh机都会确定自行的路径。 权限档 在socks4.2(beta)版中,权限档称为"sockd.conf",应该只有两行,一行允许 (permit),一行拒绝(deny)。每行都有三项设定: * 识别标示行(permit/deny) * IP地址行 * 修改地址行 识别标示用于permit或deny。应该有单独的permit行和单独的deny行。 IP地址使 用标准的4byte方式表示,如I.E. 192.168.2.0.。 修改地址行也是标准的4位元 IP地址,用来作为netmask。将这个地址想成32位元的数字。如果是1,则核对的 地址的相应位置应符合IP地址中相应的位元。例如,此行的地址为∶ permit 192.168.2.23 255.255.255.255 则只允许每一位元相符的地址,即192.168.2.23。如果地址为∶ permit 192.168.2.0 255.255.255.0 则会允许192.168.2.0至192.168.2.255之间的每一个地址,即整个C级的地址。不 得有下列这种地址出现∶ permit 192.168.2.0 0.0.0.0 这会允许每一地址使用,不论其地址为何。 因此,允许每一个应该允许的地址, 然後拒绝其余地址。如允许192.168.2.xxx范围中的每一用户,可用下列方式表示 ∶ permit 192.168.2.0 255.255.255.0 deny 0.0.0.0 0.0.0.0 注意deny行中的第一个"0.0.0.0"。由于地址以0.0.0.0修改,因此IP为何都没有 影响。用0作为IP地址,因为便于打字。 特别的用户可以给予或拒绝使用的权限 。这可通过iden的查验来实现。由于不是所有系统都支持iden,其中包 括Trumpet Winsock,所以此处不预备多加说明。随同socks提供的说明以够使用 。 路径档 SOCKS中的路径档称为"socks.conf",极易与权限档混淆。 路径档让SOCKS用户知 道何时用socks,何时不用。例如,在示□的网路中192.168.2.3并不需要使 用socks与192.168.2.1防火墙对话。通过Ethernet,它们之间有直接的连接。 又127.0.0.1自动设为loopback。因此也不需要用socks同自己对话。它有三行输 入∶ * deny * direct * sockd Deny行告诉socks何时拒绝一项请求。在此添入的内容同sockd.conf的内容相同, 地址标示行、IP地址和修改地址行。一般而言,权限档sockd.conf也与此有关, 修改地址部分则用0.0.0.0。如果不打算连到任何地方,在此可作出修改。 在direct行下列入不使用sock的地址。所有这些地址都可直接联上网路,无须经 过代理伺服器。在这里又有三个位置要填∶identifier、address和modifier。例 如∶ direct 192.168.2.0 255.255.255.0 Sockd行告诉电脑那一个用户的电脑上有socks server daemon。该行内容如下∶ sockd @= 注意@= 填入的内容。利用这种方法可以填入一系列代理伺服器的IP地址。在这里 只用一个代理伺服器的地址为例。但可以列上多个伺服器的地址,以便加大容量 ,并当有伺服器失灵时,有其他的伺服器顶替。 设定IP地址和modifier域的方法和其他例子相同。 防火墙後的DNS 从防火墙後设定Domain Name Service是件简单不过的事。只要在作为防 火墙的电脑上设定DNS即可。然後在防火墙後的电脑上设定使用这个DNS。 8.3 代理伺服器 Unix 要使应用程序利用代理伺服器,这些应用程序需要"sockified"。在这里需要两 个telnet,一个进行直接通讯,一个通过代理伺服器进行通讯。SOCKS软件中有说 明sock一个程式的方法,也附有几个已经sock好的程式。如果要直接使用sock好 的程式,SOCKS软件会直接设定。因此,应该将保护网路内的所有程式改名,然後 再改用已经sock好的程式。例如,"Finger"变为"finger.orig","telnet"变 为"telnet.orig"。 必须通过include/socks.h档告诉SOCKS这种设定。 有些程式 能自行处理routing和sockifying的问题。Netscape就使其中之一。例如 在Netscape下要用用代理伺服器,只要在Proxies下SOCK栏内填入伺服器的地址即 可(在此为192.168.2.1)。当然,每种应用程式都得作些小变动,不论其处理代 理伺服器的方法为何。 微软视窗与Trumpet Winsock Trumpet Winsock中有自带的代理伺服器功能。在"setup"选单中填入伺服器的IP 地址和所有直接可联的电脑的地址。然後,Trumpet就会处理所有外送的数据包。 使代理伺服器配合UDP数据包 SOCKS软件只处理TCP数据包,而不处理 UDP。这多少减少了它的用处,因为,许 多有用的程式,例如talk和Archie,都利用UDP。有一套软件,称为UDPrelay, 由Tom Fitzgerald设计,主要作为UDP数据包的代理伺服器使用 。不过在编写本文时,这套软件不能用于Linux. 8.4 代理伺服器的缺点 归根结底,代理伺服器是一个安全装置。在有限的IP地址的情况下,用它使许多 用户进入网际网路有许多缺点。代理伺服器可使保护网路内的用户联到网路之外 ,但使网路之外的用户完全无法同网路之内的用户联系。这表示无法同网路之内 的电脑进行talk或archie联网,也无法发送电子邮件。这些缺点看来并不严重, 但是如果∶ * 你有一份没有完成的报告留在保护网路防火墙内的电脑上。回家後,你又想 看看这份报告。但是没有办法。因为电脑在防火墙後,无法联网。如果首 先login 防火墙,但由于每一个人都可进入代理伺服器,因此你在这个伺服 器上并没有个别帐户。 * 你女儿去了大学。你想写封电子邮件给她。你想谈些私事,因此最好能把电 子邮件直接放到自己的电脑上。你当然信得过你的系统管理员,但这倒底与 公务无关,是个人的信件。 * 不能使用UDP是代理伺服器的一个大缺陷。我想不久之後就会有UDP的功能。 FTP是代理伺服器的另一个问题。在取得或使用ls时,FTP伺服器在客户机上打开 一个socket,并通过它传送信息。代理伺服器不允许进行这项工作,因此FTP无法 使用。 此外,代理伺服器运行缓慢。由于需要额外资源较多,几乎任何其他能达 成这项作用的伺服器都要比它快。 一般而言,如果有IP地址联网,而又不必特别 顾虑安全问题,那就不要使用防火墙和(或)代理伺服器。如果没有IP地址联网 ,但也不顾虑安全问题,那就不妨使用IP模拟器,象Term,Slirp或TIA。Term可 从ftp://sunsite.unc.edu取得,Slirp可 从ftp://blitzen.canberra.edu.au/pub/slirp取得,TIA可从marketplace.com取 得。使用代理伺服器的理想网路是有许多用户需要联网,那只要做一次设定之後 就不必再做太多其他的工作。 9. 高级设置 在结束此文时,不妨再举一个例子,来说明设置的方法。前面的例子适合多数使 用情况。下面再以一个高级设置为例,以便能说明一些问题。如果前面的例子不 能解答你的问题,或者还想了解代理伺服器和防火墙的其他特性,请注意下面的 例子。 9.1 注重安全的大型网路 假设一个民团首脑要设置网路,其中共有50台电脑和有一个32个IP地址的次级网 。由于随从的级别不同,民团首脑想在网路上设置不同级别的使用权。因此,网 路的一部分不能与另一部分互通。 各种级别有∶ 1. 外围。这是人人都可到达的层面。这是吸引新成员的层面。 2. 部队人员这一层面的人物已经超过外围。这个层面的人可以知道一些计谋和 制造武器的方法。 3. 外籍军团这是真正完成计划之处。 网路的设定 IP号码的设定方法如下∶ * 一个地址为192.168.2.255,这是broadcast的地址,不可使用。 * 32 IP地址中23个地址分配给23台机器,这些机器可同网际网路联结。 * 一个IP地址用于网路上的linux机。 * 一个IP地址用于网路上的另一个linux机。 * 两个IP #'s用于router * 剩下的四个地址随便定四个名字,使人捉摸不定真正的用户。 * 保护网路的地址为192.168.2.xxx 这样就建立了两个不同的网路。这两个网路通过红外线Ethernet联网,外界完全 看不到它们的存在。红外线Ethernet的作用和一般Ethernet的作用相同。 这两个 网路各自连到有IP地址运行linux的电脑。 同时有一个文档伺服器接连到这两个 保护网路,因为征服世界的计划中需要一些训练精良的部队。文档伺服器中有部 队网路的IP地址192.168.2.17和外籍军团网路的IP地址192.168.2.23。有不同IP 地址的原因是因为有不同Ethernet卡的缘故。网路上IP Forwarding的功能关闭停 用。 两台Linux机上IP Forwarding的功能也都停用。除非有明确规定,否 则router不会转送送往192.168.2.xxx的数据包,因此网路无由进入。关闭IP Forwarding功能的原因是部队网路发出的数据包不让到达外籍军团网路,外籍军 团网路的数据包也不让到达部队网路。 可以设定NFS伺服器的设置,使其把不同 文档送往不同网路。这种方法颇为好用,在symblic links上做番手脚可使文档让 大家共享。利用这种设置和加一张ethernet卡可使一台文档伺服器用于所有三个 网路。 代理伺服器的设置 由于三批人马都需要了解网上的情况,因此他们都需要上网。外部网路直接连到 网际网路,因此在代理伺服器上不需要作出任何更动。外籍军团网路和部队网路 在防火墙之後,因此需要在代理伺服器上作出一些设置。 两个网路的设置非常类 似。它们仍旧使用分配给它们的IP地址。不过在这里得设定一些参数。 1. 任何人都不得使用文档伺服器上网,否则文档伺服器可能会遭到病毒或其他 坏东西得入侵。这种问题至为严重,因此不得使用文档伺服器。 2. 不让部队人员上网。他们正在接受训练,如果让他们拥有这种检索资讯的能 力可能对他们有害。 因此,在部队网路的linux机上sockd.conf档内应有下列一行∶ deny 192.168.2.17 255.255.255.255 并且在外籍军团机内的设定是∶ deny 192.168.2.23 255.255.255.255 同时,部队网路的linux机内设定∶ deny 0.0.0.0 0.0.0.0 eq 80 这行的意义是不让任何机器使用埠号80,既http埠。不过这些机器仍然可用所有 其他功能,只是不让上网。 然後在两台机器的sockd.conf档内都添加∶ permit 192.168.2.0 255.255.255.0 使所有在192.168.2.xxx网上的电脑都使用这台代理伺服器,但不让使用的电脑除 外(既从部队网路进入文档伺服器和网际网路)。 部队网路的sockd.conf档的内容如下∶ deny 192.168.2.17 255.255.255.255 deny 0.0.0.0 0.0.0.0 eq 80 permit 192.168.2.0 255.255.255.0 外籍军团网路的sockd.conf档的内容如下∶ deny 192.168.2.23 255.255.255.255 permit 192.168.2.0 255.255.255.0 这样的配置应该没有问题。每一个网路都能单独作业,并有适当的相互关系。人 人都应该心满意足才对。 现在就可征服世界了!