1. 程式人生 > >linux環境下搭建radius伺服器和客戶端

linux環境下搭建radius伺服器和客戶端


資料安全作為現代系統中網路安全的一部分,與系統安全一樣的重要,所以保護資料 —— 確保提供機密性、完整性和可用性 —— 對管理員來說至關重要。

在本文中,我將談到資料安全性的機密性方面:確保受保護的資料只能被授權使用者或系統訪問。您將學習如何在 Linux 系統上建立和配置一個 Remote Authentication Dial-In User Service 伺服器(RADIUS),以執行對使用者的驗證、授權和記帳(AAA)。

各組成元素介紹

首先讓我們談一談 RADIUS 協議、AAA 元件以及它們如何工作,另外還有 LDAP 協議。

Remote Authentication Dial-In User Service 協議是在 IETF 的 RFC 2865 中定義的(請參閱 

參考資料 獲得相關連結)。它允許網路訪問伺服器(NAS)執行對使用者的驗證、授權和記帳。RADIUS 是基於 UDP 的一種客戶機/伺服器協議。RADIUS 客戶機是網路訪問伺服器,它通常是一個路由器、交換機或無線訪問點(訪問點是網路上專門配置的節點;WAP 是無線版本)。RADIUS 伺服器通常是在 UNIX 或 Windows 2000 伺服器上執行的一個監護程式。

RADIUS 和 AAA

如果 NAS 收到使用者連線請求,它會將它們傳遞到指定的 RADIUS 伺服器,後者對使用者進行驗證,並將使用者的配置資訊返回給 NAS。然後,NAS 接受或拒絕連線請求。

功能完整的 RADIUS 伺服器可以支援很多不同的使用者驗證機制,除了 LDAP 以外,還包括:

  • PAP(Password Authentication Protocol,密碼驗證協議,與 PPP 一起使用,在此機制下,密碼以明文形式被髮送到客戶機進行比較);
  • CHAP(Challenge Handshake Authentication Protocol,挑戰握手驗證協議,比 PAP 更安全,它同時使用使用者名稱和密碼);
  • 本地 UNIX/Linux 系統密碼資料庫(/etc/passwd);
  • 其他本地資料庫。

在 RADIUS 中,驗證和授權是組合在一起的。如果發現了使用者名稱,並且密碼正確,那麼 RADIUS 伺服器將返回一個 Access-Accept 響應,其中包括一些引數(屬性-值對),以保證對該使用者的訪問。這些引數是在 RADIUS 中配置的,包括訪問型別、協議型別、使用者指定該使用者的 IP 地址以及一個訪問控制列表(ACL)或要在 NAS 上應用的靜態路由,另外還有其他一些值。

RADIUS 記帳特性(在 RFC 2866 中定義;請參閱 參考資料 獲得相關連結)允許在連線會話的開始和結束髮送資料,表明在會話期間使用的可能用於安全或開單(billing)需要的大量資源 —— 例如時間、包和位元組。

輕量級目錄訪問協議

輕量級目錄訪問協議(Lightweight Directory Access Protocol,LDAP)是一種開放標準,它定義了用於訪問和更新類 X.500 目錄中資訊的一種方法。LDAP 可用於將使用者資訊儲存在一箇中央場所,從而不必將相同的資訊儲存在每個系統上。它還可以用於以一種一致的、可控制的方式維護和訪問資訊。

LDAP 在一個集中的目錄中管理使用者,從而簡化了使用者管理工作。除了儲存使用者資訊外,在 LDAP 中定義使用者還可以使一些可選特性得到啟用,例如限制登入的數量。在本文中,您將學習如何配置 RADIUS 伺服器,以便基於 LDAP 驗證使用者 —— 由於本文的重點在於 RADIUS,我不會描述關於 LDAP 伺服器的安裝和配置的細節。

OpenLDAP 是 LDAP 的一種開放原始碼實現。在 OpenLDAP.org 上可以找到關於它的詳細資訊(請參閱 參考資料 獲得相關連結)。

