posts - 63, comments - 37, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 ::  :: 管理
9. FreeRADIUS伺服器安裝

FreeRADIUS伺服器經過兩天的嘗試與摸索終於可以達成利用file與mysql做認證了,我主要是參考以下資料來建置完成FreeRADIUS伺服器:

http://phorum.study-area.org//viewtopic.php?t=33002&sid=405835706ac1b7ae0012e49490ed8a51

除了一些小地方需要修改之外,這篇文章的可靠度相當的高。

為了預防文章以後淹沒在茫茫網海之中,我就將他轉錄到以下吧,順便將我所實驗的心得一併加入。
------------------------------------------------------------------------

我是參考下列資料

架設freeradius+mysql 的radius服務器
http://www.yesky.com/20030306/1655467.shtml

想玩無線網路認證值得先看的文件

http://phorum.study-area.org/viewtopic.php?t=31918&highlight=radius

及其他網路上利用 google 查到的資料作的說明

安裝 FreeRADIUS + Files + MySQL 認證

1. 下載 FreeRADIUS
wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.4.tar.gz

2. 解壓縮
tar zxvf freeradius-1.0.4.tar.gz

3. 安裝 FreeRADIUS
cd freeradius-1.0.4
./configure --localstatedir=/var --sysconfdir=/etc
make
make install

