squid 代理服务器配置文档

配置 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
下载地址: [url]http://www.squid-cache.org[/url]
版本: squid-2.4.STABLE4-src.tar.gz
MRTG
下载地址: [url]http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/[/url]
版本: 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 ,非常满足要求。(如果版本不够,请到 [url]www.perl.com[/url] 下载安装。)
2
MRTG 需要 zlib gd libpng 三个处理图形的库支持, RH7.2 满足此要求。(如果没有安装,请到 http: //www.boutell.com/gd/ [url]http://www.libpng.org/pub/png/src/[/url] [url]http://www.gzip.org/zlib[/url] 下载安装)

三.具体配置
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 [email protected]
这里可以使用匿名登陆 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 �Ccdb passwd auth_usr1 pass1
#htpasswd �Cdb passwd auth_usr2 pass2
#htpasswd �Cdb 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 [email protected]
设置缓存管理者的接受邮件地址。

cache_effective_user squidusr
cache_effective_group squidgrp
设置执行 Squid 的用户和用户组。
{
注:设置用户和用户组及其权限修改方法如下:
#groupadd squidgrp
#useradd �Cg squidgrp �Cd /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 �Cz /*
创建 Squid 所使用的缓存目录结构
如果想在前台运行
#squid �CNCdl
如果想在后台运行
#squid
检查 Squid 是否运行
#squid �Ck 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 ,可到 [url]http://www.psychofx.com/chris/unix/mrtg/[/url] 下载这两个文件。)
修改 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 �Ce
*/5 * * * * /usr/local/mrtg-2/bin/mrtg /home/www/mrtg/squid/mrtg-squid.cfg

这样,我们就建立了一个完善的代理加速访问服务器,通过 mrtg 的强大监控,可以统计服务器运行时设备运行状态。由于以上软件遵从 GNU ,因此一种强大而有经济的建站手段。通过认证控制,允许特定用户使用代理服务。而 Web 加速服务器则成为服务器镜像的方便手段。

你可能感兴趣的:(代理服务器,职场,配置,squid,休闲)