一、对使用者的分析
现有网络情况:
我校校园网通过光缆已将31座建筑物连通,光缆总长度约15Km,绝大多数楼中实现结构化布线,连入校园网的网络多媒体教室、教学基地、实验室、机房等约有数十个,连网计算机达3000多台 。我校目前出口有2个,一条速率为10M bps,通过光纤接入中国教育科研网CERNET,另一条速率为4M bps连入中国电信。
用户的需求:
我校校园网的使用者主体为在校学生及老师。根据统计,约80%的用户使用WWW、FTP等资源。我校现有Chinanet ip 126个,不可能分给所有的用户使用。通过架设代理服务器来实现让所有用户使用网络资源是最简单并且相对安全和可靠的方法。通过架设专门的WWW(FTP)代理来满足用户的主要需求,通过架设socks5代理来满足用户的其他需求。
二、硬件及软件的选择
硬件
Cache Server可以是一台普通的PC服务器加上cache软件(如Squid、Inktomi)构成,也可以是软硬件系统和一台专门的cache服务器。根据Chinanet出口的实际情况,4Mbps速率的出口,每秒最大传入数据量为约500K/s。我校主干网节点间为双千兆连接,到达部分实验室是百兆,到达宿舍为10M。送出的最大数据量为约12M/s。传送的数据量不是很大,使用传统的IA32构架服务器既可满足需求。我校网络中心主机房使用机柜来存放服务器。惠普公司的LH6000服务器,具有很强的扩展性,是新型的六路服务器。代理服务器的运算负荷不是很重,对于IO的要求较高。LH6000通过自定义配置可以达到这个要求。通过使用raid可以提高磁盘性能,增加数据的可靠性。代理服务器软件占用内存较大。LH6000可以支持8GB内存。最终选择配置如下:
配置
处理器:1个100MHz系统总线的Intel Pentium III Xeon 700MHz处理器
内存:1G PC-133 ECC SDRAM
磁盘控制器:集成具有32MB高速缓存双通道Ultra3 SCSI HP NetRAID控制器
附加单通道:Ultra Wide SCSI控制器
内置存储:热插拔5x18G半高驱动器
网卡:内置INTEL 82559 100M网卡
电源:3个热插拔电源
RAID使用了RAID5模式,这个模式是向阵列中的磁盘写数据,奇偶校验数据存放在阵列中的各个盘上,允许单个磁盘出错。RAID 5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上。这样, 任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。
软件
Squid Internet Object Cache (Harvest Project的後续版本) 是美国政府大力助的一项研究计划。Squid是一个开放源代码的代理服务器软件。它是一个为UNIX系统下运行的全功能的代理服务器软件。它可以为HTTP协议、FTP协议以及其他使用URL方式定位的协议作缓存。它支持客户端使用SSL协议进行数据传送。它可以使用ICP, HTCP, CARP, Cache Digests等协议和方式和其他运行squid的服务器进行协同。它支持SNMP协议,可以用相应的软件来做协调和管理。并且能配置详细的访问控制列表(acl)。
操作系统
以前学校的代理服务器使用linux作为操作系统。这是因为以前的代理服务器通常还兼作其他的服务器。很多服务器软件是专门为linux开发的,或者在linux上运行的效率最高。Squid本身是为unix-like操作系统开发的。本身对系统没有太多的要求。目前我校Chinanet代理服务器使用的是FreeBSD作为操作系统。
没有选择Linux有下面几点原因:
Linux的核心部分开发相对比较开放,FreeBSD的核心是由一个严格的core team来完成的。相对检查更加严格。从核心部分比较BSD的内核更加稳定。
Linux对高负荷的承载能力不如FreeBSD。对于高负荷下程序出错的容忍力,BSD远强于Linux。
许多著名的网站,如:yahoo, netease 等著名的商业网站使用的就是freebsd,稳定性和性能早已通过很多专家的评测,远远强于Linux。
在著名的文章“Linux vs BSD: A Tale of Two System”中,是这样评价Freebsd的: FreeBSD focuses on the Intel Architecture PC and server platforms, and on providing the best performance and stability possible. The DEC/Compaq Alpha is also supported.
但是Freebsd也有不如Linux的弱点。主要表现在磁盘IO的性能上。这主要是因为Freebsd使用的文件系统?UFS的性能不如linux上使用的ext2/ext3。但是在加上softupdate之后会有很大的改进。而且出国代理上配置的使用raid5模式,磁盘使用高转速scsi硬盘,在上述硬件配置的情况下,读取squid cache的数k大小的小文件使用ext2和ufs+softupdate的效率的差别在万分之一以下。对于负载数千用户的代理服务器来说,可以忽略这样的效率差别。
基于以上原因,最终选用Freebsd作为代理服务器的操作系统。
三、代理服务器软件的安装
squid的安装
freebsd本身的ports程序带有squid的稳定版本。目前squid的最新版本是2.4.STABLE6。在freebsd的/usr/ports/www/squid 目录下执行make;make install就会将最新版本的squid代码下载、编译并最终安装到/usr中的相应路径中。
Squid本身会被安装到/usr/local/sbin下
Squid的cache目录默认为/usr/local/squid/cache
Squid的log目录默认为/usr/local/squid/logs
squid的配置文件目录默认为/usr/local/etc/squid
这样的安装方式比直接使用二进制的package安装要好。因为二进制的package不能保证在自定义的系统上稳定运行。下载源代码代码在本地进行编译之前,首先会校验源代码的MD5 checksum,这样能保证我得到的源代码是未经修改过的版本。然后再在本地进行编译。最后安装到相应目录。
Squid的配置
Squid的配置文件是squid.conf
部分参数的配置如下:(为保证代理服务器安全,部分参数用*代替)
http_port 8080 设置http代理端口为8080
cache_peer pa.us.ircache.net sibling 3128 3130 login=*:*
cache_peer sj.us.ircache.net sibling 3128 3130 login=*:*
cache_peer * parent 13280 4827 htcp *:*
这几行是使用squid可以和其他几台机器进行协同工作的特性,同几台组成cache_peer。具体设置在后面的优化部分会解释。
cache_peer_domain * .edu.cn设置.edu.cn的域名使用某个cache_peer访问
cache_mem 400 MB设定内存cache的大小为400M
cache_swap_low 80
cache_swap_high 97这两行是设置cache进行替换的闸值。当占用到97%的cache后,cache中的内容将被清空20%。
maximum_object_size 20000 KB 最大对象大小为20M.
maximum_object_size_in_memory 10000 KB 内存中最大的对象大小为10M
ipcache_size 4096 ip对应cache的大小为4096
fqdncache_size 4096 域名全称cache的大小为4096
cache_replacement_policy heap LFUDA cache替换策略
memory_replacement_policy heap LRU 内存替换策略
cache_dir ufs /usr/local/squid/cache 25000 16 256 cache存放的路径大小及具体配置
dns_nameservers * * * * * 内部指定dns服务器
authenticate_program * * 身份认证程序
authenticate_children 32 身份认证程序启动的进程数目
request_body_max_size 5 MB 最大请求的body大小
reply_body_max_size 20 MB 最大回应的body大小
acl all src 0.0.0.0/0.0.0.0
acl dorm proxy_auth 192.168.0.0/255.255.0.0 REQUIRED
acl bjpu proxy_auth 202.112.64.0/255.255.240.0 REQUIRED
acl bjpu2 proxy_auth 211.71.80.0/255.255.240.0 REQUIRED
访问控制列表
acl banned_sites {过滤的关键字}
http_access deny banned_sites
deny_info ERR_BANNED_SITE banned_sites
禁止访问违禁站点的设置
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
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 dorm
http_access allow bjpu
http_access allow bjpu2
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all
允许http访问
icp_access allow *允许cache_peer使用ICP协议访问
proxy_auth_realm BJPU proxy-caching web server 验证框提示的banner
cache_mgr liukange@netease.com cache管理员的电子邮件地址
cache_effective_user *
cache_effective_group * 执行cache程序的用户uid和gid
visible_hostname cnproxy.bjpu.edu.cn cache服务的机器名
memory_pools on 内存池设置为打开。
memory_pools_limit 50 MB 内存池的大小
Socks5代理的安装
出国代理上选用的socks5代理软件是NEC公司制作的软件。它实际上是一个商业版软件。但是根据它的license文件所述,在非商业用途上使用这个软件是免费的。在RFC-1928对socks5如何运行做了详细的描述。这个标准就是NEC公司的“Ying-Da Lee”和HP及IBM公司制定的。在相应的测试中,NEC公司的这个socks5代理软件的性能是较好的。虽然它有一些安全上的漏洞,但是使用freebsd的ports方式安装,将会自动对源代码打补丁,修正安全隐患。
在/usr/ports/net/socks5下执行make;make install就能安装好该程序。相应的文件将被安装在下列目录:
socks5可执行文件被放在/usr/local/bin
socks5.conf文件被放在/usr/local/etc下
bugtraq上曾经提到socks5的密码验证部分有安全隐患,因此没有使用该功能。
Socks5代理的配置
Socks5代理的配置文件是socks5.conf,内容如下:
set SOCKS5_MAXCHILD 8000
permit - - 192.168. - (1024,65535) -
permit - - 202.112.64.0/255.255.240.0 - (1024,65535) -
permit - - 211.71.80.0/255.255.240.0 - (1024,65535) ?C
限制工大可以使用该socks5代理,限制目标端口为1024-65535。设置最多可以有8000个进程运行。
配置文件的切换
为了避免带宽的浪费,出国代理设置为夜间取消最大下载对象限制。这是是使用crontab来做到的。每天夜间23:30将配置文件切换为没有最大下载对象限制的。每天上午7:30切换回有最大下载对象限制的。
四、使用情况分析
单位时间内流量
input (total) output
packets errs bytes packets errs bytes colls
917 0 646248 1015 0 767928 0
941 0 667858 1287 0 1548180 0
832 0 673330 897 0 836839 0
895 0 655289 1067 0 878449 0
*以上数据为出国代理负载中等时的数据。
Chinanet出口已经被占满,经过cache的作用,送出数据大于进入数据
CPU负荷
使用top命令看到的CPU的负荷: load averages: 0.72, 0.86, 0.86(1mi,5min,15min),此数据为出国代理负载中等时的数据。
Hourly usage
[img:01091db545]http://www.frontfree.net/articles/pages/0000000597/hourlyusage.gif[/img:01091db545]
通过这张图可以清晰的了解出国代理的使用情况。
早6时,宿舍通电。出国代理的使用频度增加数倍。
早8时,机房、实验室开始开放,出国代理的使用频度近一步增多。
上午11时,课程结束,部分学生离开机房、实验室,午餐时间使用频度略微减少。
中午13时,下午课程开始,学生离开宿舍,使用频度减少。
下午15时,机房和实验室用户增多。
下午17时,部分机房、实验室关闭,教师离开学校,造成使用频度减少。
晚18-20时,学生去上自习或选修课,使用频度呈减少趋势
晚21时-22时,选修课结束,学生回到宿舍,使用频度急剧增加,并且达到每天的最高点。
晚23时,部分宿舍断电,实验室断电。使用频度进一步减少。
0时-5时,宿舍学生大多已经休息,使用频度程减少趋势。
Daily usage
[img:01091db545]http://www.frontfree.net/articles/pages/0000000597/dailyusage.gif [/img:01091db545]
通过上面可以看出我校Chinanet线路代理服务器每天的使用情况。出国代理的日访问日志在约600M。图中显示出周末,尤其是周日访问量很大。这是由于周末我校宿舍不断电,作为用户主体的学生的使用网络的时间大大增加。对此称为“周末效应”。