這陣子校園的無線網路漫遊出了一些問題,他校來咱們學校使用無線網路都無法認證通過 ~


出錯的環節應該是在 Roaming Server 上,此外咱們學校也沒有一台「正式」的 Radius Server


因此這幾天花了一點時間研究跨校漫遊的架構,也決定在 FreeBSD 上重弄一台 FreeRadius 並且整合 OpenLDAP 的帳號,以達單一帳號之整合


下方是簡略的系統架構圖,目前我們學校是用 Aruba 的產品,AP 是 AP-61,Controller 則是用 6000



以上圖為例,當使用者連上 AP 後則會自動導向 AP Controller 並找 Radius Server 做驗證,若是本校學生則向 LDAP 做帳號密碼驗證,若是他校人員則會再透過 VPN Roaming 回該校做帳號密碼之驗證。



接下來說明實作的部份,此篇文章僅說明如何將 FreeRadius 整合 OpenLDAP,前提是在這之前假設已經有一台 LDAP Server 了,LDAP 的 Schema 可以參考這篇酷學園 -  [筆記]FreeRadius with LDAP ! 的文章。另外我的機器是將 FreeRadiusOpenLDAP Server 裝在一起,所以沒另外去設定 OpenLDAP Client 的東西,若您的機器是分開安裝,請記得設定 OpenLDAP Client 端的部份,確保連線正常!


1.首先安裝 FreeRadius


# cd /usr/ports/net/freeradius


# make config ( 請勾選 LDAP 的部份 )


# make install clean


2.設定 FreeRadius 與 LDAP Server


# cd /usr/local/etc/raddb


# cp /usr/local/share/examples/freeradius/raddb/ldap.attrmap .


3.設定 user 這檔案


# vi user


找到下面這段文字後,新增 LDAP 認證的設定


#
# First setup all accounts to be checked against the UNIX /etc/passwd.
# (Unless a password was already given earlier in this file).
#
DEFAULT Auth-Type = System
        Fall-Through = 1

DEFAULT Auth-Type := LDAP
        Fall-Through = 1


4.設定 radius.conf


