朱利民
[摘要]RADIUS是目前應用最廣泛的AAA協議。作為一種可擴展的C/S結構協議,它認證機制靈活,支持各類廠商擴充的專有屬性,協議簡單明確,因此得到廣泛應用。通過分析RADIUS協議,來實現RADIUS的認證過程。
[關鍵詞]協議RADIUS認證服務器
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)1210113-01
認證服務器是LAN用戶管理的主要控制部分。通過單個服務器可同時支持多個接入控制器,為不同地區的接入用戶提供認證及后續的計費等服務。
認證服務器與接入控制器之間通過主要RADIUS協議進行通訊,該協議是IP體系中的認證、授權、計費(AAA)協議。當用戶斷開連接時,認證服務器收集來自接入控制器的計費數據,并將其轉換為相應的計費格式,并發送到計費系統中去。
一、RADIUS協議
RADIUS即遠程認證接入用戶服務(Remote Authentication Dial In User Service),作為一種Client/Server(客戶機/服務器)模式的安全協議,已經成為一種常用接入Internet的認證/計費模式。RADIUS具有安全性好、擴展靈活、易于管理等特點,還具有很強的記賬功能。
RADIUS協議的特點主要有以下四個:
客戶/服務器模型:采用客戶/服務器(Client/Server)模型,RADIUS的客戶端通常是NAS(網絡接入服務器)。客戶端將用戶的信息傳遞到指定的服務器,并處理收到的回應;服務器收到用戶的連接請求之后,對用戶進行認證,并返回相應的配置信息。
網絡安全性:客戶端和服務器之間的消息傳遞需要通過一個非網絡傳輸的共享密鑰進行相互認證。而且為了防止被竊聽,用戶的口令等有用信息通常經過加密傳輸。
靈活的認證機制:可以支持多種的認證機制,如PAP、CHAP、Unix登陸。通過擴展,RADIUS還可以支持EAP,從而支持更多種類的認證機制。
協議可擴展性:數據包的傳遞采用“屬性-長度-值”的格式對消息進行屬性封裝。當需要加入新的屬性時,無需更改原有的協議,擴展性好。
二、RADIUS服務器的工作過程
RADIUS采用Client/Server模式,其Client端一般是網絡接入服務器(Network Access Server,NAS)。NAS用來將用戶信息傳遞給RADIUS服務器;RADIUS服務器則對用戶進行認證,并返回用戶的認證結果和配置信息。其工作流程如圖1所示。
1.網絡用戶登錄網絡時,NAS會有一個客戶定義的Login提示符要求用戶直接輸入用戶信息(用戶名和口令),或者通過PPP協議要求遠程的登錄用戶輸入用戶信息。
2.采用RADIUS驗證的NAS在得到用戶信息后,將根據RADIUS標準規定的格式,向RADIUS服務器發出Access-Request訪問請求包。包中一般包括以下RADIUS屬性值:用戶名、用戶口令、訪問服務器的ID、訪問端口的ID。其中的用戶口令采用MD5加密。
3.NAS在發出Access-Request包之后,會引發計時器和計數器。當超過重發時間間隔時,計時器會激發NAS重發Access-Request包。當超過重發次數時,計數器會激發NAS向網絡中的其他備份RADIUS服務器發出Access-Request包。
4.當RADIUS服務器收到Access-Request包后,首先驗證NAS的Secret(共享密碼)與RADIUS服務器中預先設定的Secret是否一致,以確認是所屬的RADIUS客戶(NAS)送來的Access-Request包。在查驗了包的正確性之后,RADIUS服務器會依據包中的用戶名在用戶數據庫中查詢是否有此用戶記錄。若有此用戶的數據庫記錄,RADIUS服務器會根據數據庫中用戶記錄的相應驗證屬性對用戶的登錄請求作進一步的驗證。其中包括:用戶口令、用戶登錄訪問服務器的IP、用戶登錄的物理端口號等。
5.若RADIUS服務器設置為Proxy服務,RADIUS服務器可以將用戶請求Access-Request包轉向其他的驗證服務提供者。比如:主機、NT、其他的RADIUS服務器等等。
6.若以上提到的各類驗證條件不滿足,RADIUS服務器會向NAS發出Access-Reject訪問拒絕包。NAS在收到拒絕包后,會立即停止用戶連接端口的服務要求,用戶被強制Log-Out。
7.若以上提到的各類驗證條件均滿足,但RADIUS服務器中設置了用戶的Challenge/Response握手驗證要求時:RADIUS服務器會發出一個Access-Challenge包,這時用戶會看到提示信息告知用戶已經驗證成功,要求用戶進一步確認登錄請求Access-Request。用戶再次確認后,RADIUS服務器將比較兩次的請求信息,決定如何響應用戶(發送Access-Accept、Access-Reject或再一次的Access-Challenge)。
8.當所有的驗證條件和握手會話均通過后,RADIUS服務器會將數據庫中的用戶配置信息放在Access-Accept包中送回給訪問服務器,后者會根據包中的配置信息限定用戶的具體網絡訪問能力。
9.在所有的驗證、授權完成后,訪問服務器會定期向RADIUS記賬服務器發送Accounting Packet。RADIUS記賬服務同時支持ODBC數據輸出。
三、RADIUS包格式
RADIUS協議采用UDP作為傳輸層協議,早期的RADIUS認證端口為1645,目前官方指定端口為1812。數據包格式如圖1所示,各字段從左向右、從上向下傳輸。
圖1RADIUS包格式
RADIUS數據包共分五個部分:
1.Code(類型)
該域1個字節,識別RADIUS包的類型。
2.Identifier(識別符)
該域1個字節,用來輔助匹配請求和回復。如果RADIUS服務器收到的包與一段時間以前收到的包具有相同的客戶端IP地址、端口以及Identifier,則認為收到了重復包,將被丟棄。
3.Length(長度)
該域2個字節。它指明整個包的長度,內容包括Code,Identifier,Length,Authenticator和Attributes。超過長度域的字節被視為填充,在
接收時應被忽略;如果包比長度域所指示的短時,則應被丟棄。最小長度為20字節,最大長度為4096字節。
4.Authenticator(認證碼)
該域16個字節。這個值用于驗證RADIUS服務器的應答(reply),并且還用于口令隱藏算法中。
5.Attributes(屬性)
屬性域用于傳送詳細的認證、授權信息以及詳述請求和回復的配置信息。
四、認證服務器的認證實現
(一)WEB認證在RADIUS認證服務器中的實現
Web認證通過啟動一個Web頁面讓用戶輸入用戶名/密碼,并把用戶名/密碼以RADIUS協議的格式發送給認證服務器,實現用戶認證。
認證者所得到的用戶信息(用戶名,密碼),根據radius協議,打成radius報文發送至服務器端的1811端口。服務器啟動一個基于UDP的socket連接,并一直監視1810端口。此外,服務器將維護一張記錄有用戶認證信息的文件(包括用戶名,密碼)。一旦服務器接收到認證者從1810端口發送的RADIUS包,根據相應的協議分析radius報文,得到相應的用戶信息進行認證,并把相應的認證結果打成radius報文,返回給認證者。
(二)EAP_MD5,LEAP,TLS,TTLS,PEAP認證在RADIUS認證服務器中的實現
RADIUS作為后端服務器,提供了認證的功能。為了具有更強的通用性和完整性,參考美國馬里蘭大學的關于實現802.1x的方案進行配置,實現RADIUS服務器的EAP_MD5,EAP_LEAP,EAP-TLS,EAP_TTLS,EAP_PEAP認證功能。以下以配置EAP_TLS為例:
1.安裝radius服務器程序之前,需要首先安裝一個最新版本或者2002年3月1日之后的穩定版本的openssl,以用于radius中的EAP/TLS認證模塊。這個版本的openssl一般安裝在/usr/local/openssl路徑下,僅僅用于radius認證。
2.產生認證過程中所需要的證書。由用戶信息產生私鑰,然后由私鑰產生CA(Certificate Authority),由CA產生兩套證書,給client和server各一份。同時也需要生成random文件,來產生隨機數。所有文件存貯成壓縮文件形式cert.tgz,然后解壓縮到固定目錄下,如/etc/1x路徑下。
3.獲得最新的源程序的壓縮包如:freeradius-snapshot-20020916.
tar.gz(其他支持EAP-TLS認證模塊的版本亦可),解壓縮到固定目錄下,如/usr/local/radius。然后進行安裝和配置。
至此,已經成功地配置了一臺RADIUS服務器,可以支持用戶kelly-user的EAP-TLS認證,可以支持本機和IP地址為202.119.22.88的機器作為客戶端,共享密碼為whatever。如果想要支持更多的用戶或客戶端,按以上的形式進行相應的修改即可。有關文件的修改可以直接手動進行,也可以根據diff格式文件,使用patch命令。
軟件安裝完成,客戶執行申請者端程序,認證成功之后就可以享用網絡服務。