場景

想像以下場景:

  • 使用者在家裡可以通過撥號驗證訪問他公司的內部網。
  • 帶無線支援的膝上型電腦可以通過無線驗證連線到一個校園網。
  • 管理員使用他們的工作站通過管理使用者驗證以 telnet 或 HTTP 登入到網路裝置。

所有這些驗證任務都可以通過一個 RADIUS 伺服器基於一箇中央 LDAP 伺服器來完成(見圖 1)。

圖 1. 通過 RADIUS 和 LDAP 進行驗證
通過 RADIUS 和 LDAP 進行驗證

在本文中,我將重點描述對最後一種選項的實現,作為對該解決方案的一個介紹。首先安裝 RADIUS 伺服器。

安裝 RADIUS

RADIUS 伺服器軟體可以從多個地方獲得。在本文中,我將使用 FreeRADIUS(請參閱 參考資料 獲得相關連結),但 Cisco Secure Access Control Server (ACS) 是一種集中式使用者訪問控制框架,可用於跨 UNIX 和 Windows 上多個 Cisco 裝置的使用者管理,並支援 Cisco 特有的協議 TACACS+(據說在支援 TACACS+ 的裝置上可擁有更多的特性)。

FreeRADIUS 是來自開放原始碼社群的一種強大的 Linux 上的 RADIUS 伺服器,可用於如今的分散式和異構計算環境。FreeRADIUS 1.0.2 支援 LDAP、MySQL、PostgreSQL 和 Oracle 資料庫,並與諸如 EAP 和 Cisco LEAP 之類的網路協議相容。FreeRADIUS 目前被部署在很多大型生產網路系統中。

下面的步驟演示如何在 Red Hat Enterprise Linux Advanced Server 3.0 上安裝和測試 FreeRADIUS 1.0.2:

清單 1. 安裝和測試 FreeRADIUS
tar -zxvf freeradius-1.0.2.tar.gz         - extract it with gunzip and tar
./configure
make
make install                              - run this command as root
radiusd or                                - start RADIUS server
radiusd -X                                - start RADIUS server in debug mode
radtest test test localhost 0 testing123  - test RADIUS server

如果 radtest 收到一個響應,則表明 FreeRADIUS 伺服器工作正常。

同時我還推薦另一種免費工具,那就是 NTRadPing(請參閱 參考資料 獲得相關連結),它可用於測試來自 Windows 客戶機的驗證和授權請求。它可以顯示從 RADIUS 伺服器發回的詳細的響應,例如屬性值。

現在讓我們來配置 FreeRADIUS。

配置 FreeRADIUS

RADIUS 伺服器的配置包括對伺服器、客戶機和使用者的配置(都是用於驗證和授權)。出於不同的需要,對 RADIUS 伺服器可以有不同的配置。幸運的是,大多數配置都是類似的。

配置伺服器

FreeRADIUS 配置檔案通常位於 /etc/raddb 資料夾下。首先,我們需要像下面這樣修改 radiusd.conf 檔案。

