部署Squid3.0的心得

Linux, 技术心得 Add comments

部署的是squid-3.0.PRE4.tar.gz,不加iptables,不使用任何外加插件
下面不是部署全过程,只是一点心得

一、configure的时候要注意参数

  • 如果要使用HTTPS,要加上–enable-ssl(我加了才发现用不到……)
  • 如果要在定义ACL的时候使用arp选项(即使用MAC地址来判定用户)需要加上–enable-arp-acl
  • 如果要允许解析的URL中出现下划线,要加上–enable-underscore,因为默认情况下Squid会认为带下划线的URL是非法的,并拒绝访问该地址。这个我没试过

二、ACL配置
如果不加载第三方工具,ACL配置是Squid中唯一的访问控制方法。这个东西的功能其实跟CCProxy的身份控制差不多(但是没有用户名密码认证功能),但是配置起来要更复杂也更强大。

    配置格式:acl aclname acltype string1
    常用的定义类型:

  • src ip-address/netmask
    src addr1-addr2/netmask
    用来源的IP地址定义,一个ip#即mask方式就是网络,cidr方式就是单个ip
  • acl aclname dst ip-address/netmask
    目标地址
  • acl aclname arp mac-address
    后悔编译的时候没加–enable-arp-acl参数,这个功能很有用的
  • acl aclname dstdomain .foo.com
    类似于CCProxy的访问限制,例如可以限制只能访问.cn的站点、不能访问.xxx的站点等等
  • acl aclname dstdom_regex [-i] xxx
    用正则,不过……谁这么无聊呢……
  • acl aclname http_status 200 301 500- 400-403
    根据HTTP Response返回值,这个很有效,比如规定302Moved就不访问
  • acl aclname port
    端口
  • acl aclname proto
    协议
  • acl aclname method
    方式,例如只能GET不能CONNECT
  • acl aclname browser [-i] regexp
    这个也太强了……限制浏览器用户代理标志类型

还可以规定mime类型、响应时间等等等等……绝对强大

我的ACL设置:
很简单的设置,没有用复杂的功能限制

以下是默认的,直接使用了:

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443 563	# https, snews
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 1025-65535	# unregistered ports
acl Safe_ports port 280		# http-mgmt
acl Safe_ports port 488		# gss-http
acl Safe_ports port 591		# filemaker
acl Safe_ports port 777		# multiling http
acl CONNECT method CONNECT

以下是我修改的:

http_access allow CONNECT all 
#默认是这句http_access deny CONNECT !SSL_ports
#这样才能支持使用HTTPS地址前缀,也才能在下级生成Socks、FTP等代理
acl LilyStudio src ip1 ip2
#两个ip地址是我要让其允许访问的
http_access allow LilyStudio
http_access deny all

要注意,acl 定义的name是全局的,也就是说不能重复定义一个name,即

acl a src 210.29.240.1
acl a src 210.29.240.2

只会有后一条起作用

经过这样的配置,Squid就能完整地运行了,下面我们来看看在校园网内部署的时候,必不可少的二级代理的功能

三、二级代理的使用
首先,要使用上级代理可以这样写配置文件

cache_peer proxy1 parent port1 port2 proxy-only login=user:pwd no-query default

  • 其中proxy1是上级代理的IP地址,port1是其http端口号,port2是icp端口号(打开的话,一般为3130,在此我们使用0,禁用
  • parent表示这是一个父代理(后面会提到兄弟代理)
  • login的作用是给上级代理的用户验证
  • proxy-only表示不进行本地缓存,直接将这个缓存服务器的内容转发给客户
  • no-query表示不发送icp信息
  • default表示这个代理是“最后的”选择,即如果所有线路都不通就发送给它,特别在不使用icp的时候有用

  Squid还支持所谓的兄弟代理(Sibling类型),对于父代理,Squid会一直向其要数据(如果没有本地缓存),等不到回应就无动作或返回超时;对于兄弟代理,Squid先从其上寻找数据,找不到则自己直接去访问数据,简而言之兄弟代理是另一个缓存而已。

以下这段是转的:

一般 Squid Server 运作的模式是:
1. 当 Squid Server 没有资料时,会先向 Sibling 的 Squid Server 要资料,如果 Sibling 没资料,就跳过它直接向 Parent 要。
2. 向 Parent 要资料,然後一直等,直到 Parent 给它资料为止(Parent 自己有的资料或上 internet 去拿)。
3. 没有 Parent 时,就自己上 internet 去拿。
4. 如果这三者都拿不到资料,才向用户端回报拿不到资料。

  一般而言,把网路上一层的 Squid Server 设成 Sibling 是不错的选择,因为网路上一层的 Squid Server 服务对象较多,其硬体较强,离我们比较近,速度也比较快;万一要不到资料,我们还可以自己上 internet 去拿。那什么时候设 Parent?当您的出口只有一个,或上一层 Squid Server 拿不到资料,自己也一定拿不到,只好将上一层 Squid Server 设为 Parent。

四、二级代理中的http CONNECT的问题

首先要确保Http_access中,

#http_access deny CONNECT !SSL_ports

这句话要注释掉

然后要写这个(查了官方FAQ才知道的)

never_direct allow all

所有的访问都不会被直接转向,都必须通过cache_peer
否则所有的GET会被发往上级代理,而CONNECT则会被发往目标地址,由于我们需要所有的情况都使用二级代理,所以需要如此设置

Related posts:

  1. Reload

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">


LilyStudio & WordPress & N.Design Studio
Entries RSS Comments RSS Log in