Linux Firewall Proxy Howto(中文版)-by reden (1)

发信人: fuse (保险丝), 信区: Linux 
标  题: Linux Firewall Proxy Howto(中文版)-by RGB 
发信站: BBS 水木清华站 (Wed Jul  8 13:22:16 1998) 
 
发信人: rgb (网上邻居【还在等】), 信区: UNIX_PALACE 
标  题:  Linux Firewall Proxy Howto(中文版) 
发信站: 笑书亭 (Sat Jun 13 14:44:03 1998), 转信 
 
Linux 防火墙-代理 HOWTO 
 
1.导论 
 
  
 
这篇文章源于David Rudder(email: drig@execpc.com)的Firewall-HOWTO,我是在他的认可 
下对其改进的,在此我向他表示感谢. 
 
  
 
近年来,防火墙在internet安全中得到了极大的青睐.和其他备受青睐的事物一样,随之产 
生了许多误解.这篇HOWTO的文章将介绍防火墙,代理服务器的概念及安装.以及防火墙技 
术在安全领域以外的应用. 
 
  
 
1.1 读者反馈 
 
  
 
欢迎读者各种形式的反馈.请随时指正本文的任何不当之处!!!我非完人,错误难免.但我 
会非常乐意修正所有您指出的不当之处.我会尽量回复每一封e-mail,但若因繁忙可能延 
迟回复,请见量. 
 
  
 
我的email地址是:  markg@netplus.net 
 
  
 
[译者注:译文中一定有很多错误是由译者造成,同样欢迎来信指正: 
                                         netium@writeme.com] 
 
  
 
1.2 声明 
 
  
 
本人不对基于本文的任何行为造成的结果负责.这份文档的本意是介绍防火墙和代理服务 
器的工作原理.我不是,也无意装作是一个安全专家.我只是一个爱计算机甚于大多数人的 
书虫.写这份文档来帮助人们熟悉这个主题,但并不打算让它来支配我的生活. 
 
  
 
[译者声明: 我同样不对基于本文的任何行为造成的结果负责. 我只是一个大四的学生, 
在翻译本文之前仅对防火墙有最初步的了解, 翻译这份文档是为了让更多的人了解并有 
效的使用linux和防火墙,而不打算承担额外的责任] 
 
  
 
  
            
1.3 版权声明 
 
  
 
除非另外声明,linux HOWTO文件的版权属于他们各自的作者.linux HOWTO文件可以被部 
分或整体的以任何媒体传播,前提是必须附加此版权声明.也允许和鼓励商业性的散发和 
复制,但必须事先通知作者. 
 
  
 
所有linux HOWTO的翻译,派生文档必须附带此版权声明.即,你不能对任何派生文档附加 
任何限制.有些情况可作为例外处理,但必须征得linux HOWTO维护组织 
(linux HOWTO coordinator)的认可. 
 
  
 
简言之,我们希望在保留linux HOWTO版权的同时,以尽量多的途径促进它的传播,并乐于 
看到任何的关于linux HOWTO的传播计划. 
 
  
 
如果有问题,可以联系 Mark Grennan< markg@netplus.net> 
 
  
 
