作者: mmm
来自: www.linuxsir.org
(一)
近期,我看相当多的帖子,都提到了怎么样用squid作代理,大家讨论的很多。但是好象没有系统的实践。兄弟我就自己干起来啦!请兄弟们指教!
1.配置之我见。
a,服务,b,工具。c,配置文件。d,日志。e,权限管理
squid按照上面的划分:
/etc/init.d/squid
/usr/sbin/squid#当然还用其他的
/etc/squid.conf
/var/log/squid/
/etc/squid.conf
这五个部分配置好了,当然没有问题啦:)
2。配置之循序渐进
@@@服务的用法:
/etc/init.d/squid start|restart|stop
这个是服务的标准用法,不用多说。
@@@工具的用法:常用的
/usr/sbin/squid -k reconfigure|shutdown|check|rotate
reconfigure 重读/etc/squid.conf,用在修改了配置文件后想立即生效;
check 测试
rotate 轮换日志文件
@@@基本配置-----目标:能够代理上网
cp /etc/squid.conf /etc/squid.conf.self
vi /etc/squid.conf
# 注意:在默认的下面添加自己的配置就可以,建议不要直接去修改原来的行!!!
http_port 8000 #代理端口
cache_mem 32 MB #一般来说是你的内存的1/3到1/2
http_access allow all#这个使所有人可以代理上网---《基本的权限管理部分
在客户端浏览器里用上代理,应该可以了吧!恭喜
@@@进一步的配置-----目标:性能提高一点总是好的
cache_swap_low 90
cache_swap_high 95
缓冲存储的阀值:高于95立即调整,实际上提高了磁盘性能
reference_age 3 weeks
缓冲对象存储期限:当存储的对象达到期限后,删除。一般就3 weeks
maximum_object_size 2048 KB
存储对象的大小阀值:大于她的不存储
prefer_direct off
直接奥父代理获取缓冲,不直接到网站获取
@@@多重代理----目标:直接拿别人的代理来用,我又没有什么错
cache_peer proxy.x.x.x sibling|parent port icp_port [options]
例子:cache_peer 61.139.106.2 parent 8000 3130 proxy-only
父代理<--------类型) 父端口 icp 通讯端口 参数
cache_peer 202.109.61.163 sibling 3128 3130 proxy-only
兄弟代理<-------类型)
这个的作用大家肯定知道。就是设置多重代理,比如,你自己的代理不能上外国的。就 找个能上外国的,加上就是了。这样以你机子为代理的客户都能上外国的了。呵呵!! !还可以设置多个。速度快啊!。。
@@@日志管理
/var/log/squid/access.log|store.log|cache.log#默认可以不改啦
分别在/etc/squid.conf
cache_access_log
cache_log
cache_store_log
日志都是会无限增长的。squid提供轮换机制,设定基数,就可以轮换啦。比如基数为3则access.log0 access.log1 access.log2 循环。其他一样。
调整轮换基数:
logfile_rotate 3
实际上你可以用工具手工轮换/usr/sbin/squid -k rotate
@@@权限管理
最后就是权限管理啦。squid允许你管理很多权限。比如
什么ip|hostname|domain可以用代理,可以使用那些port,那些网站|ip|domain直接访问,不用代理.。。。。。。
注意一个原则:最后匹配。即只匹配最后的权限控 制
acl name type value
这个就是基本的语法。
@@@@@@@@@@@@@@@@@@@acl name src ip/network ip/network ...
比如:acl mynet src 192.168.1.0/255.255.255.0
acl myreject src 210.41.114.0/255.255.255.0 192.168.1.5/24
第一行,定义了一个网络
第二行,定义了一个网络,一个ip#即mask方式就是网络,cidr方式就是单个ip
http_access allow mynet
http_access deny myreject
分配权限给定义的name
@@@@@@@@@@@@@@@@@@@@acl name dst ip/network ip/network ...
限制访问(黄色。。。)或者其他网络或网站主机
和上面的差不多。
@@@@@@@@@@@@@@@@@@@@acl name srcdomain|dstdomain domain1 domain2 ...
使用域名进行权限分配
如:
acl yellow dstdomian xxx168.com sicau.edu.cn
最后都要用http_access allow|deny 分配!
@@@@@@@@@@@@@@@@@@@@不通过代理访问的目标
acl name dst|dstdomain ip|domian
alway_direct name
比如: acl sina dstdomian www.sina.com.cn
always_direct sina
这样客户端直接访问sina,这个用在你自己内部地址服务器上,呵呵~!~~
(二)
通过上一节的设置,我想你已经能够用代理上网,聊天,下软件了这一节我们一起学习一些稍微深入的东西。
@@@@@多重代理(不知道这个说法对不对)
squid支持多重代理。
cache_peer 用法详解
# TAG: cache_peer
# To specify other caches in a hierarchy, use the format:
#
# cache_peer hostname type http_port icp_port
#
# For example,
#
# # proxy icp
# # hostname type port port options
# # -------------------- -------- ----- ----- -----------
# cache_peer parent.foo.net parent 3128 3130 [proxy-only]
# cache_peer sib1.foo.net sibling 3128 3130 [proxy-only]
# cache_peer sib2.foo.net sibling 3128 3130 [proxy-only]
#
# type: either 'parent', 'sibling', or 'multicast'.
#
# proxy_port: The port number where the cache listens for proxy
# requests.
#
# icp_port: Used for querying neighbor caches about
# objects. To have a non-ICP neighbor
# specify '7' for the ICP port and make sure the
# neighbor machine has the UDP echo port
# enabled in its /etc/inetd.conf file.
#
# options: proxy-only
# weight=n
# ttl=n
# no-query
# default
# round-robin
# multicast-responder
# closest-only
# no-digest
# no-netdb-exchange
# no-delay
# login=userassword
# connect-timeout=nn
# digest-url=url
# allow-miss
#
# use 'proxy-only' to specify that objects fetched
# from this cache should not be saved locally.
#
# use 'weight=n' to specify a weighted parent.
# The weight must be an integer. The default weight
# is 1, larger weights are favored more.
#
# use 'ttl=n' to specify a IP multicast TTL to use
# when sending an ICP queries to this address.
# Only useful when sending to a multicast group.
# Because we don't accept ICP replies from random
# hosts, you must configure other group members as
# peers with the 'multicast-responder' option below.
#
# use 'no-query' to NOT send ICP queries to this
# neighbor.
#
# use 'default' if this is a parent cache which can
# be used as a "last-resort." You should probably
# only use 'default' in situations where you cannot
# use ICP with your parent cache(s).
#
# use 'round-robin' to define a set of parents which
# should be used in a round-robin fashion in the
# absence of any ICP queries.
#
# 'multicast-responder' indicates that the named peer
# is a member of a multicast group. ICP queries will
# not be sent directly to the peer, but ICP replies
# will be accepted from it.
#
# 'closest-only' indicates that, for ICP_OP_MISS
# replies, we'll only forward CLOSEST_PARENT_MISSes
# and never FIRST_PARENT_MISSes.
#
# use 'no-digest' to NOT request cache digests from
# this neighbor.
#
# 'no-netdb-exchange' disables requesting ICMP
# RTT database (NetDB) from the neighbor.
#
# use 'no-delay' to prevent access to this neighbor
# from influencing the delay pools.
#
# use 'login=userassword' if this is a personal/workgroup
# proxy and your parent requires proxy authentication.
#
# use 'connect-timeout=nn' to specify a peer
# specific connect timeout (also see the
# peer_connect_timeout directive)
#
# use 'digest-url=url' to tell Squid to fetch the cache
# digest (if digests are enabled) for this host from
# the specified URL rather than the Squid default
# location.
#
# use 'allow-miss' to disable Squid's use of only-if-cached
# when forwarding requests to siblings. This is primarily
# useful when icp_hit_stale is used by the sibling. To
# extensive use of this option may result in forwarding
# loops, and you should avoid having two-way peerings
# with this option. (for example to deny peer usage on
# requests from peer by denying cache_peer_access if the
# source is a peer)
#
# NOTE: non-ICP neighbors must be specified as 'parent'.
#
#Default:
# none
cache_peer 61.139.106.2 parent 8000 3130 no-query no-netdb-exchange proxy-only
cache_peer 202.109.78.22 parent 3128 3130 no-query no-netdb-exchange proxy-only
cache_peer 202.105.138.19 parent 8080 3130 no-query no-netdb-exchange proxy-only
cache_peer 61.129.70.224 parent 80 3130 no-query no-netdb-exchange proxy-only
cache_peer 61.145.230.14 parent 8080 3130 no-query no-netdb-exchange proxy-only
cache_peer 61.145.231.69 parent 80 3130 no-query no-netdb-exchange proxy-only
----------------------------------------------------------------------
我们最常用的就是parent 类型 参数多为:no-query no-netdb-exchange proxy-only 即不需要向parent发出icp查询,不和parent交换管理信息,直接从parent cache取数据送到客户,而不在本地缓存~!~(提高速度)
还有一个参数不常用:round-robin,并行从个个parent取数据,如果你的parent都很近而且快,那么可以用这个参数,我没有用,因为个个parent速度不一样
反倒速度慢了。(最后不要滥用parent,因为受管制的)
-----------------------------------------------------------------------
直接访问某些站点
-----------------------------------------------------------------------
acl name dst value
acl name dstdomain value
always_direct allow name
比如校园服务器,离我们很近,但是用了parent代理后肯定慢,这个时候我们可以利用这个权限管理使客户直接访问她们,而不通过代理。
acl camp dstdomain xx.edu.cn
acl vod dst 192.168.2.5
always_direct allow camp
always_dirent allow vod
---------------------------------------------------------------------------
url过滤
------------------------------------------------------------------------
acl name url_regex url1 url2 ...
http_access deny name
这个主要是过滤不良信息。比如黄色,反动。。。。。
acl ho url_regex ^http://www.pku.edu.cn$ //这里是正则表达式
http_access deny ho
---------------------------------------------------------------------
访问时间限制
----------------------------------------------------------------------
这个要配合其他规则使用
acl name time day-abbrevs h1:m1-h2:m2
http_access allow name
acl outnet src 210.41.115.0/255.255.255.0
acl ok_outnet time MTWHF 00:00-24:00
http_access allow ok_outnet outnet
http_access deny ok_outnet
即:允许outnet这个域在星期一到星期五都能访问
注意:http_access allow ok_outnet outnet
时间 域
时间是英语星期的第一个字母
------------------------------------------------------------------------
拒绝缓冲某些数据
-------------------------------------------------------------------
no_cache deny name
比如:
acl yellow url_regex ^http://xxx.168.com$
no_cache deny yellow
拒绝缓冲这个网站的数据!
------------------------------------------------------------------------
别人能使用我作为parent》》??????
--------------------------------------------------------------------
icp_port 3130 //最好不要改
icp_access allow|deny aclName
比如不允许
acl allno src 0.0.0.0./0.0.0.0
icp_access deny allno
---------------------------------------------------------------------
注意:acl 定义的name是全局的
也就是说不能重复定义一个name
比如:
acl kkk src 210.41.112.0/24
acl kkk url_regex ^sex$
这样就使kkk重复定义,不行的哟!
---------------------------------------------------------------------
小弟用到的差不多就这些~!~如有错误,请指教和交流~!~
最后写上第三篇,squid规划~!~
(三)
squid透明代理
-------------------------------------------------------------------------
理论上,透明代理需要nat router加squid
即:在nat router上将用户的80端口请求重定向到squid代理端口,这就要求:所有内部机子网关为nat router
修改/etc/squid。conf
httpd_accel_host virtual//虚拟http服务
httpd_accel_port 80//监听端口
httpd_accel_with_proxy on//采用proxy加速http
httpd_accel_uses_host_header on//加速http交换
至于nat router的信息可以参考这里!
http://www.linuxsir.com/bbs/showthread.php?s=&threadid=29579&highlight=nat