Freeradius 整合 Active Directory 認證(Multiple Domains模式)
近來協助處理某大型企業要將Aruba認證導向AD,認證的部份要用到802.1X
跟PEAP / MS-CHAP-V2
過程之中遇到了許許多多的問題,還好大致上都解決了,趁著還有記憶的時候趕緊記錄下來,東西很多,請耐心觀看。
由於環境內需要join AD才可以查詢,所以就必須使用Samba來join AD
Change Log
- 20210723 增加winbind
NT_STATUS_ACCESS_DENIED
錯誤訊息的說明與處理,以及EAP的觀念說明。
基本環境
- CentOS 6.x
- Freeradius 2.1.12
- Samba 3.5.10
- krb5-server 1.9
- Domain name : adtest.com
- AD server (2008 R2): dc.adtest.com
設定Linux環境
- 關閉 selinux與iptables(以防一些意外發生, 完成後再調整)
- AD的ip跟domain設定在/etc/hosts裡
- dns server設定為AD的ip
- 關閉ipv6(避免samba log出現smbd_open_once_socket: open_socket_in: Address already in use)
Packages Install
1 | [root@radius ~]# yum install freeradius freeradius-utils samba samba-winbind krb5-server krb5-workstation |
Samba設定
由於我們只是要藉由samba來查詢AD的資料,不需提供AD的user來登入freeradius,所以在smb.conf的global部份只需設定以下的內容即可。
另外在這裡我們是用ADS(Domain membership)
的方式來與AD做溝通,他會把Linux模擬成windows 2000
來與AD做join,在這個模式中會使用kerberos
的方式來做驗證
1 | [root@radius ~]# cd /etc/samba/ |
1 | [global] |
krb5設定
1 | [root@radius ~]# vim /etc/krb5.conf |
1 | [logging] |
kdc設定
1 | [root@radius ~]# vim /var/kerberos/krb5kdc/kdc.conf |
1 | [kdcdefaults] |
網域信任
如何做網域信任,這裡就不贅述了,請參考google大神的說明…
取得驗證ticket
1 | [root@radius ~]# kinit administrator@ADTEST.COM |
輸入完上述的指令後會要求輸入密碼,這裡需要用到網域信任的帳號密碼。
若輸入完後無出現任何訊息,就表示已完成取得ticket。
可以使用klist確認ticket狀況
1 | [root@radius ~]# klist |
加入AD Domain
當Samba與kerberos都設定好後,需要啟動一下Samba與Winbind。
1 | [root@radius ~]# service smb start |
再來將Linux加入Domain
1 | [root@radius ~]# net ads join -U administrator |
輸入完密碼之後,正確的話會沒有任何輸出資訊。
這時就可以在AD上面看到Linux加入網域囉。
測試驗證
Domain加入成功後,就可以使用下述的指令來測試是否可以驗證
1 | [root@radius ~]# ntlm_auth --request-nt-key --domain=ADTEST.COM --username=<一般使用者> --password=<使用者的密碼> |
驗證成功會出現以下資訊
1 | NT_STATUS_OK: Success (0x0) |
如果已經確認domain及帳號密碼都是正確的,但驗證卻出現以下資訊
1 | NT_STATUS_ACCESS_DENIED: {Access Denied} A process has requested access to an object but has not been granted those access rights. (0xc0000022) |
請在smb.conf裡多加一個參數
1 | [global] |
原因在於winbind預設是使用LDAP協定與Active Directory獲取身份資訊,若你的Active Directory沒有啟動這個功能,就要強制轉為RPC協定。
更改/var/lib/samba/winbindd_privileged目錄權限
這裡需要把radiusd這個使用者加入wbpriv群組裡,不然Freeradius是無法透過ntlm_auth來與AD驗證(需透過winbind)
1 | [root@radius ~]# usermod -G wbpriv radiusd |
Freeradius設定
上面這個部份屬於Freeradius要與AD溝通的重要基礎,接下來就要針對Freeradius來做相關的設定
這裡只將會用到的參數列出
module/mschap設定
1 | mschap { |
proxy.conf設定
預設NULL與DEFAULT是註解的狀態,把#去掉,並把下述參數加入
1 | realm NULL { |
在EAP驗證的環節裡面,必須要完整傳輸使用者輸入的User-Name,所以realm裡面不能加入strip,否則EAP的驗證會因為User-Name miss match而失敗。
client.conf設定
把Aruba Controller的ip加入
1 | client 192.168.1.100 { |
sites-available/default設定
確認這兩個section裡的參數
1 | authorize { |
EAP 設定
Freeradius預設已經設定好EAP驗證所需支援的多種methods,包含MD5、TLS、TTLS、PEAP-MSCHAPv2、PEAP-GTC…等,這些method的選擇取決於使用者端的設定,所以不需要特別調整。
結論
以上就是Freeradius的設定,基本上在Aruba Controller上的AAA Test就可以測試mschapv2是否會成功。
所以給大家做參考囉。
P.S Aruba Controller的AAA Test是不會發送EAP-Message
給Freeradius,要記得用其他工具來測試EAP的驗證。