紅帽RHEL5U3平台實現pppoe接入記賬認證伺服器的配置文檔
早先做得一個文檔,跟大家共享一下。
文檔只寫了簡單的製作過程,沒有涉及到相關基礎知識的講解,僅供大家參考。
:mrgreen: :mrgreen: :mrgreen: :mrgreen:
紅帽RHEL5U3平台實現pppoe接入記賬認證伺服器
作者:zorro
郵件:zorro@uplooking.com
軟體需求:
紅帽自帶的:rp-pppoe,ppp,freeradius,freeradius-mysql,mysql。
另需:freeradius-2.1.3以及ppp2.4.4的源代碼包。
第一部分:實現簡單的pppoe撥號服務
檢查系統上的rp-pppoe以及ppp軟體是否安裝,命令:
#rpm -q rp-pppoe ppp
如果安裝則會有顯示軟體包的名稱,若未安裝,找到安裝盤上的相關rpm包安裝。
然後配置/etc/ppp/pppoe-server-options文件,內容為:
# PPP options for the PPPoE server
# LIC: GPL
require-chap
login
lcp-echo-interval 10
lcp-echo-failure 2
defaultroute
ms-dns 192.168.1.1
logfile /var/log/pppod.log
文件內容不做解釋,可以通過man pppd查尋相關幫助。此時pppoe伺服器從/etc/ppp/ chap-secrets文件中讀取驗證的用戶名和密碼信息,此文件格式為:
# Secrets for authentication using CHAP
# client server secret IP addresses
"zorro" * "123456" *
想要多添加用戶,再加入新行即可。
然後可以啟動pppoe服務了,命令是:
#pppoe-server -I eth0 -L $LOCALIP -R $REMOTEIP -N $CONNLIMIT
命令詳細信息查詢man pppoe-server。
註:紅帽自帶的pppoe伺服器,在RHEL5至RHEL5U2的版本上與系統的syslog服務有衝突。可現關閉syslog服務,讓pppoe伺服器正常運行。
第二部分:讓pppoe服務使用freeradius伺服器進行驗證
首先更改/etc/ppp/pppoe-server-options,添加一行設置:
# PPP options for the PPPoE server
# LIC: GPL
require-chap
login
lcp-echo-interval 10
lcp-echo-failure 2
defaultroute
ms-dns 192.168.1.1
logfile /var/log/pppod.log
plugin /usr/lib/pppd/2.4.4/radius.so
表示讓pppoe-server在運行時加入pppd的radius查檢,可以讓pppoe服務通過freeradius來驗證和記賬。添加此行之後,可以創建/etc/radiusclient/目錄,創建完之後,我們需要使用一下ppp的源代碼,因為紅帽沒有給我們提供相應的配置文件。解壓ppp的源代碼目錄:
#tar xvfz ppp-2.4.4.tar.gz
#cd ppp-2.4.4
#cd pppd/plugins/radius/etc/
#cp * /etc/radiusclient/
這個目錄下有我們需要的所有相關的配置文件,其中最重要的是/etc/radiusclient/radiusclient.conf,我們先打開此文件配置,其內容為(已去掉註釋):
auth_order radius
login_tries 4
login_timeout 60
nologin /etc/nologin
issue /etc/radiusclient/issue
authserver localhost:1812
acctserver localhost:1813
servers /etc/radiusclient/servers
dictionary /etc/radiusclient/dictionary
login_radius /sbin/login.radius
seqfile /var/run/radius.seq
mapfile /etc/radiusclient/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
欄位相關意義清參考文件自帶的註釋。
另外,還需更改此目錄下的servers文件,此文件用來指定讀取的radius伺服器的主機名稱以及key值(需要在freeradius配置中指定)。
此時pppoe服務已經可以通過radius認證了。然後進行freeradius的配置。
首先檢查freeradius是否安裝:
#rpm -q freeradius freeradius-mysql
其中freeradius-mysql包使用來讓freeradius連接mysql資料庫的,本部分還用不到。
首先打開/etc/raddb/clients.conf配置客戶端訪問控制,文件內容如下(已刪除註釋):
client 127.0.0.1 {
secret = hello
shortname = localhost
nastype = othe
}
表示客戶端之允許從127.0.0.1的ip登錄radius服務,並且需要驗證的secret為hello,就是在上面的servers文件中需要配置的信息。若要實現可以從別的機器訪問,請參考註釋獲得幫助。
然後配置naslist文件,內容為:
# NAS Name Short Name Type
#---------------- ---------- ----
#portmaster1.isp.com pm1.NY livingston
#portmaster2.isp.com pm1.LA livingston
localhost local portslave
此文件用來配置記錄有哪些指定的nas伺服器需要使用radius進行記賬。現在指定的是localhost。
主控配置文件是radiusd.conf,目前沒有需要改的,可通過註釋學習其中配置方法。此文件主要是用來指定freeradius伺服器默認的驗證和記賬方式。我們目前使用本地的文件方式,就是/etc/raddb/users文件,在其中添加我們需要提供給pppoe服務認證的用戶信息,內容如下(某段截取):
zorro Auth-Type := Local, Simultaneous-Use := 1, User-Password == "zorro"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 10.0.0.33,
Framed-IP-Netmask = 255.255.255.255
其中Simultaneous-Use := 1欄位用來設置每個用戶同時登錄的個數。所有欄位信息都在freeradius的源代碼中有文檔給予解釋。另外要注意,添加的用戶欄位應寫在文件DEFAULT欄位前面添加,否則可能不會生效。
都配置完畢后,可以通過radiusd -X命令以排錯方式啟動,此時再啟動pppoe-server,用客戶端撥號驗證一下,檢查pppoe服務是否成功通過freeradius來驗證用戶。如果成功,這一部分完成。可通過 service radiusd restart來正常啟動radius服務。
第三部分:配置freeradius從mysql資料庫讀取用戶信息
首先更改/etc/raddb/radiusd.conf,首先將$INCLUDE ${confdir}/sql.conf欄位這行原有的註釋去掉,然後找到authorize欄位中的sql將註釋取消掉,以及accouting欄位中的sql的註釋取消。然後需要更改sql.conf中的設置,主要是設置讀取的mysql伺服器的相關信息,可更改如下一些欄位:
server = "localhost" #資料庫伺服器
login = "mysql_username" #資料庫用戶
password = "mysql_password" #資料庫密碼
radius_db = "radius" #資料庫名稱
當然前提是你要現把mysql服務設置好,設置方法是:
先啟動你的mysqld:
service mysqld start
然後設置root帳戶密碼:
mysqladmin –uroot –p password 12345
創建radius資料庫
mysqladmin –uroot –p123456 create radius
建立mysql的資料庫raius的表,我們可以通過軟體已經給出的sql腳本導入資料庫:
mysql -uroot –p123456 radius < /usr/share/doc/freeradius-1.1.3/examples/mysql.sql
這樣,所有radius需要的資料庫和表都已經建立好了。
此時可以添加測是帳號來測試是否正常工作。具體方法就不在這說了。我們待會要使用freeradius源代碼自帶的dialup_admin來進行資料庫的管理工作,那是一個基於web的管理界面,使用php編寫,要比直接用sql語句方便的多。
這裡要注意的是,如何在資料庫里添加限制沒用戶同時登錄個數的限制,比如,我先用sql語句添加一個測試用戶,然後來限制他的登錄個數,語句是:
mysql -uroot –p123456 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');
這樣就給我們的資料庫中添加了一個帳戶測試帳戶test,並讓test帳戶屬於user組。
然後我們可以通過設置user組的檢查屬性來設置此組帳戶的登錄數限制,以後只要用戶加入這個組,登錄數都不能超過1次:
INSERT INTO radgroupcheck (GroupName, Attribute, op, Value) values("user", "Simultaneous-Use", ":=", "1");
好了,限制完成。我們現在可以使用test帳戶登錄,並測試是否是通過mysql資料庫驗證的。並且可以檢查是不是只能登錄一個。
第四部分:使用dialup_admin來管理radius伺服器
伺服器搭建成功后如果需要web管理,freeradius自帶了一個web管理程序dialup_admin。
首先測試Apache與PHP安裝的正確性。Apache的WEB目錄在 /var/www/html 下首先測試Apache,在瀏覽器輸入 Http://127.0.0.1 下看到Apache界面表示正常。
編輯一個PHP測試文件,內容為 ,保存為 phpinfo.php。在瀏覽器輸入Http://127.0.0.1/phpinfo.php 看到php相關信息頁面,表示php運作正常。
直接將freeradius源代碼中的dialup_admin/文件夾全部拷貝到Apache網頁目錄下/etc/local下。
修改dialup_admin/conf/下的admin.conf文件中的如下參數:
sql_type:mysql
sql_server:localhost //sql地址
sql_port:3306 //默認埠
sql_username:root
sql_password:123456 //密碼
sql_database:radius //資料庫名
general_base_dir: /usr/local/dialup_admin //dialup_admin主目錄
general_domain: company.com //這個可改也可不改,沒什麼影響,改了還看點而已
general_radius_server_auth_proto: chap //將pap改成chap
general_encryption_method: clear //將crypt改成clear
說明一下,general_encryption_method: clear是必須得改的,否則用web管理界面添加用戶後會出現密碼被加密后無法識別導致認證失敗,clear方式是以明文存儲密碼,freeradius默認是用明文存儲密碼,兩者要對應,所以這裡要用clear方式。
修改dialup_admin/conf/下的naslist.conf文件如下
nas1_name: nas1.%{general_domain}
nas1_model: Computer //NAS伺服器的類型
nas1_ip: 192.168.1.1 //NAS伺服器的IP地址
nas1_port_num: 15
nas1_community: public
其他的通通刪掉或用#號註釋掉,這樣修改的目的是方便在web管理界面中直觀的看到每個NAS伺服器連接用戶的情況。
導入相關資料庫表
cd /usr/local/dialup_admin/sql
mysql -uroot –p123456 radius < userinfo.sql
mysql -uroot –p123456 radius < totacct.sql
mysql -uroot –p123456 radius < mtotacct.sql
mysql -uroot –p123456 radius < badusers.sql
dialup_admin用的是php3格式的文件,需要web伺服器支持這種格式,
修改/etc/httpd/conf/httpd.conf文件,在此文件最後添加
AddType application/x-httpd-php .php .html .htm .php3
並在默認的主頁目錄下建立一個指向/usr/local/dialup_admin/htdocs的符號連接htdocs
保存后重啟httpd服務
service httpd restart
訪問:http://localhost/htdocs/index.html
能正常打開各頁面就ok了。默認是打開的sql調試模式。可以在admin.conf中找到sql_debug.把true改為false即可關閉。
至此,整個Radius伺服器搭建完成。
[ 本帖最後由 jerry017cn 於 2009-5-7 22:08 編輯 ]
《解決方案》
收藏先
《解決方案》
回復 #1 jerry017cn 的帖子
應該是要變比syslogd 規避一個bug問題
《解決方案》
好文章,頂一個
《解決方案》
收藏。
《解決方案》
:oops: :oops: :oops:
人氣不是很旺的樣子。。。。。
現在的cu怎麼了?
嘿嘿。
沒關係拉。還是非常感謝看了回帖的人。
《解決方案》
原創的文章,一定要支持!
《解決方案》
支持原創,好貼一定要頂。。。
《解決方案》
收著。
《解決方案》
原帖由 jerry017cn 於 2009-5-7 22:01 發表 http://linux.chinaunix.net/bbs/images/common/back.gif
紅帽自帶的pppoe伺服器,在RHEL5至RHEL5U2的版本上與系統的syslog服務有衝突。
怎麼紅帽子這個毛病還沒改好?好幾年的老毛病了吧?:outu: :outu: :outu:
圖省事的話,可以把ppp-2.4.2 上的pppd 拷來用,不怕麻煩就去改源碼,main.c里有BUG(不好意思,太久了,忘了在哪改了,你自己找去吧~~~),改完了MAKE,再把裡面的PPPD拷過去覆蓋就可以了。