先找到 ldap { 這一行,再開始設定參數,下面是我的例子


server = "127.0.0.1"
identity = "cn=root,dc=xxx,dc=xxx,dc=xxx,dc=xxx"
password = xxxxxxx
basedn = "dc=xxx,dc=xxx,dc=xxx,dc=xxx"
filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
access_attr = "uid"
dictionary_mapping = ${raddbdir}/ldap.attrmap
ldap_connections_number = 5
password_attribute = userPassword
password_header = "{crypt}"
edir_account_policy_check=no
timeout = 4
timelimit = 3
net_timeout = 1


再找到 下面的字串把 ldap 前的的 # 拿掉


#
#  The ldap module will set Auth-Type to LDAP if it has not
#  already been set

ldap


最後再找到下面這字串把 Auth-Type LDAP { 前面幾行的 # 都拿掉


 # Uncomment it if you want to use ldap for authentication
#
# Note that this means "check plain-text password against
# the ldap database", which means that EAP won't work,
# as it does not supply a plain-text password.

Auth-Type LDAP {
        ldap
}


5.設定 client.conf


首先先把下面區塊裡的密碼更改一下


client 127.0.0.1 {


secret = 校園內部密碼


}


再新增其它 Client 端的設定


# Roaming Center <- 跨校漫游用
client 172.16.16.0/24 {
       secret = 跨校漫遊密碼
       shortname = RoamingCenter
}

# 本校的 radius Server
client 192.168.1.0/24 {
       secret = 校園內部密碼
       shortname = school
}


6.修改 proxy.conf


新增


#現有的職員和學生
realm xxx.edu.tw {
        type = radius
        authhost = LOCAL
        accthost = LOCAL
        secret = 校園內部密碼
}


#其它學校跨校漫遊使用
realm DEFAULT {
      type = radius
      authhost = 跨校漫遊驗證主機:1812
      accthost = 跨校漫遊驗證主機:1813
      secret = 跨校漫遊密碼
      nostrip
}


#一般若沒有跨校漫遊的話,可用下面的來替代 DEFAULT
#realm DEFAULT {
#       type = radius
#       authhost = LOCAL
#       accthost = LOCAL
#       secret = 校園內部密碼
#}


7.啟動 FreeRadius


# /usr/local/etc/rc.d/radiusd start


看一下 Port 1812、1813 是否有開始 listen 了,有的話就表示 OK 了


若起不來可以參考 /var/log/radius.log 的錯誤訊息


另外在 /etc/rc.conf 加入一行設定讓它開機時自己啟動


radiusd_enable="YES"


8.測試 Radius 是否有去找 LDAP 驗證


# radtest 帳號 密碼 localhost 0 校園內部密碼


這是成功的範例


# radtest bojack xxxxxx localhost 0 校園內部密碼
Sending Access-Request of id 252 to 127.0.0.1 port 1812
        User-Name = "bojack"
        User-Password = "xxxxxx"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=252, length=20


這是失敗的範例,通常都是後面的密碼打錯了


# radtest bojack xxxxxx localhost 0 錯的密碼
Sending Access-Request of id 1 to 127.0.0.1 port 1812
        User-Name = "bojack"
        User-Password = "xxxxxx"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
Re-sending Access-Request of id 1 to 127.0.0.1 port 1812
        User-Name = "bojack"
        User-Password = "xxxxxx"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
rad_recv: Access-Reject packet from host 127.0.0.1:1812, id=1, length=20
rad_verify: Received Access-Reject packet from client 127.0.0.1 port 1812 with invalid signature (err=2)!  (Shared secret is incorrect.)


ps. 另外提到的 VPN 連線部份,我是用 /usr/ports/security/vpnd 來做連線,使用的方式可以參考[ 安裝心得 ] 如何設定 VPN ﹖


安裝方式一樣進 ports 安裝即可


設定檔在 /usr/local/etc 下


# cd /usr/local/etc


# cp vpnd.conf.sample vpnd.conf


# cp vpnd.chat.sample chat.conf


接下來產生一個 KEY,我名命為 1234.key


# vpnd -m 1234.key


把這個 KEY 留著,分別給 VPN Server & Client 端待會兒建立連線用


附上我的 client 設定


mode client
server VPN_Server_IP VPN_Port
client VPN_Client_IP VPN_Port
local 172.16.1.2
remote 172.16.1.1
keyfile /usr/local/etc/1234.key
route1 172.16.0.0 255.255.0.0 172.16.1.1
keepalive 60
noanswer 3
autoroute


此篇教學花費了我4天的時間才搞定,說實在的一開始連 Radius 到底是什麼都搞不清楚,現在架好了也只是略懂設定而已,功能應該更強大才是。


[1] [筆記]FreeRadius with LDAP !


[2] FreeRADIUS on FreeBSD and OpenLDAP


[3] Ch31 : Centralized Logins Using LDAP and RADIUS


[4] [ 安裝心得 ] 如何設定 VPN

創作者介紹

有為青年生活札記

bojack 發表在 痞客邦 PIXNET 留言(5) 人氣()


留言列表 (5)

發表留言
  • ask
  • 請問 identity 要怎麼填??

    請問一下 identity = "cn=root,dc=xxx,dc=xxx,dc=xxx,dc=xxx"
    這一行要怎麼填寫??謝謝!!
    我的 ldif 大概是這樣
    =======================================

    dn: uid=radius, ou=People,dc=XXX,dc=XXX,dc=XX
    uid: radius
  • 答案就是上述的範例囉,看你的 DC 是啥就填什麼

    可以參考一下這篇文章來建立你的 LDIF
    http://www.weithenn.idv.tw/cgi-bin/wiki.pl/OpenLDAP-LDAP_Server_%e5%9f%ba%e7%a4%8e%e8%a8%ad%e5%ae%9a

    bojack 於 2009/01/12 15:33 回覆

  • 訪客
  • 想請教一下,如果RADIUS SERVER 要用POP3來認證,...
    不知是否有何方式可達成?...
    另外一問是,不知站主是否有架Roaming server 將不是本校的帳密轉送到ROAMING CENTER
    再轉送到它校做認證..
    目前是不知要如何在LINUX 上設定ROAMING DERVER 轉送到 ROAMING CENTER
  • 水手
  • 回答2樓的問題

    第一個
    可以用pam的方式去做認證, 或者是寫一隻pop3的認證程式也可以達成

    第二個
    在proxy.conf去做realm
    將不是本校的domain切開..
    丟到roaming server...
    一般若是要建立跨校漫遊...
    可以像資策會那邊求助...
    他們會幫您建置roaming server...
    因為...他們也要在roaming center建立vpn讓你的roaming server可以連線
  • 感謝水手兄的回覆 ^^

    bojack 於 2010/03/15 11:12 回覆

  • 衣山七九
  • hi 版主
    本校的Freeradius伺服器PING的到對方的VPN IP,不過區網中心PING不到本校的VPN IP,導致
    區網中心的帳號在校能無線漫遊,但是本校的帳號無法再區網中心漫遊,固想請教版主貴校架設Freeradius伺服器需要開啟那些PORT讓區網中心的能PING的回來跟驗證本校的帳號。
  • 我看我這邊的是 28046 Port 吶 !

    bojack 於 2010/09/17 14:05 回覆

  • 悄悄話
找更多相關文章與討論