註: 有時候會報找不到文件rlm_sql_mysql這個時候只要把庫文件加入系統搜索的目錄裡

  比如:

  cp /usr/local/lib/* /usr/lib


4. 建立mysql的數據庫raius的表
MySQL root 登入
mysql -uroot -p密碼

建立 radius 資料庫
create database radius;

建立 radius 使用者



匯入 radius 資料表
cd src/modules/rlm_sql/drivers/rlm_sql_mysql
mysql -uroot -p密碼 radius < db_mysql.sql

建立相關資料

加入群組資料

  mysql -uroot -p密碼 radius
代碼:
insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Address',':=','255.255.255.254');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');

加入測試賬號
  
代碼:
insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test');

測試賬號加入群組
  
代碼:
insert into usergroup (username,groupname) values ('test','user');

以後新增人員時只要使用下列命令
代碼:
insert into radcheck (username,attribute,op,value) values ('帳號','User-Password',':=','密碼');
insert into usergroup (username,groupname) values ('帳號','user');



4. 設定 RADIUS
更改freeradius的設置
cd /etc/raddb
備份原始設定檔
代碼:
cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf-def
cp /etc/raddb/clients.conf /etc/raddb/clients.conf-def
cp /etc/raddb/sql.conf /etc/raddb/sql.conf-def
cp /etc/raddb/eap.conf /etc/raddb/eap.conf-def
cp /etc/raddb/users /etc/raddb/users-def

更改 radiusd.conf 部份設定 如下列
代碼:
user = root
group = root
hostname_lookups = yes
allow_core_dumps = no
regular_expressions = yes
extended_expressions = yes
log_stripped_names = yes
log_auth = yes
log_auth_badpass = yes
log_auth_goodpass = yes
usercollide = no
lower_user = yes
lower_pass = no
nospace_user = no
nospace_pass = no

files {
usersfile = ${confdir}/users
acctusersfile = ${confdir}/acct_users
preproxy_usersfile = ${confdir}/preproxy_users

compat = no
}

detail {
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d

detailperm = 0600
}

detail auth_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d

detailperm = 0600
}

detail reply_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d

detailperm = 0600
}





acct_unique {
key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
}



attr_filter {
attrsfile = ${confdir}/attrs
}

authorize {
preprocess

auth_log

attr_filter

chap

mschap

suffix

eap

files

sql

}


authenticate {
Auth-Type PAP {
pap
}

Auth-Type CHAP {
chap
}

Auth-Type MS-CHAP {
mschap
}

eap
}


preacct {
preprocess

acct_unique

suffix

files
}

accounting {
detail

radutmp

sql

}


session {
radutmp

sql
}


post-auth {

reply_log

sql


}

在 clients.conf 增加下列設定
代碼:
client 192.168.1.1 {
secret = testing123
shortname = test
}

更改 sql.conf 部份設定如下列
代碼:
sql {

driver = "rlm_sql_mysql"

server = "localhost" # MySQL 主機位置
login = "radius" # MySQL 帳號
password = "radius" # MySQL 密碼

radius_db = "radius" # MySQL 資料庫名稱

acct_table1 = "radacct"
acct_table2 = "radacct"

postauth_table = "radpostauth"

authcheck_table = "radcheck"
authreply_table = "radreply"

groupcheck_table = "radgroupcheck"
groupreply_table = "radgroupreply"

usergroup_table = "usergroup"

deletestalesessions = yes

sqltrace = yes
sqltracefile = ${logdir}/sqltrace.sql

num_sql_socks = 5

connect_failure_retry_delay = 60


sql_user_name = "%{User-Name}"
更改 eap.conf 部份設定如下列
代碼:
eap {
第 22 行 原 default_eap_type = md5
改為 default_eap_type = peap

timer_expire = 60

ignore_unknown_eap_types = no

cisco_accounting_username_bug = no


md5 {
}

leap {
}

gtc {

auth_type = PAP
}

# 取消下列幾行的註解
tls {
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem

certificate_file = ${raddbdir}/certs/cert-srv.pem

CA_file = ${raddbdir}/certs/demoCA/cacert.pem

dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random

}
peap {
default_eap_type = mschapv2
}

mschapv2 {
}
}

更改 users 如下列
在第96行增加
代碼:
"testf" Auth-Type := Local, User-Password == "testf"
Reply-Message = "Hello, %u"

註解 第 154 ,155 行
#DEFAULT Auth-Type = System
# Fall-Through = 1

測試 flies 認證
radtest testf testf localhost 0 testing123

測試 MySQL 認證
radtest test test localhost 0 testing123

結果如下

[root@UI-linux raddb]# radtest testf testf localhost 0 testing123
Sending Access-Request of id 188 to 127.0.0.1:1812
User-Name = "testf"
User-Password = "testf"
NAS-IP-Address = UI-linux
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=188, length=34
Reply-Message = "Hello, testf"
[root@UI-linux raddb]# radtest test test localhost 0 testing123
Sending Access-Request of id 192 to 127.0.0.1:1812
User-Name = "test"
User-Password = "test"
NAS-IP-Address = UI-linux
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=192, length=38
Service-Type = Framed-User
Framed-IP-Address = 255.255.255.254
Framed-IP-Netmask = 255.255.255.0
[root@UI-linux raddb]#
回覆
bell
張貼於: 2005/9/21 14:56
管理員
註冊日: 2005/8/8
來自:
張貼數: 761
我的心得

首先,現在最新版的freeradius版本已經進到1.0.5了,是在2005.09.09推出的。

而我所使用的linux distro是CentOS 4.1完整安裝,裡面已經內含 freeradius 1.0.1,所以一開始的時候我是以內建的 1.0.1嘗試架設,但在以下這個步驟時卻一直出現錯誤訊息:

mysql -uroot -p密碼 radius < db_mysql.sql

無法順利匯入到radius資料庫中。反覆查找資料之後發現,問題應該出在mysql版本上,1.0.1所附的 db_mysql.sql 應該是給 mysql 3.x版用的。

在我下載了 1.0.4與 1.0.5 tar.gz版本的檔案來安裝時,這個步驟便可以順利的完成而沒有任何錯誤訊息。
回覆
bell
張貼於: 2006/3/14 11:25
管理員
註冊日: 2005/8/8
來自:
張貼數: 761
我的心得 (2006.03.29更新)
在2006.03.13時我依照此份文件於CentOS 4.2的機器上重新安裝freeradius server,發現此文章有需要修改之處,所以重新更新此文章內容。

一 前言

RADIUS是 Remote Authentication Dial-In User Service 的縮寫,可以執行對用戶的驗證、授權和記費(AAA)。

在Unix-Like的作業系統(如linux,bsd...)上最常被使用的radius伺服器軟體是freeradius,這是一套開源碼(open source code)且免費的軟體,所以本文重點就在於如何在linux上架設freeradius伺服器的過程,至於RADIUS本身的運作原理則不在本文討論範圍。

二 安裝環境

本文件依照以下環境安裝與執行並進行相關測試:

OS : CentOS 4.2 i386(RedHat RHEL 4 clone version)
website : http://www.centos.org

freeradius : freeradius-1.1.1.tar.gz
website : http://www.freeradius.org

Mysql : mysql-4.1.12-3.RHEL4.1 (2006.03.20釋出)

Compiler : GCC-3.4.4-2

三 下載與解壓縮軟體

下載freeradius軟體請至 http://www.freeradius.org/getting.html 載回最新版軟體。

下載之軟體建議放至 /usr/local/src下進行編譯,以下的文章皆以 /usr/local/src目錄為安裝目錄。

解壓縮軟體請執行

tar zxvf freeradius-1.1.1.tar.gz

解壓縮完畢之後將會產生一個freeradius-1.1.1的目錄,所有解壓縮完的檔案都會放在這個目錄下。

四 移除舊軟體

如果你的OS是完整安裝的話,那在開始進行編譯與安裝之前,必須先將OS所附的舊版freeradius移除掉再進行後續的編譯與安裝。

以root使用者權限執行以下指令:

rpm -e freeradius*

五 編譯與安裝

以root權限執行以下指令:

./configure
make
make install


沒錯,這樣就完成了整個程式的編譯與安裝,夠簡單了吧?

如果要指定安裝的目錄與設定檔的目錄的話,可以改成:

./configure --localstatedir=/var --sysconfdir=/etc
make
make install


六 設定mysql資料庫

在進行freeradius的設定與執行之前,我們先將mysql的資料庫與相關設定做好,在資料庫這方面我建議以phpmyadmin來進行相關工作會比較輕鬆。

當然,如果你很熟mysql的指令操作的話也可以使用文字模式下的指令來進行。

mysql資料庫的安裝可以參考本站這篇文章:
http://www.bell.idv.tw/modules/newbb/viewtopic.php?topic_id=4&forum=1

phpmyadmin的安裝可以參考本站這篇文章:
http://www.bell.idv.tw/modules/newbb/viewtopic.php?topic_id=53&forum=3

首先先建立一個新的資料庫,名稱為 radius。

然後建立一個資料庫使用者,名稱為 radius,並賦予他使用資料庫radius的權力。

匯入 radius 資料表

cd /usr/src/freeradius-1.1.1/src/modules/rlm_sql/drivers/rlm_sql_mysql
mysql -uroot -p密碼 radius < db_mysql.sql


完成之後便會在資料庫radius中建立相關資料。

在radius資料庫中加入群組資料:

先登入資料庫  mysql -uroot -p密碼 radius

在mysql提示號之後輸入以下指令

insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Address',':=','255.255.255.254');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');

加入測試帳號
指令
insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test');


群組中加入測試帳號
指令
insert into usergroup (username,groupname) values ('test','user');


以後新增人員時只要使用下列命令
指令
insert into radcheck (username,attribute,op,value) values ('帳號','User-Password',':=','密碼');
insert into usergroup (username,groupname) values ('帳號','user');


到此已經完成mysql的準備工作了。

七 設定RADIUS

freeradius的設定檔統一放在 /etc/raddb 目錄下,欲進行下列變更之前請先將原始設定檔備份。

更改 radiusd.conf 部份設定

原始設定:

#user = nobody
#group = nobody

hostname_lookups = no
allow_core_dumps = no
regular_expressions = yes
extended_expressions = yes
log_stripped_names = no
log_auth = no
log_auth_badpass = yes
log_auth_goodpass = yes
usercollide = no
lower_user = no
lower_pass = no
nospace_user = no
nospace_pass = no


改成如下:

user =
root 拿掉前面的#號
group = root 拿掉前面的#號
hostname_lookups = yes
allow_core_dumps = no
regular_expressions = yes
extended_expressions = yes
log_stripped_names =
yes
log_auth = yes
log_auth_badpass = yes
log_auth_goodpass = yes
usercollide = no
lower_user =
yes
lower_pass = no
nospace_user = no
nospace_pass = no


接下來修改以下部份,原始設定如下

# detail auth_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d

# detailperm = 0600
#}

# detail reply_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d

# detailperm = 0600
#}


authorize {
preprocess

# auth_log

# attr_filter

chap

mschap

suffix

eap

files

# sql

}

accounting {
detail

radutmp

# sql

}


session {
radutmp

# sql
}


post-auth {

# reply_log

# sql


改成如下

detail auth_log {
<-拿掉前面的#號
detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
<-拿掉前面的#號

detailperm = 0600
<-拿掉前面的#號
}
<-拿掉前面的#號

detail reply_log {
<-拿掉前面的#號
detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d

detailperm = 0600
<-拿掉前面的#號
}
<-拿掉前面的#號


authorize {
preprocess

auth_log
<-拿掉前面的#號

attr_filter
<-拿掉前面的#號

chap

mschap

suffix

eap

files

sql
<-拿掉前面的#號

}

accounting {
detail

radutmp

sql
<-拿掉前面的#號

}


session {
radutmp

sql
<-拿掉前面的#號
}


post-auth {

reply_log
<-拿掉前面的#號

sql
<-拿掉前面的#號
}


到這邊就完成了radiusd.conf的設定,接下來要修改的是 clients.conf 檔。

在檔案的最後面新增以下內容:

client 192.168.1.1 {
secret = testing123
shortname = test
}


注意!此處的ip address請依照自己的區域網路內容設定,不可照抄,以我自己的設定來說,我就將client 192.168.1.1修改為 10.0.0.xx,因為我的區網使用的private ip segment就是10.0.0.0。

再來修改 sql.conf 的內容

sql {

driver = "rlm_sql_mysql"

server = "localhost"
MySQL 主機位置
login = "radius"
MySQL 帳號
password = "radius"
MySQL 密碼
radius_db = "radius"
MySQL 資料庫名稱

還記得在第六項時所作的mysql資料庫相關設定嗎?這裡的設定必須與第六項中的設定一致才行,如果你並不是依照範例設定,那記得在這邊要將內容設成與你的資料庫及使用者名稱還有密碼相符。

sqltrace = no
<-請改成yes

以上便完成了 sql.conf 檔案的修改,接下來修改 eap.conf 檔案。

eap {
default_eap_type = md5

改為
default_eap_type = peap

拿掉下列幾行的註解符號 #
tls {
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem

certificate_file = ${raddbdir}/certs/cert-srv.pem

CA_file = ${raddbdir}/certs/demoCA/cacert.pem

dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random

}

peap {
default_eap_type = mschapv2
}

以上便完成了 eap.conf 檔案的修改,接下來修改 users 這個檔案。

找到這一段
#"John Doe" Auth-Type := Local, User-Password == "hello"
# Reply-Message = "Hello, %u"


在他的後面加入
"testf" Auth-Type := Local, User-Password == "testf"
Reply-Message = "Hello, %u"


目的在於新增一個名稱為testf密碼為testf的使用者。

然後在以下兩行前面加入註解符號 #

DEFAULT Auth-Type = System
Fall-Through = 1


變成如下這樣

#DEFAULT Auth-Type = System
# Fall-Through = 1


進行到這裡,已經完成了所有相關設定檔案的修改。

八 執行freeradius

freeradius的主程式有兩種執行模式,一種是正常執行,只要以root權限輸入指令

radiusd

便可以正常執行freeradius程式,執行畫面如下

[root@bell raddb]# radiusd
Tue Mar 14 15:53:41 2006 : Info: Starting - reading configuration files ...

要知道是否有正常執行起來可以用以下指令查詢

ps -A | grep radiusd

會看到類似以下的畫面就是成功了,表示程式已經常駐在記憶體中執行

[root@bell raddb]# ps -A | grep radiusd
18197 ? 00:00:00 radiusd

前面的數字18197是PID(program ID),每台機器得到的結果並不會一樣,請不必在意,重點在後面。

另一種執行方式是除錯模式,請執行以下指令

[root@bell raddb]# radiusd -x


這時螢幕上會出現如下般的訊息畫面

Starting - reading configuration files ...
Using deprecated naslist file. Support for this will go away soon.
Module: Loaded exec
rlm_exec: Wait=yes but no output defined. Did you mean output=none?
Module: Instantiated exec (exec)
Module: Loaded expr
Module: Instantiated expr (expr)
Module: Loaded PAP
Module: Instantiated pap (pap)
Module: Loaded CHAP
.
.
.
[中間多餘的訊息節略]
Ready to process requests.

這表示radiusd進入除錯模式(debug mode),client端的任何存取都會將相關訊息顯示在螢幕上,以方便管理者進行除錯。

如果程式能正常執行,那就可以進行下一步了。

九 測試

首先先測試 flies 認證,請執行以下指令

radtest testf testf localhost 0 testing123


如看到以下顯示就表示 files 認證正常

Sending Access-Request of id 206 to 127.0.0.1 port 1812
User-Name = "testf"
User-Password = "testf"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=206, length=34
Reply-Message = "Hello, testf"

這裡看到的 Reply-Message 就是你設定在 users 設定檔裡的內容,如果你改變了相關內容這裡顯示的部份也會跟著改變。而 testf testf 就是你設定在 users 設定檔裡的帳號與密碼。

不過要記得,每次變更完 users 檔案內容後,都必須重新開啟 radiusd 以使程式載入新的設定內容。

再來測試 MySQL 認證,執行以下指令

radtest test test localhost 0 testing123


如看到以下顯示就表示 mysql 認證正常

[root@bell raddb]# radtest test test localhost 0 testing123
Sending Access-Request of id 192 to 127.0.0.1 port 1812
User-Name = "test"
User-Password = "test"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=192, length=38
Service-Type = Framed-User
Framed-IP-Address = 255.255.255.254
Framed-IP-Netmask = 255.255.255.0

進行到這裡都能正常的話就表示你的 freeradius 伺服器已經可以利用 files 與 mysql 資料庫來進行認證了。

注意!在測試完畢之後請記得將 users 檔案中與 mysql的radius資料庫中將測試帳號刪除掉,以免造成系統漏洞,使不懷好意的使用者得以鑽過認證對系統產生危害。

十 結語

freeradius伺服器能接受的認證方式很多,這裡僅舉了 files 與 mysql 的認證方式,至於其他如LDAP,PAM....等認證方式等以後有機會時再介紹。

十一 附錄

本文參考以下相關資料寫成
來自酷!學園討論區
http://phorum.study-area.org//viewtopic.php?t=33002&sid=405835706ac1b7ae0012e49490ed8a51
來自IBM網站
http://www-128.ibm.com/developerworks/tw/library/l-radius/
來自中國天極網
http://www.yesky.com/20030306/1655467.shtml

本文中以藍色字體標示的部份表示是linux系統下藥執行的指令。
草綠色字體標示的部份則是mysql 提示符號下執行的指令。
黃色字體標示的部份則為設定檔中的內容。
紅色字體標示的部份則是要修改的地方或是警語。

十二 相關設定檔範例下載

在這裡我將已經按照上述文章修改過的設定檔提供有需要的人下載,下載之後有兩個檔案需視環境稍做修改,一個是clients.conf,client ip請依照你的環境去設。另一個是sql.conf,其中關於資料庫帳密等地方需依照你的環境做修改。

radiusd.conf範例下載:

http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/radiusd.conf

clients.conf範例下載:

http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/clients.conf

sql.conf範例下載:

http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/sql.conf

eap.conf範例下載:

http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/eap.conf

users範例下載:

http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/users


文章日期:2006.03.14
文章作者:Bell
只有注册用户登录后才能发表评论。