五、安全保障 物理安全的保護 供電:該服務器放在我校網絡中心主機房,有雙路供電。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服務器協同工作。 |