FreeRADIUS 測試環境搭建

Freeradius測試環境搭建
AAA服務器和RADIUS協議
AAA(Authentication,Authorization,Accounting)驗證,受權,記帳。AAA服務器主要功能是:哪些用戶具備訪問權限,具備訪問權限的用戶 又能夠訪問哪些服務,對用戶正在使用的網絡資源進行計帳。
RADIUS(Remote Authentication Dial In User Service)協議是惟一的AAA標準。RADIUS協議是基於UDP的一種客戶機/服務器協議。RADIUS客戶機是網絡訪問服務器,它一般是一個路由器,交換機或者無線訪問點。RADIUS服務器一般是運行在linux或Windows服務器上的一個監護程序。 RADIUS協議的認證端口是1812,記帳端口是1813。
RADIUS協議的特色:
1. Client/Server模式
RADIUS協議是C/S結構協議,客戶端是把用戶信息傳遞給RADIUS服務器,並負責執行返回的響應。 RADIUS服務器負責接受用戶的請求,對用戶身份進行認證,併爲客戶端返回全部爲用戶提供服務所必須的配置信息。RADIUS服務器能夠爲其餘的RADIUS Server擔當代理。
2. 網絡安全
客戶端和RADIUS服務器之間的交互通過共享密鑰認證,另外避免有人在網絡上監聽獲取用戶密碼,客戶端和服務器以前的任何的通訊都是通過加密後傳輸的。
3. 認證機制
RADIUS服務器能夠採用多種認證方式鑑別用戶的合法性,當用戶提供了用戶名密碼後,RADIUS服務器能夠支持點對點的PAP認證(PPP PAP),點對點的CHAP認證(PPP CHAP),UNIX的登錄操做(UNIX Login)和其餘認證機制。
RADIUS的工做過程:
1. 用戶輸入用戶名密碼等信息到客戶端
2. 客戶端產生一個接入請求報文到RADIUS服務器,其中包含了用戶名,密碼,客戶端ID和用戶訪問端口的ID,密碼都是通過MD5加密的。
3. RADIUS服務器對用戶進行認證
4. 若是認證成功,RADIUS服務器想客戶端發送容許接入包,不然就發送拒絕接入包。
5. 若客戶端接受到容許接入包,則爲用戶創建鏈接,對用戶進行受權和提供服務;若接受到拒絕接入包,則拒絕用戶接入請求。
6. 客戶端發送計費請求給RADIUS服務器
7. RADIUS服務器接受到計費請求包後開始計費,並向客戶端回送開始計費的響應包。
8. 用戶斷開鏈接,客戶端發送中止計費包給RADIUS服務器
9. RADIUS服務器接收到中止計費包後中止計費,並向客戶端發送中止計費響應包,完成該用戶的一次計費,記錄計費信息。
Freeradius的安裝配置
Freeradius是開源免費並徹底兼容RADIUS協議的RADIUS服務器和客戶端軟件,能夠用它對用戶的接入和訪問特定的網絡進行有效的控制,受權,計費等等,它支持多種驗證,包括文件,LDAP,數據庫等等。
測試環境:
192.168.2.97 freeradius server
192.168.2.226 test.com(域服務器)
192.168.2.110 測試client
配置hosts文件,freeradius測試時須要解析主機名
192.168.2.226 test.com
192.168.2.97 freeradius.test.com
修改freeradius的主機名
[root@lamp ~]# vim /etc/sysconfig/network
HOSTNAME=freeradius.test.com
Freeradius與AD結合須要用的組件有freeradius,samba,krb5-server,直接yum安裝以上組件便可,安裝samba krb5-server freeradius2 freeradius2-util
  1. [root@lamp ~] # yum install samba krb5-server freeradius2 freeradius2-utils
設置samba做爲AD溝通的橋樑


 
  
  1. [root@lamp ~]# vim /etc/samba/smb.conf
  2. [global]
  3. workgroup = test #指定AD域的netbios名稱,即test.COM的前面部分
  4. realm = test.com #指定AD域名
  5. netbios name = freeradius #freeradius服務器的主機名
  6. security = ads #指定samba的工做模式爲ads
  7. password server = testtest.test.com #指定擔當身份驗證的服務器
  8. winbind separator = + # 指定一個字符做爲分隔符,winbind將使用該分隔符來用戶或組名。使用該配置將使得域用戶表示爲"MYDOMAIN+username",域組被表示爲"MYDOMAIN+Domain Users"
  9. idmap uid = 10000-20000#寫入域帳戶的uid、gid的範圍,該範圍是將linux用戶,組的ID映射到Windows用戶的SID,因此須要確保該段的沒有被使用,當winbind啓動後也不能在該段創建用戶
  10. idmap gid = 10000-20000
  11. winbind enum users = yes #指定winbind服務是否能在系統上建立Windows域用戶。通常狀況下都要設置爲yes,除非你處於某種緣由但願關閉該功能
  12. winbind enum groups = yes
  13. nt acl support = yes #nt acl 支持
  14. winbind cache time = 0
  15. template shell = /bin/bash
  16. template homedir = /home/%D/%U # 用來指定爲域用戶產生主目錄。使用變量替換可以使winbind服務把用戶主目錄設置爲/homes/MYDOMAIN/username
  17. winbind use default domain =yes
  18. [homes]
  19. comment = Home Directories
  20. path = /home/%D/%U
  21. browseable = no
  22. writable = yes
 
  
  1. valid users = %U