清單 2. 修改 radiusd.conf
1) Global settings:
log_auth = yes                - log authentication requests to the log file
log_auth_badpass = no         - don't log passwords if request rejected
log_auth_goodpass = no        - don't log passwords if request accepted
2) LDAP Settings:
modules {
   ldap {
      server = "bluepages.ibm.com"   - the hostname or IP address of the LDAP server
      port = 636                     - encrypted communications
      basedn = "ou=bluepages,o=ibm.com"   - define the base Distinguished Names (DN),
                                          - under the Organization (O) "ibm.com",
                                          - in the Organization Unit (OU) "bluepages"
      filter = "(mail=%u)"                   - specify search criteria
      base_filter = "(objectclass=person)"   - specify base search criteria
   }
authenticate {                - enable authentication against LDAP
   Auth-Type LDAP {
      ldap
   }

引數被設為使用 IBM BluePages,這是 LDAP 服務的一個例項。對於其他 LDAP 伺服器,引數可能有所不同。

配置客戶機

客戶機是在 /etc/raddb/clients.conf 檔案中配置的。有兩種方式可用於配置 RADIUS 客戶機。您可以按 IP subnet 將 NAS 分組(清單 3),或者可以按主機名或 IP 地址列出 NAS(清單 4)。如果按照第二種方法,可以定義 shortname 和 nastype

清單 3. 按 IP subnet 將 NAS 分組
client 192.168.0.0/24 {
   secret      = mysecret1   - the "secret" should be the same as configured on NAS
   shortname   = mylan       - the "shortname" can be used for logging
   nastype      = cisco      - the "nastype" is used for checkrad and is optional
}
清單 4. 按主機名或 IP 地址列出 NAS
client 192.168.0.1 {
   secret      = mysecret1
   shortname   = myserver
   nastype      = other
}

為驗證而配置使用者

檔案 /etc/raddb/user 包含每個使用者的驗證和配置資訊。

清單 5. /etc/raddb/user 檔案
1) Authentication type:
Auth-Type := LDAP       - authenticate against LDAP
Auth-Type := Local, User-Password == "mypasswd"
                        - authenticate against the
                        - password set in /etc/raddb/user
Auth-Type := System     - authenticate against the system password file
                        - /etc/passwd or /etc/shadow
2) Service type:
Service-Type = Login,   - for administrative login

為授權而配置使用者

下面的驗證伺服器屬性-值對(AV)應該為使用者授權而進行配置。在驗證被接受後,這個屬性-值對被返回給 NAS,作為對管理員登入請求的響應。

對於 Cisco 路由器,有不同的許可權級別:

  • 級別 1 是無特權(non-privileged)。提示符是 router>,這是用於登入的預設級別。
  • 級別 15 是特權(privileged)。 提示符是 router#,這是進入 enable 模式後的級別。
  • 級別 2 到 14 在預設配置中不使用。

下面的命令可以使一個使用者從網路訪問伺服器登入,並獲得對 EXEC 命令的立即訪問:

cisco-avpair ="shell:priv-lvl=15"

下面的程式碼處理相同的任務,這一次是對於 Cisco 無線訪問點:

Cisco:Avpair = "aironet:admin-capability=write+snmp+ident+firmware+admin"

任何功能組合都和這個屬性一起返回:

Cisco:Avpair = "aironet:admin-capability=ident+admin"
Cisco:Avpair = "aironet:admin-capability=admin"

請與 Cisco 聯絡,以獲得關於這些命令的更多資訊。

配置網路訪問伺服器

接下來我們將配置 NAS,首先是配置一個 Cisco 路由器,然後輪到一個 Cisco WAP。

對於 Cisco IOS 12.1 路由器,我們將啟用 AAA,然後配置驗證、授權和記帳。

清單 6. 啟用 AAA
aaa new-model
radius-server host 192.168.0.100
radius-server key mysecret1

AAA 在路由器上應該被啟用。然後,指定能為 NAS 提供 AAA 服務的 RADIUS 伺服器的列表。加密金鑰用於加密 NAS 和 RADIUS 伺服器之間的資料傳輸。它必須與 FreeRADIUS 上配置的一樣。

清單 7. 配置驗證
aaa authentication login default group radius local
line vty 0 4
login authentication default

在這個例子中,網路管理員使用 RADIUS 驗證。如果 RADIUS 伺服器不可用,則使用 NAS 的本地使用者資料庫密碼。

清單 8. 配置授權
aaa authorization exec default group radius if-authenticated

允許使用者在登入到 NAS 中時執行 EXEC shell。

清單 9. 配置記帳
aaa accounting system default start-stop group radius
aaa accounting network default start-stop group radius
aaa accounting connection default start-stop group radius
aaa accounting exec default stop-only group radius
aaa accounting commands 1 default stop-only group radius
aaa accounting commands 15 default wait-start group radius

