一: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资源,即实现透明代理。
拓扑图:
 

Squid在企业网中的应用_Internet 

 

配置步骤
客户端配置

 

 

Squid在企业网中的应用_代理服务器_02 

 

编辑 /etc/sysctl.conf 打开数据包转发能力
[root@localhost ~]# vim /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
是数据包转发能力生效
[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
 
在squid所在的机器上,设置关于dns的nat转换
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.28.0/24 -p udp --dport 53 -o eth0 -j MASQUERADE
设置端口重定向
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j REDIRECT --to-ports 3128
在squid配置中加入 transparent
[root@localhost ~]# vim /etc/squid/squid.conf
# Squid normally listens to port 3128
http_port 192.168.28.100:3128 transparent
重启squid服务
[root@localhost ~]# service squid restart
停止 squid:.                                              [确定]
启动 squid:.                                              [确定]
 
测试

 

 

Squid在企业网中的应用_局域网_03 

 

查看日志
[root@localhost ~]# tail -f /var/log/squid/access.log
1345387179.776   1234 192.168.28.200 TCP_MISS/200 4431 GET http://www.baidu.com/ - DIRECT/119.75.218.77 text/html
1345387179.799     23 192.168.28.200 TCP_HIT/200 2084 GET http://www.baidu.com/img/baidu_sylogo1.gif - NONE/- p_w_picpath/gif
1345387180.212      5 192.168.28.200 TCP_HIT/200 542 GET http://www.baidu.com/cache/global/img/gs.gif - NONE/- p_w_picpath/gif
1345387180.215      2 192.168.28.200 TCP_HIT/200 1105 GET http://s1.bdstatic.com/r/www/img/i-1.0.0.png - NONE/- p_w_picpath/png
1345387189.913   9700 192.168.28.200 TCP_MISS/200 12980 GET http://s1.bdstatic.com/r/www/cache/global/js/home-1.3.js - DIRECT/113.105.244.109 application/javascript
1345387190.616    703 192.168.28.200 TCP_MISS/200 23028 GET http://s1.bdstatic.com/r/www/cache/global/js/tangram-1.3.4c1.0.js - DIRECT/113.105.244.109 application/javascript
1345387190.871    254 192.168.28.200 TCP_MISS/200 10383 GET http://s1.bdstatic.com/r/www/cache/user/js/u-1.3.3.js - DIRECT/113.105.244.109 application/javascript
 
下面设置访问控制
1.假设内网中的192.168.28.88的主机不允许访问Internet其他网段主机可以访问设置如下
[root@localhost ~]# vim /etc/squid/squid.conf
acl noip    src   192.168.28.88/32
http_access deny    noip
重启squid服务
[root@localhost ~]# service squid restart
停止 squid:                                               [确定]
启动 squid:.                                              [确定]
 
测试结果:

 

 

Squid在企业网中的应用_squid_04 

 

查看日志显示
[root@localhost ~]# tail -f /var/log/squid/access.log
1345392656.009      0 192.168.28.88 TCP_DENIED/403 1405 GET http://baidu.com/ - NONE/- text/html
1345392657.769      0 192.168.28.88 TCP_DENIED/403 1429 GET http://222.85.64.169/wpad.dat - NONE/- text/html
1345392658.623      0 192.168.28.88 TCP_DENIED/403 1529 POST http://stats1.update.microsoft.com/ReportingWebService/ReportingWebService.asmx - NONE/- text/html
1345392679.871      0 192.168.28.88 TCP_DENIED/403 1529 POST http://stats1.update.microsoft.com/ReportingWebService/ReportingWebService.asmx - NONE/- text/html
1345392700.974      0 192.168.28.88 TCP_DENIED/403 1529 POST http://stats1.update.microsoft.com/ReportingWebService/ReportingWebService.asmx - NONE/- text/html
 
改变内网机器ip为192.168.28.89 测试效果如下

 

 

Squid在企业网中的应用_squid_05 

 

2.假设内网机器从周一到周五的8点到18点为工作时间不能上网,其他时间可以上网。设置如下
[root@localhost ~]# vim /etc/squid/squid.conf
acl work time MTWHF 08:00-18:00
http_access deny work
[root@localhost ~]# service squid restart
停止 squid:.                                              [确定]
启动 squid:.                                              [确定]
查看时间
[root@localhost ~]# date
2012年 08月 29日 星期三 15:15:08 CST
 
测试结果

 

 

Squid在企业网中的应用_squid_06 

 

修改工作以外的时间
[root@localhost ~]# date 090119142012
2012年 09月 01日 星期六 19:14:00 CST
重启服务测试结果如下

 

 

Squid在企业网中的应用_网络安全_07 

 

三:案例二(反向代理)
案例要求:
Web服务器通过squid服务器和Internet连接,Internet用户通过反向代理访问web服务器
案例拓扑图:

 

 

Squid在企业网中的应用_代理服务器_08 

 

配置步骤
Web服务器配置
安装apache服务编辑页面
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "you are right" >index.html
测试访问页面
[root@localhost Server]# lynx http://127.0.0.1
Squid设置
编辑squid配置脚本
[root@localhost ~]# vim /etc/squid/squid.conf
# Squid normally listens to port 3128
 920 http_port 192.168.101.87:80 vhost
1184 #       cache_peer parent.foo.net       parent    3128 3130 proxy-only default
1185         cache_peer 192.168.28.128       parent    80    0     originserver
1186 #       cache_peer sib1.foo.net         sibling   3128 3130 proxy-only
1187 #       cache_peer sib2.foo.net         sibling   3128 3130 proxy-only
检测语法
[root@localhost ~]# squid -k parse
[root@localhost ~]# service squid restart
停止 squid:.                                              [确定]
启动 squid:.                                              [确定]
查看端口
[root@localhost ~]# netstat -tupln |grep squid
tcp        0      0 192.168.28.100:3128         0.0.0.0:*                   LISTEN      2434/(squid)  
 
测试

 

 

Squid在企业网中的应用_网络安全_09