摘要:網絡準入控制體系中,終端與策略服務器通過代理服務器連接。該文給出網絡準入控制的實現流程,定義了代理服務器的功能。以Linux內核的網絡模塊為基礎,提出一種兩級過濾規則鏈的網絡報文過濾方法,實現了準入控制代理的安全阻斷功能。該文工作可作為網絡準入控制代理服務器的實現參考與依據。
關鍵詞:網絡準入控制;Linux;安全阻斷;過濾規則
A Network Access Control Proxy Server Based on Linux
GUO Jiang-ping
(Wuhan Institute of Shipbuilding Technology, Wuhan 430050, China)
Abstract: In Network Access Control architecture, terminals and the policy server were linked through a proxy server. In this paper, we represented the network access control process and defined main features of the NAC proxy server. In order to realize the NAC proxy function of the security block, we proposed a two-chain network packet filtering method based on Linux-kernel network module. This work can be used as NAC proxy server reference and basis for the realization.
Key words: network access control; Linux; security block; filter policy
網絡準入控制[1]的主要目的是在未來的交換機、路由器、VPN、無線、防火墻、遠程撥號等接入方式中增加對終端桌面接入設備的檢測,檢測它是否安裝了最新的防病毒措施,操作系統的安全性是否達到足夠高等。如果達到要求,則允許接入網絡,否則拒絕連接。對網絡來講,增加了“準入制”的安全性將會得到大大的提升。NAC意味著,如果想要連入網絡,需要將終端桌面機當前的安全報告提交給網絡接入設備,如果安全狀況良好,則準許接入;否則,設備會采取多種手段,或者禁止流量通過,或者將此終端放在一個公共的不安全的網絡里,只能進行一些簡單的操作,來保證整個網絡的安全性。通過聯合通報接入終端的安全性和限制其接入的措施,NAC提升網絡基礎的安全性。NAC提供了一個新型的、全面的解決方案,為企業提供一個強化的主機接入政策,規范那些不服從者,限制或者干脆禁止其接入企業網。
本文以Linux操作系統內核為實現基礎,給出了NAC代理服務器的功能設計與具體實現方法。文中首先分析NAC過程,而后提出NAC代理服務器的任務與作用,在第三部分將探討NAC代理服務器的網絡安全阻斷功能的實現方法。
1 NAC認證過程
圖1給出了NAC的認證過程中,認證消息的交互以及操作可以劃分為如下6個步驟:
1)安全認證代理(TA)運行在需要接入網絡的終端設備上。認證起始時,TA與接入設備建立連接,并將安全認證證書發送給接入設備。安全認證信息封裝在EAP數據包中進行傳輸。
2)接入設備收到安全認證證書后,將其轉發給AAA服務器做安全認證。轉發過程中采用RADIUS協議格式。所以,接入設備必須對接收到的EAP報文進行解析并重新封裝為RADIUS報文。
3)AAA服務器根據自身制定的策略和安全認證消息中的信息,作出判斷,得到該終端的訪問權限。
4)AAA服務器將最終的結論發送給接入設備,此次信息交互仍舊遵循RADIUS報文格式。
5)接入設備按照AAA服務器返回的結論信息,對于請求認證的終端執行此結論。
6)接入設備通知終端,告知其認證結果。
本文的研究重點是NAC過程中終端設備與策略服務器之間的連接設備,此設備可以將終端與策略服務器進行邏輯界定,故稱之為網絡準入控制代理服務器(NAC Proxy Server)。
2 NAC Proxy Server
NAC Proxy Server應具有以下三種功能:
1)消息的接收和發送:可以與終端和策略服務器之間建立網絡連接,接收并且發送相關消息。在這個過程中,必須保證消息的安全性和可信任性,并且對于超時操作要定義重傳機制以保證消息交互的健壯性。
2)EAP_RADIUS_CODEC:NAC Proxy Server與終端和策略服務器的認證信息交互采用兩種不同的報文格式[],這就需要代理服務器必須對兩種格式的消息進行轉換。所以,代理服務器必須具有對EAP和RADIUS格式消息的編解碼功能。對于終端,代理服務器是它的認證服務器;對于策略服務器,代理服務器是它的請求認證終端。Proxy Server需保證認證信息交互的透明性。
3)安全阻斷功能:對于策略服務器返回的認證結論,代理服務器是其最終的執行者。如果認證失敗,Proxy Server需要對終端的網絡接入加以限制,否則允許其正常的網絡傳輸。
NAC Proxy Server的功能可以概括為“代理”與“操作”。代理指的是對于終端和策略服務器之間的消息透明傳輸,并將EAP格式和RADIUS格式消息相互轉換,具體可以分為與終端的信息交互和與策略服務器的信息交互。操作是指執行策略服務器所得出的安全認證結果,對不安全的終端設備的網絡接入加以限制。
考慮NAC Proxy Server的具體實現:報文收發功能為基本編程工作,可以采用套接字實現;EAP與Radius協議的編解碼處理,可以參考文獻[2-3]中標準協議的說明;本文重點關注安全阻斷功能的實現方法。
3 安全阻斷功能
在NAC代理服務器的實現過程中,一個完整的認證準入控制過程必然返回一個針對源路由的策略,最簡單的策略可以分為準許接入和禁止接入兩種。對于后一種結果,代理必然要對該IP地址后繼所發送的報文進行過濾,以達到阻止其網絡連接的目的。在后繼介紹入侵檢測系統的過程中,對于不安全的流量,仍舊需要路由對源IP地址或者目的IP地址進行報文過濾,以達到網絡防御的安全保證。
在Linux2.4內核中,Netfilter是一個防火墻模塊,它本身并不具有包過濾功能,只是在網絡包的處理過程中添加檢驗操作,而檢驗的依據就是Iptable中保存的規則。通過規則的配置,可以實現:
1)控制:能夠允許某些類型的包通過,或者不允許某些類型的包通過。例如,包的頭部含有目的地址的信息,可以設置過濾規則禁止網絡內部的包到達某些外部的網絡地址;
2)安全:在混亂的Internet和有序的網絡之間通信過程中,設置防火墻可以保證系統的安全,可以將簡單的DoS攻擊拒之門外;
3)警覺:有時候一臺配置不好的內部機器向外面噴涌發包。包過濾能夠及時向網絡管理員報告此類異常,這樣,管理員就能夠做出相應的行動,以防不測。
安全阻斷功能可以在采用二次開發來實現,基于Linux的Netfilter功能,設計一個規則生成器來修改Iptable中的規則以達到特定的包過濾功能。
3.1 Iptable結構分析
Linux內核在過濾表中維持了3個規則列表,這些列表叫做Firewall Chains。這3個Chains分別叫做INPUT, OUTPUT 和FORWARD。當包經過相應的Chain時,這個Chain將決定這個包的命運[4]。如果Chain認為DROP,就丟棄這個包;如果認為ACCEPT就繼續在網絡中旅行。每一個Chain是眾多規則的檢查表。規則的格式為:“如果包頭部看起來像某個東西,然后對這個包做某個動作”。如果一條規則與包頭部不匹配,繼續檢查chain中的下一條規則。一旦找到匹配的,執行相應的動作。否則,一條匹配的都沒有,就檢查chain的安全策略。通常是DROP。具體過程為:當一個包到達(如以太網接口),首先檢查包的目的地址,既進行路由處理;如果包的目的地址是本機,包將繼續其傳遞過程,到達INPUT Chain,如果通過了這個Chain,那么任何需要這個包的進程都可以收到;目的地不是本機,如果內核不知道如何轉發,DROP此包;如果內核允許轉發,并且包需要經過另一塊網絡接口,那么包將被轉發到FORWARD Chain,如果通過這個Chain,包就可以發送了;本機程序發出的包必須經過OUTPUT Chain,如果能夠通過這個Chain,那么這個包就可以送到相應的網絡接口并發出。
多個規則鏈的結構恰好適合本系統的實現,因為安全阻斷的目的是禁止終端設備與其他終端設備的通信,而被禁止方一定可以與路由上的NAC代理通信,利用Linux的三個規則鏈,可以將相應的DROP規則加入到FORWARD鏈,而將ACCEPT規則加入到INPUT鏈,這樣就可以實現上述的情況了。
下面列出管理規則鏈的一些參數[5]:
1)Create a new chain (-N). 產生一個新的規則鏈;
2)Delete an empty chain (-X). 刪除一個空的規則鏈;
3)Change the policy for a built-in chain. (-P). 修改安全策略;
4)List the rules in a chain (-L). 列出規則鏈中的規則;
5)Flush the rules out of a chain (-F). 清空所有規則;
6)Zero the packet and byte counters on all rules in a chain (-Z). 所有規則包和字節數清零。
特別應該注意的是第一個參數,建立一個新的規則鏈,安全阻斷的具體實現正是利用了對于建立新規則鏈支持而簡化了規則的操作。
3.2 實現方法
所有的規則都是針對FORWARD規則鏈的,因為這里只需要考慮需要路由轉發的數據包,但是,如果將所有規則都加入到系統默認的FORWARD規則鏈中,勢必造成規則鏈過于龐大,而對于每個需要轉發的數據包,將從規則鏈開始匹配所有的規則,直到找到對應規則為止或匹配最后的默認規則,所以整個匹配過程將耗費路由的寶貴時間,影響轉發的效率。并且,對于以前驗證失敗的終端設備,規則鏈中必然存在一條或者多條規則阻止它的網絡接入,重新準入認證后,如果終端設備符合入網要求,必須刪除這些規則。而Iptable只是定義了按照規則位置的刪除操作,所以要刪除這些規則還必須記錄它們在規則鏈中的位置,這會增加額外的開銷。所以,此功能實現時采用兩級規則鏈結構,如圖2所示。在FORWARD鏈中定義固定格式的規則,這些規則不是對于數據包作出抉擇而是將其轉入到對應的下級規則鏈處理,例如:Rule2: -p TCP -j test1,這條規則定義在上層規則鏈中,既FORWARD鏈中,它將數據包指向了下級規則鏈test1,而test1中則是針對該類型的數據包進行處理的規則。綜合上述信息,以終端的IP地址做為規則鏈的名稱最為合理,這樣只需要檢查數據包的目的IP地址,然后將其轉入相應規則鏈中執行匹配即可。
圖3給出安全阻斷模塊的功能流程,基于Linux2.4內核的Netfilter模塊和Iptable功能:
1)AAA服務器將最終策略發送給NAC代理后,代理調用Radius編解碼功能解析其含義;
2)如果準許終端設備接入網絡,則刪除針對終端IP的規則;如果準入驗證失敗,則添加一個新的規則鏈,并且根據服務器返回的驗證結論生成規則。規則生成器就是完成這一功能,它將返回結論和轉換成符合Iptable語法的語句。
3)在生成的新規則鏈中加入這些規則,針對以后傳遞的數據包,規則將生效。
4 結束語
網絡準入控制是維持網絡安全、穩定的關鍵技術手段。本文工作給出了NAC流程,定義了NAC Proxy Server的功能,工作重點是基于Linux內核網絡模塊的分析,提出一種兩級規律規則的網絡報文阻斷策略,設計并實現了NAC的關鍵功能。
參考文獻:
[1] Executive Overview: Preventing Distributed Denial of Service Attacks with Cisco SDN[EB/OL].(2005-08-09).Cisco Systems.
[2] RFC2284,PPP Extensible Authentication Protocol (EAP)[S].IETF,1998.
[3] RFC2865,Remote Authentication Dial In User Service (RADIUS)[S].IETF,2000.
[4] 李曉峰,張玉清,李星.Linux2.4內核防火墻底層結構分析[J].計算機工程與應用,2002(14):138-141.
[5] 陳萬志.基于Linux防火墻技術的應用研究[D].阜新:遼寧工程技術大學,2003.