必須對路由器進行特別的配置,以使之傳送記帳記錄到 RADIUS 伺服器。使用清單 9 中的命令記錄關於 NAS 系統事件、網路連線、輸出連線、EXEC 操作以及級別 1 和級別 15 上的命令的記帳資訊。

這樣就好了。現在讓我們看看為 Cisco 無線訪問點而進行的配置。下面的配置適用於帶有 Firmware 12.01T1 的 Cisco 1200 Series AP。如圖 2 中的螢幕快照所示,您:

  • 輸入伺服器名或 IP 地址和共享的祕密。
  • 選擇“Radius”作為型別,並選中“User Authentication”。
圖 2. 為 WAP 配置 NAS
圖 2. 為 WAP 配置 NAS

實際上,在這裡您還可以配置 EAP Authentication,使 FreeRADIUS 可用於驗證無線 LAN 的一般使用者。

記帳:工作中的 RADIUS

現在所有配置都已經完成,FreeRADIUS 伺服器可以開始記錄 NAS 傳送的所有資訊,將該資訊儲存在 /var/log/radius/radius.log 檔案中,就像這樣:

清單 10. /var/log/radius/radius.log 檔案
Thu Mar 3 21:37:32 2005 : Auth: Login OK: [David] (from client
                                mylan port 1 cli 192.168.0.94)
Mon Mar 7 23:39:53 2005 : Auth: Login incorrect: [John] (from
                                client mylan port 1 cli 192.168.0.94)

詳細的記帳資訊被存放在 /var/log/radius/radacct 目錄中。清單 11 表明,David 在 2005 年 3 月 4 日 19:40 到 19:51 這段時間裡從 192.168.0.94 登入到了路由器 192.168.0.1。這麼詳細的資訊對於正在調查安全事故以及試圖維護易於審計的記錄的管理員來說無疑是一大幫助。

清單 11. RADIUS 提供的記帳細節示例
Fri Mar  4 19:40:12 2005
        NAS-IP-Address = 192.168.0.1
        NAS-Port = 1
        NAS-Port-Type = Virtual
        User-Name = "David"
        Calling-Station-Id = "192.168.0.94"
        Acct-Status-Type = Start
        Acct-Authentic = RADIUS
        Service-Type = NAS-Prompt-User
        Acct-Session-Id = "00000026"
        Acct-Delay-Time = 0
        Client-IP-Address = 192.168.0.1
        Acct-Unique-Session-Id = "913029a52dacb116"
        Timestamp = 1109936412
Fri Mar  4 19:51:17 2005
        NAS-IP-Address = 192.168.0.1
        NAS-Port = 1
        NAS-Port-Type = Virtual
        User-Name = "David"
        Calling-Station-Id = "192.168.0.94"
        Acct-Status-Type = Stop
        Acct-Authentic = RADIUS
        Service-Type = NAS-Prompt-User
        Acct-Session-Id = "00000026"
        Acct-Terminate-Cause = Idle-Timeout
        Acct-Session-Time = 665
        Acct-Delay-Time = 0
        Client-IP-Address = 192.168.0.1
        Acct-Unique-Session-Id = "913029a52dacb116"
        Timestamp = 1109937077

結束語

通過遵循本文中列出的簡單步驟,您可以建立一個 Remote Authentication Dial-In User Service 伺服器,該伺服器使用一個外部的 LDAP 伺服器來處理為網路安全問題而進行的驗證、授權和記帳。本文提供了以下內容來幫助您完成此任務:

  • 對 RADIUS 和 LDAP 伺服器以及 AAA 概念的介紹。
  • 一個融入了安裝和配置任務的場景。
  • 關於安裝和配置 RADIUS 伺服器的說明。
  • 關於配置網路訪問伺服器的細節。
  • RADIUS 將提供和管理的詳細資訊的一個示例。

這些指示可以快速確保受保護的資料只能由 Linux 系統上已授權的實體訪問。