第五章 系統實作與效能評估
5.2 實驗方法與步驟
五個 P2P Clients 端將預錄好的封包檔案,以 Burst Mode 及 Infinite Loop 的方式重播,並設定每個 Loop 之間沒有任何延遲,讓網卡打出不間斷的連續流 量來加壓 P2P IPS。另外許多 P2P 程式運用大量的 HTTP-like 的協定來傳輸檔案 [6],如 FastTrack(KaZaA)、Gnutella(Foxy)、Xuelei 等,因此本實驗另建置 一台 Web Server,網頁上放置如表 5-2 所示五個 ISO 檔案,每個 client 端均對 五個 ISO 檔開啟 HTTP 下載連線,模擬 P2P 連線時,大型封包傳輸的情況,增加 IPS 判斷封包內容的工作。
File name Size
KNOPPIX-5.3.1-DVD-EN.iso 4.14 GB CentOS-5.2-i386-bin-DVD.iso 3.74 GB Fedora-9-i396-DVD.iso 3.33 GB FreeBSD-7.1-Release-i386-DVD.iso 1.77 GB FreeBSD-6.4-Release-i386-DVD.iso 1.70 GB
表 5-2 Web Server 五個 ISO 檔案
在前一章節以 L7-filter 進行封包擷取,同時以 Nulog+ULOG+MySQL 觀察 記錄被擋下封包的資訊,但在實作效能測試時,直接將條件比對符合的封包予以 丟棄,以節省系統資源。
在防火牆規則數方面,因 L7-filter 支援多達 109 種,而 IPP2P 支援的協定 僅有 9 種,而且 IPP2P 所支援的 9 種協定中,WinMX 協定在 L7-filter 卻又不支 援,為了控制實驗變因,於是本實驗取兩軟體最大交集共 8 種協定進行測試。另 外在 T4-terminator 部分,IPTables 規則數亦同樣設定為 8 條,除了開放 WEB、
SMTP、POP3 連線外,其餘 TCP 封包只要 5 分鐘內連線超過 30 次,均視為 P2P 封 包加以阻擋。
L7-filter 及 IPP2P 相互交集的 8 種協定中,Gnutella(Foxy)、eMule /eDonkey、BitTorrent 是國內學生較常用的 P2P 軟體,其他如 FastTrack
(KaZaA)、Direct Connect、AppleJuice、SoulSeek、Ares 則是其他國家流行的 連線軟體。這 8 種協定並不包含所有的 Instant Messenger,但進行實驗時仍會 把先前預錄的 MSN、YAHOO 即時通封包打出,因為這些封包仍會在所有的 IPTables
規則中逐一進行比對,對效能測試仍具有意義。
實驗進行時共分成兩大組,先進行對照組的 Pure NAT,再進行實驗組的 T4-terminator、L7-filter、IPP2P。每一組再分別進行 3 種效能測試
(Benchmark):
1、Throughput:分別 以 5 種不同 Data Size(50kB、100kB、250kB、500kB、1000kB 測試 IPS 的最大處理能力(Throughput),每 10 秒鐘測一次值,每個 Data Size 各測量 20 次後取其平均。
2、Response Time:反應時間(Response Time)與延遲時間(Latency)最大差 異在於「Latency」指的是單一事件的延遲,而「Response Time」是指會造 成延遲的所有因素的總和(overall processing delay,made up of individual latencies)。Qcheck 軟體設計的目的在測量遠端網路狀況,通常測量封包會 跨過數個網域,所以才會定義為 Response Time。本實驗環境封閉,且 Console 端與待測物 IPS 僅相隔一個 switch,所以測出之 Response Time 幾乎等同於 Latency,但本測試名稱仍採用軟體命名的 Response Time。實驗時分別以 5 種不同 Data Size(2kB、4kB、8kB、16kB、32kB)測試 IPS 的延遲時間,重 複次數(Iterations)設成 5,每 10 秒鐘測一次,每個 Data Size 各測量 20 次後取其平均。
3、CPU Utilization:為比較Burst Mode對IPS加壓的效果,本實驗再分成兩組,
第一組按照封包錄製時的時間軸循序播放,第二組才以Burst Mode加壓播放。
兩組均使用sar(System Activity Repoter)指令1記錄每秒鐘CPU使用率,
連續記錄 500 秒後,取其之最大值、最小值、平均值。
5.2.1 實驗一:T4-terminator
在[3]中作者提出一套 PTP 運算方法,使用傳輸層(Transport Layer)來辨 識 P2P 連線,藉著檢驗{IP,Port} pairs 的連線數量,如果連線數超過 20 條,而 且持續時間超過 5 分鐘,即判定為 P2P 連線。而在第二章(圖 2-6、圖 2-7)也清 楚呈現,無論分散式或者混合式的 P2P 架構,一個新加入的節點,很快地就會跟 鄰近節點產生連線。因此本實驗依照 P2P 連線的特性及[3]的方式加以簡化,提出 一套 Layer4 的 P2P 限制方式,本研究將其命名為 T4-terminator(T4 for Transport Layer4),設計之防禦規則如下表所示。
00# modprobe ipt_recent ip_list_tot=1000 ipt_pkt_list_tot=50
01# iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j ACCEPT 02# iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 80 -j ACCEPT 03# iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 25 -j ACCEPT 04# iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 25 -j ACCEPT 05# iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 110 -j ACCEPT 06# iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 110 -j ACCEPT 07# iptables -A FORWARD -p tcp -m state --state NEW,ESTABLISHED, \
RELATED -m recent --name P2P_db --update --second 300 --hitcount 30 \ -j DROP
08# iptables -A FORWARD -p tcp -m recent --set --name P2P_db 表 5-3 T4-terminator Rules
因為第 7、8 條規則會動用到 recent 模組,但 recent 資料庫預設最多僅記錄 分鐘內超過 30 次 TCP 連線,無論狀態是 NEW、ESTABLISHED、RELATED 的連線,隨 後的封包均採 DROP 方式處理。
第 1~6 條規則目的在當開放 WEB、SMTP、POP3 連線,因為 IPTables 採「first match」的關係,所以這三種連線的 TCP 封包不會被後續的規則 DROP 掉,讓 Client 端嘗試 P2P 連線被禁止時,至少還能維持網頁、郵件收發的正常連線。
整個執行流程如圖 5-2 所示,本方式最大的優勢在於不檢驗 Payload
Signature,有效提高 IPS 的過濾速度。另外對於採加密連線,或模糊演算技術,
甚至未知特徵的 P2P 連線亦能進行阻擋,尤其對於中小學學生熱愛的 P2P 線上對 戰遊戲阻擋效果甚佳。此方式最大缺點在於會漏判部分採 80 port 連線的 P2P flow,或者誤判其他非 P2P 的 TCP 連線,但漏判、誤判的問題在本研究中並未加 以探討。
5.2.2 實驗二:L7-filter classifier
L7-filter classifier 提供 Kernelspace 及 Userspace 版,實驗使用
Kernelspace v2.20 版本,Protocol definitions 為 v2008-12-18。實驗定義 IPS 規則如下表,因為 IPTables 規則比對是採「first match」逐一比對,必須比對 到符合條件的規則,才會決定封包的命運,所以將封包數量最多(4586 個)的 FOXY 放最後,封包數較少(2710 個)的 eMule 放第六條。
01# iptables -A FORWARD -m layer7 --l7proto directconnect -j DROP 02# iptables -A FORWARD -m layer7 --l7proto soulseek -j DROP 03# iptables -A FORWARD -m layer7 --l7proto applejuice -j DROP 04# iptables -A FORWARD -m layer7 --l7proto ares -j DROP 05# iptables -A FORWARD -m layer7 --l7proto fasttrack -j DROP 06# iptables -A FORWARD -m layer7 --l7proto edonkey -j DROP 07# iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP 08# iptables -A FORWARD -m layer7 --l7proto gnutella -j DROP
表 5-4 L7-filter Rules
圖 5-3 L7-filter Rules flowchart
5.2.3 實驗三:IPP2P classifier
本實驗使用 IPP2P v0.8.2,不同 L7-filter 採呼叫外部 Protocol
definitions,IPP2P 的 String-match 是以 16 進位碼直接隨程式碼編譯到模組中。
實驗定義 IPS 規則如下表,所有規則順序都跟 L7-filter 相同。
01# iptables -A FORWARD -m ipp2p --dc -j DROP 02# iptables -A FORWARD -m ipp2p --soul -j DROP 03# iptables -A FORWARD -m ipp2p --apple -j DROP 04# iptables -A FORWARD -m ipp2p --ares -j DROP 05# iptables -A FORWARD -m ipp2p --kazaa -j DROP 06# iptables -A FORWARD -m ipp2p --edk -j DROP 07# iptables -A FORWARD -m ipp2p --bit -j DROP 08# iptables -A FORWARD -m ipp2p --gnu -j DROP
表 5-5 IPP2P Rules
圖 5-4 IPP2P Rules flowchart