Radius協議


Radius協議是什么:
   Radius是Remote Authentication Dial In User Service的簡稱,即遠程驗證撥入用戶服務。當用戶想要通過某個網絡(如電話網)與網絡接入服務器NAS(Network Access Server)建立連接從而獲得訪問其它網絡的權力時,NAS可以選擇在NAS上進行本地認證計費,或把用戶信息傳遞給Radius服務器,由Radius進行認證計費。Radius協議規定了NAS與Radius服務器之間如何傳遞用戶信息和記賬信息,Radius服務器負責接收用戶的連接請求,完成驗證,並把傳遞服務給用戶所需的配置信息返回給NAS。例如:用戶要求得到某些服務(如SLIP, PPP, telnet),必須通過NAS,由NAS依據某種順序與所連服務器通信從而進行驗證。用戶通過撥號進入NAS,然后NAS按配置好的驗證方式(如PPP PAP, CHAP等)要求輸入用戶名,密碼等信息,用戶按提示輸入。通過與NAS的連接,NAS得到這些信息。而后,NAS把這些信息傳遞給Radius服務器,並根據服務器的響應來決定用戶是否可以獲得他所要求的服務。

什么是AAA協議
Radius是AAA協議的一個實現,那么什么是AAA協議?

AAA是鑒別,授權和記賬(Authentication, Authorization, Accounting)的簡稱,它是運行於NAS上的客戶端程序,提供了一個用來對鑒別,授權和記賬這三種安全功能進行配置的一致的框架。一個網絡允許外部用戶通過公用網對其進行訪問,從而用戶在地理上可以極為分散。大量分散用戶通過Modem等設備從不同的地方可以對這個網絡進行隨機訪問。用戶可以把自己的信息傳遞給這個網絡,也可以從這個網絡得到自己想要的信息。由於存在內外的雙向數據流動,網絡安全就成為很重要的問題了。大量的modem形成了Modem pools。對modem pool的管理就成為網絡接入服務器或路由器的任務。管理的內容有:哪些用戶可以獲得訪問權,獲得訪問權的用戶可以允許使用哪些服務,如何對使用網絡資源的用戶進行記費。AAA很好地完成了這三項任務。AAA的配置實際上是對網絡安全的一種管理,這里的網絡安全主要指訪問控制,包括哪些用戶可以訪問網絡服務器,具有訪問權的用戶可以得到哪些服務,如何對正在使用網絡資源的用戶進行記賬。下面簡單介紹一下鑒別,授權,記賬的作用。

   鑒別(Authentication):鑒別用戶是否可以獲得訪問權,可以選擇使用RADIUS協議。

   授權(Authorization) :授權用戶可以使用哪些服務。

   記賬(Accounting) :記錄用戶使用網絡資源的情況。

Radius作用
Radius服務器能用來管理使用串口和調制解調器的大量分散用戶。當用戶想要通過某個網絡(如電話網)與NAS建立連接從而獲得訪問其他網絡的權利(或取得使用某些網絡資源的權利)時,NAS起到了過問用戶(或這個連接)的作用。NAS負責把用戶的鑒別,授權,記賬信息傳遞給Radius服務器。Radius協議規定了NAS與Radius服務器之間如何傳遞用戶信息和記賬信息,即兩者之間的通信規則。Radius服務器負責接收用戶的連接請求,完成鑒別,並把傳遞服務給用戶所需的配置信息返回給NAS。用戶獲得授權后,在其正常上線、在線和下線過程中,Radius服務器完成對用戶賬號計費的功能。

RADIUS協議的認證端口號為1812(1645端口由於沖突已經不再使用),計費端口號為1813或(1646端口由於沖突已經不再使用)。RADIUS通過建立一個唯一的用戶數據庫,存儲用戶名,用戶的密碼來進行鑒別、存儲傳遞給用戶的服務類型以及相應的配置信息來完成授權。RADIUS協議具有很好的擴展性。RADIUS包是由包頭和一定數目的屬性(Attribute)構成的。新屬性的增加不會影響到現有協議的實現。通常的NAS廠家在生產NAS時,還同時開發與之配套的Radius服務器。為了提供一些功能,常常要定義一些非標准的(RFC上沒有定義過的)屬性。

  

Radius的主要特點:
1.客戶端/服務器模型

網絡訪問服務器(NAS)作為RADIUS的客戶端運行。該客戶負責將用戶信息傳遞給指定RADIUS服務器,然后對返回的響應進行操作。RADIUS服務器負責接收用戶連接請求,認證用戶,然后返回所有客戶端交付所需的配置信息服務給用戶。

RADIUS服務器可以作為其他RADIUS服務器的代理客戶端或其他種類的認證服務器。

2.網絡安全

客戶端和RADIUS服務器之間的事務是通過使用共享密鑰進行身份驗證。另外,發送任何用戶密碼在客戶端和RADIUS服務器之間加密,消除有人窺探不安全網絡確定用戶密碼的可能性。

