Freeradius

freeradius
(http://www.freeradius.org)安裝部份 

1
安裝 FreeRadius

到freeradius目錄下執行
# configure –prefix=/usr/local/freeradius
# make
# make install

2
編輯組態

在raddb/users檔中設定設定以下,使用本機帳密做認證
DEFAULT Auth-Type = System

3
第一次啟動 FreeRadius

/usr/local/freeradius/sbin/radiusd -d /usr/local/freeradius/etc/raddb/
若Port 1812、1813 開始listen表示OK
ps:
參數-X 可顯示完整運作訊息,用來debug
ps:
若無法啟動可參考/var/log/radius.log
ps:
設定開機時自己啟動
在/etc/rc.conf 加入radiusd_enable=”YES”

4
測試Radius

#radtest < 帳號 > < 密碼 > < 認證位址[:認證埠] > < nas-port-number > < secret>
< secret> 指的是在clients.conf內設定之允許來源 
ps:nas-port-number通常是0
ex:radtest raymond key 127.0.0.1 0 test
若成功會出現rad_recv: Access-Accept …等訊息
若失敗會出現rad_recv: Access-Reject …等訊息
若radius密碼錯誤會顯示Shared secret is incorrect

…………………………………………………………………………………………..

基礎概念 

運作流程
1
系統啟動,讀取radiusd.conf,並運作於UDP port 1812/1813
2
若收到Access-Request(認證請求)封包,比對clients.conf的認證,合法client執行第3步,非法client則deny
3
讀取proxy.conf比對領域名稱Realm
若有合法的realm設定,採用proxy.conf中所設定處理方式
若無合法的realm設定,採用users中所設定的預設認證方式,比對users中的帳號,執行第4步
4
根據檔案users驗證,若成功則送出access-accept,若失敗則送出access-reject

相關目錄
/usr/local/bin 測試程式
radtest/usr/local/sbin 主程式
radiusd/usr/local/etc/raddb 設定檔目錄
/usr/local/lib 模組檔
/usr/local/share/freeradius 字典檔
/usr/local/var/log/radius 記錄檔
/usr/local/share/doc/freeradius-1.0.5 説明文件

相關組態檔
radiusd.conf 主設定檔
clients.conf 允許連線的client設定檔
users 本地使用者帳號,auth-type等處理方式設定檔
eap.conf eap設定檔
attr 設定attribute filter
proxy.conf 認證轉送設定檔,在多部radius運作時需設定
xxxsql.conf 資料庫存取設定檔

……………………………………………………………………………………………………………..
……………………………………………………………………………………………………………..

radiusd.conf
主要設定檔
內容架構(可以include其他檔案的設定)

全域參數,目錄,日誌檔位置,…等

#設定伺服器運作的ip,*表示所有的網路介面
bind_address = *
#設定伺服器運作的port,0表示預設1812,1813
port = 0
#身份認證成功與否之記錄
log_auth = no
#開啟proxy功能
proxy_requests = yes

模組設定(radius2中將設定檔放在module目錄內)

modules {
模組1 { … }
模組2 { … }
… }

常見模組
unix #設定使用系統密碼檔
realm #proxy判斷,規則在proxy.conf
files #以文字檔管理帳號、授權
detail #以文字檔記錄log
ldap #ldap模組

行程處理流程
常用的有以下
authorize { #授權,取得使用者資訊
}
authenticate { #認證,驗證使用者請求
}
post-auth { #認證完成後處理
}
preacct { #前置處理Accounting封包
}
accounting { #處理Accounting封包
radutmp #記錄線上使用者
}
ps:
在radius2中,authorize,authenticate,preacct,accounting,post-auth,…等
被放在${confdir}/sites-available/default

…………………………………………………………………………………………………

clients.conf
設定允許連線的RADIUS Clients及其對應的serect
client為使用radius協定的client,包括對radius server發出要求的客戶端或是支援radius的ap

格式為
client < client ip/mask >{
secret=client使用的radius key
shortname=client的別名
nastype=client的nastype
}
ex:
#允許當地主機的連線請求
client 127.0.0.1 {
secret = test
shortname = localhost
}
#允許192.168.1.1連線請求
client 192.168.1.1 {
secret = test
shortname = ap01
}
#允許192.168.100.0/24連線請求
client 192.168.100.0/24 {
secret = test
shortname = switch
}


…………………………………………………………………………………………………

users
用途:授權屬性設定、帳號認證、屬性調整

設定帳號認證方式的格式
[DEFAULT | account] Auth-Type = < system|local|ldap>
可指定以下2種
 單一user帳號
 DEFAULT:表示所有user,當所有條件都不符合時才使用,通常與Fall-Trough=1併用,設定基本屬性
Auth-Type
指定的認證方式有以下三種
 system 使用系統帳號
 local 使用user檔案中所設定的帳號
 ldap 使用ldap所設定的帳號

限制連線ip
Client-IP-Address == “ip”

設定密碼
User-Password == “password”

設定比對符合後,仍繼續往下比對
Fall-Trough = 1


常用運算子
屬性 = 資料 在該屬性沒有被設置的前提下新增該屬性資料
屬性 := 資料 直接設定該屬性資料
屬性 == 資料 判斷該屬性的內容是否與資料內容相符
屬性 != 資料 判斷該屬性的內容是否與資料內容不相符
屬性 =~ 正規表示式 判斷屬性的內容是否符合正規表示式的規則
屬性 !~ 正規表示式 判斷屬性的內容是否不符合正規表示式的規則

處理規則
1由上而下比對至第一組完全符合者,即告完成。
2各組間以空白行間隔。
3以屬性 user-name 為第一個比對項(不分大小寫)。
ex:
DEFAULT Auth-Type = System
Fall-Through = 1
user01 User-Password == “123456”
ex:
使用auth-type為local的方式,設定使用者帳號raymond,連線來源限制為127.0.0.1,並設密碼為12345
raymond Auth-Type := Local, Client-IP-Address == “127.0.0.1”, User-Password == “12345”


………………………………………………………………………………………………………

proxy.conf
主要以realm來決定是否進行proxy

格式為
realm {
type = radius
authhost= <認證伺服器 IP>:
accthost = <計費伺服器 IP>:
secret = #若host都設為LOCAL時,secret因用不到可省略
ldflag =
nostrip #收到帳號時不要把realm名稱清除,預設為strip,也就是會清除realm
fail_over #設定自動備援,預設為fail_over
round_robin #設定負載平衡
}
ps:若使用者帳號為raymond@study.net,則realm為study.net
ps:若使用者帳號只有raymond,則此帳號沒使用realm
ps:realm名稱無大小寫分別,由管理者指定即可,與domain name無直接關係
ex:
將沒有realm的帳號以預設的認證方式驗證
realm NULL {
 type = radius
 authhost = LOCAL
 accthost = LOCAL
}
ex:
將沒有realm的帳號轉送到192.168.0.10:1645去驗證
realm NULL {
type = radius
authhost = 192.168.0.10:1645
accthost = 192.168.0.10:1646
secret = dontshowit
}
ex:
將realm為wifi.nchc.org.tw的帳號以預設的帳號處理
方式處理
realm wifi.nchc.org.tw {
type = radius
authhost = LOCAL
accthost = LOCAL
}
ex:
將realm為wifi.nchc.org.tw 的帳號轉送到192.168.0.7:1812去處理
realm wifi.nchc.org.tw {
type = radius
authhost = 192.168.0.7:1812
accthost = 192.168.0.7:1813
secret = donttellanyone
}
ex:
所有不符合其他realm設定的帳號,轉送到192.168.0.99:1812 去處理,且不濾除realm名稱
realm DEFAULT {
type = radius
authhost = 192.168.0.99:1812
accthost = 192.168.0.99:1813
secret = aloha3
nostrip
}

設定自動備援
ex:
若isp1.com判定無回應,則改由isp2.com處理
realm wifi.home {
 type = radius
 authhost = isp1.com:1812
 accthost = isp1.com:1813
 secret = sweetheart
}
realm wifi.home {
 type = radius
 authhost = isp2.com:1812
 accthost = isp2.com:1813
 secret = heartsweet
 fail_over
}

設定負載平衡
ex:
若isp1.com和isp2.com做負載平衡
realm wifi.home {
 type = radius
 authhost = isp1.com:1812
 accthost = isp1.com:1813
 secret = sweetheart
round_robin
}
realm wifi.home {
 type = radius
 authhost = isp2.com:1812
 accthost = isp2.com:1813
 secret = heartsweet
 round_robin
}