修改系統賬號驗證

 
  
  1. [root@freeradius ~]# vim /etc/nsswitch.conf
  2. passwd: files winbind
  3. shadow: files winbind
 
  
  1. group: files winbind

設置kerberos認證機制

 
  
  1. [root@lamp ~]# vim /etc/krb5.conf
  2. [libdefaults]
  3. default_realm = test.COM #指定默認域名
  4. dns_lookup_realm = false #無需dns解析域請求包
  5. dns_lookup_kdc = false #是否解析kdc請求報
  6. ticket_lifetime = 24h#指定kerberos票據有效日期
  7. forwardable = yes #容許轉發解析請求
  8. [realms]
  9. test.COM = {
  10. kdc = testtest.test.com:88#指定KDC服務器和KDC服務器的端口
  11. admin_server = testtest.test.com:749#指定域控制器和管理端口
  12. default_domain = test.com #指定默認域
  13. }
  14. [domain_realm]
  15. .example.com = EXAMPLE.COM
 
  
  1. example.com = test.COM #設置域的搜索範圍,使得域大小寫無關

設置kdc配置

 
  
  1. [root@lamp ~]# vim /var/kerberos/krb5kdc/kdc.conf
  2. [realms]
  3. test.COM = {
  4. #master_key_type = des3-hmac-sha1
  5. acl_file = /var/kerberos/krb5kdc/kadm5.acl
  6. dict_file = /usr/share/dict/words
  7. admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  8. supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hm
  9. ac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc
  10. -crc:afs3
 
  
  1. }

測試samba與kdc是否能夠正常通訊

 
  
  1. [root@lamp ~]# kinit administrator@test.COM
 
  
  1. Password for administrator@test.COM:
 
  
若是沒有什麼報錯就說明通訊正常。
將freeradius server加入到域中

 
  
  1. [root@freeradius ~]# /etc/init.d/smb start
  2. Starting SMB services: [ OK ]
  3. Starting NMB services: [ OK ]
  4. [root@freeradius ~]# chkconfig smb on
  5. [root@freeradius ~]# chkconfig winbind on
 
  
  1. [root@freeradius ~]# service winbind restart

加入域

 
  
  1. [root@freeradius ~]# net rpc join -U administrator
  2. Password:
 
  
  1. Joined domain test.

測試是否同步域賬號

檢查rpc連接是否成功

 
  
  1. [root@freeradius ~]# wbinfo -t
 
  
  1. checking the trust secret via RPC calls succeeded
獲取用戶信息

 
  
  1. [root@freeradius ~]# wbinfo -u
  2. administrator
  3. guest
  4. krbtgt
  5. ddclic
  6. test01
 
  
  1. test02

獲取組信息

 
  
  1. [root@freeradius ~]# wbinfo -g
  2. BUILTIN+administrators
  3. BUILTIN+users
  4. domain computers
  5. domain controllers
  6. schema admins
 
  
  1. enterprise admins
查看密碼是否獲取成功

 
  
  1. [root@freeradius ~]# getent passwd
  2. test1:*:10033:10008:test1:/home/test/test1:/bin/bash
  3. test2:*:10034:10008:test2:/home/test/test2:/bin/bash
  4. test3:*:10035:10008:test3:/home/test/test3:/bin/bash
  5. test4:*:10036:10008:test4:/home/test/test4:/bin/bash
 
  
  1. test5:*:10037:10008:test5:/home/test/test5:/bin/bash
 
  

ntlm_auth測試驗證是否成功

 
  
 
  
  1. [root@freeradius ~]# ntlm_auth --request-nt-key --domain=test.com --username=test --password='123456'
 
  

安裝配置freeradius

加入ntlm_auth驗證到freeradius

 
  
  1. [root@freeradius ~]# vim /etc/raddb/modules/ntlm_auth
  2. exec ntlm_auth {
  3. wait = yes
  4. program = "/usr/bin/ntlm_auth --request-nt-key --domain=test.COM --username=%{mschap
  5. :User-Name} --password=%{User-Password}"
 
  
  1. } }

