Squid代理服务器
代理服务的应用原理
代理服务器工作在TCP/IP的应用层
squid服务具有以下基本功能
- 提供对HTTP和FTP协议的代理服务
- 缓存代理的内容,提高客户端访问网站的速度,并能够节约出口网络流量
- 对客户端地址进行访问控制,限制允许访问squid服务器的客户机
- 对目标地址进行访问控制,限制客户端允许访问的网站
- 根据时间进行访问控制,限定客户端可以使用代理服务的时间
squid缓存代理
缓存代理作用
通过缓存的方式为用户提供Web访问加速
对用户的Web访问进行过滤控制
squid普通和透明代理
普通代理服务
即标准的、传统的代理服务
需要客户机在浏览器中指定代理服务器的地址、端口
透明代理服务
适用于企业的网关主机
客户机不需要指定代理服务器地址、端口等信息
通过iptables将客户机的Web访问数据转交给代理服务程序处理
squid反向代理
反向代理服务
为Internet用户访问企业Web站点提供缓存加速
Squid普通代理实验测试
环境准备
windows作为左边客户机,2台Linux分别作为squid代理服务器和web服务器,windows客户机用VMnet1同squid代理服务器进行通信,所以squid代理服务器需要2块网卡,左边eth0(VMnet1)同windows通信,右边eth1(VMnet2)同linux的Web服务器进行通信,而web服务器只需要一块网卡VMnet2即可。
Squid安装和配置
--1.安装squid软件包 # yum -y install squid* --2.squid配置文件 # /etc/squid/squid.conf --3.启动squid服务 # service squid start/restart --4.停止squid服务 # service squid stop --5.重新加载配置文件 # squid -k reconfig
配置文件squid.conf
常用配置项
http_port 192.168.10.1:3128 #开启代理 cache_mem 64 MB #squid缓存内存 maximum_object_size 4096 KB #缓存对象大小 reply_body_max_size 10480000 allow all #最大下载数据文件(字节) access_log /var/log/squid/access.log #日志 visible_hostname 192.168.10.1 #可自定义,提示给客户(报错时显示) #缓存目录 100M缓存数据大小,16个一级目录 ,256个二级目录 cache_dir ufs /var/spool/squid 100 16 256
普通代理服务的典型应用环境
配置开始
windows客户机的VMnet1的ip地址为192.168.10.2,子网掩码为255.255.255.0,注意,这样不需要设置网关,因为客户机只需要到达squid代理服务器就可以了,然后由代理服务器去访问最终的web服务器,所以不用设置网关。
squid代理服务器左侧eth0网卡192.168.10.1,右侧eth1网卡200.168.10.1
ifconfig eth0 192.168.10.1 ifconfig eth1 200.168.10.1
Web服务器eth0网卡的ip为200.168.10.2
ifconfig eth0 192.168.10.2
环境测试,此时在squid代理服务器中是可以同时ping通左侧的linux客户机和右侧的web服务器
# vim /etc/squid/squid.conf http_port 1921.68.10.1:3128 visible_hostname 192.168.10.1 acl innet src 192.168.10.0/24 acl all src 0.0.0.0/0.0.0.0 http_access allow innet http_access deny all
access_log /var/log/squid/access.log # service squid restart --重启squid /var/spool/squid/目录自动初始化
此时,打开任意一款浏览器,在代理服务器选项中开启代理,把代理地址设置为192.168.10.1,端口设置为3128,此时便可以访问Web服务器了。
ACL访问控制
ACL(Access Control List,访问控制列表)
可以从客户机的IP地址、请求访问的URL/域名/文件类型、访问时间、并发请求数等各方面进行控制
应用访问控制的方式
定义acl列表
acl 列表名称 列表类型 列表内容
针对acl列表进行限制
http_access allow或deny 列表名
最基本的ACL访问控制示例
禁止任何客户机使用代理服务
acl all src 0.0.0.0/0.0.0.0 http_access deny all
常用的acl列表类型
| src | 源ip |
| dst |
目的ip |
| port | 端口 |
| srcdomain | 源域名 |
| dstdomain | 目的域名 |
| time | 时间 |
| maxconn | 最大连接 |
| url_regex | url正则过滤 |
| urlpath_regex | urlpath正则过滤 |
ACL列表定义示例
acl LAN1 src 192.168.1.0/24 acl PC1 src 192.168.1.66/32 acl Blk_Domain dstdomain .qq.com .kaixin001.com --工作时间 周一到周五 8点到5点半 acl Work_Hours time MTWHF 08:30-17:30 --最大连接数为20 acl Max20_Conn maxconn 20 -- -i忽略大小写 acl Blk_URL url_regex -i ^rtsp://^mms:// --匹配url长串中包含sex、adult的词 acl_Blk_Words urlpath_regex -i sex adult acl RealFile urlpath_regex -i \.rmvb$\.rm$ --根据已经定义的部分ACL列表进行访问控制 http_access deny LAN1 Blk_URL http_access deny LAN1 Blk_Words http_access deny PC1 RealFile http_access deny PC1 Max20_Conn http_access allow LAN1 Work_Hours
ACL规则匹配顺序
访问控制规则的匹配顺序
没有设置任何规则时
将拒绝所有客户端的访问请求
有规则但找不到相匹配的项时
将采用与最后一条规则相向反的权限,即如果最后一条规则是allow,那么就拒绝客户端的请求,否则允许该请求。
配置squid透明代理
透明代理服务的典型应用环境
配置开始
windows客户机的VMnet1的ip地址为192.168.10.2,子网掩码为255.255.255.0,网关为192.168.10.1。
squid代理服务器左侧eth0网卡192.168.10.1,右侧eth1网卡200.168.10.1,Web服务器eth0网卡的ip为200.168.10.2
squid代理服务器中修改上部创建的配置文件
# vim /etc/squid/squid.conf http_port 1921.68.10.1:3128 transparent visible_hostname 192.168.10.1 acl innet src 192.168.10.0/24 acl all src 0.0.0.0/0.0.0.0 http_access allow innet http_access deny all --重新加载配置文件 squid -k reconfig
添加防火墙规则
iptables -t nat -A PREROUTING -i eth0 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
此时,可以不用设置代理地址和端口,就可以正常地访问web服务器了。
设置squid反向代理
环境准备
windows客户机的VMnet1的ip地址为200.168.10.2,子网掩码为255.255.255.0,不需要指定网关。
squid代理服务器eth0网卡连接外部的客户机ip为200.168.10.1,eth1网卡连接的是内部的web服务器,ip地址为192.168.10.1。
--公网的ip ifconfig eth0 200.168.10.1 --连接内网的ip ifconfig eth1 192.168.10.1
内部web服务器
--内部内部ip,不需要指定网关,因为只要到反向代理服务器连通就可以了 # ifconfig eth0 192.168.10.2
配置squid反向代理服务器
# vi /etc/squid/squid.conf http_port 200.168.10.1:80 vhost visible_hostname 192.168.10.1 acl all src 0.0.0.0/0.0.0.0 http_access allow all cache_peer 192.168.10.2 parent 80 0 originserver
cache_peer server地址 服务器类型 http端口 icp端口 [可选项]
例:cache_peer 192.168.10.5 parent 80 0 originserver weight=1 max-conn=20
重启squid或重新加载配置文件
squid -k reconfig service squid restart
测试部分:
此时,通过浏览器访问200.168.10.1这台squid代理服务器的时候,会自动转到192.168.10.2,这台web服务器。(注意,squid反向代理服务器80端口不能被占用,如此时运行着httpd服务,则会直接请求代理服务器的webserver,而不会跑到指定的192.168.10.2服务器)
上传一个小网站到代理服务器,然后由代理服务器传到真实的web服务器
rsync -a -e ssh wish/ 192.168.10.2:/usr/local/apache2/htdocs/
访问上传后的服务器网站http://200.168.10.1/,抓包发现,图片等静态文件的请求信息
X-Cache-Lookup:"HIT from 192.168.10.1:80"
Via:"1.0 192.168.10.1:80 (squid/2.6.STABLE21)"
说明此时的缓存是从squid反向代理服务器中取的,没有去web服务器加载。
反向代理虚拟主机映射
基于反向代理实现虚拟主机映射
# vi /etc/squid/squid.conf http_port 200.168.10.1:80 vhost visible_hostname 192.168.10.1 acl all src 0.0.0.0/0.0.0.0 http_access allow all cache_peer 192.168.10.2 parent 80 0 originserver name=a cache_peer 192.168.10.2 parent 80 0 originserver name=b cache_peer domain a www.test.com cache_peer domain b www.web.com cache_peer_access a allow all cache_peer_access b allow all --重新加载配置文件 # squid -k reconfig
查看缓存
1.通过/var/log/httpd/access.log
2.通过/var/spool/squid下的tree 00来查看文件数,然后如果有缓存,则可以通过strings 00000000x来查看
3.客户端通过Firefox的firebug来查看请求和响应头信息,其中有缓存信息,从中可以明显的看到缓存的squid服务器
浙公网安备 33010602011771号