[译注:译者不是法律专业人员(连法律专业的辍学生都不是:),无意纠缠字里行间的法律 
因素,在此附上原文,有任何出入,请以原文为准! 
 
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 < markg@netplus.net>. 
 

 
  
 
1.4 写作动机 
 
  
 
虽然近年来在comp.os.linux.*新闻组中对防火墙有了相当多的讨论,我仍然发现很难找到 
关于建立防火墙的足够资料. 这份文章早先版本是非常有帮助的,但还不够充分,本文通过 
对David Rudder的 Fire WallHOWTO的改进,为使人们能在短时间内掌握建立防火墙所需的 
信息. 
 
  
 
1.5 未完成部分 
 
  
 
*关于设置客户端的说明. 
 
*为linux找一个支持UDP的代理服务器(译注:现以解决) 
 
  
 
1.6 深入阅读 
 
  
 
The NET-2 HOWTO  
 
The Ethernet HOWTO  
 
The Multiple Ethernet Mini HOWTO  
 
Networking with Linux  
 
The PPP HOWTO  
 
TCP/IP Network Administrator's Guide by O'Reilly and Associates  
 
The Documentation for the TIS Firewall Toolkit  
 
  
 
Trusted Information System's (TIS) 的WEB节点收集了大量的有关防火墙的资料: 
 
http://www.tis.com/ 
 
  
 
我正致力于一个名为"Secure Linux"的计划,在我的站点收集任何关于建立一个安全的 
linux系统的资料.如果你对此有兴趣,可以用e-mail跟我联系. 
 
  
 
  
 
2.防火墙初探 
 
  
 
防火墙来自汽车工业上的一个术语,原指汽车上的隔离引擎和乘客的装置,用以在引擎起 
火时保护乘客,但并不妨碍驾驶员对引擎的控制。 
 
  
 
计算机领域中的防火墙指得是用来保护内部网络不受外部网络(整个Internet)非法侵入 
的设备。 
 
  
 
从现在开始,我们把“防火墙计算机”简称为“防火墙”,指的是可同时访问内部网 
Internet的计算机.内部网络是不允许直接访问internet,反之亦然。 
 
  
 
内部网的使用者要想访问internet,必须先登录到防火墙,才能进行访问。 
 
  
 
最简单的防火墙形式是一个连结两个网络的系统。如果你能 *完全信任你的所有用户*, 
可以简单地安装一个linux(编译内核时 *关掉* IP forwarding/gatewaying选项开关) 
并分配给每个用户帐号,他们便可以登录进来并进行telnet,ftp,读取信件,或进行其它 
你所允许的internet访问.根据这种配置,在你的内部网中唯一具有完全Internet连接能 
力的是防火墙.而内部网中的其余部分甚至可以不必设置缺省路由. 
 
  
 
但在此必须强调的是:你能够 *完完全全信任你的所有用户* ----我不推荐这种方案. 
 
  
 
2.1 防火墙的缺点 
 
  
 
"过滤型"防火墙很大程度上限制了外界对内部网的访问,因为只有那些没被过滤掉的服才 
能接受访问.而对于代理防火墙,外部用户可先登录到代理服务器,再对内部网进行他们所 
允许的各种访问. 
 
  
 
同时,随着各种新网络客户和服务器类型的不断涌现,在使用它们之前,你必须找到控制访 
问的新方法. 
 
  
 
2.2 防火墙的类型 
 
  
 
有两种类型: 
 
  
 
1.IP或过滤防火墙---只允许指定的网络传输. 
 
  
 
2.代理服务器----为你代理网络连接. 
 
  
 
2.2.1 IP 过滤防火墙 
 
  
 
IP过滤防火墙运作在网络传输包这一层。它通过对每个包所带的源,目的地址,端口号及 
包的类型这些信息来控制对其的传输。 
 
  
 
这种类型的防火墙相当安全,但缺少跟踪记录手段。它可以有效阻止外部用户的非法访 
问,但却不能给你任何信息关于谁在访问你内部网络的公共系统及谁通过内部网络访问 
Internet. 
 
  
 
过滤防火墙是纯粹意义上的过滤器。使用过滤防火墙,你无法做到只让特定的人来访问 
你的内部服务器----除非你一下子给所有人(来自同一IP的人:译注)同样的访问权. 
 
  
 
Linux从核心1.3.x起提供了对包过滤的支持. 
 
  
 
2.2.2 代理服务器(防火墙) 
 
  
 
代理服务器允许通过防火墙间接访问INTERNET.一个很形象的比方,你可以先telnet到一 
台机器上,再从那里telnet别的机器.唯一区别是代理服务器自动的.当你的客户程序访问 
防火墙时,代理服务器启动自己的客户程序,替你传输数据. 
 
  
 
正因为通过代理服务器复制了所有的通讯信息,它能够记录下所做的一切. 
 
  
 
对于这种类型的防火墙,最了不起的是,只要配置正确,它们是绝对安全的.它们不会让有些 
人通过。 因为这种防火墙没有直接的IP路由. 
 
  
 
3.防火墙的安装 
 
  
 
3.1 硬件要求 
 
  
 
一台16M内存的486-6/DX,并具有500M的Linux分区的计算机.装有两块网卡,分别接到我们 
的专有局域网和一个我们称之为"非军事化区(DMZ)"的局域网.同时DMZ可通过一个路由器 
连到Internet. 
 
  
 
这是很典型的防火墙计算机配置.也可以用一块网卡加一个PPP拨号接入Internet的MODEM. 
关键在于,防火墙必须具有两个IP地址. 
 
  
 
现在已经有很多家庭小型局域网,通常有两三台机器组成.这时你就可以考虑把所有的 
MODEM装到一台Linux机器(可能是个老式的386),同时连接Internet。这样,在一个人使用 
时,如果你有两个modem,可能使连接速率加一倍!  
-) 
 
  
 
  
 
  
 
4.防火墙应用软件 
 
  
 
  
 
4.1 可供选择的软件包 
 
  
 
如果你仅需要一个过滤防火墙,则Linux加上基本的网络包就足够了. 
 
  
 
你所用的Linux发行包中有可能没有随带一个IP Firewall Administration 的软件包. 
 
  
 
