下载中心  |   网站地图  |   站内搜索  |   加入收藏
*新更新
业界动态
产品信息
安恒动态
技术文章


安恒公司 / 技术文章 / 网络管理与网络测试 / 网络设置 / 架设与维护代理服务器的实例分析
架设与维护代理服务器的实例分析
2004-07-04    转载       阅读:

https://anheng.com.cn/news/article.php?articleid=323 

*、对使用者的分析

  现有网络情况:

  我校校园网通过光缆已将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) –

  限制工大可以使用该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

  通过这张图可以清晰的了解出国代理的使用情况。

  早6时,宿舍通电。出国代理的使用频度增加数倍。
  早8时,机房、实验室开始开放,出国代理的使用频度近*步增多。
  上午11时,课程结束,部分学生离开机房、实验室,午餐时间使用频度略微减少。
  中午13时,下午课程开始,学生离开宿舍,使用频度减少。
  下午15时,机房和实验室用户增多。
  下午17时,部分机房、实验室关闭,教师离开学校,造成使用频度减少。
  晚18-20时,学生去上自习或选修课,使用频度呈减少趋势
  晚21时-22时,选修课结束,学生回到宿舍,使用频度急剧增加,并且达到每天的*高点。
  晚23时,部分宿舍断电,实验室断电。使用频度进*步减少。
  0时-5时,宿舍学生大多已经休息,使用频度程减少趋势。

  Daily usage

  通过上面可以看出我校Chinanet线路代理服务器每天的使用情况。出国代理的日访问日志在约600M。图中显示出周末,尤其是周日访问量很大。这是由于周末我校宿舍不断电,作为用户主体的学生的使用网络的时间大大增加。对此称为“周末效应”。

五、安全保障

  物理安全的保护

  供电:该服务器放在我校网络中心主机房,有双路供电。UPS可以保证在没有市电供应下5小时不中断服务。

  物理隔离:网络中心24小时有专人值班,进入主机房需要登记。

  服务器软件安全保护

  操作系统选用了FreeBSD。Freebsd本身几乎没有任何安全漏洞。根据服务*少化原则,出国代理上目前使用的服务有ssh ntp socks5 squid几种。其中ssh没有使用freebsd自带的openssh,而是使用了ssh.com出的非商业版的ssh服务器软件。这个版本的ssh服务器软件相对openssh有更安全效率更高的*势。而且对于非商业应用是免费的。 服务器通过ntp服务与某网络时间服务器进行时间同步,这是为了保证日志文件记录事件发生时间的准确性。另2个为必须提供的代理服务。其余服务没有打开。执行ps命令确认没有任何多余进程。

  对SYN-Flood及扫描的防护

  SYN Flood是当前*流行的DoS(拒绝服务攻击)与DdoS(分布式拒绝服务攻击)的方式之*,这是*种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

 

  TCP协议的三次握手过程是这样的:

  **,请求端(客户端)发送*个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;
  第二步,服务器在收到客户端的SYN报文后,将返回*个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加*,ACK即确认(Acknowledgement)。
  第三步,客户端也返回*个确认报文ACK给服务器端,同样TCP序列号被加*,到此*个TCP连接完成。假设*个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端*般会重试(再次发送SYN+ACK给客户端)并等待*段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,*般来说这个时间是分钟的数量*(大约为30秒-2分钟);*个用户出现异常导致服务器的*个线程等待1分钟并不是什么很大的问题,但如果有*个恶意的攻击者大量模拟这种情况,服务器端将为了维护*个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。
  实际上如果服务器的TCP/IP栈不够强大,*后的结果往往是堆栈溢出崩溃。即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),从而造成DoS。

  在freebsd的可以调整的内核参数中有下面2项:net.inet.tcp.blackhole和net.inet.udp.blackhole。相应的描述如下:The blackhole sysctl(8) MIB is used to control system behaviour when connection requests are received on TCP or UDP ports where there is no socket listening. Normal behaviour, when a TCP SYN segment is received on a port where there is no socket accepting connections, is for the system to return a RST segment, and drop the connection. The connecting system will see this as a "Connection reset by peer". By setting the TCP blackhole MIB to a numeric value of one, the incoming SYN segment is merely dropped, and no RST is sent, making the system appear as a blackhole. By setting the MIB value to two, any segment arriving on a closed port is dropped without returning a RST. This provides some degree of protection against stealth port scans.In the UDP instance, enabling blackhole behaviour turns off the sending of an ICMP port unreachable message in response to a UDP datagram which arrives on a port where there is no socket listening. It must be noted that this behaviour will prevent remote systems from running traceroute(8) to a system. The blackhole behaviour is useful to slow down anyone who is port scanning a system, attempting to detect vulnerable services on a system. It could potentially also slow down someone who is attempting a denial of service attack.

  根据上面描述可以将net.inet.tcp.blackhole和net.inet.udp.blackhole设置为2和1,这样将防止半开式的端口扫描,并且能对syn-flood有初步的防护。

  在内核的配置文件中有options TCP_DROP_SYNFIN这个选项。通过加入这个参数,可以防止通过TCP/IP堆栈对操作系统进行识别。可以将安全问题中的”information gathering”解决 。

