第21章代理服务器配置和管理代理服务器是介于Internet和内网计算机之间的联系桥梁,它的功能就是代替内网计算机去访问互联网信息。使用代理服务,可以有效地节省IP资源,多台内网计算机可以通过同一个外网IP访问Internet。目前大部分企业都是通过代理服务器为企业内部员工提供上网服务。本章将介绍如何在RedHatEnterpriseLinux5.2上基于Squid搭建一个稳定高效的代理服务器。21.1代理服务器简介在计算机网络技术飞速发展的今天,Internet已经成为了人们日常生活中的一部分。与此同时,越来越多的企业也把自己的网络接入到了互联网,为员工提供上网服务。对于普通家庭用户,一般使用Modem或ADSL拨号上网;而对于企业则一般是通过ADSL或申请DDN(DigitalDataNetwork,数字数据网)专线,以月租的方式接入互联网。代理服务器的英文全称是ProxyServer,其功能就是代替网络用户去访问网络信息,并把获得的信息返回给用户。在没有代理服务器的情况下,用户计算机要访问互联网,那么这台计算机首先必须要有可访问互联网的IP地址。例如用户要浏览某个网站的信息,客户端计算机将直接与该网站的服务器进行通信,获取访问结果。而代理服务器则是介于客户端和互联网之间。21.1代理服务器简介21.2代理服务器的安装Squid是一款非常优秀的代理服务器软件,由美国国家网络应用研究室开发,能支持包括AIX、Digital、UNIX、FreeBSD、HP-UX、Irix、Linux、SCO、Solaris和OS/2在内的多种操作系统平台。Squid提供了强大的代理缓存功能,可以加快内网用户浏览Internet的速度。除了HTTP协议外,Squid还支持多种其他的协议,包括FTP、gopher、SSL和WAIS等。21.2.1如何获得Squid安装包RedhatLinuxAS5.2自带了2.6.STABLE6-5版本的Squid。用户只要在安装操作系统的时候把该软件选上,Linux安装程序将会自动完成Squid的安装工作。如果在安装操作系统时没有安装Squid,也可以通过安装光盘中的RPM软件包进行安装。RPM安装包的文件名如下:squid-2.6.STABLE6-5.el5_1.3.i386.rpm21.2.1如何获得Squid安装包21.2.2安装Squid下载完成后,接下来将以3.0.STABLE9版本的Squid源代码安装包为例,讲解Squid在RedHatEnterpriseLinux5.2上的安装步骤。21.2.3启动和关闭Squid经过上面的安装和配置后,就可以运行Squid了。Squid的启动和关闭主要通过/usr/local/squid/sbin/squid命令来完成,该命令的格式如下所示。squid[-cdhvzCDFNRVYX][-s|-lfacility][-fconfig-file][-[au]port][-ksignal]下面是Squid命令的一些常见用法。1.启动Squid2.查看Squid进程的状态3.查看Squid的版本和编译选项4.关闭Squid21.2.4Squid服务开机自动运行RedHatEnterpriseLinux5.2支持程序服务的开机自动运行,通过编写Squid服务的启动关闭脚本,并在系统中进行必要的配置,可以实现Squid服务的开机自动启动。21.3Squid的配置Squid的配置修改主要通过更改/usr/local/squid/etc/squid.conf文件来完成,本节对squid.conf文件中的各选项进行说明,并介绍如何通过Squid提供的命令检查该文件的配置是否正确,以及在无需重启服务的情况下使更改后的配置生效。21.3.1squid.conf配置文件Squid安装完成后会自动在/usr/local/squid/etc目录下创建一个名为squid.conf的配置文件,在该配置文件中保存了Squid的所有配置信息,用户可以通过修改该文件来满足不同的需求。默认创建的squid.conf文件的内容有4000多行,其中绝大部分都是各种注释。为了方便阅读和编辑,一般会把该文件的内容清空再进行编辑。21.3.2与配置文件相关的命令Squid命令除了用于管理Squid的启动和关闭以外,还可以检查squid.conf文件的格式是否正确,以及使配置更改后无需重启进程而立刻生效。1.检查文件格式2.使更改生效21.3.3设置Squid使用中文错误提示信息Squid安装后默认的错误提示信息是英文,英文页面对于中国的用户来说可能比较容易造成困惑,而且也不太友好。21.3.4配置透明代理一般情况下,用户要使用代理上网,需要在浏览器中配置相应的代理服务器。如果使用透明代理,用户只要把自己计算机的默认网关设置为代理服务器的IP地址即可,用户的感觉跟直接上网一样,但实际上它是通过代理服务器来浏览Internet的网页。要在Squid中配置透明代理,需要经过以下配置步骤。1.修改squid.conf配置文件2.配置iptables21.4Squid安全作为一款成熟的代理服务器软件,Squid提供了强大的访问控制功能,通过acl和http_access选项可以定义各种的访问控制列表和规则,有效地控制用户对服务器的访问。Squid还可以启用身份认证功能,用户只有在输入正确的用户名和口令后才能使用代理进行上网。21.4.1访问控制列表访问控制列表是满足一定条件的主机、端口、协议等对象的集合,通过acl选项进行定义,是Squid访问控制的基础,在其他选项中被引用来授予或拒绝相关对象的访问。acl选项的格式如下所示。acl列表名称列表类型-i列表值21.4.2使用http_access选项控制HTTP请求http_access选项用于允许或拒绝某个访问控制列表的HTTP请求。对于客户端发来的HTTP请求,Squid服务器首选会检查squid.conf文件中所定义的http_access选项,根据http_access所定义的规则决定是允许还是拒绝该HTTP请求。该选项的格式如下所示。http_accessallow|deny[!]aclname...1.禁止某个IP地址通过代理上网2.允许某个网段通过代理上网3.禁止对某个服务器的访问4.为不同客户端分配不同的访问时段5.网站屏蔽6.限制客户端的连接数21.4.3身份认证为了限制非法用户通过代理服务器访问Internet,可以在Squid中启用身份认证功能,在用户通过代理浏览网页时要求输入用户名和口令进行验证。具体配置步骤如下所示。1.修改squid.conf文件2.创建账户文件3.使配置生效并测试21.4.3身份认证21.5Squid日志管理Squid拥有完善的日志系统,其中主要的日志包括access_log、cache.log以及store.log这3个,它们的默认保存位置均为/usr/local/squid/var/logs/。接下来将分别对这3个日志文件的使用方法并对日志内容进行分析。1.access_log日志2.cache.log日志3.store.log日志21.6使用Web方式管理Squid要Squid本身提供一个名为cachemgr.cgi的cgi程序,它默认存放于/usr/local/squid/libexec/目录下。使用该文件,用户可以通过Web方式对Squid进行管理。21.7客户端配置代理服务器的客户端配置比较简单,用户在浏览器中设置好代理服务器的地址和端口即可。本节分别以Linux下的MozillaFirefox和Windows下的InternetExplore为例,介绍Squid客户端配置的相关步骤。21.7.1Linux客户端的配置Linux客户端需要在浏览器中设置使用的代理服务器地址。21.7.2Windows客户端配置Windows客户端同样需要在浏览器中配置代理服务器地址,接下来以InternetExplorer(IE)浏览器为例,介绍Windows上的代理客户端配置步骤。21.8Squid常见问题处理本节介绍在RedHatEnterpriseLinux5.2上安装及配置Squid时常见的一些问题以及解决方法,包括如何解决创建cache目录时出现的“Permissiondenied”错误,启动Squid时出现“Addressalreadyinuse”以及“DNSnamelookuptestsfailed”错误等。21.8.1创建cache目录时出现权限不足的错误由于目录或文件权限设置不恰当,会导致Squid出现各种各样的错误。例如在安装Squid后执行squid-z命令创建cache目录,出现如下错误。#./squid-z2008/12/0116:35:01|CreatingSwapDirectories2008/12/0116:35:01|/usr/local/squid/var/cacheexistsFATAL:Failedtomakeswapdirectory/usr/local/squid/var/cache/00:(13)Permissiondenied21.8.2启动Squid时提示地址已被占用的错误如果已经有其他进程占用Squid的监听端口(默认为3128),或者Squid已经启动,那么启动Squid时将会出现如下错误提示。#./squid-CNDd12008/12/0117:11:47|StartingSquidCacheversion3.0.STABLE9fori686-pc-linux-gnu...2008/12/0117:11:47|ProcessID52892008/12/0117:11:47|With1024filedescriptorsavailable2008/12/0117:11:47|DNSSocketcreatedat0.0.0.0,port1038,FD4省略部分输出2008/12/0117:11:48|commBind:CannotbindsocketFD11to*:3128:(98)AddressalreadyinuseFATAL:CannotopenHTTPPort21.8.3启动Squid时提示DNS名称解析测试失败的错误Squid启动前会进行一些DNS查询,以确保DNS服务器可以访问并运作正常。如果DNS查询失败,在cache.log或syslog中将会出现如下错误:FATAL:ipcache_init:DNSnamelookuptestsfailed此时用户应检查所配置的DNS服务器是否正确,并确保DNS服务器可以访问且正常运行。