IPFWADM在 : 
 
http://www.xos.nl/linux/ipfwadm/ 
 
  
 
如果你要的是一个代理防火墙,可能得选下面者之一: 
 
  
 
1.SOCKS 
 
  
 
2.TIS 防火墙工具包(FWTK) 
 
  
 
4.2 TIS 防火墙工具包与SOCKS的比较 
 
  
 
Trusted Information  
System( http://www.tis.com)出品了一系列实现防火墙的软件.其功能与SOCKS基本类似, 
但设计策略不同.SOCKS一个程序就完成所有的INTERNET传输功能.而TIS为每个功能提供 
了单独的程序. 
 
  
 
 
为进一步区别,我们以www和telnet为例来说明.对于SOCKS,我们只需设置一个配置文件 
和守护进程,就可以通过防火墙进行www和telnet-----以及其他任何一些你没有被设置 
成禁止的访问.但若使用TIS,你得为www和telnet设置各自的配置文件和守护进程.  
  
而其他的INTERNET访问仍是被拒绝,直到你专门地为其作了设置.如果你没对某种特定的 
功能(比如talk)设置守护进程,可以使用一个"plug-in(插件)"守护进程,但它既不灵活, 
也不象其他工具配置起来那么简单。 
 
 
SOCKS容易编译和设置,而且非常灵活;但如果你想规范内部用户的管理,TIS提供了更好的 
安全性.两者都能绝对禁止外部的非法访问. 
 
  
 
  
 
  
5.准备Linux 
 
  
 
5.1 编译内核 
 
  
 
先对Linux系统来一次'干净'的安装(我使用的版本是Redhat3.0.3,所有实例都基于该版本.) 
 
  
 
所装的组件越少,系统的后门,安全漏洞就越少.所以只装一个最小的系统就够了. 
 
  
 
选择一个稳定的内核.我使用Linux 2.0.14 kernel,本文档的描述也基于其上. 
 
  
 
下一步是用适当的选项编译内核.这时你可能需要参考Kernel HOWTO,Ethernet  
HOWTO,及NET-2 HOWTO. 
 
  
 
这里是'make config'过程中涉及到的跟网络部分有关的选项 
 
  
 
1.在'Gernal setup'中 
 
  
 
1.Networking Support-->On 
 
2.在'Networking Options'中 
 
1.Networkfirewalls--> On 
 
2.TCP/IP Networking--> On 
 
3.IP forwarding/gatewaying-->OFF(除非你选择IP过滤防火墙) 
 
4.IP Firewalling-->On 
 
5.IP packet loggin--> On(不是必须的,却不失为一个好主意) 
 
6.IP masquerading-->OFF(我没有涉及该主题) 
 
7.IP accounting--> ON 
 
8.IP tunneling--> OFF 
 
9.IP aliasing-->OFF 
 
10.PC/TCP compatibility mode-->OFF 
 
11.IP Reverse ARP OFF-->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.选择你的网络接口卡. 
 
  
 
  
 
现在可以开始重编译了,编译后重新按装内核并reboot,启动时Linux会显示你的网卡, 
 
否则你得再去研究其它的HOWTO. 
 
  
 
5.2 配置两块网卡 
 
  
 
如果你有两块网卡,多半情况下你要在/etc/lilo.conf中加一条append语句给出它们的中 
断号和I/O地址. 
 
这是我的lilo append语句: 
 
  
 
append=“ether=12,0x300,eth0 ether=15,0x340,eth1” 
 
  
 
5.3 配置网络地址 
 
  
 
这部分非常有意义。现在你面临着几种选择。显然我们并不打算允许Internet对内部网进 
行任何形式的非授权访问,因此也没有必要使用真正的IP地址.有些IP是专门保留供专有网 
络使用的.因为IP总是越多越好,而这些保留IP不能在网上流通,恰好适合我们的需要. 
 
  
 
在这里,我们使用保留IP:192.168.2.xxx,并将它作为以后的例子 
 
  
 
你的代理防火墙将同时是内部和外部网的成员,使其得以在两者之间传送数据. 
 
  
 
  
 
 
            199.1.2.10   __________    192.168.2.1 
      _  __  _        / |          | /           _______________ 
     | //  // |        /| Firewall |/           |               | 
    / Internet /--------|  System  |------------| Workstation/s | 
    /_//_//_//_/        |__________|            |_______________| 
  
 
  
 
即使你采用过滤防火墙,仍然可以使用这些IP,只不过要进行IP屏蔽(IP masquerading). 
这时,防火墙在传递包的同时会自动将地址转换成能在internet上流通的"真正"的IP地址. 
 
  
 
必须把"真"IP分配给连接internet一端的网卡,同时把192.168.2.1分配给内部的那一个. 
这将是内部使用的代理/网关地址,最后给内部网的机器分配其他在192.168.2.xxx范围内 
的地址(192.168.2.2 到192.168.2.254) 
 
  
 
我用的是RedHat Linux,为了能在启动时进行网络配置,我在 
 
  
 
/etc/sysconfig/network-scripts 目录中加入了一个'ifcfg-eth1' 
 
  
 
文件,该文件在启动时由系统读取,配置网络和路由表. 
 
  
 
我的 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 
 
  
 
这种脚本语言还可以用来实现MODEM对ISP的自动连接,参见ipup-ppp脚本. 
 
  
 
如果是用MODEM连接外部网络(internet),则外部IP在连接开始时由你的ISP分配. 
 
  
 
  
 
5.4 测试 
 
  
 
先要检查你的ifconfig 和route,对于两块网卡的系统,ifconfig的结果大致会是这样: 
 
  
 
  
 
#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是在防火墙的INTERNET一方,而192.168.2.0在内部网一方.  
 
  
 
现在可以试着从内部网ping Internet,我的选择是nic.ddn.mil,这本应是个很好的目标, 
事实上却不如我想象的那么可靠. 如果没有回应,再试一下其他没有和你LAN相连的地方, 
若还是不行,你的PPP设置一定有问题,你只好再去看看Net-2HOWTO了. 
 
  
 
接下去,再从防火墙内部 ping 内部网的机器,所有内部网的机器应该互相PING得通,如果 
ping不通----NET-2 HOWTO:) 
 
  
 