3.靈活的認證機制

RADIUS服務器可以支持多種認證方式認證一個用戶。它可以支持PAP或CHAP,UNIX登錄等認證機制。

4.可擴展協議

所有交易均由可變長度Attribute-長度值3元組。可以添加新屬性值從而影響協議的現有實現。

Radius操作流程:

發送流程:
  當客戶端配置為使用RADIUS時,客戶端的任何用戶向客戶端提供認證信息。例如用戶希望輸入他們的用戶名和密碼。或者,用戶可以使用a鏈路成幀協議,如點對點協議(PPP),其具有承載該信息的認證分組。一旦客戶端獲得了這樣的信息,它可以選擇使用RADIUS進行身份驗證。為此,客戶端創建一個“Access-Request”包含用戶名稱,密碼等一系列的屬性,客戶端的ID和用戶所在的端口ID訪問。當存在密碼時,則需要對密碼進行加密,采用的是基於RSA消息摘要算法MD5來加密的。Access-Request通過網絡提交給RADIUS服務器。如果在一段時間內沒有返回響應,請求會進行多次重發。客戶端也可以轉發請求在主服務器的無響應的情況下,將請求轉發到備用服務器備用處理請求

接收流程:
一旦Radius服務器收到請求,它會驗證發送客戶。如果該請求包沒有公共密鑰是會被默認丟棄的。如果客戶是有效,RADIUS服務器咨詢用戶的數據庫查找名稱與請求相匹配的用戶。數據庫中的用戶條目包含必須滿足的要求列表以允許訪問用戶。這總是包括驗證密碼,還可以指定用戶允許的客戶端或端口訪問,通過校驗返回一個Access-Accept反之發送Access-Reject。

 

認證方式:
遠端(Radius)驗證——PAP方式:
采用 PAP 驗證過程如下:

1.用戶以明文的形式把用戶名和他的密碼傳遞給 NAS。

2.NAS把用戶名和加密過的密碼放到認證請求包的相應屬性中傳遞給 RADIUS 服務器。

3.根據RADIUS服務器的返回結果來決定是不允許用戶上網。

PS:此處的加密是采用密碼明文與共享秘鑰異或作為加密方式。用戶端得到了加密信息根據相同的共享秘鑰異或取得密碼明文

遠端(Radius)驗證——CHAP方式:
CHAP 驗證過程如下:

1、 當用戶請求上網時,NAS 產生一個 16 字節的隨機碼給用戶(同時還有一個 ID 號, 本地路由器的 host name)。

2、 用戶端得到這個包后使用自己獨有的設備或軟件對傳來的各域進行加密,生成一個 response 傳給 NAS。

3、 NAS 把傳來的 CHAP ID 和 response 分別作為用戶我和密碼,並把原來的 16 字節隨 機碼(challenge)傳給 RADIUS 服務器。

4、 RADIUS 根據用戶名在服務器端查找數據庫,得到和用戶端進行加密所有的一樣的 密碼,然后根據傳來的 16 的字節的隨機碼進行加密,將其結果與傳來的 password 作比較,如果相同表明驗證通過,如果不相同表明驗證失敗。另外,如果驗證成功, RADIUS 服務器同樣也要以生成一個 16 字節的隨機碼對用戶進行詢問(challenge,暫 不支持)

 

Radius數據包結構:

 

 

 

1.Code
  代指數據包的編號,標識了該數據包是什么類型的,如果是未知類型的數據包就會被默認丟棄,目前大致有一下幾種編號:

編號 類型 描述

---------------------------------------------------------------------------------------------------

1 Access-Request ---訪問請求包

2 Access-Accept ---訪問接受包

3 Access-Reject ---訪問拒絕包

4 Accounting-Request ---計費請求包

5 Accounting-Response ---計費反饋包

11 Access-Challenge ---轉發(二次驗證)包

255 Reserved ---保留,在生成一個新的數據包時使用

2.Identifier
  指的是一個八位的字節編碼,有助於匹配請求,例如能標識出短時間內同一個IP端口發出的重復請求,防止重放攻擊,將重復的數據包直接丟棄,不做任何處理。

3.Length
  該字段為長度字段是兩個八位字節。它表示的數據包的長度包括代碼,標識符,長度,認證器和屬性字段。最小長度為20和最大長度是4096。超過長度字段范圍外的字節在接收時會被忽略而如果數據包比長度字段表示短則會被認為是數據丟失而被默認丟棄。

4.Authenticator
a)請求認證器

在Access-Request數據包中,Authenticator值為16八位字節隨機數,稱為請求認證器。這個值應該要是一個唯一的不可預測的特殊並且值客戶端和RADIUS服務器之間共享的防被他人攻擊獲取。這個值通過客戶端和服務器共享一個共享秘鑰以及其他信息進行MD5加密(具體的加密操作是否類似響應認證器以及是否能換成Sha-256沒有測試過)。

