一:Squid简介

Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid是一个缓存Internet数据的软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS等协议并且,Squid可以自动地进行处理,可以根据自己的需要设置Squid,使之过滤掉不想要的东西。在使用过程中,合理使用访问控制是非常重要的工作。使用访问控制特性,可以控制其在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。Squid访问控制有两个要素:ACL元素和访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。

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将这些元素组合在一个列表中

CDN简介

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

二:案例一(透明代理)

案例要求:

client客户端不用在应用服务器上设置代理服务器ip和端口,就能直接访问internet资源,即实现透明代理。

拓扑图

 

1

Squid服务器需要两块网卡,其中eth0作为内网,eth1作为外网

clip_image002

clip_image004

eth0 Link encap:Ethernet HWaddr 00:0C:29:37:76:49

inet addr:192.168.145.128 Bcast:192.168.145.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe37:7649/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:85 errors:0 dropped:0 overruns:0 frame:0

TX packets:163 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:7705 (7.5 KiB) TX bytes:26356 (25.7 KiB)

Interrupt:67 Base address:0x2000

eth1 Link encap:Ethernet HWaddr 00:0C:29:37:76:53

inet addr:192.168.101.1 Bcast:192.168.101.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe37:7653/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:59 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 b) TX bytes:14039 (13.7 KiB)

Interrupt:67 Base address:0x2080

为了使squid服务器能够上网,我们要做nds指向

[root@localhost ~]# vim /etc/resolv.conf

nameserver 222.88.88.88

nameserver 222.85.85.85

安装squid服务

[root@localhost ~]# mkdir /mnt/cdrom

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@localhost ~]# cd /mnt/cdrom/Server

[root@localhost Server]# ll squid-2.6.STABLE21-3.el5.i386.rpm

[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm

clip_image006

在squid服务器上做nat,打开数据包转发功能。

[root@localhost ~]# vim /etc/sysctl.conf

clip_image008

[root@localhost ~]# sysctl -p

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 4294967295

kernel.shmall = 268435456

NAT地址转换

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.145.0/24 -p udp --dport 53 -o eth1 -j MASQUERADE

设置端口重定向

发现来自客户机的tcp 端口为80的数据包,立即将端口号改为3128

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j REDIRECT --to-ports 3128

[root@localhost ~]# vim /etc/squid/squid.conf

920 http_port 192.168.145.128:3128 transparent

测试

clip_image010

三:案例二(反向代理)

案例要求:

Web服务器通过squid服务器和Internet连接,Internet用户通过反向代理访问web服务器

案例拓扑图:

2

在web服务器上的配置

安装apache服务

clip_image012

、创建一个页面

clip_image014

在squid服务器的配置

首先安装squid服务

[root@localhost ~]# mkdir /mnt/cdrom

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@localhost ~]# cd /mnt/cdrom/Server

[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm

warning: squid-2.6.STABLE21-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

Preparing... ########################################### [100%]

1:squid ########################################### [100%]

[root@localhost Server]# vim /etc/squid/squid.conf

clip_image016

clip_image018

[root@localhost Server]# service squid restart

停止 squid:. [确定]

启动 squid:. [确定]

测试

clip_image020