Submitted by admin on 2012, February 6, 11:36 AM
配置squid代理,用的是直接编译,不是用port安装的。今天想对某些用户进行流量控制,
发现delay_pool不起作用,原来是要编译的时候要加enable选项--enable-delay-pools ,郁闷。
下面是一篇很好的配置说明
----------------------------------------
Squid 是一种源代码开放的高性能代理缓存服务器。它可支持FTP,gopher和Http数据对象的代理。另外,Squid也支持SSL,多样化访问控制和代理请求的完整日志功能。通过轻量级的网际缓存协议,Squid以网状或层次的方式分配内存,这样能节省额外的带宽。提供Http服务加速代理,Web服务器把Http数据推到Squid缓存中,外界的请求访问可以通过缓存提取所需数据,实现Web服务器的动态镜像。
另外,为了实现对Squid服务器的监控,采用MRTG。MRTG 是 Multi Router Traffic Grapher 的缩写,它主要的用途是监测网络服务设备的流量,并生成包括图片的HTML文件,可以直观的显示网络服务的流量,以提供Squid缓存服务的监测。
通过Squid+MRTG可以配置一个完善的代理服务提供方案。下面为具体配置步骤:
一.基础准备
Squid下载地址:http://www.squid-cache.org
版本:squid-2.4.STABLE4-src.tar.gz
MRTG下载地址:http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/
版本:mrtg-2.9.22.tar.gz
机器配置为:256M内存,9G硬盘(其中4G分区专用缓存目录),PII433。
二.安装步骤
解压Squid(一般做法,把软件包括在/opt目录下)
#tar zxvf squid-2.4.STABLE4-src.tar.gz
#cd squid
//进行编译
#./configure --prefix=/usr/local/squid --enable-delay-pools --enable-snmp --enable-cache-digests --enable-auth-modules=”NCSA”
#make all
#make install
*对编译项目的解释:
--prefix 为编译Squid所存放的目录,这里为/usr/local/squid
--enable-delay-pools 此选项使能一个延时池,这样能对某些特定的请求限制额定带宽。
--enable-snmp 此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。
--enable-cache-digests 使能缓存摘要,本来此项目的是为了在Squid集群服务之间迅速发现缓存对象,这里在本地使用,可以加快请求时,检索缓存内容的速度。
--enable-auth-modules 此编译选项启用认证模块,可以对访问代理用户进行授权。
安装MRTG
#tar zxvf mrtg-2.9.22.tar.gz
#cd mrtg*
#./configure --prefix=/usr/local/mrtg-2
#make
#make install
/* 几点说明:
1.MRTG大部分程序是用Perl脚本写成,需要Perl版本为5.005以上才能运行,RH 7.2带有perl版本为v5.6.0,非常满足要求。(如果版本不够,请到www.perl.com下载安装。)
2. MRTG需要zlib,gd和libpng三个处理图形的库支持,RH7.2满足此要求。(如果没有安装,请到http: //www.boutell.com/gd/ http://www.libpng.org/pub/png/src/ http://www.gzip.org/zlib 下载安装)
三.具体配置
lSquid配置(仅对必要选项配置并说明):
http_port 80
此选项用于Squid代理所侦听的端口,由于要实现Http加速代理,则侦听端口80
tcp_outgoing_address 255.255.255.255
此句法指定了远程服务器的IP地址,这里我们使用255.255.255.255来指定为所有地址
tcp_incoming_address
这里可以使用http_port语法进行绑定端口和IP地址。表示客户端的请求。可以不使用。
cache_mem 64 MB
由于Squid在读写磁盘,I/O通道,数据转贮等需要大量内存,我们可以把内存值稍微设置大一些,这样可以提供服务器性能。
cache_swap_low 95
这用做表示缓存内部对象的替换的衡量基线。当交换分区的磁盘利用率超越这个基线,那么缓存对象替换也就随之开始。这里是用百分率做衡量标准。
cache_swap_high 98
此标记用于缓存对象替换的最高程度,当交换分区磁盘利用率接近此设置,则表示对象的更新程度更为剧烈。这里由于我的缓存区设置比较大,因此设置为98%。
下面几个配置标记采用系统默认配置。
{ maximum_object_size 4096 KB
{ 超过此尺寸的对象将不缓存。
{ minimum_object_size 0 KB
{ 小于此尺寸的对象将不缓存。
{ maximum_object_size_in_memory 8 KB
{ 内存中能缓存的最大对象尺寸。
{ ipcache_size 1024
{ 指定IP缓存大小。
{ ipcache_low 90
{ 缓存IP地址的最低基线。
{ ipcache_high 95
{ 缓存IP地址的最高极限。
{ fqdncache_size 1024
{ 缓存DNS全域名解析的尺寸。
cache_replacement_policy lru
此标记用于当缓存新对象时,使用缓存策略来清除缓存中特定对象。这里使用lru表示:它只替换长时间没有被访问过的对象。其他策略请参看配置文档介绍。
memory_replacement_policy lru
此用法同上,区别在于替换内存对象。
cache_dir ufs /cache 4000 16 256
设置缓存根目录为/cache,类型为ufs,缓存区大小为4G,可以有16个二级子目录,每有二级目录有256个三级子目录。
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
cache_swap_log /var/log/squid/swap.log
上面几项是缓存日志记录的路径和文件名。
log_ip_on_direct on
记录客户端主机的IP地址。
log_fqdn on
记录全DNS域名解析。
mime_table /usr/local/squid/etc/mime.conf
Squid所用mime的文件路径
pid_filename /usr/local/squid/logs/squid.pid
Squid进程ID的文件。
ftp_user Squid@ynst.net.cn
这里可以使用匿名登陆FTP服务器。
ftp_list_width 32
FTP文件列表长度,超过长度则截断文件名。
ftp_passive on
允许主动连接FTP服务器。
dns_nameservers 202.98.187.1
指定代理的域名解析服务器。
authenticate_program /usr/local/squid/bin/ncsa_auth
/usr/local/squid/etc/passwd
代理认证程序,这里在/usr/local/squid/etc使用htpasswd产生一个密码文件,具体方法如下:
#htpasswd –cdb passwd auth_usr1 pass1
#htpasswd –db passwd auth_usr2 pass2
#htpasswd –db passwd auth_usr3 pass3
创建passwd文件,并添加auth_usr1,auth_usr2,auth_usr3三个认证用户。
authenticate_children 5
所需要要产生的认证进程数。
authenticate_ttl 3600
此标记设置认证保持时间。
authenticate_ip_ttl 1800
此标记设置认证绑定IP地址的时间长度。
authenticate_ip_ttl_is_strict on
此标记可在authenticate_ttl时间内,拒绝其他非认证IP地址访问。
request_header_max_size 10 KB
request_body_max_size 1 MB
设置了Http请求的包头和数据大小。
request_body_max_size 0
这里,请求所返回的数据大小为0,意义为没有任何限制。
connect_timeout 180 seconds
read_timeout 15 minutes
request_timeout 20 seconds
上面几项是代理服务几个超时设置,这里使用配置文件默认值。
下面是访问控制列表一些配置,这里对访问的IP地址,域名,访问类型极其访问代理的权限做的限制:
acl acldomain dstdomain .ynst.net.cn
acl acceleratedport port 80
acl acceleratedhost dst 202.98.187.17/255.255.255.255
acl aclprotocol proto HTTP FTP
acl aclmethod method GET POST
acl aclauth proxy_auth required
(注:这里使用required表示任何passwd文件中存在的合法用户才授予访问权限。)
acl aclsnmp snmp_community secrect
MRTG可以使用snmp协议检测此代理服务运行状态。
acl aclconn maxconn 20
可并行连接的最大数量。
启用定义的访问控制列表
http_access allow manager localhost
http_access deny manager
http_access allow aclauth
http_access allow acceleratedport acceleratedhost
http_access deny all
下面为缓存管理设置
cache_mgr admin@ynst.net.cn
设置缓存管理者的接受邮件地址。
cache_effective_user squidusr
cache_effective_group squidgrp
设置执行Squid的用户和用户组。
{注:设置用户和用户组及其权限修改方法如下:
#groupadd squidgrp
#useradd –g squidgrp –d /home/squidusr squidusr
修改log日志权限属性,使squidusr有写权限。
#chown squidusr /var/log/squid
#chgrp squidgrp /var/log/squid
#chown squidusr /var/log/squid/*.log
#chown squidgrp /var/log/squid/*.log
}
下面配置Http服务加速代理
httpd_accel_host 202.98.187.17
httpd_accel_port 80
httpd_accel_with_proxy on
(注:如果配置代理和加速服务,必须httpd_accel_with_proxy选项打开。如果需要配置多个加速,可以使用虚拟的概念。)
snmp_port 3401
此标记设置snmp_port端口为3401,可以使MRTG监测服务运行状态。
snmp_access allow aclsnmp localhost
snmp_access deny all
snmp_incoming_address 0.0.0.0
snmp_outgoing_address 0.0.0.0
以上选项用于配置和MRTG交互信息的Snmp设置。
digest_generation on
digest_rebuild period 1 hour
digest_rewrite_period 1 hour
digest_swapout_chunk_size 4096 bytes
digest_rebuild_chunk_percentage 10
产生缓存摘要,并设置摘要重构所需要的时间及其相关设置,这里采用系统默认设置。缓存摘要使的庞大的缓存内容形成一个微型检索,提高代理性能。
最后我们进行延迟队列池进行配置
延迟队列池可以基于一定规则对特定请求数据的进行限制,这样可以防止恶意用户发送非正规数据串攻击服务器。
以下选项只在必要处进行说明,配置如下:
delay_pools 1 #定义一个池
delay_class 1 1 #池为1类型
delay_access 1 allow all #允许类型1的所有请求访问
delay_parameters 1 128000/128000 #限制访问的128k/s
delay_initial_bucket_level 50 #Squid启动时,初始化池所用的带宽数量。
运行Squid代理服务:
#squid –z /*创建Squid所使用的缓存目录结构
如果想在前台运行
#squid –NCdl
如果想在后台运行
#squid
检查Squid是否运行
#squid –k check
lMRTG配置:
首先测试SNMP服务是否启动:
#snmpwalk -p 3401 hostname communitystring .1.3.6.1.4.1.3495.1.1
如果看到如下输出:
enterprises.nlanr.squid.cacheSystem.cacheSysVMsize = 7970816
enterprises.nlanr.squid.cacheSystem.cacheSysStorage = 2796142
enterprises.nlanr.squid.cacheSystem.cacheUptime = Timeticks: (766299) 2:07:42.99
则说明SNMP正常工作。
按照mrtg.hdl.com的文档,使用cfgmaker和indexmaker就可以生成MRTG所需要的Web发布文件。使用cfgmaker可以创建配置MRTG所需要的配置文件,而Indexmaker则是检索MRTG生成的Web文件,制作一个Index.html。这里,我提供一种更为简洁的办法:
(感谢Chris提供的mrtg-squid.cfg文件和index.html,可到http://www.psychofx.com/chris/unix/mrtg/ 下载这两个文件。)
修改mrtg-squid.cfg文件选项如下:
修改 WorkDir 和 LoadMIBs 路径设置
修改所有出现在文件中的"hostname" 为你实际服务器名字
修改所有 "chris"字段为你需要的名字和地址
修改community 字串属性
这里配置如下:
WorkDir: /home/www/mrtg/squid
LoadMIBs: /usr/local/squid/etc/mib.txt
所有public@hostname修改secrect@proxysvr
创建/home/www/mrtg/squid这样一个目录。
#mkdir /home/www/mrtg/squid
#cd /home/www/mrtg/squid
#cp /opt/mrtg-squid.cfg .
#mrtg mrtg-squid.cfg
#cp /opt/index.html .
修改/etc/httpd/conf/httpd.conf如下几个选项
Listen 8000
Port 8000
Documentroot /home/www/mrtg/squid
由于mrtg读取文件需要资源,因为合理设置读取间隔,这里我设置为5分钟:
crontab –e
*/5 * * * * /usr/local/mrtg-2/bin/mrtg /home/www/mrtg/squid/mrtg-squid.cfg
这样,我们就建立了一个完善的代理加速访问服务器,通过mrtg的强大监控,可以统计服务器运行时设备运行状态。由于以上软件遵从GNU,因此一种强大而有经济的建站手段。通过认证控制,允许特定用户使用代理服务。而Web加速服务器则成为服务器镜像的方便手段。
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:898
Submitted by admin on 2012, February 6, 11:35 AM
今天测试了一下squid使用delay_pools来对源网站的访问进行限速.非常好用,如下
使用squid建二个源网站
acl php-oa url_regex -i ^http://.*php-oa.com/.*
acl sudo-u url_regex -i ^http://.*sudo-u.com/.*
http_access allow mysite
http_access allow sudo-u
http_access deny all
icp_access allow all
下面开始正文,我们要用到squid中的delay_pools,delay_pools里可以定义多个容器(多个源定义多个),而这个容器就是我们要控制的带宽,当容器到达所设定的容量时,这个容器的所有者就无法超过我们所设定的带宽限制.
开始设置squid的delay_pools
delay_pools 2 #设置二个pools来对二个源进行控制
delay_class 1 2 #设置第一个pools中的地址为C类网段中的每个IP地址流量
delay_access 1 allow php-oa
delay_access 1 deny all
delay_parameters 1 64000/64000 64000/32000 #连接php-oa总速度64000,每个ip可以3200的速度
delay_class 2 1
delay_access 2 allow sudo-u
delay_access 2 deny all
delay_parameters 2 32000/16000 #客户端下载sudo-u.com这个网站的总速度为1600,但squid连接源网站速度为32000
class定义:
class类型1为单个IP地址流量
class类型2为C类网段中的每个IP地址流量
class类型3为B类网段中的每个C类网段中的每个IP地址流量
delay_parameters语法:
类型1只有一个总带宽流量实际也就是这个IP地址的流量
delay_parameters pool total
例:delay_parameters 1 64000/64000
类型2有两个带宽流量参数,第一个为整个C类型网段流量,第二个为每个IP流量
delay_parameters pool tatal per-host
例:delay_parameters 1 -1/-1 64000/64000
类型3有三个带宽流量参数,第一个为整个B类网总流量,第二个为每个B类网段中的C类网段总流量,第三个为了B类网段中每个C类网段中的每个IP流量
delay_parameters pool total network per-host
例:delay_parameters 1 -1/-1 -1/-1 64000/64000
注: -1/-1表示流量无限制.每个delay_parameters的数值是由"回源站的速度/客户最大下载速度"组成
另外,对HIT的文件没有作用
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:847
Submitted by admin on 2012, February 6, 10:58 AM
在网上查了不少Squid中设置流量限制的文章,要么东抄西抄,语焉不详,要么翻译的不知所云,英文文档又讲的太理论,太繁琐。其实,这方便对我们一般网络管理员来说就那么几项设置有用,所以自己归纳总结了一些相关的知识和技巧。
Squid控制访问带宽的架构是这样的,首先,你可以定义一个或几个pool(池)来操控里面的流量,而你要为每个pool定义它们的class(类型),类型其实就是决定控制那些主机流量的范围,类型分为以下几种:
class定义:
class类型1表示只对pool设置相关总流量(这样比较好理解,不要加入什么bucket的概念)
class类型2表示既对pool设置总量控制,也为C类网段中的每个IP地址流量
class类型3表示既对pool设置总量控制,也为B类网段中的每个C类网段中的每个IP地址设置流量
最后就是对建立的pool设置它们的流量控制,整个过程是这样:
先在squid.acl.config文件中定义你允许哪些主机使用你的代理(这部分不属于带宽设置):
acl myteam src 172.16.23.108/32 172.16.23.53/32
acl mynet src 172.16.23.108/32 172.16.23.53/32
http_access allow myteam
http_access allow mynet
接下来进行带宽设置:
delay_pools 2 #假设你设置两个pools来分别管理两个不同的网段
delay_class 1 2 #设置第一个pools中的地址为C类网段中的每个IP地址流量
delay_access 1 allow myteam
delay_access 1 deny all
delay_parameters 1 64000/64000 32000/64000 #连接myteam总速度64000byte(64KB),每个ip可以3200的速度
delay_class 2 1 #将pool 2设为类型1,只控制总mynet的总流量
delay_access 2 allow mynet
delay_access 2 deny all
delay_parameters 2 32000/64000 #设置总流量速度为32000
注: -1/-1表示流量无限制。 斜杆前后两个参数为最小流量与最大流量.
例如:delay_parameters 1 -1/-1 #表示你对pool 1不限速
每个delay_parameters的数值是由restore(byte/sec)/max(bytes)组成,restore是表示以bytes/sec的速度下载数据到bucket里,而max则表示bucket的容量bytes值.
备注2:SQUID FAQ中有提到,建议max至少要设为restore的两倍(It is recommended that the maximum is at least twice the restore value)
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:857
Submitted by admin on 2012, February 6, 10:53 AM
squid限制带宽
squid限制带宽
关于设定SQUID带宽限制和流量整形,刻利用squid.conf种的delay_pools字段来完成.
delay pools里的bucket就像是一个容器,而这个容器就是squid要控制带宽用的,当容器到达所设定的容量时,这个容器的所有者就无法超过我们所设定的带宽限制,所有的bucket则称之为unified bucket.
Class分为三种:
(1)Class 1:包含一个unified bucket,而这个bucket是给这个class里所定义的host使用.
(2)Class 2:包含一个unified bucket和255个buckets,每一个bucket分配给8bit网络的使用者(255 hosts)使用IPv4 class C).
(3)Class 3:包含255个buckets,每一个bucket分配给16bit网络的使用者(65535 hosts)使用(IPv4 class B).
(1)Class 1:contains a single unified bucket which is used for all requests from hosts subject to the pool
(2)Class 2:contains one unified bucket and 255 buckets, one for each host on an 8-bit network (IPv4 class C)
(3)Class 3:contains 255 buckets for the subnets in a 16-bit network, and individual buckets for every host on these networks (IPv4 class B)
推测:如果ACL只定义一个class C字段,要限制每个host的单一带宽,可以使用Class 2来做;但如果ACL有定义好几个class C字段,使用Class 3可再对各个class C字段做个别的总带宽限制
delay_parameters语法:
class 1 delay pool;
delay_parameters pool total
class 2 delay pool;
delay_parameters pool tatal per-host
class 3 delay pool;
delay_parameters pool total network per-host
每个delay_parameters的数值是由restore(byte/sec)/max(bytes)组成,restore是表示以bytes/sec的速度下载object到bucket里,而max则表示bucket的bytes值.
备注1:如果要设定为unilit speed的话,将数值设定为-1即可
备注2:SQUID FAQ中有提到,建议max至少要设为restore的两倍(It is recommended that the maximum is at least twice the restore value)
[设定文档格式说明]
acl all src 0.0.0.0/0.0.0.0
acl lan src 192.168.1.0/255.255.255.0 # 定义 ACL
delay_pools n # 总共有几个 delay_pools
delay_class n1 1 # 第 n1 个 delay_pool 的种类是 Class 1
delay_class n2 3 # 第 n2 个 delay_pool 的种类是 Class 3
delay_class n3 2 # 第 n3 个 delay_pool 的种类是 Class 2
delay_access n1 allow lan
delay_access n1 deny all # 定义 delay_pool n1 的 access rule
delay_parameters n1 64000/64000 # 定义 delay_pool n1 的速度限制,依 class 的不同有不同的定义方式 (请参照上面的说明)
[范例说明]
1. 限制限制带宽为 512 Kbps
acl all src 0.0.0.0/0.0.0.0 # might already be defined
delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 64000/64000 # 512 kbits == 64 kbytes per second
2. 限制限制单一的带宽为 128 Kbps
acl only128kusers src 192.168.1.0/255.255.192.0
acl all src 0.0.0.0/0.0.0.0
delay_pools 1
delay_class 1 3
delay_access 1 allow only128kusers
delay_access 1 deny all
delay_parameters 1 64000/64000 -1/-1 16000/64000
3. 对某些特定的网站设置不通的带宽限制 (自己尝试一下,如果有错误请自行修改)
acl lan_use src 192.168.1.0/255.255.255.0 # 设置 LAN 使用者的 ACL
acl kkbox dstdomain .kkbox.com.tw # 设置特定域名的 ACL
delay_pools 2 # 设置两个 delay_pools
delay_class 1 1 # 第一个是 Class 1 的,用來限制总带宽
delay_class 2 2 # 第二个是 Class 2 的,用来限制单一的带宽
delay_access 1 allow kkbox
delay_access 1 deny all
delay_access 2 allow lan_use
delay_access 2 deny all
delay_parameters 1 64000/64000 # 不限制指定域名的单一带宽,但对总带宽速作限制
delay_parameters 2 64000/64000 10000/50000 # 限制 LAN 的所有使用者单一带宽,并对总的带宽作以限制
本文来自: E点废墟(www.xok.la) 详细出处参考:http://xok.la/2008/03/squid_limlit_band.html
class类型1为单个IP地址流量
class类型2为C类网段中的每个IP地址流量
class类型3为B类网段中的每个C类网段中的每个IP地址流量
所以
类型1只有一个总带宽流量实际也就是这个IP地址的流量
delay_parameters 1 64000/64000
类型2有两个带宽流量参数,第一个为整个C类型网段流量,第二个为每个IP流量
delay_parameters 1 -1/-1 64000/64000
类型3有三个带宽流量参数,第一个为整个B类网总流量,第二个为每个B类网段中的C类网段总流量,第三个为了B类网段中每个C类网段中的每个IP流量
delay_parameters 1 -1/-1 -1/-1 64000/64000
注: -1/-1表示流量无限制。 斜杆前后两个参数为最小流量与最大流量.
所以看你的情况需要,你只有一个IP地址就用类型1,有一个C类网段就用类型2,有一个B类网段就用类型3.
似乎可以通过将IP地址分组对分别给予不等的带宽;
原文如下:
You can also use delay pools to provide different classes of service. For example, you might have important users and unimportant users. In this case, you could use two class 1 delay pools. Give the important users a higher bandwidth limit than everyone else:
delay_pools 2
delay_class 1 1
delay_class 2 1
delay_parameters 1 65536/1048576
delay_parameters 2 10000/50000
acl ImportantUsers src 192.168.8.0/22
acl All src 0/0
delay_access 1 allow ImportantUsers
delay_access 2 allow All
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:842
Submitted by admin on 2012, February 4, 9:37 PM
服务器防盗链设置,从最简单的referer判断,到进阶的key+time生成md5值,应该说是比较可靠了,而还有一种防盗链方式,基于IP/COOKIE的,这个我没找到太多有用信息,似乎IIS有个相关插件?
只看到一篇squid的相关文章,简单的举了个防盗链的例子,未必有效(因为把cookie做明文处理,相比md5加密实在是防君子不防小人)。倒是从中学习一下external_acl_type用法,对squid进阶一番罢~~
首先按惯例,上权威:《squid中文权威指南》6.1.3章节和12.5章节。
用法如右:external_acl_type name [options] FORMAT.. /path/to/helper
[helper arguments..]
options包括:ttl、negtive_ttl、children、concurrency、cache和grace;
FORMAT包括:%LOGIN,%EXT_USER,%IDENT,%SRC,%SRCPORT,%DST,%PROTO,%PORT,%METHOD,%MYADDR,%MYPORT,%PATH,%USER_CERT,%USER_CERTCHAIN,%USER_CERT_xx,%USER_CA_xx,%{Header},%{Hdr:member},%{Hdr:;member},%ACL,%DATA。
外部程序输出结果必须是OK或者ERR,不过可以再带上一些keyword,比如user/passwd,ERR的messages,access.log里记录的%ea等等。
cookie防盗链举例squid/libexec/check_cookie.pl如下:
#!/usr/bin/perl -w
# 这个脚本仅仅是验证了Cache这个cookie的存在,没有严格的校验其值。
# disable output buffering
$|=1;
while () {
chop;
$cookie=$_;
if( $cookie =~ /$COOKIE/i)
{
print “OKn”;
} else { print “ERRn”;
}
}
squid.conf配置如下:
external_acl_type download children=15 %{Cookie}
squid/libexec/check_cookie.pl
acl dl external download
acl filetype url_regex -i .wmv .wma .asf .asx .avi .mp3
.smi .rm .ram .rmvb .swf .mpg .mpeg .mov .zip .mid
http_access deny filetype !dl
回过头来,想到之前的squid_session一文中,也是用的这个外部ACL~~
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:724
Submitted by admin on 2012, January 18, 10:43 AM
acl IP dstdom_regex ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$
http_access deny IP
acl denydomain dstdom_regex www.domain.com$
http_access deny denydomain
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:828
Submitted by admin on 2012, January 12, 11:55 AM
在squid.conf 下加如下配置
client_db on
acl client_10 src 192.168.0.0/32
acl maxconnect maxconn 10
http_access deny client_10 maxconnect
-----------------
squid可以针对连接数进行ip,域名限制:
针对域名设置:
acl ifeng dstdomain img.ifeng.com
acl lianjie maxconn 100
http_access deny ifeng lianjie
针对ip设置
acl client_100 src 192.168.1.100
acl maxconnect maxconn 3
http_access deny client_100 maxconnect
------------------------
maxconn
maxconn ACL 指来自客户IP 地址的大量同时连接。某些squid 管理员发现这是个有用的方法,用以阻止用户滥用代理或者消耗过多资源。
maxconn ACL 在请求超过指定的数量时,会匹配这个请求。因为这个理由,你应该仅仅在deny 规则里使用maxconn。考虑如下例子:
acl OverConnLimit maxconn 4
http_access deny OverConnLimit
在该情况中,squid 允许来自每个IP 地址的同时连接数最大为4 个。当某个客户发起第五个连接时,OverConnLimit ACL 被匹配,http_access 规则拒绝该请求。
另外iptables 有一个 connlimit 模块,是匹配每个 IP 并发连接数的 搜了好多文章说2.6.23以后的版本才默认被编译支持了,低于这个版本的得path 因为这个编译比较复杂 所以在外网服务器没有敢测试
#/sbin/modprobe ipt_limit
#iptables -m limit -h
limit v1.3.5 options:
--limit avg max average match rate: default 3/hour
[Packets per second unless followed by
/sec /minute /hour /day postfixes]
--limit-burst number number to match in a burst, default 5
connlimit v1.3.5 options:
[!] --connlimit-above n match if the number of existing tcp connections is (not) above n
--connlimit-mask n group hosts using mask
允许每个客户机同时两个telnet连接
iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
iptables 的运作需要两部分
一个是内核部分,一个是用户部分
libipt_connlimit.so 是 iptables 调用要用到的
ipt_connlimit.ko 是内核要用到的
你应该 modprobe ipt_connlimit,若提示有错,证明你的系统不支持,需要 patch
在内核版本2.6.23以前,connlimit都是一个iptables的P-O-M,从2.6.23开始,它正始进入内核。所以我们的iptables在编译时就要使用内核的extention才行
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1674
Submitted by admin on 2012, January 5, 3:39 PM
编译加-enable-delay-pools选项
添加以下行:
delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 50000/50000 # 限制网速在50K以内
delay_initial_bucket_level 50
--------------------------------------
今天测试了一下squid使用delay_pools来对源网站的访问进行限速.非常好用,如下
使用squid建二个源网站
1
2
3
4
5
6
|
acl php-oa url_regex -i ^http: // .*php-oa.com/.*
acl sudo -u url_regex -i ^http: // .* sudo -u.com/.*
http_access allow mysite
http_access allow sudo -u
http_access deny all
icp_access allow all
|
下面开始正文,我们要用到squid中的delay_pools,delay_pools里可以定义多个容器(多个源定义多个),而这个容器就是我们要控制的带宽,当容器到达所设定的容量时,这个容器的所有者就无法超过我们所设定的带宽限制.
开始设置squid的delay_pools
01
02
03
04
05
06
07
08
09
10
11
|
delay_pools 2
delay_class 1 2
delay_access 1 allow php-oa
delay_access 1 deny all
delay_parameters 1 64000 /64000 64000 /32000
delay_class 2 1
delay_access 2 allow sudo -u
delay_access 2 deny all
delay_parameters 2 32000 /16000
|
class定义:
class类型1为单个IP地址流量
class类型2为C类网段中的每个IP地址流量
class类型3为B类网段中的每个C类网段中的每个IP地址流量
delay_parameters语法:
类型1只有一个总带宽流量实际也就是这个IP地址的流量
delay_parameters pool total
例:delay_parameters 1 64000/64000
类型2有两个带宽流量参数,第一个为整个C类型网段流量,第二个为每个IP流量
delay_parameters pool tatal per-host
例:delay_parameters 1 -1/-1 64000/64000
类型3有三个带宽流量参数,第一个为整个B类网总流量,第二个为每个B类网段中的C类网段总流量,第三个为了B类网段中每个C类网段中的每个IP流量
delay_parameters pool total network per-host
例:delay_parameters 1 -1/-1 -1/-1 64000/64000
注: -1/-1表示流量无限制.每个delay_parameters的数值是由"回源站的速度/客户最大下载速度"组成
另外,对HIT的文件没有作用
----------------------------
UserDefine
acl vip src 192.168.24.0/255.255.255.0
acl normal_users src 192.168.11.232 192.168.11.211 192.168.11.231
acl vip_sc200 src 192.168.23.211 192.168.23.112
acl banneduser src 192.168.9.100
acl vip_me src 192.168.9.30
acl test src 192.168.100.250
acl all src 0.0.0.0/0
# define download files extension
acl disable_extension urlpath_regex -i \.mp3$ \.avi$ \.rmvb$ \.rm$ \.ra$ \.ram$ \.mpe$ \.smi$ \.mpeg$ \.wmv$ \.wma$ \.3gp$ \.td$ \.t
# define disable site dstdomain files.
# define disable ip for domain file
#Port Define
http_port 88
cache_mgr 5111
visible_hostname ifc-proxy
#HttpAccess
http_access allow vip
http_access allow vip_me
http_access deny disable_extension
#MaxConn Define
acl num_conn maxconn 5
acl num_conn2 maxconn 20
#HttpAccess MaxConn Define
http_access deny normal_users num_conn
http_access deny test num_conn
http_access deny vip_sc200 num_conn2
#SpeedControl
delay_pools 4
delay_class 1 3
delay_class 2 3
delay_class 3 2
delay_class 4 3
delay_access 1 allow vip_sc200
delay_access 2 allow normal_users
delay_access 3 allow test
delay_access 4 allow all
delay_parameters 1 128000/128000 -1/-1 32000/64000
delay_parameters 2 64000/64000 -1/-1 8000/64000
delay_parameters 3 64000/64000 8000/64000
delay_parameters 4 1/1 1/1 1/1
前面一长段可以不看,看最后的一段,下面是注释
delay_pools 4 //表示有4个限制池,或者说对4种不同的目标限制
delay_class 1 3
delay_class 2 3
delay_class 3 2
delay_class 4 3 //上面的4行分别声明了四个池的类型,池1,2,4用于B类网段控制,池3用于C类网段控制,另外如果声明类型为class n 1表示控制单个ip地址
delay_access 1 allow vip_sc200
delay_access 2 allow normal_users
delay_access 3 allow test
delay_access 4 allow all //这几行分别对一开始定义的四个用户组进行限速,分别应用1,2,3,4号限制池
delay_parameters 1 128000/128000 -1/-1 32000/64000
delay_parameters 2 64000/64000 -1/-1 8000/64000
delay_parameters 3 64000/64000 8000/64000
delay_parameters 4 1/1 1/1 1/1
这四行分别声明了1,2,3,4号限制池的速度限制大小,比如第一个,我们前面声明的是B类网段,所以他的格式大概就是
delay_parameters 限制池号 本池最大速度 网段最大速度 单个ip最大速度
至于限制C类段的就少个网段最大速度,格式为
delay_parameters 限制池号 本池最大速度 单个ip最大速度
可能说的不太清楚,如果看不懂的可以参考下面的内容
关于设定SQUID带宽限制和流量整形,刻利用squid.conf种的delay_pools字段来完成.
delay pools里的bucket就像是一个容器,而这个容器就是squid要控制带宽用的,当容器到达所设定的容量时,这个容器的所有者就无法超过我们所设定的带宽限制,所有的bucket则称之为unified bucket.
Class分为三种:
(1)Class 1:包含一个unified bucket,而这个bucket是给这个class里所定义的host使用.
(2)Class 2:包含一个unified bucket和255个buckets,每一个bucket分配给8bit网络的使用者(255 hosts)使用IPv4 class C).
(3)Class 3:包含255个buckets,每一个bucket分配给16bit网络的使用者(65535 hosts)使用(IPv4 class B).
(1)Class 1:contains a single unified bucket which is used for all requests from hosts subject to the pool
(2)Class 2:contains one unified bucket and 255 buckets, one for each host on an 8-bit network (IPv4 class C)
(3)Class 3:contains 255 buckets for the subnets in a 16-bit network, and individual buckets for every host on these networks (IPv4 class B)
推测:如果ACL只定义一个class C字段,要限制每个host的单一带宽,可以使用Class 2来做;但如果ACL有定义好几个class C字段,使用Class 3可再对各个class C字段做个别的总带宽限制
delay_parameters语法:
class 1 delay pool;
delay_parameters pool total
class 2 delay pool;
delay_parameters pool tatal per-host
class 3 delay pool;
delay_parameters pool total network per-host
每个delay_parameters的数值是由restore(byte/sec)/max(bytes)组成,restore是表示以bytes/sec的速度下载object到bucket里,而max则表示bucket的bytes值.
备注1:如果要设定为unilit speed的话,将数值设定为-1即可
备注2:SQUID FAQ中有提到,建议max至少要设为restore的两倍(It is recommended that the maximum is at least twice the restore value)
[设定文档格式说明]
acl all src 0.0.0.0/0.0.0.0
acl lan src 192.168.1.0/255.255.255.0 # 定义 ACL
delay_pools n # 总共有几个 delay_pools
delay_class n1 1 # 第 n1 个 delay_pool 的种类是 Class 1
delay_class n2 3 # 第 n2 个 delay_pool 的种类是 Class 3
delay_class n3 2 # 第 n3 个 delay_pool 的种类是 Class 2
delay_access n1 allow lan
delay_access n1 deny all # 定义 delay_pool n1 的 access rule
delay_parameters n1 64000/64000 # 定义 delay_pool n1 的速度限制,依 class 的不同有不同的定义方式 (请参照上面的说明)
[范例说明]
1. 限制限制带宽为 512 Kbps
acl all src 0.0.0.0/0.0.0.0 # might already be defined
delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 64000/64000 # 512 kbits == 64 kbytes per second
2. 限制限制单一的带宽为 128 Kbps
acl only128kusers src 192.168.1.0/255.255.192.0
acl all src 0.0.0.0/0.0.0.0
delay_pools 1
delay_class 1 3
delay_access 1 allow only128kusers
delay_access 1 deny all
delay_parameters 1 64000/64000 -1/-1 16000/64000
3. 对某些特定的网站设置不通的带宽限制 (自己尝试一下,如果有错误请自行修改)
acl lan_use src 192.168.1.0/255.255.255.0 # 设置 LAN 使用者的 ACL
acl kkbox dstdomain .kkbox.com.tw # 设置特定域名的 ACL
delay_pools 2 # 设置两个 delay_pools
delay_class 1 1 # 第一个是 Class 1 的,用來限制总带宽
delay_class 2 2 # 第二个是 Class 2 的,用来限制单一的带宽
delay_access 1 allow kkbox
delay_access 1 deny all
delay_access 2 allow lan_use
delay_access 2 deny all
delay_parameters 1 64000/64000 # 不限制指定域名的单一带宽,但对总带宽速作限制
delay_parameters 2 64000/64000 10000/50000 # 限制 LAN 的所有使用者单一带宽,并对总的带宽作以限制
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:2052