squid.conf 详细解释
作者:gaby 日期:2010-01-20
squid.conf -- 初级篇
在这个初级篇中,只是要提醒几个设定重点,只要把这个设定好了,你就可以启动
squid了.当然这只是squid的一部分而已,要做最佳化那就有得努力了.
先写在前面,若在各选项中,若某一设定行前面有 " # ",那代表这是默认值.也就
是说除非uncomment及更动内容, 否则squid在启动时会以此来默认值来准.
1. 浏览器连接proxy时,所使用的port.
#http_port 3128
http_port 8080
2. sibling连接本proxy时,所使用的port.
#icp_port 3130
icp_port 3130
3. 设定local_domain & local_ip:目的在于欲联机的server若在此范围内的,就不透
过sibling或parent.(请配合stoplist使用,可减少硬盘使用空间)
# local_domain my.domain
local_domain ym.edu.tw
#local_ip IP/netmask
local_ip 140.129.51.0/255.255.255.0
local_ip 140.129.52.0/255.255.248.0
local_ip 140.129.64.0/255.255.240.0
local_ip 140.129.80.0/255.255.255.0
4. 设定squid可利用多少内存来cache 数据在mem中.如果是新手,我会建议将此值
设为通常是物理内存的1/3.
如现在我有64MB RAM,我就设为20M.这个只是用来cache data, squid为了要正常
运作,通常会在多吃些内存,以我现在的/cache中有600MB,squid大概吃了31M,
所以请将此值设为物理内存的1/3,否则可能会使得squid可能会因为要不到多的
内存而一直挂点,然后又重新启动,甚至当机.
#cache_mem 8
cache_mem 20
5. /usr/local/squid/cache可以有多大,也就是指可以在硬盘中存放多少MB的东西.
在此,我把它改为1024MB,也就是1GB.
#cache_swap 100
cache_swap 1024
6. 这个log 档通常没用,可以不要它.请在目录位置改为none.
#cache_store_log /usr/local/squid/logs/store.log
cache_store_log none
7. 资料保存多久.在此为一笔已在cache中的资料,若一个礼拜内没人再来access,
则这笔资料会被清掉
#reference_age 1 year
reference_age 7 days
8. 当squid挂点后,要mail给squid.
#cache_mgr webmaster
cache_mgr squid
9. 若由root来启动squid,那要变成谁的身分来执行.
# UID GID
#cache_effective_user nobody nogroup
cache_effective_user squid squid
10. Stoplist:
1) hierarchy_stoplist
如果在URL中出现以下的字样,则本机proxy不会向parent or sibling做查询,
而是直接处理.(默认值为cgi-bin 及 ? ;在下面的例子,多加了个cgi)
#hierarchy_stoplist cgi-bin ?
hierarchy_stoplist cgi-bin ? cgi
2) cache_stoplist
用途在于,如果在URL中含有以下的字符,则不将它留在cache中,而是立即清掉.
除了可以滤掉一些不想存在硬盘中的垃圾外,我们还是也可以利用这个以确保
我们所在网域的其它主机档案不会留在proxy server中.
(在下面的例子中,我将阳明大学的domain及可能的IP address列为stoploist)
#cache_stoplist cgi-bin ?
cache_stoplist cgi-bin ? cgi
cache_stoplist ym.edu.tw
cache_stoplist 140.129.51 140.129.6 140.129.7 140.129.80
==================================================================
squid.conf -- Cache Hierarchies
==================================================================
说文解字: hierarchy :阶级的意思!!
Cache hierarchies也就是说把proxy server搞出一个阶级制度.怎么说呢??
Parent
/ |
/ |
sibling -- machine A
| |
| |
Browser Browser
以上是个简图,这只是阶级构造中的一小部分而已,可以由它再去组成广大的网状图.
1) 当machine A 收到 browser的要求时,它会检视自己的cache中是否有browser所
要的档案,如果有且是"质量优良"的,则machine A会直接把这个档案送回给browser.
若在machine A的cache中没有这个档或这个档已经过期,那它会送出含有URL的UDP
封包给它的silbling & parent.
2) 当machine A的sibling收到这个封包后,它也会去检视它自己有无这个档,若有则
向machine A回说: "我有!你过来抓吧!!" 若没有,他就会说: " Sorry, I can't
help you!"
3) 同样的,parent到目前为止所做的事跟sibling一模一样.
4) 若所要的档案有人响应该说,"我有!" 那machine A会在收到通知后,立刻去那里抓档.
但如果在一定的时间内(默认值是2 sec),没人回说"我有!",那machine A这时怎么办
呢??? Machine A它会去找出刚刚是哪一个parent最早回"我没有",于是就请它帮忙
抓档回来.
5) 看到没,我开始点出parent跟sibling的不一样了.parent的意思就是,你在亲朋好友间
得不到协助,那你跟我说,我就去帮抓档.于是parent开始重复machine A做过的事,
check silbing & parent有没有资料,有就抓回来给machine A,没有的话,看是要自己
去抓或者是再透过parent.
6) 看了第五点,你应该就会知道在阶层中设太多的层,或多层间上下相互query,其实说不
定不会省下频宽,反而可能会加重主机及网络的负担.所以正确地设定parent &
sibling很重要,不要一拿到全部proxy server列表就全部都设上去.这是很危险的.
>--------------------------------------------------------------------------<
#cache_host hostname type 3128 3130
cache_host 140.111.1.52 parent 3128 3130 [default][no-query]
cache_host proxy.ee.ntu.edu.tw sibling 3128 3130 [proxy-only]
cache_host proxy.ncu.edu.tw sibling 3128 3130
cache_host proxy.csie.ncu.edu.tw sibling 8080 3130
cache_host proxyftp.csie.ncu.edu.tw sibling 3128 3130
cache_host 140.111.1.2 sibling 3128 3130
这是一般设定方法.在parent的后面可以接一些参数,详请请见squid.conf说明,不过会用
到的机会不多.而sibling后面可以接proxy-only,这代表东西取回来后,不存下来,这样
可以省下硬盘空间.但除非你的硬盘太少或者是与对方网络够快,否则没有必要这样设.
cache_host_domain 140.111.1.52 !.tw !hinet.net
cache_host_domain 140.129.56.251 .tw
这是是用来规范那些domain的数据要跟谁问,或者不跟谁问.
像cache_host_domain 140.111.1.52 !.tw !hinet.net代表只要是.tw or hinet.net结
尾的,就不向140.111.1.52这台主机查询.
==================================================================
squid.conf -- Access controls
==================================================================
Access control,顾名思义,就是要控制联机.这里的学问也不小,我先就几个比较重要的
来解释,其余的部分希望有人可以帮忙补充,或者过几天我再post.
我个人"私自"把这个部分拆成两个部分,一个是"定义群组",另一则为 "access rule".(
名字自己取的).
1) 定义群组:
在squid.conf中,已经有几个预先建立的群组.我们先来看看.
#acl aclname acltype string/file
------------------------------------------------
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl SSL_ports port 443 563
acl Dangerous_ports port 7 9 19
acl CONNECT method CONNECT
----------------------------------------------------
常用的是只有前三个.后三者,请不要移除!
在定rule时,以acl 关键词起始.第二栏就自己取个好记的名字,第三栏
是你要定义的东西是什么的项目.第四栏就是就依第三栏而变,如果第三
栏是port的话,就在此打port;如果是src的话,就打ip/netmask.
以我的设定档为例,我就多加了五个定义项目.
acl hint src 140.129.51.0/255.255.255.0
acl school src 140.129.52.0/255.255.252.0
acl dorm src 140.129.56.0/255.255.248.0
acl teaching src 140.129.64.0/255.255.240.0
acl dialup src 140.129.80.0/255.255.255.0
2) Access rule:
以下为预设rule:
-------------------------------------------------------------------------
# Only allow access to the cache manager functions from the local host.
http_access deny manager !localhost
http_access deny CONNECT !SSL_ports
http_access deny Dangerous_ports
# Allow everything else
http_access allow all
# Reply to all ICP queries we receive
icp_access allow all
--------------------------------------------------------------------------
这些rules的比对,是从上而下的,先对的,先赢!!举个例子来说,你想挡掉所有的http
access,要怎么写呢???
(A) http_access allow all
http_access deny all
(B) http_access deny all
http_access allow all
答案是(B),因为若设为A,那所有联机在第一个rule时都被允许通过了,哪轮到第二个
rule来对呢!
这个东西都常被拿来用的地方是,你的proxy server开放给谁做http_access,如只有校
内.像我们这个烂学校,拿台IDE HD的计算机叫我架proxy,我只好忍痛把icp_access全部
拿掉.以下是我的部分设定档.
# Allow everything else
#http_access allow all
http_access deny all !hint !school !dorm !dialup !teaching
#hint, school,dorm,dialup.teaching,已经在第一点中就定义了,别忘了!!
# Reply to all ICP queries we receive
icp_access deny all
固定的是 DS、OS & NO,
L1 & L2 指的是第一层、第二层目录,则是未知数
DS 指的是 disk space, OS 指的是平均每个档案的大小
而 NO 指的是一个目录内的档案数量.
写成 L1*L2*OS*NO=DS 会比较容易懂一点...
最好是留多一点,这样临时如果加大 space 的话才不需要再额外调整目录的数量.
------------------------------------------------------------------------------
Proxy 与 Proxy 它们之间的check是有一个叫 ICP (Internet caching Protocol)
的协议 如果 hit 那就以 http 的协议传到另一台 Proxy Server
如果 miss 它会传回 miss 的讯息
squid.conf设定
squid.conf设定档一样是以「#」为批注,有些设定前面有「#」,代表是默认值。也就是说除非去掉「#」并更动内容,否则squid会以默认值来启动。由于squid.conf的设定不少,且squid.conf对每个设定都有批注,以下只针对重要的设定来作说明,而没有提到的,通常使用默认值即可。关于squid.conf的设定范例,您可参考http://www.twnic.net/proxy/squid.conf,再配合以下讲解,修改从光盘中复制的squid.conf设定档,改成适合自己Proxy Server的设定档。
#http_port 3128
#icp_port 3130
icp protocol是用来询问Proxy Server有没有它需要的数据,http protocol则是 用来取回所需的Cache资料。两者分别需要一个埠号,与其它机器沟通。建议采默认值即可,除非有特别需求,才去更改。
Cache_host cache.tmtc.edu.tw sibling 3128 3130 proxy-only
语法:cache_host hostname type http_port icp_port option
type:最常用的当然是parent或sibling
option:此选项常用到的是proxy-only、no-query、default、round-robin
等等。
proxy-only选项说明:
Cache_host cache.tmtc.edu.tw sibling 3128 3130 proxy-only
以上的范例是设定cache.tmtc.edu.tw当我们的Proxy Server而cache.tmtc.edu.tw的http_port为3128 icp_port为3130。proxy-only表示从cache.tmtc.edu.tw Cache来的数据,不在自己的Proxy中储存起来。除非自己Proxy Server的Cache硬盘空间很小,或者与此Proxy Server的网络连接速度很快(例如在同个局域网络中),否则通常不用proxy-only这个选项。
default选项说明:
cache_host proxy.ntu.edu.tw parent 3128 3130 default
用在parent上,继续丢出ICP Request,重复Proxy Server之间的Cache查询动作。
round-robin选项说明:
cache_host cacheA parent 3128 3130 round-robin no-query
cache_host cacheB parent 3128 3130 round-robin no-query
如有多个Parent Proxy Server则可使用这个选项,与选项作用相似,但是 会对Parent Proxy Server轮流送出需求。例如:这次找A Parent Proxy,下次找B Parent Proxy。
no-query选项说明:
不送ICP查询出去,直接由http protocol取回数据。我们常将no-query配合上default、round-robin来使用。通常只有一个Parent Proxy Server的设定为default no-query,而多个Parent Proxy Server则使用round-robin no-query。
cache_host_domain proxy.ntu.edu.tw !.ntu.edu.tw
语法:Cache_host_domain cache [!]domain
说明:Proxy Server通常不去Cache自己Domain里的数据,所以底下的设定意义为:我们的Proxy Server接到Client端的需求,而这个需求不是ntu.edu.tw Domain(台大)的资料时,才会送ICP query过去。因为即使送ICP过去询问也是白费功夫。
cache_host_domain cache.jwindow.net .jp
设定说明:由于cache.jwindow.net有丰富的日本网页资料。所以我们也当然可以设定,只要有「.jp」Domain的数据需求,就往cache.jwindow.net送request。
cache_host proxy.ntu.edu.tw parent 3128 3130 default
cache_host_domain proxy.ntu.edu.tw !.ntu.edu.tw
neighbor_type_domain proxy.ntu.edu.tw sibling .com
语法:neighbor_type_domain cache parent|sibling domain..
说明:可用来改变一些parent或sibling的规则,例如以下设定proxy.ntu.edu.tw为我们的parent,可替我们抓取除了.com之外的数据。就是设定了neighbor_type_domain,造成当需要www.ibm.com的资料时,只能靠自己去取回,因为此时proxy.ntu.edu.tw只能为sibling。
acl acl 名称 src ip-address/netmask 说明 : 使用src这种ACL类型,后面必须为Client端的IP-Address范围 / 网络屏蔽(或为 CIDR格式)。请注意,「src」乃是 针对Client端的IP Address来分类,但对主机名 称无效。所以如果想针对Client端的Domain Name来分类,则要使用 「srcdomain」。
举例:
acl 1ocal src l27.0.0.1/32 140.131.41.0/255.255.255.0
→将127.0.0.l这个loop back lP与一个140.131.41.O的Class C IP器,归为local群组。
acl mydomain srcdomain tmtc.edu.tw
→设定所有以tmtc.edu.tw结尾的机器,皆属于my domain的ACL群组。
说明:我们也可以设定拒绝无reverse domain name的机器(即
查Domain Name。登入不完全),将这些机器归为一类,以
便稍后作「进一步处理」。设定方法如下:
acl nodns srcdomain none
ad my_url url_regex ^http://www.tmtc.edu.tw/
→设定只要发出http://www.tmtc.edu.tw需求的Client,就属于名myu_url的ACL群组。
说明: 底下的设定为系统预设定义的ACL,大抵上无须更动。
acl all src O.0.0.0/0.0.0.0
→将所有的IP Address分类归属为 all。
acl manager proto cache_object
acl SSL_ports port 443 563
acl Dangerous_ports port 7 9 19
acl CONNECT method CONNECT
· 针对自己所定义的ACL群组,进行权限设定:
http_access deny CONNECT ISSL_ports
→这个设定为刚才定义的CONNECT群组与「非」SSL_ports群组,都不能进行
http_access 。请注意惊叹号「!」,代表「除了…之外的设定值,有些状况就很
适合使用「!」,所以要能够灵活运用。
http_access deny Dangerous_ports
http_access deny nodns
→拒绝nodns群组进行http_access,即reverse domain name登入不全的机器,无法使用
我们的Proxy,进行http的object存取。
http_access allow my_url
http_access allow local
http_access allow mydomain
http_access deny all
☆注意:
ACL的权限设定有First match的特性,也就是说只要联机的Client端,符合第一个
权 限 设定,就跳开并依据遵守最先符合的权限设定。
针对以上First match的特性,兹举以下设定,让读者了解:
http_access deny all
http_access allow local
如此一来所有的http_access均会被拒绝,并不会只允许「local」的ACL群组,进行
http access
说明:当您把多项所定义的ACL群组写在同一行的http_access
设定时,要特别小心。因为同一行的http_access设定, ,会作AND逻辑 运
算,所以底下的范例将无效。
acl ME src lO.0.0.l
acl YOU src lO.0.0.2
http_access allow ME YOU
因为没有一个IP可以同时符合ME这个ACL与YOU这个ACL,所以分开写就没
问题啦!如下:
http_access allow ME
http_access allow YOU
因此底下的http_access设定,最好分成两行。
http_access allow local mydomain
icp_access allow local
icp_access allow mydomain
icp_access deny all
说明:底下的icp_access权限设定与http_access相同,一样要注意「Firstmatch」,与
设定值是否写在同一列是否冲突等问题。不同的是icp_access用来设定,是
否要响应别人的ICP询问。
miss_access allow mydomain
miss_access deny !mydomain
说明:还记得要当别人的Parent,必须负起帮它取回,它所需要的数据,所以这负
担比较重。因此可以利用「miss_access」的权限设定,而不接受别人来乱认
「父母」(Parent),顶多当他的邻居(Neighbor)或姊妺(sibling),加减帮一些
忙,以免造成系统负荷过重,严重影响原系统功能。底下设定只有属于
mydomain的ACL群组才可以认我当「父母」,获得chlid_parent关系承认并受
到「扶养」。
cache_host_acl proxy.ntu.edu.tw !twdn !twip
语法:cache_host_acl cache-host [!]aclname
说明:这个设定有点像'cache_host_domain,但是因为使用ACL因此更具弹性假如有
任何 「非」台湾的URL的存取需求,我们只把这些需求送往指定位于台湾
内的 Proxy Server,而都不急着送出台湾外去查询,以免浪费频宽。如要达
到此设定的目的,便可藉由cache_host_acl来做到,举例说明如下:
1﹒先用 ACL 定义出哪些是台湾的URL的需求 ,如果用domain来 设定,则acl类
型 须用「dstdomain」;如果要设定IP部份则 使用「dst」。特别注意,厎下
「twdn」与「dst」这两个 ACL,要各自写成一行。笔者因为排版的关系无法
写成一行。
acl twdn dstdomain tw twnic.net hinet.net acer.net
wownet.net seeder.net silkera.net neto.net timenet.net tw.aunef.net
acl twip dst 140.96.0.0/11 140.128.0.0/12 140.92.0.0 139.175.0.0/16 139.223.0.0/16 163.12.0.0/14 163.16.0.0/14 168.95.0.0/16 192.72.0.0/16 192.83.160.0/19 192.83.192.0/22 192.192.0.0/16 202.39.0.0/16 202.132.128.0/17 202.145.224.0/19 203.64.0.0/12 210.64.0.0/13
2. 开始设定cache_host_acl指定Proxy Server:
设定范例如下,意思是说如果有任何「非」台湾地区URL的需求(包括Domain
Server形式或IP形式),就转往proxy.ntu.edu.tw寻求协助。您可以多找几个Cache资
料丰富又邻近的Proxy Server,依样画葫芦。
· 接下来设定一些管理方面的参数
cache_mgr squid@proxy.tmtc.edu.tw
→设定Proxy Server管理者的E-mail,方便他人联系。
语法 : cache_effective_user UserID GroupID
说明:假如是由root启动squid,那么一些squid相关的Process的拥有者、拥有群组
,便是Cache_effeCtive_user所设定的。为了方便起见(但并非最好),们将设
定改为Proxy管理者的UserID与GroupID:
cache_effective_user squid squid
visible_hostname proxy.tmte.edu.tw
→当别人使用您的Proxy Server而出现错误讯息时,将显示所设定的visible_hostname
说明 : 厎下的设定是向sd.cache.nlanr.net注册,宣告我们也使用Squid Proxy Server
。假 如您 不想对外宣告,那么就把「cache_announce 24」给mark起来。
cache_announce 24
announce_to sd.cache.nlanr.net:3131
dns_testname ns.tmtc.edutw ns2.tmtc.edu.tw dnS.ntu.edu.tw
→将一些较近的DNS(Domain Name Server)设定进去,越快可以得到DNS查询响应的
位置较前面。
说明 : 假如一天下来,log记录文件很大,或想要细分log檔,那就把logfile_rotate设大
一 点,请自行视情况调整。以 cache.log档来说:设定「logfile_rotate l」,会
把 旧的 log更名为cache.log.O储存,而新的log则存在cache.log。
logfile_rotate l
append_domain tmtc.edu.tw
→替换成您的Domain Zone即可。
还有一些没捉到的部份使用默认值即可,另外有些设定将还会有机会再捉
到。现在已经把Squid.conf的设定大抵完成,可先暂告一段,继续进行安装
Squid Proxy Server。
在这个初级篇中,只是要提醒几个设定重点,只要把这个设定好了,你就可以启动
squid了.当然这只是squid的一部分而已,要做最佳化那就有得努力了.
先写在前面,若在各选项中,若某一设定行前面有 " # ",那代表这是默认值.也就
是说除非uncomment及更动内容, 否则squid在启动时会以此来默认值来准.
1. 浏览器连接proxy时,所使用的port.
#http_port 3128
http_port 8080
2. sibling连接本proxy时,所使用的port.
#icp_port 3130
icp_port 3130
3. 设定local_domain & local_ip:目的在于欲联机的server若在此范围内的,就不透
过sibling或parent.(请配合stoplist使用,可减少硬盘使用空间)
# local_domain my.domain
local_domain ym.edu.tw
#local_ip IP/netmask
local_ip 140.129.51.0/255.255.255.0
local_ip 140.129.52.0/255.255.248.0
local_ip 140.129.64.0/255.255.240.0
local_ip 140.129.80.0/255.255.255.0
4. 设定squid可利用多少内存来cache 数据在mem中.如果是新手,我会建议将此值
设为通常是物理内存的1/3.
如现在我有64MB RAM,我就设为20M.这个只是用来cache data, squid为了要正常
运作,通常会在多吃些内存,以我现在的/cache中有600MB,squid大概吃了31M,
所以请将此值设为物理内存的1/3,否则可能会使得squid可能会因为要不到多的
内存而一直挂点,然后又重新启动,甚至当机.
#cache_mem 8
cache_mem 20
5. /usr/local/squid/cache可以有多大,也就是指可以在硬盘中存放多少MB的东西.
在此,我把它改为1024MB,也就是1GB.
#cache_swap 100
cache_swap 1024
6. 这个log 档通常没用,可以不要它.请在目录位置改为none.
#cache_store_log /usr/local/squid/logs/store.log
cache_store_log none
7. 资料保存多久.在此为一笔已在cache中的资料,若一个礼拜内没人再来access,
则这笔资料会被清掉
#reference_age 1 year
reference_age 7 days
8. 当squid挂点后,要mail给squid.
#cache_mgr webmaster
cache_mgr squid
9. 若由root来启动squid,那要变成谁的身分来执行.
# UID GID
#cache_effective_user nobody nogroup
cache_effective_user squid squid
10. Stoplist:
1) hierarchy_stoplist
如果在URL中出现以下的字样,则本机proxy不会向parent or sibling做查询,
而是直接处理.(默认值为cgi-bin 及 ? ;在下面的例子,多加了个cgi)
#hierarchy_stoplist cgi-bin ?
hierarchy_stoplist cgi-bin ? cgi
2) cache_stoplist
用途在于,如果在URL中含有以下的字符,则不将它留在cache中,而是立即清掉.
除了可以滤掉一些不想存在硬盘中的垃圾外,我们还是也可以利用这个以确保
我们所在网域的其它主机档案不会留在proxy server中.
(在下面的例子中,我将阳明大学的domain及可能的IP address列为stoploist)
#cache_stoplist cgi-bin ?
cache_stoplist cgi-bin ? cgi
cache_stoplist ym.edu.tw
cache_stoplist 140.129.51 140.129.6 140.129.7 140.129.80
==================================================================
squid.conf -- Cache Hierarchies
==================================================================
说文解字: hierarchy :阶级的意思!!
Cache hierarchies也就是说把proxy server搞出一个阶级制度.怎么说呢??
Parent
/ |
/ |
sibling -- machine A
| |
| |
Browser Browser
以上是个简图,这只是阶级构造中的一小部分而已,可以由它再去组成广大的网状图.
1) 当machine A 收到 browser的要求时,它会检视自己的cache中是否有browser所
要的档案,如果有且是"质量优良"的,则machine A会直接把这个档案送回给browser.
若在machine A的cache中没有这个档或这个档已经过期,那它会送出含有URL的UDP
封包给它的silbling & parent.
2) 当machine A的sibling收到这个封包后,它也会去检视它自己有无这个档,若有则
向machine A回说: "我有!你过来抓吧!!" 若没有,他就会说: " Sorry, I can't
help you!"
3) 同样的,parent到目前为止所做的事跟sibling一模一样.
4) 若所要的档案有人响应该说,"我有!" 那machine A会在收到通知后,立刻去那里抓档.
但如果在一定的时间内(默认值是2 sec),没人回说"我有!",那machine A这时怎么办
呢??? Machine A它会去找出刚刚是哪一个parent最早回"我没有",于是就请它帮忙
抓档回来.
5) 看到没,我开始点出parent跟sibling的不一样了.parent的意思就是,你在亲朋好友间
得不到协助,那你跟我说,我就去帮抓档.于是parent开始重复machine A做过的事,
check silbing & parent有没有资料,有就抓回来给machine A,没有的话,看是要自己
去抓或者是再透过parent.
6) 看了第五点,你应该就会知道在阶层中设太多的层,或多层间上下相互query,其实说不
定不会省下频宽,反而可能会加重主机及网络的负担.所以正确地设定parent &
sibling很重要,不要一拿到全部proxy server列表就全部都设上去.这是很危险的.
>--------------------------------------------------------------------------<
#cache_host hostname type 3128 3130
cache_host 140.111.1.52 parent 3128 3130 [default][no-query]
cache_host proxy.ee.ntu.edu.tw sibling 3128 3130 [proxy-only]
cache_host proxy.ncu.edu.tw sibling 3128 3130
cache_host proxy.csie.ncu.edu.tw sibling 8080 3130
cache_host proxyftp.csie.ncu.edu.tw sibling 3128 3130
cache_host 140.111.1.2 sibling 3128 3130
这是一般设定方法.在parent的后面可以接一些参数,详请请见squid.conf说明,不过会用
到的机会不多.而sibling后面可以接proxy-only,这代表东西取回来后,不存下来,这样
可以省下硬盘空间.但除非你的硬盘太少或者是与对方网络够快,否则没有必要这样设.
cache_host_domain 140.111.1.52 !.tw !hinet.net
cache_host_domain 140.129.56.251 .tw
这是是用来规范那些domain的数据要跟谁问,或者不跟谁问.
像cache_host_domain 140.111.1.52 !.tw !hinet.net代表只要是.tw or hinet.net结
尾的,就不向140.111.1.52这台主机查询.
==================================================================
squid.conf -- Access controls
==================================================================
Access control,顾名思义,就是要控制联机.这里的学问也不小,我先就几个比较重要的
来解释,其余的部分希望有人可以帮忙补充,或者过几天我再post.
我个人"私自"把这个部分拆成两个部分,一个是"定义群组",另一则为 "access rule".(
名字自己取的).
1) 定义群组:
在squid.conf中,已经有几个预先建立的群组.我们先来看看.
#acl aclname acltype string/file
------------------------------------------------
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl SSL_ports port 443 563
acl Dangerous_ports port 7 9 19
acl CONNECT method CONNECT
----------------------------------------------------
常用的是只有前三个.后三者,请不要移除!
在定rule时,以acl 关键词起始.第二栏就自己取个好记的名字,第三栏
是你要定义的东西是什么的项目.第四栏就是就依第三栏而变,如果第三
栏是port的话,就在此打port;如果是src的话,就打ip/netmask.
以我的设定档为例,我就多加了五个定义项目.
acl hint src 140.129.51.0/255.255.255.0
acl school src 140.129.52.0/255.255.252.0
acl dorm src 140.129.56.0/255.255.248.0
acl teaching src 140.129.64.0/255.255.240.0
acl dialup src 140.129.80.0/255.255.255.0
2) Access rule:
以下为预设rule:
-------------------------------------------------------------------------
# Only allow access to the cache manager functions from the local host.
http_access deny manager !localhost
http_access deny CONNECT !SSL_ports
http_access deny Dangerous_ports
# Allow everything else
http_access allow all
# Reply to all ICP queries we receive
icp_access allow all
--------------------------------------------------------------------------
这些rules的比对,是从上而下的,先对的,先赢!!举个例子来说,你想挡掉所有的http
access,要怎么写呢???
(A) http_access allow all
http_access deny all
(B) http_access deny all
http_access allow all
答案是(B),因为若设为A,那所有联机在第一个rule时都被允许通过了,哪轮到第二个
rule来对呢!
这个东西都常被拿来用的地方是,你的proxy server开放给谁做http_access,如只有校
内.像我们这个烂学校,拿台IDE HD的计算机叫我架proxy,我只好忍痛把icp_access全部
拿掉.以下是我的部分设定档.
# Allow everything else
#http_access allow all
http_access deny all !hint !school !dorm !dialup !teaching
#hint, school,dorm,dialup.teaching,已经在第一点中就定义了,别忘了!!
# Reply to all ICP queries we receive
icp_access deny all
固定的是 DS、OS & NO,
L1 & L2 指的是第一层、第二层目录,则是未知数
DS 指的是 disk space, OS 指的是平均每个档案的大小
而 NO 指的是一个目录内的档案数量.
写成 L1*L2*OS*NO=DS 会比较容易懂一点...
最好是留多一点,这样临时如果加大 space 的话才不需要再额外调整目录的数量.
------------------------------------------------------------------------------
Proxy 与 Proxy 它们之间的check是有一个叫 ICP (Internet caching Protocol)
的协议 如果 hit 那就以 http 的协议传到另一台 Proxy Server
如果 miss 它会传回 miss 的讯息
squid.conf设定
squid.conf设定档一样是以「#」为批注,有些设定前面有「#」,代表是默认值。也就是说除非去掉「#」并更动内容,否则squid会以默认值来启动。由于squid.conf的设定不少,且squid.conf对每个设定都有批注,以下只针对重要的设定来作说明,而没有提到的,通常使用默认值即可。关于squid.conf的设定范例,您可参考http://www.twnic.net/proxy/squid.conf,再配合以下讲解,修改从光盘中复制的squid.conf设定档,改成适合自己Proxy Server的设定档。
#http_port 3128
#icp_port 3130
icp protocol是用来询问Proxy Server有没有它需要的数据,http protocol则是 用来取回所需的Cache资料。两者分别需要一个埠号,与其它机器沟通。建议采默认值即可,除非有特别需求,才去更改。
Cache_host cache.tmtc.edu.tw sibling 3128 3130 proxy-only
语法:cache_host hostname type http_port icp_port option
type:最常用的当然是parent或sibling
option:此选项常用到的是proxy-only、no-query、default、round-robin
等等。
proxy-only选项说明:
Cache_host cache.tmtc.edu.tw sibling 3128 3130 proxy-only
以上的范例是设定cache.tmtc.edu.tw当我们的Proxy Server而cache.tmtc.edu.tw的http_port为3128 icp_port为3130。proxy-only表示从cache.tmtc.edu.tw Cache来的数据,不在自己的Proxy中储存起来。除非自己Proxy Server的Cache硬盘空间很小,或者与此Proxy Server的网络连接速度很快(例如在同个局域网络中),否则通常不用proxy-only这个选项。
default选项说明:
cache_host proxy.ntu.edu.tw parent 3128 3130 default
用在parent上,继续丢出ICP Request,重复Proxy Server之间的Cache查询动作。
round-robin选项说明:
cache_host cacheA parent 3128 3130 round-robin no-query
cache_host cacheB parent 3128 3130 round-robin no-query
如有多个Parent Proxy Server则可使用这个选项,与选项作用相似,但是 会对Parent Proxy Server轮流送出需求。例如:这次找A Parent Proxy,下次找B Parent Proxy。
no-query选项说明:
不送ICP查询出去,直接由http protocol取回数据。我们常将no-query配合上default、round-robin来使用。通常只有一个Parent Proxy Server的设定为default no-query,而多个Parent Proxy Server则使用round-robin no-query。
cache_host_domain proxy.ntu.edu.tw !.ntu.edu.tw
语法:Cache_host_domain cache [!]domain
说明:Proxy Server通常不去Cache自己Domain里的数据,所以底下的设定意义为:我们的Proxy Server接到Client端的需求,而这个需求不是ntu.edu.tw Domain(台大)的资料时,才会送ICP query过去。因为即使送ICP过去询问也是白费功夫。
cache_host_domain cache.jwindow.net .jp
设定说明:由于cache.jwindow.net有丰富的日本网页资料。所以我们也当然可以设定,只要有「.jp」Domain的数据需求,就往cache.jwindow.net送request。
cache_host proxy.ntu.edu.tw parent 3128 3130 default
cache_host_domain proxy.ntu.edu.tw !.ntu.edu.tw
neighbor_type_domain proxy.ntu.edu.tw sibling .com
语法:neighbor_type_domain cache parent|sibling domain..
说明:可用来改变一些parent或sibling的规则,例如以下设定proxy.ntu.edu.tw为我们的parent,可替我们抓取除了.com之外的数据。就是设定了neighbor_type_domain,造成当需要www.ibm.com的资料时,只能靠自己去取回,因为此时proxy.ntu.edu.tw只能为sibling。
acl acl 名称 src ip-address/netmask 说明 : 使用src这种ACL类型,后面必须为Client端的IP-Address范围 / 网络屏蔽(或为 CIDR格式)。请注意,「src」乃是 针对Client端的IP Address来分类,但对主机名 称无效。所以如果想针对Client端的Domain Name来分类,则要使用 「srcdomain」。
举例:
acl 1ocal src l27.0.0.1/32 140.131.41.0/255.255.255.0
→将127.0.0.l这个loop back lP与一个140.131.41.O的Class C IP器,归为local群组。
acl mydomain srcdomain tmtc.edu.tw
→设定所有以tmtc.edu.tw结尾的机器,皆属于my domain的ACL群组。
说明:我们也可以设定拒绝无reverse domain name的机器(即
查Domain Name。登入不完全),将这些机器归为一类,以
便稍后作「进一步处理」。设定方法如下:
acl nodns srcdomain none
ad my_url url_regex ^http://www.tmtc.edu.tw/
→设定只要发出http://www.tmtc.edu.tw需求的Client,就属于名myu_url的ACL群组。
说明: 底下的设定为系统预设定义的ACL,大抵上无须更动。
acl all src O.0.0.0/0.0.0.0
→将所有的IP Address分类归属为 all。
acl manager proto cache_object
acl SSL_ports port 443 563
acl Dangerous_ports port 7 9 19
acl CONNECT method CONNECT
· 针对自己所定义的ACL群组,进行权限设定:
http_access deny CONNECT ISSL_ports
→这个设定为刚才定义的CONNECT群组与「非」SSL_ports群组,都不能进行
http_access 。请注意惊叹号「!」,代表「除了…之外的设定值,有些状况就很
适合使用「!」,所以要能够灵活运用。
http_access deny Dangerous_ports
http_access deny nodns
→拒绝nodns群组进行http_access,即reverse domain name登入不全的机器,无法使用
我们的Proxy,进行http的object存取。
http_access allow my_url
http_access allow local
http_access allow mydomain
http_access deny all
☆注意:
ACL的权限设定有First match的特性,也就是说只要联机的Client端,符合第一个
权 限 设定,就跳开并依据遵守最先符合的权限设定。
针对以上First match的特性,兹举以下设定,让读者了解:
http_access deny all
http_access allow local
如此一来所有的http_access均会被拒绝,并不会只允许「local」的ACL群组,进行
http access
说明:当您把多项所定义的ACL群组写在同一行的http_access
设定时,要特别小心。因为同一行的http_access设定, ,会作AND逻辑 运
算,所以底下的范例将无效。
acl ME src lO.0.0.l
acl YOU src lO.0.0.2
http_access allow ME YOU
因为没有一个IP可以同时符合ME这个ACL与YOU这个ACL,所以分开写就没
问题啦!如下:
http_access allow ME
http_access allow YOU
因此底下的http_access设定,最好分成两行。
http_access allow local mydomain
icp_access allow local
icp_access allow mydomain
icp_access deny all
说明:底下的icp_access权限设定与http_access相同,一样要注意「Firstmatch」,与
设定值是否写在同一列是否冲突等问题。不同的是icp_access用来设定,是
否要响应别人的ICP询问。
miss_access allow mydomain
miss_access deny !mydomain
说明:还记得要当别人的Parent,必须负起帮它取回,它所需要的数据,所以这负
担比较重。因此可以利用「miss_access」的权限设定,而不接受别人来乱认
「父母」(Parent),顶多当他的邻居(Neighbor)或姊妺(sibling),加减帮一些
忙,以免造成系统负荷过重,严重影响原系统功能。底下设定只有属于
mydomain的ACL群组才可以认我当「父母」,获得chlid_parent关系承认并受
到「扶养」。
cache_host_acl proxy.ntu.edu.tw !twdn !twip
语法:cache_host_acl cache-host [!]aclname
说明:这个设定有点像'cache_host_domain,但是因为使用ACL因此更具弹性假如有
任何 「非」台湾的URL的存取需求,我们只把这些需求送往指定位于台湾
内的 Proxy Server,而都不急着送出台湾外去查询,以免浪费频宽。如要达
到此设定的目的,便可藉由cache_host_acl来做到,举例说明如下:
1﹒先用 ACL 定义出哪些是台湾的URL的需求 ,如果用domain来 设定,则acl类
型 须用「dstdomain」;如果要设定IP部份则 使用「dst」。特别注意,厎下
「twdn」与「dst」这两个 ACL,要各自写成一行。笔者因为排版的关系无法
写成一行。
acl twdn dstdomain tw twnic.net hinet.net acer.net
wownet.net seeder.net silkera.net neto.net timenet.net tw.aunef.net
acl twip dst 140.96.0.0/11 140.128.0.0/12 140.92.0.0 139.175.0.0/16 139.223.0.0/16 163.12.0.0/14 163.16.0.0/14 168.95.0.0/16 192.72.0.0/16 192.83.160.0/19 192.83.192.0/22 192.192.0.0/16 202.39.0.0/16 202.132.128.0/17 202.145.224.0/19 203.64.0.0/12 210.64.0.0/13
2. 开始设定cache_host_acl指定Proxy Server:
设定范例如下,意思是说如果有任何「非」台湾地区URL的需求(包括Domain
Server形式或IP形式),就转往proxy.ntu.edu.tw寻求协助。您可以多找几个Cache资
料丰富又邻近的Proxy Server,依样画葫芦。
· 接下来设定一些管理方面的参数
cache_mgr squid@proxy.tmtc.edu.tw
→设定Proxy Server管理者的E-mail,方便他人联系。
语法 : cache_effective_user UserID GroupID
说明:假如是由root启动squid,那么一些squid相关的Process的拥有者、拥有群组
,便是Cache_effeCtive_user所设定的。为了方便起见(但并非最好),们将设
定改为Proxy管理者的UserID与GroupID:
cache_effective_user squid squid
visible_hostname proxy.tmte.edu.tw
→当别人使用您的Proxy Server而出现错误讯息时,将显示所设定的visible_hostname
说明 : 厎下的设定是向sd.cache.nlanr.net注册,宣告我们也使用Squid Proxy Server
。假 如您 不想对外宣告,那么就把「cache_announce 24」给mark起来。
cache_announce 24
announce_to sd.cache.nlanr.net:3131
dns_testname ns.tmtc.edutw ns2.tmtc.edu.tw dnS.ntu.edu.tw
→将一些较近的DNS(Domain Name Server)设定进去,越快可以得到DNS查询响应的
位置较前面。
说明 : 假如一天下来,log记录文件很大,或想要细分log檔,那就把logfile_rotate设大
一 点,请自行视情况调整。以 cache.log档来说:设定「logfile_rotate l」,会
把 旧的 log更名为cache.log.O储存,而新的log则存在cache.log。
logfile_rotate l
append_domain tmtc.edu.tw
→替换成您的Domain Zone即可。
还有一些没捉到的部份使用默认值即可,另外有些设定将还会有机会再捉
到。现在已经把Squid.conf的设定大抵完成,可先暂告一段,继续进行安装
Squid Proxy Server。
评论: 0 | 引用: 0 | 查看次数: 87
发表评论
上一篇
下一篇


文章来自:
Tags: 




