使用Squid代理服务器Squid是一种代理服务器,它实现了对HTTP、FTP和Gopher协议的缓存。Squid能够使用访问控制列表(AccessControlList,ACL)来允许或拒绝访问。Squid具备强大的可配置能力以及鲁棒性,而且用户会发现,该软件非常容易学习。更好的是,可将Squid配置为透明代理,即好像用户根本不知道有Squid一样。1获取并安装Squid用户可从FTP站点:ftp://squid.nlanr.net/pub上获得最新的版本。目前最新的版本是2.3。现在,我们假定你的代理服务有两个网络接口,一个连接到外部世界,而另一个连接到内部网络,并且你已经关闭了IP转发功能。图标注意您也可以在仅有一个网络接口的服务器上建立Squid,但我们并不建议这样做。这种配置会加倍本地网络的交通,并可能导致拥塞。目前,网卡和集线器(Hub)的价格已经非常低廉,即使对较小的网络而言,这种投资也是值得的。如果用户计划使用Squid维护缓存,则需要考虑硬盘驱动器和内存限制。Web缓存的本质是,有上千个小文件要同时而有效地递交给客户。Squid的作者建议至少需要有300MHzPentiumIICPU、512MBRAM和五个超宽SCSI硬盘,每个有9GB的容量。笔者曾听说,某个Internet供应商只使用几个486/66处理器以及IDE驱动器。我认为大部分人处于这两种极限之间比较合适。笔者建议使用至少100MHzPentiumCPU、64MBRAM和6GBSCSI硬盘。实际上,略微低一些的配置也没有多大关系。在获得tar.gz文件之后,使用下面的命令将它解开:tarzxvfsquid-2.3.STABLE4-src.tar.gz到Squid所在目录中运行./configure检查系统设置并建立配置文件之后,可输入make编译Squid。如果没有出现任何错误,输入makeinstall,默认将会将其安装到/usr/local下。2使用Squid为建立交换目录,输入如下命令:/usr/local/squid/bin/squid–z但在第一次运行该命令之前,需要修改/usr/local/squid/squid.conf配置文件。Squid的访问控制列表默认是拒绝所有的请求。编辑/usr/local/squid/squid.conf文件并添加如下行:acllocal_netsrc192.168.1.1/255.255.255.0这里,192.168.1.1是本地网络中的一个IP地址,而255.255.255.0是内部网络的网络掩码。同时还需要添加:http_accessallowlocal_net将这一行放在http_accessdenyall的前面。这定义了允许使用缓存的IP地址组。输入squid&启动Squid。用户可通过几种方法验证Squid的运行:l在ps-x的输出清单中应该出现Squid。l运行clientwww.yahoo.com应该在终端上打印Web页文本。l目录/var/log/squid中的cache.log和store.log能够表明Squid正在工作。l运行squid-kcheck&&echo"squidisrunning"将告诉用户Squid是否正在运行。现在进行真正的测试:在NetscapNavigator中,可选择Edit->Preference,然后从Advanced类中选择Proxies而进行代理设置。选择ManualProxyConfiguration然后单击View,可指定Squid服务器的IP地址作为HTTP、FTP和Gopher代理服务器。默认的代理端口是3128,除非在squid.conf文件中修改了默认的代理端口,否则应该在port框中输入3128。现在应该能够浏览任何Web站点了。检查代理服务器上的日志文件/var/log/squid/access.log,并确认浏览过的Web站点保存在日志文件中,从而可再次证实Squid正在工作。3配置Squid满足自己的需求现在Squid已经能够运行,用户可以定制它以满足自己的需求。到此为止,Squid并不限制用户访问任何站点。你可以在squid.conf文件中定义规则,设置访问控制列表(ACL),然后根据这些列表允许或拒绝访问者。添加下面的配置行,该行定义了一个ACL规则,称为BadWords,它匹配任何包含foo或bar的URL:aclBadWordsurl_regexfoobar这条规则作用于和,因为这两个URL包含了BadWords所定义的两个单词。在squid.conf文件中添加下面的行,它可以防止用户访问任何匹配上述规则的URL:http_accessdenyBadWords图标注意几乎每个管理员在使用单词式ACL时,都会遇到一些情况,这些情况下不能简单地使用单词。比如,如果你要禁止用户访问包含有“sex”的站点,则同样也会禁止他们访问www.buildersexchange.com这样的站点。因为“buildersexchange”刚好属于这个由“sex”定义的范畴。因为Squid功能的所有方面均受到squid.conf文件的控制,因此用户可通过编辑该文件而调整Squid以满足自己的需求。比如,添加如下配置行:cach_mem16MB将允许Squid使用16MB的内存来保存Web页。经过不断尝试,就可以找出适合自己的不同数量。图标注意cache_mem并不是Squid所消耗的内存总量,它只是Squid用来保存Web页图像等的内存最大值。Squid的文档中说,Squid可能会消耗这一数量的三倍多的内存。使用如下配置行:emulate_httpd_logon能够让/var/log/squid中日志文件的格式类似Web服务器的日志文件格式。这样,用户可以使用Web统计程序,例如Analog或Webtrends来分析日志,从而了解用户的使用情况。某些FTP服务器在以匿名方式登录时需要输入e-mail地址作为口令。通过将ftp_user设置为有效的e-mail地址,可以让FTP会话另一端的服务器接收到期望的数据,例如:[email protected]你可能想使用代理防火墙管理员的地址,但这可能会导致外部FTP管理员与你联系时出现问题。如果URL页没有被找到,则可以推断该页不会在近期出现。通过将negative_ttl设置为期望的分钟数,可以控制Squid记住某页没有找到的时间,例如:negative_ttl2minutes默认值为5分钟,但如果不想禁止的话,笔者建议减小到两分钟或一分钟,因为用户希望代理能够尽量透明。如果用户正在查找一个已知存在的页,则代理不应该在该页能够实际得到的情况下报告找不到。[email protected]将cache_mgr设置为自己的e-mail地址,可让Squid在检测到缓存问题时向你发送e-mail。cache_effective_usernobodycache_effective_groupnobody这两行非常重要,如果以root身份启动Squid,这两行将把Squid的UID改变为“nobody”。这将避免程序中的bug修改或删除不应该修改或删除的东西。最后,类似Squid这样的工具对用户来讲应该是完全透明的。这样,用户不必关系复杂的管理文件,并能够让他们浏览Web,就像没有Web代理服务器一样。如何达到这一目的的方法不在本书中讨论,用户可参阅上的Squid问答,第17小节详细描述了如何设置Squid作为透明代理。同时,如果你需要在squid.conf文件中管理一个大的“黑名单”站点,则可以考虑使用一个重定向程序。大的ACL规则列表可能会降低负荷很重的Squid代理服务器的速度。而使用重定向程序,则可以提供根据过滤规则允许或禁止访问URL的效率。用户可在Squirm上()获得详细信息,它是一个功能完整的Squid重定向器。Squid发行中带有一个cachemrg.cgi文件。该文件是CGI程序,能够用来查看代理的统计信息,也可以用来关闭或重新启动Squid。该程序能够以清楚的细节来描述代理的执行情况。还能够帮助你调整Web缓存。