270 likes | 601 Views
Squid 教程. 第三空间系统配置部教程之 Squid 作者:李振韬. 提纲. Squid 是什么 ? Squid 能做什么 ? Squid 如何工作的 ? Squid 的工作原理是什么 ? Squid 实例讲解. SQUID 是什么.
E N D
Squid教程 第三空间系统配置部教程之Squid 作者:李振韬
提纲 • Squid是什么? • Squid能做什么? • Squid如何工作的? • Squid的工作原理是什么? • Squid实例讲解
SQUID是什么 • Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。Squid将数据元缓存在内存中,同时也缓存DNS查询的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP(轻量Internet缓存协议),Squid能够实现层叠的代理阵列,从而最大限度地节约带宽。Squid由一个主要的服务程序squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出预先指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。
什么是GOPHER、 WAIS、 Archie • 关于GOPHER:Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。允许用户使用层叠结构的菜单与文件,以发现和检索信息,它拥有世界上最大、最神奇的编目。Gopher客户程序和Gopher服务器相连接,并能使用菜单结构显示其它的菜单、文档或文件,并索引。同时可通过Telnet远程访问其它应用程序。Gopher协议使得Internet上的所有Gopher客户程序,能够与Internet上的所有已"注册"的Gopher服务器进行对话。 • 关于WAIS:WAIS这个名称是英文“Wide Area Information Service” (广域信息服务)的缩写。WAIS是一种能够在几百个数据库中搜索任何一个信息的 Internet服务。我们把每个这样的数据库称之为源。用户指定一个或几个单词为关键字,WAIS按照用户所给出的关键字对指定的源中的每个项目或整个正文内容进行检索, 并且找出符合用户指定标准的项目。 • 关于Archie:我们上网时会遇到只知道文件名,但不知道文件在Internet的什么地方,导航系统就无法下载此文件,那么有什么办法能够查找到文件的位置呢? 在Internet中有许多被称为Archie服务器的计算机,他们就象图书管理员,提供了一项相当重要的服务:它能够在只知道文件名的前提下,为用户找到这个文件所在的FTP服务器的地址,这种功能就叫做Archie。
SQUID能做什么 • 代理服务器 • 透明代理 • 反向代理
什么是SQUID代理服务器 • 做为代理服务器,这是SQUID的最基本功能;通过在squid.conf文件里添加一系列访问及控制规则,用户在客户端设置服务器地址和端口,即可通过SQUID访问INTERNET,在下面的规则里,squid实现局域网用户代理和高速缓存功能:
规则举例 http_port 3128 #监听内外网端口 cache_dir ufs /var/squid cache_mem 32MB cache_swap_low 90 cache_swap_high 95 cache_dir /var/squid 1000 16 32 cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log acl all src 0.0.0.0/0.0.0.0 acl head src 192.168.0.2/255.255.255.255 192.168.0.3/255.255.255.255 acl denysite dstdomain tw net acl denyip dst 202.96.134.133/255.255.255.255 acl dnsport port 53 http_access allow head http_access deny denysite http_access deny denyip http_access deny dnsport 客户端在IE设置里填写代理服务器IP地址及端口,即刻实现高速上网
什么是透明代理 • 所谓透明代理,是相对于代理服务器而言,客户端不需要做任何和代理服务器相关的设置和操作,对用户而言,更本感觉不到代理服务器的存在,所以称之为透明代理。
透明代理流程说明 • 用户A发送一个访问请求到防火墙,由防火墙将该用户的访问请求转发到SQUID,SQUID在先检查自身缓存中有无该用户请求的访问内容,如果没有,则请求远端目的服务器,获取该用户的访问内容,在返回给用户的同时,在自身缓存保留一份记录以备下次调用;当用户B发送一个和用户A相同的访问请求时,由防火墙将转发该用户请求到SQUID,SQUID检查自身缓存发现有同样内容后,直接将该内容返回给用户。 • 注:在实际使用中,通常将SQUID和防火墙放在同一台机器上,为了更清楚的象浏览者描述其工作流程,在以下的流程图中将防火墙和SQUID分开显示。
透明代理工作流程图 WEB服务器 SQUID 用户A 防火墙 用户B
什么是反向代理 • 普通代理方式是代理内部网络用户访问internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到internet上服务器的连接请求发送给代理服务器处理。反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理流程说明 • SQUID做为反向代理服务器,通常工作在一个服务器集群的前端,在用户端看来,SQUID服务器就是他所要访问的服务器,而实际意义上SQUID只是接受用户的请求,同时将用户请求转发给内网真正的WEB服务器,如果SQUID本身有用户要访问的内容,则SQUID直接将数据返回给用户。
反向代理工作流程 • WEB服务器集群 WEB服务器 SQUID服务器 用户 WEB服务器 WEB服务器 用户
SQUID如何工作 • 以下将讲解三种SQUID的工作方式,首先需要定义三种不通类型的网络结构,我们将三种网络结构分别命名为:传统代理,透明代理,反向代理。客户端IP为192.168.1.100,SQUID服务器的内外网IP分别为192.168.1.1/1.2.3.4,内外网网络接口分别为eth1和eth0,远端WEB服务器IP为2.3.4.5 • 传统代理: • 透明代理: • 反向代理: Client SQUID服务器 WEB服务器 Client 防火墙 SQUID服务器 WEB服务器 WEB服务器 SQUID服务器 Client
SQUID如何工作 • 传统代理 1.SQUID被绑定到代理服务器的3128端口。 2.客户端浏览器被配置使用代理服务器的3128端口。 3.客户端不需要配置DNS。4.代理服务器上需要配置代理服务器。 5.客户端不需要配置缺省路由。 当我们在客户端浏览器中打开一个web请求,比如“http://www.96333.com”,这时将陆续发生以下事件: 1.客户端使用某一端口(比如1025)连接代理服务器3128端口,请求web页面“http://www.96333.com” 2.代理服务器向DNS请求“www.96333.com”,得到相应的IP地址2.3.4.5。然后,代理服务器使用某一端口(比如1037)向该IP地址的80端口发起web连接请求,请求web页面。 3.收到响应的web页面后,代理服务器把该数据传送给客户端。 4.客户端浏览器显示该页面。 从www.96333.com的角度看来,连接是在1.2.3.4地1037端口和2.3.4.5的80端口之间建立的。从client的角度看来,连接是在192.168.1.100的1025端口和1.2.3.4的3128端口之间建立的。
透明代理 透明代理的意思是客户端根本不需要知道有代理服务器的存在。 在以上基础上我们做以下工作: 1.配置透明代理服务器软件运行在代理服务器的3128端口。 2.配置代理服务器将所有对80端口的连接重定向到3128端口。 3.配置客户端浏览器直接连解到Internet。 4.在客户端配置好DNS. 5.配置客户端的缺省网关为192.168.1.1. 当我们在客户端浏览器中打开一个web请求,比如“http://www.96333.com”,这时将陆续发生以下事件: 1.客户端向DNS请求“www.96333.com”,得到相应的IP地址2.3.4.5。然后,客户端使用某一端口(比如1066)向该IP地址的80端口发起web连接请求,请求web页面。 2.当该请求包通过透明代理服务器时,被防火墙将该数据包重定向到代理服务器的绑定端口3128。于是,透明代理服务器用某一端口(比如1088)向2.3.4.5的80端口发起web连接请求,请求web页面。 3.收到响应的web页面后,代理服务器把该数据传送给客户端。 4.客户端浏览器显示该页面。 从www.96333.com的角度看来,连接是在1.2.3.4地1088端口和2.3.4.5的80端口之间建立的。从client的角度看来,连接是在192.168.1.100的1066端口和2.3.4.5的80端口之间建立的。 以上就是传统代理服务器和透明代理服务器的区别所在。
反向代理 反向代理是相对于传统代理而言,是代理web服务器接受客户端的请求 在此,我们忽略客户端的设置,假设客户端是可以直接访问互联网 web服务器与客户端的结构如下: 假设已经将www.96333.com的域名指向了squid服务器所在的ip,并且在web服务器集群里做了dns轮询。 web server1 -| web server2 -|- squid 服务器 / INTERNET / - Client web server3 -| 1.客户端通过IE向DNS服务器发送访问www.96333.com的请求,由客户所在地的DNS服务器解析www.96333.com的IP为2.3.4.5并返回给用户。 2.客户收到DNS返回的服务器IP地址,重新向www.96333.com指向的IP地址发送访问请求。 3.squid服务器接收到用户的请求后,查询自身缓存中是否有用户请求内容,有则直接发送给客户端,如果没有则通过内部DNS轮询查询空闲服务器,并将客户请求发送到该服务器,在获取到用户数据并返回给用户的同时保留一份在自己本身的缓存当中。 在用户看来,自己访问的是www.96333.com这个服务器,实际上真正的WEB服务器为SQUID缓存后面的服务器或者服务器集群,通过外部DNS做CNAME转向,将用户请求转发到内部真正的web服务器上去
SQUID工作原理是什么 一、SQUID缓存的存放方式: 每一台 Squid 代理服务器上都有若干颗硬盘,每颗硬盘又分割成多个分区,每一个分区又可建立很多目录,目录下才放文件(Squid 把它叫 object)。 二、SQUID的查询方式: SQUID通过查询表的方式来定位某个资源的位置,所查询的表叫Hash table 和Digest table;Digest table在这里可以称之为摘要或者索引,它记录了磁盘上每个分区,每个目录里存的缓存摘要,Hash table在这里可以称之为目录或者提纲,它记录所有的Digest table表信息,SQUID接受到请求后先查询Hash table,在根据Hash table所指向的Digest table查询需要的信息。 三、SQUID服务器之间的关系: SQUID服务器存在两种工作关系,一种为Child、Parent,当child squid server没有用户需要的数据时,就象parent server发出请求,并持续等待,直到parent server回应自己为止;另外一种为Sibling,当本地SQUID server没有用户请求数据时,会向sibling server发出请求,如果sibling server没有资料则会向上级sibling或者INTERNET发送数据请求
四、SQUID运作模式 1. 当 Squid Server 没有资料时,会先向 Sibling 的 Squid Server 要资料,如果 Sibling 没资料,就跳过它直接向 Parent 要。 2. 向 Parent 要资料,然後一直等,直到 Parent 给它资料为止(Parent 自己有的资料或上 Internet 去拿)。 3. 没有 Parent 时,就自己上 Internet 去拿。 4. 如果这三者都拿不到资料,才向用户端回报拿不到资料。 一般而言,把网路上一层的 Squid Server 设成 Sibling 是不错的选择(例如:一个学校将所在城市网和附近的大学设成 Sibling),因为网路上一层的 Squid Server 服务对象较多,其硬件功能较强,离我们比较近,速度也比较快;万一要不到资料,我们还可以自己上 Internet 去拿。那什麽时候设 Parent?当您的出口只有一个,或上一层 Squid Server 拿不到资料,自己也一定拿不到,只好将上一层 Squid Server 设为 Parent。
实例讲解之传统代理 http_port 3128 #监听内外网端口 cache_dir ufs /var/squid cache_mem 32MB cache_swap_low 90 cache_swap_high 95 cache_dir /var/squid 1000 16 32 cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log acl all src 0.0.0.0/0.0.0.0 acl head src 192.168.0.2/255.255.255.255 192.168.0.3/255.255.255.255 acl denysite dstdomain tw net acl denyip dst 202.96.134.133/255.255.255.255 acl dnsport port 53 http_access allow head http_access deny denysite http_access deny denyip http_access deny dnsport 客户端在IE设置里填写代理服务器IP地址及端口,即刻实现高速上网
实例讲解之透明代理 http_port 1.2.3.4:8080cache_mem 32 MBcache_swap_low 90cache_swap_high 95maximum_object_size 4096 KBcache_dir ufs /usr/local/squid/cache 1200 16 256cache_access_log /usr/local/squid/logs/access.logcache_log /usr/local/squid/logs/cache.logdns_nameservers 202.96.134.133unlinkd_program /usr/local/squid/bin/unlinkdacl all src 0.0.0.0/0.0.0.0http_access allow allcache_effective_user nobodycache_effective_group nobodyhttpd_accel_host virtualhttpd_accel_port 80httpd_accel_with_proxy onhttpd_accel_uses_host_header on Iptables设置 iptables -t nat -A PREROUTING -p tcp –d 1.2.3.4--dport 80 -j REDIRECT --to-port 81 SQUID是按照顺序读取配置文件,所以要将deny的http_access语句放在前面,然后是allow的,但是http_access deny all要放到最后
实例讲解之反向代理 反向代理的设置,需要通过三个步骤来完成: 一、DNS解析。 二、SQUID配置。 三、端口转发。
实例讲解之反向代理-DNS设置 一、DNS设置 Squid配制完成之后并不能开始反向代理的工作,反向代理还需要用两个DNS服务器来解析域名,一个为外部DNS,一个为内部DNS,外部DNS负责访问端对www.96333.com和www1.96333.com的域名解析,内部DNS则负责由SQUID发出的对内部WEB服务器的请求解析。 我们将外部DNS解析www.96333.com和www1.96333.com分别为1.2.3.4和2.3.4.5,同时内部DNS已经将www.96333.com和www1.96333.com分别解析为1.2.3.4/192.168.1.4和2.3.4.5/192.168.1.5。
实例讲解之反向代理-SQUID配置 cache_mem 1024 MB 这里可以添上您准备给squid作为高速缓存使用的内存大小。注意,如果您的机器有N兆内存,那么,推荐您在这里添的数字是N/3。 cache_dir ufs /usr/local/squid/cache 100 16 256 填写"allowedip"和"allowedip1"ACL访问控制列表。这里应该填写你对外公开的服务器的IP,比如此例的两个WEB服务器对应的外部地址为1.2.3.4 和2.3.4.5, acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl all src 0.0.0.0/0.0.0.0 acl allowedip src 1.2.3.4/255.255.255.255 acl allowedip1 src 2.3.4.5/255.255.255.255 http_access deny manager all http_access allow allowedip http_access allow allowedip1 http_access deny all icp_access allow allowedip icp_access allow allowedip1 icp_access deny all cache_mgr webmaster@test.com.cn cache_effective_user nobody cache_effective_group nobody ******以下为关于反向代理部分的设置****** httpd_accel_host www.96333.com httpd_accel_host www1.96333.com 此处设置反向代理的主机名 httpd_accel_port 80 此处设置反向代理的WEB服务端口号
实例讲解之反向代理-端口转发 由于外部DNS解析的WEB服务器地址为SQUID,而SQUID本身不提供web服务,所以需要将用户访问www.96333.com的80端口的请求转发给内部真正的WEB服务器,那么就需要通过端口转发的形式来将用户请求转发到内网服务器。 在反向代理中,通常使用transproxy+iptables的方式来实现,在这个过程中,iptables做端口转发,transproxy充当透明代理。 Iptables的设置: iptables -t nat -A PREROUTING -p tcp –d 1.2.3.4--dport 80 -j REDIRECT --to-port 81 以上设置将所有发送到1.2.3.4 80端口的请求全部转发到81端口。 transproxy设置: 在rc.local里加入:tproxy -s 81 -r nobody 1.2.3.4 3128
实例讲解之反向代理 • 让我们模拟一下一位因特网用户访问www.96333.com这台拥有内部IP(192.168.1.4)的WEB服务器的过程。首先,该用户的请求由标准DNS服务器解析为1.2.3.4,则用户的机器向1.2.3.4的80端口发出请求,要求浏览www.96333.com这台WEB服务器的页面,而1.2.3.4这台机器正是我们的反向代理服务器,按照反向代理服务器的iptables规则发往该服务器80端口的请求被转发到81端口,而81端口由transproxy 控制,transproxy把请求发给squid,让squid去取www.96333.com这个页面。而反向代理服务器上的内部DNS服务器把www.96333.com解析为192.168.1.4,默认的反向代理端口是80,这样,squid就到192.168.1.4的端口80上请求WEB服务。而192.168.1.4正是我们的www.96333.com的真实WEB服务器,它的80端口开放着http服务。这样,squid从192.168.1.4服务器上取回页面传回给1.2.3.4 然后再传回给因特网上的对www.96333.com有访问请求的用户,并把该页面放在squid的cache中。这样就完成了一次因特网用户到拥有内部IP的WEB服务器的访问过程。以后再有因特网用户再访问www.96333.com这个页面时,squid就直接从cache里提取缓存的页面,这样可以提高WEB服务器的访问效率,同时可以减轻服务器的负栽.