Squid是一种在Linux系统下使用的优秀的代理服务器软件。squid不仅可用在Linux系统上,还可以用在AIX、Digital Unix、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系统上。Squid与Linux下其它的代理软件如Apache、Socks、TIS FWTK和delegate相比,下载安装简单,配置简单灵活,支持缓存和多种协议。用ipchains+Squid的解决方案,就可以获得通过缓存高性能的同时能够无缝的访问Internet。
Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。
对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid不仅支持HTTP协议,还支持FTP、gopher、SSL和WAIS等协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
Squid将数据元缓存在内存中,同时也缓存DNS查寻的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP,Squid能够实现重叠的代理阵列,从而最大限度的节约带宽。
Squid由一个主要的服务程序Squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。
Squid的另一个优越性在于它使用访问控制清单(ACL)和访问权限清单(ARL)。访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点。
ACL元素定义的语法如下:
acl aclname acltype string1…
acl aclname acltype "file"…
当使用文件时,该文件的格式为每行包含一个条目。
其中,acltype可以是src、dst、srcdomain、dstdomain、url_regex、urlpath_regex、time、port、proto、method中的一任意一种。
src:指明源地址。可以用以下的方法指定:
acl aclname src ip-address/netmask ... 客户ip地址
acl aclname src addr1-addr2/netmask ... 地址范围
dst:指明目标地址,即客户请求的服务器的IP地址。语法为:
acl aclname dst ip-address/netmask ...
srcdomain:指明客户所属的域,Squid将根据客户IP反向查询DNS。语法为:
acl aclname srcdomain foo.com ...
dstdomain:指明请求服务器所属的域,由客户请求的URL决定。语法为:
acl aclname dstdomain foo.com ...。此处需要注意的是:如果用户使用服务器IP而非完整的域名时,Squid将进行反向的DNS解析来确定其完整域名,如果失败,就记录为“none”。
time:指明访问时间。语法如下:
acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]
日期的缩写指代关系如下:
1.S:指代Sunday
2.M:指代Monday
3.T:指代Tuesday
4.W:指代Wednesday
5.H:指代Thursday
6.F:指代Friday
7.A:指代Saturday
另外,h1:m1必须小于h2:m2,表达式为[hh:mm-hh:mm]。
port:指定访问端口。可以指定多个端口,比如:
acl aclname port 80 70 21 ...
acl aclname port 0-1024 ... 指定一个端口范围
proto:指定使用协议。可以指定多个协议:
acl aclname proto HTTP FTP ...
method:指定请求方法。比如:
acl aclname method GET POST ...
url_regex:URL规则表达式匹配,语法为:
acl aclname url_regex[-i] pattern
urlpath_regex:URL-path规则表达式匹配,略去协议和主机名。其语法为:
acl aclname urlpath_regex[-i] pattern
在使用上述ACL元素的过程中,要注意如下几点:
1.acltype可以是任一个在ACL中定义的名称。
2.任何两个ACL元素不能用相同的名字。
3.每个ACL由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换句话说,任一ACL元素的值被匹配,则这个ACL元素即被匹配。
4.并不是所有的ACL元素都能使用访问列表中的全部类型。
5.不同的ACL元素写在不同行中,Squid将这些元素组合在一个列表中
squid的应用主要应用于CDN网络,下面是CDN网络的原理和简介:
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
内容分发网络(CDN)是一种新型网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度,CDN代表了一种基于质量与秩序的网络服务模式。
简单地说,内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。
案例一拓扑图
首先为虚拟主机添加2块虚拟网卡,eth0网卡选择bridge连接,eth1网卡选择host-only连接,并为eth0,eth1网卡配置ip地址等参数
[root@uodekoaix ~]# setup
[root@uodekoaix ~]# vim /etc/resolv.conf //修改主机DNS指向
[root@uodekoaix ~]# ping www.baidu.com //测试主机可以上网
[root@uodekoaix ~]#mkdir /mnt/cdrom
[root@uodekoaix ~]# mount /dev/cdrom /mnt/cdrom //
[root@uodekoaix ~]# cd /mnt/cdrm/Server/ //切换到server目录
[root@uodekoaix Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm //安装squid
[root@uodekoaix ~]# vim /etc/squid/squid.conf
[root@uodekoaix ~]# squid -k parse //测试语法有无错
[root@uodekoaix ~]# service squid start
init_cache_dir /var/spool/squid... 启动 squid:. [确定]
xp虚拟机ip地址配置
代理服务器配置
客户机测试
案例二a>透明代理
拓扑图
客户端配置
[root@uodekoaix ~]# vim /etc/sysctl.conf //打开数据包转发功能
[root@uodekoaix ~]# sysctl –p //数据包转发生效
[root@uodekoaix ~]# iptables -t nat -A POSTROUTING -s 192.168.145.0/24 -p udp --dport 53 -o eth0 -j MASQUERADE //在squid所在的机器上,设置关于dns的nat转换
[root@uodekoaix ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j REDIRECT --to-ports 3128 //设置端口重定向
测试
b>squid反向代理
运行环境:一台linux做squid 一台linux做web服务器 一台windows xp做外部客户机做测试
拓扑图
Web服务器配置
[root@uodekoaix ~]# mkdir /mnt/cdrom
[root@uodekoaix ~]# mount /dev/cdrom /mnt/cdrom/
[root@uodekoaix ~]# cd /mnt/cdrom/Server
[root@uodekoaix Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm //安装apache
Preparing... ########################################### [100%]
1:httpd ########################################### [100%]
[root@uodekoaix Server]# rpm -ivh lynx-2.8.5-28.1.el5_2.1.i386.rpm //安装文本浏览器
Preparing... ########################################### [100%]
1:lynx ########################################### [100%]
[root@uodekoaix ~]# echo "hello" > index.html
[root@uodekoaix ~]# lynx http://127.0.0.1
squid服务器配置
[root@uodekoaix ~]# vim /etc/sysctl.conf //使之监听外网80端口,并使之能访问内部服务器
在外部主机测试结果