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。圖中顯示出周末,尤其是周日訪問量很大。這是由於周末我校宿捨不斷電,作為用戶主體的學生的使用網絡的時間大大增加。對此稱為“周末效應”。
五、安全保障 物理安全的保護 供電:該服務器放在我校網絡中心主機房,有雙路供電。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連接的初始序號; 第二步,服務器在收到客戶端的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的內存資源。