b)響應認證器

    在Access-Accept,Access-Reject和Access-Challenge數據包中的Authenticator被稱為響應認證器。

ResponseAuth =MD5(Code+ID+Length+RequestAuth+Attributes+Secret)。

其中“+”為連接符號,Secret為共享密鑰。

5.Attributes

   存儲用戶的信息,如用戶名,IP地址等。

6.共享密鑰(Secret):共享密鑰在密碼加密以及數據包的鑒別碼部分都參與了運算,即使RADIUS數據包被截獲,但不知道共享密鑰,很難破解用戶的密碼偽造數據。共享密鑰應采用合適的長度,不應過短,寬大密碼范圍能有效提供對窮舉搜尋攻擊的防衛,隨着密鑰長度的增加,其破解花費的時間將大大增加。

 

Radius屬性字段:
RADIUS屬性攜帶特定的認證,授權,請求和回復的信息和配置詳細信息。。

 

 

Type:
類型字段是一個八位字節。是用於區分數據包中的數據類型,例如常用的User-Name字段就是表面這個屬性所附帶的信息就是用戶名字段,在默認的數據字典中,Radius服務器定義了大約有60種左右的數據類型,如果你想要使用默認的數據類型的話,你需要對新增的數據類型進行定義,否則RADIUS服務器/客戶端會忽略具有未知類型的屬性。目前我所接觸到的常用類型共有以下種類:

1、User-Name

該字段表示用戶名,它必須在Access-Request數據包中發送

2、User-Password

該字段表示用戶密碼,該屬性指示用戶的密碼進行身份驗證,或者用戶在訪問訪問后的輸入。只用在訪問請求包中。

3、NAS-IP-Address

該字段表示請求訪問的地址

4、NAS-Port

該字段表示請求訪問的端口號

5、Service-Type

該字段用於確定請求包所請求的是什么服務,通常服務有一下幾種:

1 Login

2 Framed

3 Callback Login

4 Callback Framed

5 Outbound

6 Administrative

7 NAS Prompt

8 Authenticate Only

9 Callback NAS Prompt

10 Call Check

11 Callback Administrative


關於加密:

RADIUS 協議的加密是使用 MD5 加密算法進行的,在 RADIUS 的客戶端(NAS)和服務器端 (Radius Server)保存了一個密鑰(key),RADIUS 協議利用這個密鑰使用 MD5 算法對 RADIUS 中的數據進行加密處理。密鑰不會在網絡上傳送(兩端使用一個都知曉的密鑰,從而不需要 再從網絡上傳輸告之)。RADIUS 的加密主要體現在兩方面:

包加密:
在 RADIUS 包中,有 16 字節的驗證字(authenticator)用於對包進行簽名,收到 RADIUS 包的一方要查看該簽名的正確性。如果包的簽名不正確,那么該包將被丟棄,對包進行簽名 時使用的也是 MD5 算法(利用密鑰),沒有密鑰的人是不能構造出該簽名的。

口令加密:
在認證用戶時,用戶的口令不會在網上明文傳送,而是使用了 MD5 算法對口令進行加密。 沒有密鑰的人是無法正確加密口令的,也無法正確地對加密過的口令進行解密。

包的簽名與加密:
包的簽名指的是 RADIUS 包中 16 字節的 Authenticator,我們稱其為“驗證字”。

·認證請求包:RequestAuth=Authenticator,認證請求包的驗證字是一個不可預測的 16 字節隨機數。這個隨機數將用於口令的加密。

·認證響應包:ResponseAuth = MD5(Code+ID+Length+Authenticator+Attributes+Key)

·計費請求包:RequestAcct= MD5(Code+ID+Length+16ZeroOctets+Attributes+Key)

·計費響應包:ResponseAcct = MD5(Code+ID+Length+RequestAcct+Attributes+Key) 口令的加密:

稱共享密鑰(key)為 Key;16 字節的認證請求驗證字(Authenticator)為 Auth;將口令 (Password)分割成 16 字節一段(最后一段不足 16 字節時用 0 補齊),為p1、p2 等;加密后 的口令塊為 c(1)、c(2)等。下面運算中 b1、b2 為中間值:

 

那么加密后的口令為 c(1)+c(2)+...+c(i)。

上面是協議規定的算法,也有的 RADIUS 服務器為了實現起來簡單,修改了上述的 算法,具體的講,b1 的算法同上,但 bi=b2=b1(i>=1),其他運算不變。當用戶的口令長度不 超過 16 字節時,兩種算法的結果是一樣的

 

   以上內容參考:RFC:https://tools.ietf.org/html/rfc2865;

TinyRadius使用手冊:http://download.csdn.net/detail/songtzu/8388809 ;
————————————————
版權聲明:本文為CSDN博主「RYCookie」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/a6877321/article/details/72825544


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM