五、安全保障 物理安全的保护 供电:该服务器放在我校网络中心主机房,有双路供电。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满负荷或内存不足)的攻击方式。 [img:01091db545]http://www.frontfree.net/articles/pages/0000000597/tcpconnection.gif[/img:01091db545] TCP协议的三次握手过程是这样的: 首先,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号; 在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)` 前三行是对freebsd下运行的应用程序可以使用的最大的内存资源作限制,默认为128M。由于出国代理服务器软件squid占用内存巨大,默认的配置显然不能满足要求,所以要使用自定义的配置。这个配置允许单一进程占用1G的内存资源。 第四行是打开对SSE/MMX2指令集的支持。通过加入这一参数,出国代理的性能提高了约1%。即单位时间内吞吐量增加了1%。 第5行是在内核发生严重错误的时候自动重新启动的时间。这个参数保证了服务器出现严重的软件错误后能自动恢复。 Cache policy cache_replacement_policy heap LFUDA cache替换策略 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服务器协同工作。 |