下一步,由内部网ping防火墙的外部地址(注意不是192.168.2.xxx).若能ping到, 说明你 
还没有关闭IP Fowarding,如果这确是出自你的本意,可以去参考本文中IP过滤的部分章节. 
 
  
 
现在,试着通过防火墙PING Internet. 还是用前面用过的(le.nic.ddn.mil)[在浙大可以 
ping alpha.zju.edu.cn:)--译注], 如果IP FORWARDING是关上的,应该PING不通,否则应 
该可以. 
 
  
 
在开启 IP Farwarding的情况下,如果你的内部网络全部使用 "真" IP,而又无法 ping 通 
Internet,但可以PING通防火墙的外部地址,就去检查上一级路由器是否为你内部网络的包 
进行路由(可能要你的服务提供者解决). 
 
  
 
如果你选择保留IP,则不被路由,或者你选择了使用IP屏蔽,则本测试依然适用. 
 
  
 
现在,你已经完成了基本的设置. 
 
  
 
5.5 防火墙安全 
 
  
 
开放不必要的服务往往使防火墙为入侵者敞开了方便之门."坏孩子"们可能侵入并根据自 
己的需要修改防火墙的设置. 
 
  
 
所以首先要关闭所有不用的服务. 
 
/etc/inetd.conf 文件控制着所谓的"超级服务(super server)"。它控制着各种服务的 
守护进程,在访问请求到达时启动相应的服务. 
 
  
 
一定要关闭netstat,systat,tftp,bootp,finger.为关闭某项服务,只须把相应的行最前面 
用#注释掉即可.改好后,向inetd进程发一个SIG-HUP信号,即键入命令"kill -HUP <pid>", 
<pid>是inetd的进程号.该命令使得inetd重新读入配置数据(inetd.conf),并重新启动. 
 
  
 
telnet防火墙的15号端口,这是NETSTATE的端口,如果你仍然得到了 netstat的输出, 说明 
inetd没有正确读入修改后的设置. 
 
  
  
 
6.安装IP过滤防火墙(IPFWADM) 
 
  
 
在开始之前,要打开内核的IP forwarding,启动你的系统能够转发所有你发出的数据, 再 
配好你的路由表,保证内部网和外部网之间就畅通无阻了, 但我们是要做的是建立一个禁 
止任意的访问的防火墙. 
 
在我的系统里,我为防火墙的forwading(包递交)和accounting(包记帐)策略各建立一个脚 
本文件。加入/etc/rc.d的脚本文件中, 启动时由系统自动调用. 
 
 
缺省情况下,linux kernel的 IP forwarding 功能是完全开放的(是网关:译注) 
 
因此你的防火墙脚本应从规定拒绝所有访问开始。 
 
  
 

 
# 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 
 
/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 
 
/sbin/ipfwadm -F -a accept -b -P tcp -S 196.1.2.* 80 -D 0.0.0.0/0 1024:65535  
 
  
 
# Forward DNS traffic 
 
/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 
 
  
  
 
如果你决定只要包过滤放火墙,可以到此为止了. :-) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值