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服务器

 

posted on 2016-06-07 18:07  gimin  阅读(892)  评论(0)    收藏  举报