修改freeradius驗證機制

 
  
  1. [root@freeradius ~]# vim /etc/raddb/sites-enabled/default
  2. authenticate {
  3. ntlm_auth
  4. }
  5. [root@freeradius ~]# vim /etc/raddb/sites-enabled/inner-tunnel
  6. authenticate {
  7. ntlm_auth
 
  
  1. }

修改users

 
  
  1. [root@freeradius ~]# vim /etc/raddb/users
 
  
  1. DEFAULT Auth-Type = ntlm_auth

修改策略

 
  
  1. [root@freeradius ~]# vim /etc/raddb/policy.conf
  2. policy {
  3. # Give the ntlm_auth exec module an "authorize" method that sets Auth-Type to itself
  4. # but only if it's a valid PAP request, and Auth-Type is not already set to something
  5. ntlm_auth.authorize {
  6. if (!control:Auth-Type && User-Password) {
  7. update control {
  8. Auth-Type := ntlm_auth
  9. }
  10. }
  11. }
 
  
  1. }

測試freeradius賬號驗證機制

 
  
  1. [root@freeradius ~]# radiusd –X
  2. [root@freeradius ~]# radtest test '123456' localhost 0 testing123
  3. Sending Access-Request of id 48 to 127.0.0.1 port 1812
  4. User-Name = "test"
  5. User-Password = "123456"
  6. NAS-IP-Address = 192.168.2.97
  7. NAS-Port = 0
  8. Message-Authenticator = 0x00000000000000000000000000000000
 
  
  1. rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=48, length=20
 
  

配置使用ntlm_auth作MS_CHAP認證

刪除users中的test進入點

 
  
  1. [root@freeradius ~]# vim /etc/raddb/users
 
  
  1. #DEFAULT Auth-Type = ntlm_auth
 
  

編輯mschap模塊

 
  
  1. [root@freeradius ~]# vim /etc/raddb/modules/mschap
  2. ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{mschap:User-Name:-None} --domain=%{%{mschap:NT-Domain}:-test.COM} --challenge=%{%{mschap:Challenge}:-00} --n
 
  
  1. t-response=%{%{mschap:NT-Response}:-00}"
 
  

測試

 
  
  1. [root@freeradius ~]# radtest -t mschap test '123456' localhost 0 testing123
  2. Sending Access-Request of id 127 to 127.0.0.1 port 1812
  3. User-Name = "test"
  4. NAS-IP-Address = 192.168.2.97
  5. NAS-Port = 0
  6. Message-Authenticator = 0x00000000000000000000000000000000
  7. MS-CHAP-Challenge = 0x0f1ec04f5f7f3ec2
  8. MS-CHAP-Response = 0x000100000000000000000000000000000000000000000000000085c8068f30dcb423d1e6f7ed5db18b53a1d321ceb8f2266c
  9. rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=127, length=38
 
  
  1. MS-CHAP-Error = "\000E=691 R=1"
 
  

報錯:

 
  
  1. Exec-Program output: winbind client not authorized to use winbindd_pam_auth_crap. Ensure permissions on /var/cache/samba/winbindd_privileged are set correctly. (0xc0000022)
 
  
  1. Exec-Program-Wait: plaintext: winbind client not authorized to use winbindd_pam_auth_crap. Ensure permissions on /var/cache/samba/winbindd_privileged are set correctly. (0xc0000022)
 
  
解決辦法:

 
  
  1. [root@freeradius ~]# cd /var/cache/samba/
  2. [root@freeradius samba]# chown -R root.radiusd winbindd_privileged/
  3. [root@freeradius samba]# service winbind restart
  4. Shutting down Winbind services: [ OK ]
  5. Starting Winbind services: [ OK ]
 
  
  1. [root@freeradius ~]# radiusd –X
 
  

再次測試

 
  
  1. [root@freeradius samba]# radtest -t mschap test '123456' localhost 0 testing123
  2. Sending Access-Request of id 231 to 127.0.0.1 port 1812
  3. User-Name = "test"
  4. NAS-IP-Address = 192.168.2.97
  5. NAS-Port = 0
  6. Message-Authenticator = 0x00000000000000000000000000000000
  7. MS-CHAP-Challenge = 0x58a8d7e945e9ed8f
  8. MS-CHAP-Response = 0x00010000000000000000000000000000000000000000000000000fcd072553b1813344cbe6d3fc3fe5e1ecbf853eaf5a4a03
  9. rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=231, length=84
  10. MS-CHAP-MPPE-Keys = 0x0000000000000000c2bea7b13efd39e82dcd04478fb185370000000000000000
  11. MS-MPPE-Encryption-Policy = 0x00000001
 
  
  1. MS-MPPE-Encryption-Types = 0x00000006
相關文章
相關標籤/搜索