六、*

  内核的*

  FreeBSD有很丰富的可以自定义的内核的参数。默认的内核为了保证通用性和稳定性,有大量*化性能的参数没有加入。

  我校Chinanet代理服务器操作系统内核部分*化参数如下:

  options MAXDSIZ="(1024*1024*1024)"
  options MAXSSIZ="(1024*1024*1024)"
  options DFLDSIZ="(1024*1024*1024)"
  options CPU_ENABLE_SSE
  options PANIC_REBOOT_WAIT_TIME=16

  前三行是对freebsd下运行的应用程序可以使用的*大的内存资源作限制,默认为128M。由于出国代理服务器软件squid占用内存巨大,默认的配置显然不能满足要求,所以要使用自定义的配置。这个配置允许单*进程占用1G的内存资源。

  第四行是打开对SSE/MMX2指令集的支持。通过加入这*参数,出国代理的性能提高了约1%。即单位时间内吞吐量增加了1%。

  第5行是在内核发生严重错误的时候自动重新启动的时间。这个参数保证了服务器出现严重的软件错误后能自动恢复。

  Cache policy
  在本文的第三部分中提到了出国代理使用的cache policy。

  cache_replacement_policy heap LFUDA cache替换策略
  memory_replacement_policy heap LRU 内存替换策略

  HP公司曾经对squid作过详细的测试。

  参考该文档,对我校出国代理作了相应的调整。默认的cache_replacement_policy 和memory_replacement_policy都是LRU。这个算法用在cache上效率相对较低。经过实际测试,使用LFUDA(Least Frequently Used with Dynamic Aging)作为cache replacement policy,cache的命中率*高。使用heap LRU作为memory replacement policy,memory cache命中率*高。使用工具测得加入出国代理后,对使用代理的用户来说,Chinanet的出口带宽达到了5-7M,已经远远高于4M的实际带宽。确实起到了cache的作用。

  对于磁盘IO的*

  前文提到freebsd的磁盘性能不佳。除使用raid技术之外,squid本身有unlinkd 和diskd两个子进程来专门负责对磁盘作操作。配置文件中的cache_dir ufs /usr/local/squid/cache 25000 16 256 这行指定了squid可以使用25G的硬盘空间来作为缓存。Ufs指定了使用unlinkd作为对磁盘做操作的进程。Unlinkd只负责删除文件的操作,diskd负责所有的操作。Squid的相应文档上建议使用diskd。但是经过测试,使用diskd虽然能提高系统的性能,但是会使squid进程变得不稳定。基于保证稳定性的考虑,选择使用unlinkd作为对磁盘操作的进程。

  Cache peer

  Squid支持多台服务器进行协同工作,组成cache peer。美国的National Laboratory for Applied Network Research、UCSD、The National Science Foundation建立了相应的cache peer组织(http://www.ircache.net)。我校Chinanet代理服务器将该组织中的2台服务器设置为slibing模式来调用,将我校另外*台cernet线路上的服务器设置为域*以.edu.cn结尾的parent模式。访问过程是这样的:如果客户端提交来的请求是以.edu.cn结尾的,**查询cache中是否有,如果没有则请求cernet线路上的服务器去读取相应资源。

  对于其他的域*,则**查询本身的cache,如果没有则查询slibing的cache,如果还没有,则自己主动去获取该资源。与ircache的协调使用ICP(Internet Cache Protoclol),与cernet线路服务器协调使用HTCP(Hypertext Caching Protocol)。对ICP的描述在RFC2186、RFC2187,对HTCP的描述在http://icp.ircache.net/htcp.txt。HTCP更有利于提高cache的性能,但是对系统的配置有要求,ICP相对简单。所以,选择使用ICP与ircache的服务器协同工作,使用HTCP与学校cernet服务器协同工作。
 

责任编辑: admin

相关文章
光纤OTDR故障诊断维护测试的新体验  13-05-29 - 阅: 208383
网络诊断日记(19):DTX排查服务器性能慢的问题  10-11-15 - 阅: 197800
网络诊断日记(18):使用FiberInspector解决光纤端面损伤导致服务器慢的问题  10-11-11 - 阅: 197729
安恒公司与福禄克网络公司签署AirMagnet艾尔麦无线网测试产品分销总代理协议  10-07-22 - 阅: 304276
网络维护学院本月培训计划  10-07-09 - 阅: 768032
“携手成长,共迎辉煌”, 2010年安恒公司代理商募集大会成功召开  10-06-30 - 阅: 260540
安恒公司与美国福禄克网络公司签署FLUKE NMPP*线维护系列仪表全国独家代理协议  10-06-08 - 阅: 261152
安恒公司携手美国福禄克网络公司、美国贝迪公司联合召开2010年度代理商募集座谈会  10-06-07 - 阅: 254443
安恒公司“网络安装维护及网络机房整理方案”2010年特惠活动(*期)通告  10-04-30 - 阅: 243385
安恒公司与美国福禄克网络公司签署*线网络维护系列仪表全国独家代理协议  10-04-11 - 阅: 248661
福禄克网络*线维护仪器介绍(CIQ-100、CIQ-KIT、LRPRO-1000、LRPRO-KIT、MS2-100、MS2-KIT、Visifault、In  10-02-03 - 阅: 215082
安恒网络维护学院证书查询  10-02-02 - 阅: 436809
网络维护工程师培训(ANME) -- 2010  10-01-28 - 阅: 683973
FLUKE OptiView PE协议分析仪专家软件对服务器连通性故障进行诊断的实战案例  09-10-22 - 阅: 202456
综合布线工作组新进展-“屏蔽配线系统设计与施工”、“综合布线系统管理与运行维护”专项技术白皮书  09-05-19 - 阅: 157179
光纤测试仪在维护中的正确应用  09-01-06 - 阅: 210942
福禄克支援灾区抢修,捐赠*批网络安装维护工具  08-02-03 - 阅: 171164
PfR Manager支持动态路由路径*化,使用户大幅降低网络维护管理成本提高效率  07-12-26 - 阅: 180094
贝迪标签打印机总代理安恒力推布线标识系统管理方案  07-12-26 - 阅: 181705
安恒公司成为美国Brady贝迪公司数据通信标识产品PCI总代理,提供网络布线标识标签的解决方案  07-12-19 - 阅: 272443
相关产品
安恒网络维护工具包AH-01, 为网络维护工程师量身定制的工具  06-08-24 - 阅: 1600250
F140音频探测器Tone probe布线管理维护基础工具  03-08-24 - 阅: 1538752
专业*网络维护工具箱Jensen Tools|JTK-2100-A  04-01-22 - 阅: 781490
《网络维护与故障诊断指南》  01-11-25 - 阅: 805454

Email给朋友 打印本文
版权所有·安恒公司 Copyright © 2004   ftth.anheng.com.cn   All Rights Reserved    
      北京市海淀区*体南路9号 主语国际商务中心4号楼8层 安恒公司(邮编100048) 电话:010-88018877