1LinuxLinux--------新一代的操作系统平台新一代的操作系统平台squidsquid代理服务器代理服务器2概述•代理提供两个方面的服务:一是让不能直接访问Internet的用户访问Internet。–因为允许一台权限较大的计算机直接连接网络更安全也更易于管理;•二是让那些已经能够访问Internet的用户可以更快或更广泛地访问。–因为代理服务器可以将访问较为频繁的网页缓存到本地,当有人再次访问同一页面时,代理可以直接发送本地页面而无需浪费网络带宽。当然也可以二者兼而有之。3Squid•Squid的优点是功能强大、配置简单、文档丰富;•缺点是目前支持的协议尚不够广泛,对超大型应用略感吃力,不过这些不足都在慢慢完善之中。•对于初学者和普通的应用而言,Squid仍是昀佳选择4Squid•Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。•和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求•Squid结合iptables还可以配置成透明代理5什么是透明代理•透明代理指客户机感觉不到代理服务器的存在,不需要浏览器或其它客户端工具(网络快车)中作任何设置,客户机只需要将默认网关设置为Linux服务器的IP地址。•当客户机访问internet,请求包经过Linux服务器转发时,Linux服务器上的iptables将客户机的请求重定向到Squid代理服务器,由代理服务器代替客户机访问外部信息资源,再将获取的数据传回客户机6需求描述•我们要配置一个只对内部网络提供代理服务的ProxyServer。•它将用户分为高级用户和普通用户两种,对高级用户采用网卡物理地址识别的方法,普通用户则需要输入用户名和口令才能正常使用。•高级用户没有访问时间和文件类型的限制,而普通用户只在上班时可以访问以及一些其它的限制7Squid网络拓扑图•Squid网络拓扑图8Squid的下载安装•从Squid的官方站点下载该软件:•也可以使用Linux的发行版,如RedHat提供的RPM包。RPM方式安装很简单,命令如下:–#rpm-ivhSquid-2.x.STALBx.i386.rpm•一般情况下,即便是系统中已经默认安装了Squid,也应当先删掉然后安装昀新的源代码包。因为开源软件会不断修正问题、提供更新的功能,使用昀新版本可以保证昀高的性能及安全,而且源代码方式可以完全定制系统。9Squid的安装--解压缩包•STABLE稳定版、DEVEL版通常是提供给开发人员测试程序的,假定下载了昀新的稳定版squid-2.5.STABLE2.tar.gz,用以下命令解开压缩包:–#tarxvfzsquid-2.5.STABLE.tar.gz•用bz2方式压缩的包可能体积更小,相应的命令是:–#tarxvfjsquid-2.5.STABLE.tar.bz210Squid的安装--配置和编译•然后,进入相应目录对源代码进行配置和编译,命令如下:–#cdsquid-2.5.STABLE2•配置命令configure有很多选项,如果不清楚可先用“-help”查看。通常情况下,用到的选项有以下几个:–./configure-help11Squid的安装--配置和编译•--prefix=/web/squid#指定Squid的安装位置,如果只指定这一选项,那么该目录下会有bin、sbin、man、conf等目录,而主要的配置文件此时在conf子目录中。为便于管理,昀好用参数--sysconfdir=/etc把这个文件位置配置为/etc。•--enable-storeio=ufs,null#使用的文件系统通常是默认的ufs,不过如果想要做一个不缓存任何文件的代理服务器,就需要加上null文件系统。•--enable-arp-acl#这样可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。•--enable-err-languages=“Simplify_Chinese”--enable-default-err-languages=“Simplify_Chinese”#上面两个选项告诉Squid编入并使用简体中文错误信息。•--enable-linux-netfilter#允许使用Linux的透明代理功能。•--enable-underscore#允许解析的URL中出现下划线,因为默认情况下Squid会认为带下划线的URL是非法的,并拒绝访问该地址。12Squid的安装--配置和编译•整个配置编译过程如下:#./configure--prefix=/var/squid--sysconfdir=/etc--enable-arp-acl--enable-linux-netfilter--enable-pthreads--enable-err-language=Simplify_Chinese--enable-storeio=ufs,null--enable-default-err-language=Simplify_Chinese--enable-auth=basic--enable-baisc-auth-helpers=NCSA--enable-underscore##make#makeinstall昀后执行make和makeinstall两条命令,将源代码编译为可执行文件,拷贝到指定位置13基本配置•安装完成后,接下来要对Squid的运行进行配置。•所有项目都在squid.conf中完成。Squid自带的squid.conf包括非常详尽的说明,相当于一篇用户手册,对配置有任何疑问都可以参照解决。•在这个例子中,代理服务器同时也是网关,内部网络接口eth0的IP地址为192.168.0.1,外部网络接口eth1的IP地址为202.103.x.x。14基本配置•http_port3182•cache_mem32MB•cache_swap_low90•cache_swap_high95•maximum_object_size4096KB•cache_dirufs/var/squid120016256•cache_access_log/usr/local/squid/logs/access.log•cache_log/usr/local/squid/logs/cache.log•dns_nameservers210.12.114.130•unlinkd_program/usr/local/squid/bin/unlinkd•aclallsrc0.0.0.0/0.0.0.0•http_accessallowall•cache_effective_usernobody•cache_effective_groupnobody•httpd_accel_hostvirtual•httpd_accel_port80•httpd_accel_with_proxyon•httpd_accel_uses_host_headeron•cache_mgrroot@mydomain.net15基本配置•http_port192.168.0.1:3128–默认端口是3128,当然也可以是任何其它端口,只要不与其它服务发生冲突即可。为了安全起见,在前面加上IP地址,Squid就不会监听外部的网络接口。如果使用HTTPD加速模式则为80。你可以指定多个端口,但是所有指定的端口都必须在一条命令行上。•cache_mgrroot@mydomain.net–服务器管理者的电子邮件,当错误发生时,该地址会显示在错误页面上,便于用户联系16基本配置•cache_mem32MB–该选项用于指定squid可以使用的内存的理想值。这部分内存被用来存储以下对象:In-Transitobjects(传入的对象)–HotObjects(热对象,即用户常访问的对象)–Negative-Cachedobjects(消极存储的对象)–需要注意的是,这并没有指明squid所使用的内存一定不能超过该值,其实,该选项只定义了squid所使用的内存的一个方面,squid还在其他方面使用内存。所以squid实际使用的内存可能超过该值。–缺省值为8MB。17基本配置•cache_dirufs/var/squid120016256–cache_dirDirectory-NameMbytesLevel-1Level2–指定squid用来存储对象的交换空间的大小及其目录结构。可以用多个cache_dir命令来定义多个这样的交换空间,并且这些交换空间可以分布不同的磁盘分区。–“directory”指明了该交换空间的顶级目录。如果你想用整个磁盘来作为交换空间,那么你可以将该目录作为装载点将整个磁盘mount上去。缺省值为/var/spool/squid。–“Mbytes”定义了可用的空间总量。需要注意的是,squid进程必须拥有对该目录的读写权力。–“Level-1”是可以在该顶级目录下建立的第一级子目录的数目,缺省值为16。–同理,“Level-2”是可以建立的第二级子目录的数目,缺省值为256。–为什么要定义这么多子目录呢?这是因为如果子目录太少,则存储在一个子目录下的文件数目将大大增加,这也会导致系统寻找某一个文件的时间大大增加,从而使系统的整体性能急剧降低。所以,为了减少每个目录下的文件数量,我们必须增加所使用的目录的数量。如果仅仅使用一级子目录则顶级目录下的子目录数目太大了,所以我们使用两级子目录结构。18基本配置•cache_swap_low90•cache_swap_high95–squid使用大量的交换空间来存储对象。那么,过了一定的时间以后,该交换空间就会用完,所以还必须定期的按照某种指标来将低于某个水平线的对象清除。squid使用所谓的“昀近昀少使用算法”(LRU)来做这一工作。当已使用的交换空间达到cache_swap_high时,squid就根据LRU所计算的得到每个对象的值将低于某个水平线的对象清除。这种清除工作一直进行直到已用空间达到cache_swap_low。这两个值用百分比表示,如果你所使用的交换空间很大的话,建议你减少这两个值得罹啵 蛭 馐币桓霭俜值憔涂赡苁羌赴僬卓占洌 馐票赜跋靤quid的性能。缺省–cache_swap_low90–cache_swap_high9519基本配置•maximum_object_size–大于该值得对象将不被存储。如果你想要提高访问速度,就请降低该值;如果你想昀大限度地节约带宽,降低成本,请增加该值。单位为K,缺省值为:–maximum_object_size4096KB20基本配置•cache_access_log–说明:指定客户请求记录日志的完整路径(包括文件的名称及所在的目录),该请求可以是来自一般用户的HTTP请求或来自邻居的ICP请求。缺省值为:–cache_access_log/var/log/squid/access.log–如果你不需要该日志,可以用以下语句取消:–cache_access_lognone–可以通过分析它来了解所有用户访问的详尽地址21基本配置•cache_log–说明:指定squid一般信息日志的完整路径(包括文件的名称及所在的目录)。缺省路径为:–cache_log/var/log/squid/cache.log•dns_nameservers100.100.100.101–该选项用来定义Squid进行域名解析时使用的域名服务器的,因为在使用代理协议时,客户端并不进行域名查询,而是通过代理进行的,因此需要为代理服务器指定域名服务器来进行域名解析。22基本配置•unlinkd_program–说明:指定文件删除进程的完整路径。–缺省设置为:unlinkd_program/usr/lib/squid/unlinkd•client_mask255.255.255.255–告诉Squid如何处理