操作环境:(Redh5.8)
Client:192.168.8.70 (如图:机器为8.70)
Squid:192.168.8.71(eth0) (如图:机器为8.71)
172.16.1.16(eth1) (如图: 机器为8.72)
Web: 172.16.1.17
图:
(注:实验过程中涉及的dns相关内容没有做)
Squid的主要功能:
1.支持HTTP,FTP协议
2.采用层次化缓存结构
3.支持代理SSL
4.实现了ICP(Internet缓存协议,HTCP(超文本缓存协议)等)
5.支持透明代理
6.支持WCCP(Web缓存通信协议)
7.支持丰富的访问控制列表功能
8.支持HTTP加速功能,实现反向代理
9.支持SNMP
10.支持缓存DNS查询
一.正向代理(标准代理)
1. 一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页 面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。
2. 访问过程(如上图)
@1.客户端使用某一端口连接代理服务器3128端口,请求web页面(连接的网卡为eth0)
@2.代理服务器向DNS请求得到相应的IP地址,然后,代理服务器使用某一端口,向该IP地址的80端口发起web连接请求,请求web页面。(连接的网卡为eht1)
@3.~@5收到响应的web页面后,代理服务器把该数据传送给客户端。并查看自己有没有缓存,若没有缓存一份
@6.~@7.当客户端再次访问时,直接通过缓存返给客户端信息
3.具体配置
(1)装包
[root@tx2 ~]# yum install -y squid
(2)开启包转发
[root@tx2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
(3)修改配置文件
[root@tx2 ~]# vim /etc/squid/squid.conf
637 http_access allow all //给所有的客户端开启代理服务
921 http_port 192.168.8.71:3128 //设置squid监听的端口//192.168.8.71的ip是squid与客户端链接的网卡的ip地址。
1579 cache_mem 8 MB 设定squid占用的物理内存,一般为物理内存的1/3(代表squid能使用多少内存,如果你的内存足够可以调的稍微大一些)
1786 cache_dir ufs /var/spool/squid 100 16 256 设定缓存的位置
@1.ufs :同步,有请求过来先把得到的数据写入磁盘再处理请求
@2.aufs :异步,先响应请求再把数据写入磁盘
@3.100 :M,缓存的数据大小
@4.16 :1级子目录的数量
@5.256 :2级子目录的数量
1842 cache_swap_low 90 最低“水位线“
//95:代表cache 占用swap的空间最多是百分之95,如果大于百分之95,squid会自动删除之前保存的数据
1843 cache_swap_high 95 最高“水位线“
//90: 代表删除的时候还是会保存最新的百分之90
2974 cache_effective_user squid 通知系统是以squid用户的身份去执行
4. 配置web端的http服务
#yum install -y httpd
#cd /var//ww/html
#echo “helo tx” > index.html
#/etc/init.d/httpd start
5. 配置client端的浏览器
@1.点击edit,然后点击edit下的Preferences
@2.点击Advanced----->Network-------->Settings
@3.如图所示
配置完成
6.client端测试
二.Squid的透明代理
1.透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代 理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则 向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。
2访问过程
@1.客户端向DNS请求,得到相应的IP地址。然后,客户端使用某一端口,向该IP地址的80端口发起web连接请求,请求web页面。
@2~@3.当该请求包通过透明代理服务器时,被防火墙将该数据包重定向到代理服务器的绑定端口3128。于是,透明代理服务器用某一端口发起web连接请求,请求web页面。
@4~@5收到响应的web页面后,代理服务器把该数据传送给客户端。并查看自己有没有缓存,若没有缓存一份
@6.~@7.当客户端再次访问时,直接通过缓存返给客户端信息
3.具体配置
(1)修改配置文件
[root@tx2 ~]# vim /etc/squid/squid.conf
http_port 192.168.8.71:3128 transparent
(2)配置防火墙规则
[root@tx2 ~]# iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
//所有192.168.0.0这个网段访问squid的80端口,都由防火墙转发到3128的squid服务端口
[root@tx2 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 192.168.0.0/24 anywhere tcp dpt:http redir ports 3128
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@tx2 ~]# iptables -t nat -F
[root@tx2 ~]# service squid restart
Stopping squid: ................ [ OK ]
Starting squid: . [ OK ]
(3)客户端取消代理
(4)配置客户端网观
[root@tx1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
添加GATEWAY=“squid的ip”
[root@tx1 ~]# /etc/init.d/network restart
(5)测试
三.反向代理(web加速)
1.反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页 面的请求,防止原始服务器过载。
2.访问过程
@1.客户端通过浏览器向DNS服务器发送请求,由客户所在地的DNS服务器解析IP地址,并将结果返回给用户。
@2.客户收到DNS返回的服务器IP地址,重新向DNS服务器指向的IP地址发送访问请求。
@3.squid 服务器接收到用户的请求后,查询自身缓存中是否有用户请求内容,有则直接发送给客户端
@4. 有则通过内部DNS轮询查询空闲服务器,并将客户请求发送到 该服务器,在获取到用户数据并返回给用户的同时保留一份在自己本身的缓存当中。
在用户看来,自己访问的是www.96333.com这个服务器,实际上真 正的WEB服务器为SQUID缓存后面的服务器或者服务器集群,通过外部DNS做CNAME转向,将用户请求转发到内部真正的web服务器上去。
3.具体配置
(1)[root@tx2 ~]# vim /etc/squid/squid.conf
923 http_port 80 transparent
924 cache_peer 172.16.1.17 parent 80 0 originserver no-query name= www
originserver 源点服务器
no-query 不询问
name=www 用来区分相似的查询
(其他选项不变)
(2)测试
四.访问控制(ACL)
1.ACL元素
语法定义如下:
acl aclname acltype string1
acl aclname acltype "file"
//acltype可以是(src、dst、srcdomain、dstdomain、url_regex、urlpath_regex、time、port、proto、method)
(1) src:源地址。定义如下:
acl aclname src ip-address/netmask ... 客户ip地址
acl:aclname src addr1-addr2/netmask ... 地址范围
(2)dst:目标地址
acl aclname dst ip-address/netmask ...
(3)srcdomain:客户所属的域
acl aclname srcdomain foo.com ...
(4)dstdomain:请求服务器所属的域
acl aclname dstdomain foo.com ...
(5)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
(6)port:访问端口。可以指定多个端口
acl aclname port 80 70 21 ...
acl aclname port 0-1024 ... 指定一个端口范围
(7)proto:使用协议
acl aclname proto HTTP FTP ...
(8)method:请求方法
acl aclname method GET POST ...
(9)url_regex:URL规则表达式匹配
acl aclname url_regex[-i] pattern
(10)urlpath_regex:URL-path规则表达式匹配
acl aclname urlpath_regex[-i] pattern
2.http_access访问控制列表
根据访问控制列表允许或禁止某一类用户访问。最后的条目设为“deny all”或“allow all”来避免安全性隐患。http_access Action声明1 AND 声明2 AND多个,http_access声明间用或运算连接,但每个访问条目的元素间用与运算连接,列表中的规则总是遵循由上而下的顺序。
3.实例应用
(1)禁止IP地址为192.168.8.200的客户机上网
acl client src 172.16.1.2
http_access deny client
(2)禁止网段10-50上网
acl client src 172.16.1.10-172.16.1.50/32
http_access deny client
(3)拒绝访问web的ip
acl client dst 192.168.1.2
http_access deny client
(4)限制URL以 某些内容 开头
acl client url_regex index
http_access deny client
(5)限制URL 以 某些内容 结尾
acl client urlpath_regex \.html
http_access deny client
(6)限制时间段
acl client time MTWHFA 9:00-18:00
http_access deny client
(7)限制443端口上网
acl http port 443
http_access deny http
(8)限制用户并发连接数为:5
acl clientsrc 172.16.1.15
acl conn5 max 5
http_access deny client conn5
(9)禁止下载*.mp3$ *.exe$ *.zip$ *.rar$ *.doc$类型的文件
acl client urlpath_regex -i \.mp3$ \.exe$ \.zip$ \.rar$ \.doc$
http_access deny client
注:这些访问控制可以根据实际情况加到上面的三种代理方式中,访问控制要写的有意义。