微型机与应用
MICROCOMPUTER & ITS APPLICATIONS
2000 Vol.19 No.3 P.35-37



一种改进的代理技术
何韶军　王清贤　罗军勇
　　摘　要：代理技术的分类及各自的优缺点,在综合现有二种主要代理技术的基础上,探讨了一种改进的代理技术的实现方案。
　　关键词：代理技术 回路级代理 应用级代理
　　飞速发展的Internet给网络带来了安全问题。如果系统中的每1台主机都能自由访问Internet,则系统是不安全的;如果所有主机都不能访问Internet,当然就不会有安全方面的隐患,但与其连接也就毫无意义了。既注重安全又能与外界息息相通的办法之一是装上代理服务器。代理服务器的主要任务是判断从客户端来的请求,决定哪些请求允许传送而哪些应被拒绝。当一个请求被允许时,代理服务器将该请求转交给真实的服务器并将答复转交客户。对客户来说,与代理服务器交谈就好像与真实服务器交谈一样;而对真实服务器来说,它是与代理主机交谈,而且它并不了解客户的真实所在。
　　目前,由于代理服务器的实用性和安全性而得到广泛的应用。然而长期以来,人们一直苦于使用安全代理软件所带来的服务速度减慢、用户使用不方便等等问题。本文讨论了一种可以较好地解决其中某些问题的代理技术,并给出了实现的具体方案。
1 普通代理技术的分类与比较
　　在网络中,一些服务很容易或自动提供代理,对于这些服务可以通过配置来实现代理,但对于大多数服务来说,代理服务要求有合适的代理软件。
1.1 代理软件的分类
　　代理软件按照客户端实现的不同,分为二类:
　　1.定制客户软件进行代理。代理软件的制作者在充分了解用户需求、用户与代理主机通信过程的基础上制作出客户端软件,用户再使用这种定制的软件与代理主机通信。这种方法存在以下一些问题:第一,订制的客户软件一般只适用于特殊的平台,如果定制软件的平台不适合某些用户,是一件很麻烦的事;第二,大多数用户不希望改动自己已经习惯了的软件。有时,可以修改已有的客户程序来支持代理服务器,可这不仅需要有客户程序的源程序及重新编译的能力,而且需要每一位用户的配合,所以这种修改一般是难以真正实行的。也有一些例外情况,如WWW的客户程序Mosaic在设计开始时就考虑了代理问题,它支持各种类型的代理（特别是SOCKS和CERN HTTP守护程序）,但这类服务大都是在防火墙和代理系统普及之后新出现的,一些古老但广泛应用的服务,如FTP、TELNET等却做不到这一点。总之,这种技术不能做到对用户透明,而且给用户制造了麻烦,因此并没有被广泛使用。
　　2.定制客户过程进行代理。这种代理软件允许用户使用原有的客户软件,但它要求用户与服务器通信时遵守定制的过程。用户一般应首先与代理主机建立连接,然后再向代理主机提出请求真正服务器的服务,否则他的合法请求将被拒绝。这样,用户不仅要记住代理服务器的名字,还要记住进入其它主机的特殊方式。比如,一用户想从匿名FTP服务器（ftp.getfile.net）上下载文件,使用定制客户过程的FTP代理服务器,要求用户:（1）与代理服务器连接而不是与匿名FTP服务器直接连接。（2）在输入用户名时,除指定用户名外,还要指定想要连接的真实服务器名,如需在代理服务器上输入“anonymous@ftp.getfile.net”而不应只是“anonymous”。虽然目前有很多代理服务器使用这种技术实现,但也可以看到这种技术存在明显的缺陷:（1）定制过程会对可使用的客户程序增加一些限制,甚至某些图形界面的客户端软件可能无法显示用户输入的包括主机和用户名的信息;（2）必须把定制的过程告知给每个用户,如果只有少量用户还好办,用户非常多的话,则会是一个大问题。
1.2 二种普通代理技术的比较
　　上述第一种代理软件使用回路级代理技术实现,第二种代理软件使用应用级代理技术实现。回路级代理不需要理解应用协议中的命令,只对数据包的头信息进行过滤。事实上,回路级代理就像一种包过滤,它无法控制因代理而产生的事件,虽为用户和服务器提供连接但不能判断经过的命令是否安全或超出了服务的范围,而且很容易受到IP欺骗。它的优点在于能够为不同的协议提供代理且响应速度相对应用级代理来说较快。应用级代理在应用层实现,它能理解应用协议中的命令,能提供更好的日志和访问控制功能,也很容易做到智能化（这对于回路级代理来说是很困难的）,但它需要针对不同的协议编制不同的代理软件。
　　目前的代理软件大多使用上述所说的定制客户过程应用级代理技术实现,它存在以下几个重要的不足:
　　1.代理服务的速度落后于非代理服务。因为代理软件要对用户的许多信息进行识别,而且又是在应用层对数据进行过滤,所以速度减慢。
　　2.不同的协议可能要求配置不同的代理服务器,配置的好坏将影响代理的正常工作,这无论如何对用户来说都是一种额外的负担。
　　3.普通的代理软件总是要求用户改变自己的使用习惯,造成用户使用上的不方便。
2 改进的代理技术
　　从以上分析可以看到,目前的代理技术还存在许多亟待改进的地方,但更重要的是回路级代理技术与应用级代理技术之间的优缺点是可以互补的。在此,探讨了1种改进的代理技术,它综合了上述2种代理技术,可以较好解决普通代理软件的某些问题。
2.1 实现的具体方案
　　代理软件运行在1台双穴主机上,双穴主机的2块网卡分别连接外部网络和本地网络。该主机首先要禁止IP级转发的功能,也不允许普通用户的直接登录。取消掉一般操作系统上的账户管理,代之以一种简单的OTP（One-time Password）系统来进行身份验证。这种1次一密身份验证系统不仅安全性好,而且制作1个仅供自己使用的OTP系统也不难。
　　在整个网络拓扑结构中,代理主机位于交换机和路由器之间（设本地局域网使用交换机相连,整个局域网通过路由器与外部网络通信）。为使所有进出网络的数据包都通过代理主机,可以这样配置:（1）本地主机的默认网关设置为代理主机与交换机相连网卡的IP地址,这样本地主机欲与外部主机通信必须通过代理。（2）路由器的路由表加入1条关键的路由信息,使得路由器将目的地址是本地局域网的包交给代理主机,这样外部主机欲与本地主机通信也必须通过代理。采用这种结构主要是出于安全方面的考虑,攻击者即使攻破了路由器,他还必须通过代理主机。如果没有路由器也可以,但代理主机应实现对外的路由选择。另外,采用这种结构,很容易将代理主机做成集过滤、代理、网络攻击检测和告警等功能于一体的堡垒主机。
　　整个代理软件分二部分来实现:第1部分类似于包过滤,所有的数据包首先被过滤,代理根据数据包的目的IP地址来区分是外网请求还是本地主机的请求（这样就解决了外部网络主机冒充本地主机发送数据以获取更高安全级别进行IP欺骗的问题）。如果目的IP地址是外部网络地址,即可马上转发。如果目的IP地址是本地主机地址,则应该根据目的端口号交软件的第2部分――相应的应用层代理守护进程对客户请求进行过滤,从而实现对外部请求的“安全强化”。
　　软件的第1部分实际上是一个回路级代理,它是所有协议公用的代理。在Linux中可以这样实现:将代理主机的2块网卡都设置成混杂模式（普通模式下,网卡会丢弃目的IP地址不是自己的数据包,而在混杂模式下,网卡能接收目的地址不是本机的数据包）,要做到这一点,只须用ifget（）获取网络的参数后,将ifr_flags的IFF_PROMISC位置上即可。然后建1个SOCK_PACKET套接字接收经过2块网卡的所有数据包,由SOCK_PACKET套接字接收的数据包的格式如图1所示。

图1 SOCK_PACKET套接字
　　在每个数据包中对有用的信息主要有IP头的ip_offset（分片偏移量）和ip_dst（目的IP地址）,TCP头中的dest（目的端口号）。这一块的基本程序流程如图2所示。

图2 回路级代理部分的程序流程图
　　对于上述流程需要解释的是:为什么ip_offset不等于0的数据包可以不经过滤就可转发,那些本该被拒绝的客户请求会不会因这种转发而到达本地主机?其实,1台主机如果接收不到偏移量为0的数据包时,它就会把偏移量大于0的数据包扔掉。所以,不合理请求是不会到达本地主机应用层的。只对ip_offset等于0的包进行过滤可减少代理的工作量、提高响应速度。这一部分在实现过程中的其它一些细节,如数据的差错控制等问题,在这里就不介绍了。
　　软件的第2部分是一个应用级代理。这一部分应该是针对不同的服务编写不同的代理守护进程。每个代理守护进程的工作首先是对外部网络的客户请求进行过滤以决定哪些数据可被转发哪些被拒绝,当然,用户应该可以按照自己的意愿配置其允许或拒绝的服务请求;其次,代理守护进程的重要任务就是示警。例如,某个FTP请求是诸如“get/etc/passwd”之类的命令,则代理守护进程能及时通知网络管理员,并使回路级代理马上禁止该用户的所有数据。这一部分的实现细节从略。
　　整个代理软件的关键部分在于回路级代理部分的实现。该部分可以与包过滤做在一起,它实现的好坏将在很大程度上影响代理服务器运行的速度。
2.2 改进后的优缺点
　　改进后的这种代理技术,综合了回路级代理与应用级代理技术的优点,较好地克服了二者的缺点。
对于普通代理技术,其改进后的优点:
　　1.提高了速度。应用代理部分仅需处理目的IP地址是本地网络的数据,工作量大大减轻,而让回路级代理处理所有的数据。如果回路级代理的某些技术问题处理得好,将会极大提高服务响应的速度。
　　2.对于所有用户来说,他可以使用原有的客户程序而不需做任何改变,这大大方便了用户。尤其是本地用户,他们使用起来就如同没有经过代理一样,只是速度上有所不同。
　　3.没有了传统的网络账户管理,因而保证了代理主机的安全性。
　　4.应用代理部分还可以随时升级为1个智能代理系统。
　　改进后的不足:
　　1.需大规模修改源程序及重新编译。
　　2.速度比没有使用代理的系统仍然较慢。
　　3.对协议本身存在的安全问题未能加以弥补。如X　window中就存在许多不安全的操作,但当禁止这些操作后,X window却不能正常工作了。
　　4.不能对内部网络加以防范。这就严格要求整个本地网只有1个出口,即代理主机出口,如果多于1个出口,则整个网络就暴露在攻击之下。
3 讨 论
　　上述代理在普通代理技术的基础上做了一些综合改进,但实际效果距理想的代理服务还有一定差距。理想的代理服务器,应该是速度快、用户使用起来就如同没有经过代理服务器一样,同时又是绝对安全的。目前有很多生产防火墙产品的厂家为了实现更好用的代理对原有代理技术做了许多改进,如Secure Computing公司制作的BorderWare Firewall Server防火墙服务程序中就实现了一种“透明代理”。这种“透明代理”不大规模修改源程序,不允许用户直接在防火墙中登录,允许使用“现有的”网络应用程序,并允许这些应用程序直接通过防火墙工作。另外,NEC Technologies的PrivateNet Secure Firewall Server中的代理技术,它在实现上也有很多独到之处。这些代理都对现有代理技术做了不少改进,很值得借鉴。
何韶军（郑州信息工程大学信息安全学院计算机系450002）
王清贤（郑州信息工程大学信息安全学院计算机系450002）
罗军勇（郑州信息工程大学信息安全学院计算机系450002）
参考文献
1，Cheswick W R,Bellovin S M.Firewalls and Internet Security.ADDISON-WESLEY PUBLISHING COMPA-NY,1994
2，Kyas O.Internet Security.International Thomson Com-puter Press,1997
3，Fuller S,Pagan K著.董春,张红雨译.Intranet防火墙.北京:电子工业出版社,1997
4，刘渊,乐红兵.因特网防火墙技术.北京:机械工业出版社,1998
5，Stevens W.R著.UNIX网络编程:卷1连网的API:套接字与XTI.北京:清华大学出版社,1998
6，Comer D.E著.林瑶,蒋惠译.用TCP/IP进行网际互连第1卷:原理、协议和体系结构.北京:电子工业出版社,1998
收稿日期：1999-11-19
