目前,電信運營商和服務提供商所採用的認證方式主要有本地認證、RADIUS認證和不認證;而計費策略更是豐富多彩,常見的有不計費(包月)、按時長計費、按流量計費、按端口計費等等。目前在全部這些認證計費方式中,以採用RADIUS Server進行集中認證計費應用的最爲普及和普遍。算法
AAA是認證(Authentication)、受權(Authorization)和計費(Accounting)的簡稱,它是一種對網絡安全進行管理的基本框架。而RADIUS (Remote Authentication Dia• -In User Service)即遠程認證撥號用戶服務,是一種分佈式的、客戶機/服務器結構的信息交互協議,它能保護網絡不受未受權訪問的干擾。兩者結合能夠實現對遠程接入用戶身份、權限以及流量的嚴格控制。RADIUS爲服務供應商和公司提供了一種靈活通用的協議,用來完成集中式的用戶認證、口令加密、服務選擇、過濾和賬目覈對等工做。當進行PAP/CHAP鏈接或鏈接第三方認證服務器時,一個單獨的RADIUS數據庫服務器能夠在多個複雜網絡上同時管理多個安全系統,並可用於維護成千上萬用戶的信息安全。數據庫
RADIUS不只指運行於服務器上的軟件,還包括網絡訪問服務器與RADIUS服務器之間的交互操做協議。安全
如下即針對RADIUS協議的原理和具體的應用作詳細介紹。服務器
AAA是認證(Authentication)、受權(Authorization)和計費(Accounting)的縮寫,它是運行於NAS(網絡訪問服務器)上的客戶端程序。提供了一個用來對認證、受權和計費這三種安全功能進行配置的一致性框架,其實是對網絡安全的一種管理。這裏的網絡安全主要指訪問控制。包括哪些用戶能夠訪問網絡服務器;具備訪問權的用戶能夠獲得哪些服務;以及如何對正在使用網絡資源的用戶進行計費。網絡
AAA框架圖多線程
• 本地認證——即在NAS端進行認證、受權和計費,框架
• 遠程認證——經過協議進行遠程的認證、受權和計費。分佈式
AAA的實現可採用RADIUS協議。RADIUS用來管理使用串口和調制解調器的大量分散用戶。編碼
網絡接入服務器簡稱NAS。當用戶想要經過某個網絡(如電話網)與NAS創建鏈接從而得到訪問其餘網絡的權利時,NAS能夠選擇在NAS上進行本地認證計費,或把用戶信息傳遞給RADIUS服務器,由RADIUS進行認證計費;RADIUS 協議規定了NAS與RADIUS 服務器之間如何傳遞用戶信息和計費信息,即二者之間的通訊規則;RADIUS服務器負責接收用戶的鏈接請求,完成認證,並把用戶所需的配置信息返回給NAS。用戶得到受權後,在其正常上線、在線和下線過程當中,RADIUS服務器還完成對用戶帳號計費的功能。加密
RADIUS遠程認證撥入用戶服務,是用於NAS和AAA服務器間通訊的一種協議。RADIUS對AAA的三個組件都提供支持:認證、受權和計費。
一個網絡容許外部用戶經過公用網對其進行訪問,其用戶在地理上的分佈會極爲分散。用戶能夠把本身的信息傳遞給這個網絡,也能夠從這個網絡獲得本身想要的信息。因爲存在內外的雙向數據流動,網絡安全就顯得尤其重要。這個網絡管理的內容包括:哪些用戶能夠得到訪問權;得到訪問權的用戶能夠容許使用哪些服務;如何對使用網絡資源的用戶進行記費。AAA很好的完成了這三項任務。
RADIUS經過創建一個惟一的用戶數據庫,存儲用戶名,用戶的密碼來進行認證; 存儲傳遞給用戶的服務類型以及相應的配置信息來完成受權。
• 客戶端/服務器模式(Client/Server)
NAS是做爲RADIUS的客戶端運做的。這個客戶端負責將用戶信息傳遞給指定的RADIUS服務器,並負責執行返回的響應。RADIUS服務器負責接收用戶的鏈接請求,鑑別用戶,併爲客戶端返回全部爲用戶提供服務所必須的配置信息。一個RADIUS服務器能夠爲其餘的RADIUS Server或其餘種類認證服務器擔當代理。
• 網絡安全 (Network Security)
客戶端和RADIUS服務器之間的事務是經過使用一種歷來不會在網上傳輸的共享密鑰機制進行鑑別的。另外,在客戶端和RADIUS服務器之間的任何用戶密碼都是被加密後傳輸的,這是爲了不用戶密碼在不安全的網絡上被監聽獲取的可能性。
• 靈活的認證機制 (Flexible Authentication Mechanisms)
RADIUS服務器能支持多種認證用戶的方法。包括點對點的PAP認證(PPP PAP)、點對點的CHAP認證(PPP CHAP)、UNIX的登陸操做(UNIX login)、和其餘認證機制。
• 擴展協議(Extensible Protoco• )
RADIUS協議具備很好的擴展性。RADIUS包是由包頭和必定數目的屬性(Attribute)構成的。新的屬性能夠在不中斷已存在協議執行的前提下進行增長。
用戶, NAS,RADIUS 服務器的關係
RADIUS採用典型的客戶端/服務器(Client/Server)結構,它的客戶端最初就是NAS,如今任何運行RADIUS客戶端軟件的計算機均可以成爲RADIUS的客戶端。NAS上運行的AAA程序對用戶來說爲服務器端,對RADIUS服務器來說是做爲客戶端。負責傳輸用戶信息到指定的RADIUS服務器,而後根據從服務器返回的信息進行相應處理(如接入/掛斷用戶)。RADIUS服務器負責接收用戶鏈接請求,認證用戶,而後給NAS返回全部須要的信息。
一、RADIUS的客戶端一般運行於接入服務器(NAS)上,RADIUS服務器一般運行於一臺工做站上,一個RADIUS服務器能夠同時支持多個RADIUS客戶(NAS)。
二、RADIUS的服務器上存放着大量的信息,接入服務器(NAS)無須保存這些信息,而是經過RADIUS協議對這些信息進行訪問。這些信息的集中統一的保存,使得管理更加方便,並且更加安全。
三、RADIUS服務器能夠做爲一個代理,以客戶的身份同其餘的RADIUS服務器或者其餘類型的認證服務器進行通訊。用戶的漫遊一般就是經過RADIUS代理實現的。簡單地說,代理就是一臺服務器,能夠做爲其餘RADIUS服務器的代理,負責轉發RADIUS認證和計費數據包。所謂漫遊功能,就是代理的一個具體實現,這樣可讓用戶經過原本和其無關的RADIUS服務器進行認證。
RADIUS是一種流行的AAA協議,採用UDP協議傳輸,在協議棧中位置以下:
RADIUS在協議棧中的位置
RADIUS爲什麼採用UDP,而不是TCP的緣由以下:
一、NAS和RADIUS服務器之間傳遞的通常是幾十至上百個字節長度的數據,用戶能夠容忍幾秒到十幾秒的驗證等待時間。當處理大量用戶時服務器端採用多線程,UDP簡化了服務器端的實現過程。
二、TCP是必須成功創建鏈接後才能進行數據傳輸的,這種方式在有大量用戶使用的狀況下實時性很差。
三、當向主用服務器發送請求失敗後,還要必須向備用的服務器發送請求。因而RADIUS要有重傳機制和備用服務器機制,它所採用的定時機制,TCP不能很好的知足。
RADIUS協議採用的是UDP協議,數據包可能會在網絡上丟失,若是客戶沒有收到響應,那麼能夠從新發送該請求包。屢次發送以後若是仍然收不到響應,RADIUS客戶能夠向備用的RADIUS服務器發送請求包。
RADIUS協議的加密是使用MD5加密算法進行的,在RADIUS的客戶端(NAS)和服務器端(RADIUS Server)保存了一個密鑰(key),RADIUS協議利用這個密鑰使用MD5算法對RADIUS中的數據進行加密處理。密鑰不會在網絡上傳送。
RADIUS的加密主要體如今如下兩方面:
在RADIUS包中,有16字節的驗證字(authenticator)用於對包進行簽名,收到RADIUS包的一方要查看該簽名的正確性。若是包的簽名不正確,那麼該包將被丟棄,對包進行簽名時使用的也是MD5算法(利用密鑰),沒有密鑰的人是不能構造出該簽名的。
在認證用戶時,用戶的口令在NAS和RADIUS Server之間不會以明文方式傳送,而是使用了MD5算法對口令進行加密。沒有密鑰的人是沒法正確加密口令的,也沒法正確地對加密過的口令進行解密。
當用戶上網時,NAS將決定對用戶採用何種認證方法。下面對使用RADIUS認證的狀況下PPP用戶與NAS之間的PAP和CHAP認證過程進行介紹。
RADIUS服務器可以使用H3C的iMC服務器,也可使用CISCO的ACS服務器或其它第三方服務器。
• PAP 驗證:
Radius Server PAP認證
用戶以明文的形式把用戶名和他的密碼傳遞給NAS,NAS把用戶名和加密過的密碼放到驗證請求包的相應屬性中傳遞給RADIUS服務器。RADIUS服務器根據NAS上傳的賬號進行驗證來決定是否容許用戶上網並返回結果。NAS能夠在其中包含服務類型屬性Attribute Service-Type=Framed-User,和Framed-Protoco• =PPP做爲提示來告訴RADIUS服務器PPP是所但願的服務。
Secret password =Password XOR MD5(Challenge + Key)
(Challenge就是RADIUS報文中的Authenticator)
• CHAP 驗證:
對於CHAP(挑戰握手認證協議),它提供對用戶口令進行加密的機制。
RADIUS Server CHAP認證
當用戶請求上網時,NAS產生一個16字節的隨機碼給用戶(同時還有一個ID號,本地路由器的Host name)。用戶端獲得這個包後使用本身獨有的設備或軟件客戶端將CHAP ID、用戶密碼(口令字)用MD5算法對該隨機碼進行加密生成一個Secret Password,隨同用戶名user name一併傳給NAS。
NAS把傳回來的user name和Secret Password分別做爲用戶名和密碼,並把原來的16字節隨機碼以及CHAP ID傳給RADIUS服務器。RADIUS根據用戶名在服務器端查找數據庫,獲得和用戶端進行加密所用的同樣的密鑰,用MD5算法對CHAP ID,密鑰和傳來的16字節的隨機碼進行加密,將其結果與傳來的Password做比較,若是相匹配,服務器送回一個接入容許數據包,不然送回一個接入拒絕數據包。
當用戶PC經過某個網絡(如電話網)與 NAS創建鏈接從而得到訪問其餘網絡的權利時,NAS能夠選擇在NAS上進行本地認證計費,或把用戶信息傳遞給RADIUS服務器,由RADIUS進行認證計費;RADIUS 協議規定了NAS與RADIUS 服務器之間如何傳遞用戶信息和計費信息;RADIUS服務器負責接收用戶的鏈接請求,完成認證,並把傳遞服務給用戶所需的配置信息返回給NAS。
一般對RADIUS協議的認證服務端口號是1645(早期實現)或1812,計費服務端口號是1646(早期實現)或1813。當咱們進行NAS設備和RADIUS服務器對接的時候,因爲生產廠家可能不一樣,所對應的服務器端口號不一樣,那麼就須要調整服務器端口號,例如與其餘廠家radius協議默認端口號是1645和1646,須要與他們協商,調整到相同的端口號,這樣才能對接成功。
RADIUS服務器對用戶的認證過程一般須要利用NAS等設備的代理認證功能,RADIUS客戶端和RADIUS服務器之間經過共享密鑰認證相互間交互的消息,用戶密碼採用密文方式在網絡上傳輸,加強了安全性。RADIUS協議合併了認證和受權過程,即響應報文中攜帶了受權信息。操做流程圖和步驟以下所示:
RADIUS的典型實現流程
在一個客戶端被設置使用RADIUS協議後,任何使用這個終端的用戶都須要向這個客戶端提供認證信息。該信息或者以一種定製化的提示信息出現,用戶須要輸入他們的用戶名和密碼;或者也能夠選擇好比像點對點的傳輸協議(Point-to-Point Protoco• ),經過認證包來傳遞這種認證信息。
基本交互過程以下:
1) 用戶輸入用戶名和口令;
2) RADIUS客戶端根據獲取的用戶名和口令,向RADIUS服務器發送認證請求包(Access-Request)。
3) RADIUS服務器將該用戶信息與Users數據庫信息進行對比分析,若是認證成功,則將用戶的權限信息以認證響應包(Access-Accept)發送給RADIUS客戶端;若是認證失敗,則返回Access-Reject響應包。
4) RADIUS客戶端根據接收到的認證結果接入/拒絕用戶。若是能夠接入用戶,則RADIUS客戶端向RADIUS服務器發送計費開始請求包(Accounting-Request),Status-Type取值爲start;
5) RADIUS服務器返回計費開始響應包(Accounting-Response);
6) RADIUS客戶端向RADIUS服務器發送計費中止請求包(Accounting-Request),Status-Type取值爲stop;
7) RADIUS服務器返回計費結束響應包(Accounting-Response)。
RADIUS採用UDP傳輸消息,經過定時器管理機制、重傳機制、備用服務器機制,確保RADIUS服務器和客戶端之間交互消息正確收發。標準RADIUS協議報文結構以下:
0 7 8 15 16 31
RADIUS報文格式
Code:包類型;1字節,指示RADIUS包的類型。在接收到一個無效編碼域的數據包後,該數據包只是會被簡單的丟棄。
主要包括以下類型:
Code域主要取值的說明
Code |
報文類型 |
報文說明 |
1 |
Access-Request認證請求包 |
方向Client->Server,Client將用戶信息傳輸到Server以判斷是否接入該用戶。該報文中必須包含User-Name屬性,可選包含NAS-IP-Address、User-Password、NAS-Port等屬性。 |
2 |
Access-Accept認證接受包 |
方向Server->Client,若是Access-Request報文中全部Attribute值都是能夠接受(即認證經過),則傳輸該類型報文。 |
3 |
Access-Reject認證拒絕包 |
方向Server->Client,若是Access-Request報文中存在任何Attribute值沒法被接受(即認證失敗),則傳輸該類型報文。 |
4 |
Accounting-Request計費請求包 |
方向Client->Server,Client將用戶信息傳輸到Server,請求Server開始計費,由該報文中的Acct-Status-Type屬性區分計費開始請求和計費結束請求。該報文包含屬性和Access-Request報文大體相同。 |
5 |
Accounting-Response認證響應包 |
方向Server->Client,Server通知Client側已經收到Accounting-Request報文而且已經正確記錄計費信息。該報文包含端口上輸入/輸出字節數、輸入/輸出包數、會話時長等信息。 |
Identifier: 包標識;1字節,取值範圍爲0 ~255;用於匹配請求包和響應包,同一組請求包和響應包的Identifier應相同。若是在一個很短的時間片斷裏,一個請求有相同的客戶源IP地址、源UDP端口號和標識符,RADIUS服務器會認爲這是一個重複的請求而不響應處理。1字節意味着客戶端在收到服務器的響應以前最多發送255(28-1)個請求。Identifier段裏的值是序列增加的。
length: 包長度;2字節;標識了分組的長度,整個包中全部域的長度。長度域範圍以外的字節被認爲是附加的,並在接受的時候超長部分將被忽略。若是包長比長度域給出的短,也必須丟棄,最小長度爲20,最大長度爲4096。
Authenticator:驗證字域;16 字節明文隨機數;最重要的字節組最早被傳輸。該值用來認證來自RADIUS服務器的回覆,也用於口令隱藏算法(加密)。
該驗證字分爲兩種:
• 請求驗證字——Request Authenticator
用在請求報文中,採用惟一的16字節隨機碼。
• 響應驗證字——Response Authenticator
用在響應報文中,用於鑑別響應報文的合法性。
響應驗證字=MD5(Code+ID+length+請求驗證字+Attributes+Key)
Attributes:屬性域;用來在請求和響應報文中攜帶詳細的認證、受權、信息和配置細節,來實現認證、受權、計費等功能。採用(Type、length、Value)三元組的形式提供,
屬性在數據報中的格式:
Type:Attribute Number(屬性號),用來講明數據包中表示的屬性類型。範圍是1~255。服務器和客戶端均可以忽略不可識別類型的屬性。值爲26,標識廠商私有屬性。
length(屬性長度):說明整個屬性域的長度。長度域最小值爲3(表示屬性域至少佔3個字節)。若是AAA服務器收到的接入請求中屬性長度無效,則發送接入拒絕包。若是NAS收到的接入容許、接入拒絕和接入盤問中屬性的長度也無效,則必須以接入拒絕對待,或者被簡單的直接丟棄。
Value(值):表示屬於本身的特性和特徵。即便該域爲nul• ,這個域也必須出如今屬性域中。有6種屬性值——整數(INT) ;枚舉(ENUM) ;IP地址(IPADDR) ;文本(STRING) ;日期(DATE) ;二進制字符串(BINARY) ;
RFC中定義的標準Attribute域大體包括:
Attribute域主要取值的說明
Type |
屬性類型 |
Type |
屬性類型 |
1 |
User-Name |
23 |
Framed-IPX-Network |
2 |
User-Password |
24 |
State |
3 |
CHAP-Password |
25 |
Class |
4 |
NAS-IP-Address |
26 |
Vendor-Specific |
5 |
NAS-Port |
27 |
Session-Timeout |
6 |
Service-Type |
28 |
Idle-Timeout |
7 |
Framed-Protocol |
29 |
Termination-Action |
8 |
Framed-IP-Address |
30 |
Called-Station-Id |
9 |
Framed-IP-Netmask |
31 |
Calling-Station-Id |
10 |
Framed-Routing |
32 |
NAS-Identifier |
11 |
Filter-ID |
33 |
Proxy-State |
12 |
Framed-MTU |
34 |
login-lAT-Service |
13 |
Framed-Compression |
35 |
login-lAT-Node |
14 |
login-IP-Host |
36 |
login-lAT-Group |
15 |
login-Service |
37 |
Framed-AppleTalk-link |
16 |
login-TCP-Port |
38 |
Framed-AppleTalk-Network |
17 |
(unassigned) |
39 |
Framed-AppleTalk-Zone |
18 |
Reply_Message |
40-59 |
(reserved for accounting) |
19 |
Callback-Number |
60 |
CHAP-Challenge |
20 |
Callback-ID |
61 |
NAS-Port-Type |
21 |
(unassigned) |
62 |
Port-limit |
22 |
Framed-Route |
63 |
login-lAT-Port |
RADIUS協議具備良好的可擴展性,協議中定義的26號屬性(Vender-Specific)被用來擴展以支持供應商本身定義的擴展屬性,主要指不適於常規使用的屬性擴展。但不容許對RADIUS協議中的操做有影響。當服務器不具有去解釋由客戶端發送過來的供應商特性信息時,則服務器必須忽略它(過程能夠被記錄下來)。當沒有收到預期的供應商特性信息的狀況下,客戶端也應該嘗試在沒有它的狀況下運做(即便是在降級模式中)。
如下是具體廠商屬性格式的總結。域的傳輸是從左向右。報文結構以下圖所示:
自定義屬性格式