第十七章、区网控制者:Proxy服务器最近更新日期:2011/08/02代理服务器的功能是可以代理局域网络的个人计算机来向因特网取得网页或其他数据的一种服务,由于代理取得的数据可以保存一份在服务器的快取上,因此以往有类似『假象加速』的功能!不过,目前网络带宽已经比以前好很多,因此代理服务器倒是很少使用在这方面。取而代之的是局域网络『高阶防火墙』的角色!这里的『高阶』指的是OSI七层协议里面的高层,因为代理服务器是用在应用层上的一种防火墙方式啦!不像iptables是用在网络、传输层。Linux上启动代理服务器的是squid这个软件呦!17.1什么是代理服务器(Proxy)17.1.1什么是代理服务器17.1.2代理服务器的运作流程17.1.3上层代理服务器17.1.4代理服务器与NAT服务器的差异17.1.5架设代理服务器的用途与优缺点17.2Proxy服务器的基础设定17.2.1Proxy所需的squid软件及其软件结构17.2.2CentOS预设的squid设定:http_port,cache_dir(SELinux),cache_mem17.2.3管控信任来源(如区网)与目标(如恶意网站):acl与http_access的使用17.2.4其他额外的功能项目17.2.5安全性设定:防火墙,SELinux与黑名单档案17.3客户端的使用与测试17.3.1浏览器的设定:firefox&IE17.3.2测试proxy失败的画面17.4服务器的其他应用设定17.4.1上层Proxy与获取数据分流的设定17.4.2Proxy服务放在NAT服务器上:通透式代理(TransparentProxy)17.4.3Proxy的认证设定17.4.4末端登录档分析:sarg17.5重点回顾17.6本章习题17.7参考数据与延伸阅读17.8针对本文的建议:=16&t=3543917.1什么是代理服务器(Proxy)代理服务器(Proxy)的原理其实很简单啦!就是以类似代理人的身份去取得用户所需要的数据就是了!但是由于它的『代理』能力,使得我们可以透过代理服务器来达成防火墙功能与用户浏览数据的分析!此外,也可以藉由代理服务器来达成节省带宽的目的,以及加快内部网络对因特网的访问速度!总之,代理服务器对于企业来说,实在是一个很不错的东西啊!17.1.1什么是代理服务器在真实世界中,我们或许会帮忙家人去办理一些杂务吧!举个例子来说,例如缴费或者是申办提款卡等等的,由于你并不是『申请者本人』而是『代理人』的角色,因此有时候会需要秀出一些证件就是了。那么在网络上面的代理服务器(ProxyServer)是怎么回事呢?它最主要的功能就如同我们上面提的真实世界一样,当客户端有因特网的数据要求时,Proxy会帮用户去向目的地取得用户所需要的数据。所以,当客户端指定的代理服务器之后,用户的所有相关要求就会通过代理服务器去捉取啰!整个代理服务器与客户端的相关性可以由下图约略看出一个端倪:图17.1-1、代理服务器、客户端与因特网的相关性示意图一般来说,代理服务器会架设在整个区网的单点对外防火墙上头,而在区网内部的计算机就都是透过Proxy来向因特网要求数据的,这就是所谓的『代理服务器』啦!当然,上面的架构仅只是一个案例,但是这个架构比较多人用的原因,是因为这样的Proxyserver还可以兼做高阶防火墙之用啦!在Proxy与客户端的相关性当中,你必需要了解的是:客户端向外部要求的资料事实上都是Proxy帮用户取得的,因此因特网上面看到要求数据者,将会是Proxy服务器的IP而不是客户端的IP。举个例子来说,假如鸟哥在我的浏览器设定了我们学校的代理服务器主机proxy.ksu.edu.tw做为我的Proxy好了,再假设我的IP是120.114.141.51,那么当我想要取得Yahoo的新闻信息时,事实上,都是proxy.ksu.edu.tw帮我去取得的,所以在Yahoo的网站上面看到要求数据的人是谁呢?呵呵!当然就是proxy.ksu.edu.tw而不是120.114.141.51啰!这样可以了解Proxy的功能了吗?除了这个功能之外,Proxy还有一个很棒的额外功能,那就是防火墙的功能!看一下上面的图示,你可以发现一件事情,那就是客户端的个人计算机要连上因特网一定要经过Proxy服务器。并且,如果有人想要入侵你的系统时,由于你的proxy在最外部啊,所以攻击者就会攻击错方向,如此一来,不就比较安全!此外,由于整个因特网对外都是经过proxy,也就是『单点对外』的情况,这种状态底下要来管理防火墙也是比较简单的喔!^_^17.1.2代理服务器的运作流程了解了Proxy的功能之后,我们来谈一谈那么Proxy到底是怎样运作的呢?为何它会有『加快网络存取效率』的好处?这就必需要以底下的图示来说明了!图17.1-2、代理服务器的运作流程图:快取数据与客户端当客户端指定了代理服务器之后,在客户端想要取得因特网上面的信息时,它是这样取得数据的(注:那个Cache表示为Proxy服务器的硬盘的意思):当Proxy的快取拥有用户所想要的数据时(Stepa~d):a.Client端向Server端发送一个数据需求封包;b.Server端接收之后,先比对这个封包的『来源』与预计要前往的『目标』网站是否为可接受?如果来源与目标都是合法的,或者说,来源与目标网站我们的Proxy都能帮忙取得资料时,那么Server端会开始替Client取得资料。这个步骤中比较重要的就是『比对政策』啦,有点像是认证的感觉啦;c.Server首先会检查自己快取(新的数据可能在内存中,较旧的数据则放置在硬盘上)数据,如果有Client所需的数据,那就将数据准备取出,而不经过向Internet要求数据的程序;d.最后当然就是将数据回传给Client端啰!当Proxy的快取没有用户所想要的数据时(Step1~5):1.Client端向Server端发送一个数据需求封包;2.Server端接收之后,开始进行政策比对;3.Server发现快取并没有Client所需要的资料,准备前往因特网抓取数据;4.Server开始向Internet发送要求与取得相关资料;5.最后当然就是将数据回传给Client端啰!上面的流程分析里面,我们可以清楚的知道,当Proxy曾经帮某位用户取得过A数据后,当后来的用户想要重复取得A数据时,那么Proxy就会从自己的快取里面将A数据取出传送给用户,而不用跑到因特网去取得同样的这份资料喔。因为没有去因特网找数据,当步骤4的流程很花时间时,那么透过Proxy忽略步骤4,感觉上就好像网络速度变快了!但其实只是直接从Proxy的快取里面抓而已(所以才会有人说『假象网络加速』的功能)!这就是两个流程最大的差异了。在目前的因特网社会里,由于宽带技术已经很成熟,所以在不乱用的情况下,网络带宽理论上是足够的(除非要连到国外去)。那么用了Proxy之后效能会不会更提升呢?答案是,『应该不会』!啥?怎么会这样呢?从上面的流程分析中,我们发现Proxy会常常去读取硬盘内的数据,而硬盘内的快取数据又是透过某些特殊方式在管理,因此要找到该份数据就要花一些时间,再加上如果硬件效能(硬盘或主板芯片组)不佳时,那么加了Proxy反而会让你感觉网络传输怎么『卡卡的』呦!这点得要特别注意才行!Tips:Proxy对于cache的速度是很要求的,而这个cache就是硬盘啦!当然,硬盘容量必需要足够大,而且还要『足够快』才行!因为由上面的流程当中,我们不难发现,cache是一直被重复存取的一个地方喔!所以硬盘的好坏就差别很大啦!可以说他是影响一个Proxy效能好坏的关键点呢!17.1.3上层代理服务器想一想,既然Proxy是帮忙客户端进行网页代理的工作,那么我们的Proxy能不能也指定另外一台Proxy当成我的Proxy的Proxy呢?很绕口吧!其实流程像底下这样啦:图17.1-3、上层代理服务器示意图就是我们的Localproxy并不会主动的去捉数据,而是再透过『上层代理服务器』向Internet要求资料!这样有什么好处呢?由于可做为我们的上层代理服务器的主机通常是具有较高带宽的,因此我们透过它去要求数据当然『理论上』速度会更快喔!而上层代理服务器最大的好处其实是在于『分流』喔!例如下图所示:图17.1-4、以多部上层代理服务器达到分流的效果示意图我总共设定了三部上层代理服务器,由于这三个代理服务器对外的速度都不相同,所以,当我要去美国时,就以Proxy1来要求资料,要连欧洲就以Proxy3,至于要连日本,就以Proxy2来要求我所需要的数据,如此一来,呵呵!可以让我的Proxy达到最佳的效能喔!很不错吧!此外,为了节省上层proxy的负担,如果是其他网络位置,我们则设定由自己的localproxy捉取~设定的弹性很高呢!由于代理服务器需要管控信任的来源端客户端计算机,因此各ISP仅能针对自家的用户来开放Proxy使用权而已。台湾常见的几家ISP提供的Proxy有:Hinet:SeedNet:由于当用户透过Proxy连到因特网时,网络看到的是Proxy在抓取数据而不是该客户端,因此,我们不难发现Proxy有可能会被客户端过度的滥用,同时也有可能会被拿来为非作歹啊!所以,目前绝大部分的Proxy已经『停止对外开放』了,仅针对自己的网域内的用户提供本项服务而已~因此,如果你要自行设定Proxy的时候,请记得去你当初申请网络的ISP(如果是学术单位,请到贵单位的计中网页瞧瞧即可)搜寻一下,才能比较有效的设定好你的服务器喔!因为设定错误的话,呵呵!上层Proxy根本不提供服务,或者是上层Proxy的效能并不好,那个时候你的Proxy也会连带的受到很大的影响啊!慎选!慎选!17.1.4代理服务器与NAT服务器的差异或许你已经发现了一件事,那就是:在内部局域网络使用私有IP的客户端,不论透过Proxy或者NAT均可以直接取得的服务,那么NAT与Proxy有没有什么不同的地方啊?它们不都是可以让内部的计算机连接出去吗?其实这两个玩意儿差异性是『相当大』的喔!简单说明如下:NAT服务器的功能:就如同第九章提到的数据,Linux的NAT功能主要透过封包过滤的方式,并使用iptables的nat表格进行IP伪装(SNAT),让客户端自行前往因特网上的任何地方的一种方式。主要的运作行为是在OSI七层协定的二、三、四层。由于是透过封包过滤与伪装,因此客户端可以使用的端口号码(第四层)较弹性;Proxy服务器的功能:主要透过Proxy的服务程序(daemon)提供网络代理的任务,因此Proxy能不能进行某些工作,与该服务的程序功能有关。举例来说,如果你的Proxy并没有提供邮件或FTP代理,那么你的客户端就是无法透过Proxy去取得这些网络资源。主要运作的行为在OSI七层协议的应用层部分(所谓的比较高阶之意)。这样说有没有比较有点概念了呢?NAT服务器是由较底层的网络去进行分析的工作,至于通过NAT的封包是干嘛用的,NAT不去管他!至于proxy则主要是由一个daemon的功能达成的,所以必需要符合该daemon的需求,才能达到某些功能!17.1.5架设代理服务器的用途与优缺点现在我们约略知道Proxy的功能了,那么通常什么情况下会架设Proxy呢?一般来说,代理服务器的功能主要有:作为的网页资料取得代理人:这是最主要的功能嘛!作为内部区网的单点对外防火墙系统:如图17.1-1所示一般,如果你的Proxy是放在内部区网的Gateway上头,那么这部代理服务器就能够作为内部计算机的防火墙了!而且还不需要设定那复杂的NAT功能呢!只是单纯的Pro