日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Ubuntu下配置FreeRadius+L2TP+MySQL,实现限制用户流量和登录人数

發布時間:2023/12/20 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu下配置FreeRadius+L2TP+MySQL,实现限制用户流量和登录人数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我已在上篇文章講解了如何搭建L2TP+MySQL+FreeRadius了,具體鏈接Ubuntu下配置FreeRadius+MySQL+xl2tpd,實現L2TP由FreeRadius認證連接并由MySQL管理用戶

現在我們要解決的是,如何使用MySQL來管理用戶流量。

一、MySQL管理FreeRadius

據我們所知,FreeRadius主要是認證用戶在連接登錄時的信息是否正確,及是否允許該用戶連接,而我們所有的這些配置都已集成在MySQL上,現在我們來分析一下MySQL的表信息。

MySQL下的radius庫共有12個表,包括cui、nas、radacct、radcheck、radgroupcheck、radgroupreply、radhuntgroup、radippool、radpostauth、radreply、radusergroup、wimax。

我們重點分析一下nas、radacct、radcheck、radgroupcheck、radgroupreply、radusergroup這六個表。

1.nas表

????nas表主要是用于代替FreeRadius原本的文件加載client信息,原本的文件加載路徑在/etc/freeradius/clients.conf,現在我們用nas表來配置client,配置的client將被FreeRadius加載,如何配置可見文章開頭的鏈接。

2.radacct表

????radacct主要是存放用戶連接過程中產生的信息,包括登錄時間,退出時間,連接時長、上傳所花費的流量、下載所花費的流量等,這個表我們將用于控制用戶流量。

3.radcheck表

? ? radcheck表主要是用戶管理的表,在這里可以設置L2TP用戶登錄的用戶名和密碼,原本在/etc/ppp/chap-secrets管理的用戶表已失效。

4.radgroupcheck表

? ? radgroupcheck表主要是設置用戶組下的驗證配置,驗證成功則允許該用戶組下的用戶連接,驗證不成功則拒絕該用戶連接,這里我們將用戶檢測用戶是否超出所設定的流量值,并決定是否繼續給該用戶連接。我們所有的控制操作都基本在該表配置

5.radgroupreply表

? ? radgroupreply表主要是設置用戶組下的用戶連接成功后返回的響應信息。

6.radusergroup

? ? radusergroup表主要是將用戶和組綁定在一起,即將用戶設置到某一個用戶組上。用戶在登錄連接時,首先會獲取用戶所在組的驗證配置,若驗證通過,則允許連接,并返回響應信息。

二、控制同時在線人數

1.打開FreeRadius的sql驗證

? ? 修改FreeRadius的sites-enabled/default文件

vim /etc/freeradius/sites-enabled/default

? ??注釋掉accounting{}和seesion的radutmp,并反注釋sql屬性

accounting{... # radutmp...sql... }session{... # radutmp...sql... }

? ? 修改sites-enabled/inner-tunnel文件

vim /etc/freeradius/sites-enabled/inner-tunnel

? ? 注釋掉session的radutmp屬性,并打開sql屬性

session{... # radutmp...sql... }

? ? 原來的是使用radutmp文檔驗證,現在使用sql驗證。

2.打開FreeRadius的SQL語句配置

? ? 修改sql/mysql/dialup.conf文件

vim /etc/freeradius/sql/mysql/dialup.conf

? ? 反注釋掉simul_count_query的語句配置,去掉#號

... simul_count_query = "SELECT COUNT(*) \FROM ${acct_table1} \WHERE username = '%{SQL-User-Name}' \AND acctstoptime IS NULL" ...

? ? 重啟一下FreeRadius服務

/etc/init.d/freeradius restart

? ? 到這里已經完成了配置文件的基本設置,接下來可以使用radgroupcheck表對用戶組設置登錄人數限制了。

3.使用radgroupcheck表設置用戶組登錄人數限制

? ? 進入MySQL,為radgroupcheck表插入一條記錄

INSERT INTO radgroupcheck ( id , GroupName , Attribute , op , Value ) VALUES (NULL , 'normal', 'Simultaneous-Use', ':=', '1');

? ? 這里使用了Simultaneout-User屬性,并設置它的值為1,這條語句代表了用戶組normal下的用戶,不能夠同時登錄同一個賬號,第二個登錄的用戶將無法連接,防止了用戶重復登錄,我們在服務器上使用radtest進行測試一下,看看返回什么信息。

? ? 首先,我們現在其他設備上登錄連接L2TP,并保持連接狀態,其次,我們在終端使用radtest再次連接,看看返回什么信息(前提是該用戶已經綁定在normal組上)

radtest crayon 123456 xxx.xxx.xxx.xxx 0 testing123

? ? 服務器返回響應

Sending Access-Request of id 248 to xxx.xxx.xxx.xxx port 1812User-Name = "crayon"User-Password = "123456"NAS-IP-Address = xxx.xxx.xxx.xxxNAS-Port = 0Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Reject packet from host xxx.xxx.xxx.xxx port 1812, id=248, length=68Reply-Message = "\r\nYou are already logged in - access denied\r\n\n"

? ? 這里服務器返回了Access-Reject信息,表示已拒絕該用戶的登錄請求,原因是You are already logged in,即你已登錄了,不能再次登錄。

三、限制用戶流量使用

1.配置FreeRadius的自定義屬性

? ? 編輯dictionary文件

vim /etc/freeradius/dictionary

? ? 在文件行尾加入自定義屬性

ATTRIBUTE Max-Monthly-Traffic 3003 integer ATTRIBUTE Monthly-Traffic-Limit 3004 integer

? ? 加入這兩行代表了radgroupcheck表上可以識別并使用該屬性

2.配置SQL計數器

????修改radiusd.conf文件

vim /etc/freeradius/radiusd.conf

????取消注釋modules{}的$INCLUDE sql/mysql/counter.conf屬性

modules{...$INCLUDE sql/mysql/counter.conf... }

? ? 修改sql/mysql/counter.conf文件

vim /etc/freeradius/sql/mysql/counter.conf

? ? 在行尾添加counter配置

sqlcounter monthlytrafficcounter {sqlmod-inst = sqlcounter-name = Monthly-Trafficcheck-name = Max-Monthly-Trafficreply-name = Monthly-Traffic-Limitkey = User-Namereset = monthlyquery = "SELECT SUM(acctinputoctets + acctoutputoctets) FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"#query的SQL語句表示統計本月下用戶上傳流量和下載流量的總和,單位是字節,即1MB = 1024 * 1024 = 1048576 }

? ? 編輯sites-enabled/default文件

vim /etc/freeradius/sites-enabled/default

? ? 在authorize{}模塊下的行尾(即'}’前一行)添加monthlytrafficcounter計數器,打開計數驗證

authorize{....monthlytrafficcounter }

? ? 重啟FreeRadius服務

/etc/init.d/freeradius restart

? ? 到這里已經完成了基本配置,接下來可以使用radgroupcheck表對用戶組設置流量限制了。

3.使用radgroupcheck表對用戶組設置流量限制

????進入MySQL,為radgroupcheck表插入一條記錄,設置normal用戶組的流量限制為1MB

INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('normal','Max-Monthly-Traffic',':=','1048576');

? ? 設置統計時間周期為60秒

INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('normal','Acct-Interim-Interval',':=','60');

????這里使用了Max-Monthly-Traffic屬性,并設置它的值為1048576,這條語句代表了用戶組normal下的用戶能使用的上傳和下載流量最大為1MB,我們先使用到超出流量,然后在服務器上使用radtest進行測試一下,看看返回什么信息。(前提是該用戶已經綁定在normal組上)

radtest crayon 123456 xxx.xxx.xxx.xxx 0 testing123

? ? 服務器返回響應

Sending Access-Request of id 172 to xxx.xxx.xxx.xxx port 1812User-Name = "crayon"User-Password = "123456"NAS-IP-Address = xxx.xxx.xxx.xxxNAS-Port = 0Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Reject packet from host xxx.xxx.xxx.xxx port 1812, id=172, length=70Reply-Message = "Your maximum monthly usage time has been reached"

????這里服務器返回了Access-Reject信息,表示已拒絕該用戶的登錄請求,原因是Your maxmum monthly usage time has been reached,即你超出使用的流量,拒絕登錄。
?

?

如何使用daloRadius來實現web管理VPN,Ubuntu下配置FreeRadius+MySQL+xl2tpd + daloRadius,實現L2TP由web管理

?

參考資料:

http://www.racksam.com/2017/07/03/freeradius3-monthly-traffic-limit/

https://www.zhukun.net/archives/5367

?

總結

以上是生活随笔為你收集整理的Ubuntu下配置FreeRadius+L2TP+MySQL,实现限制用户流量和登录人数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。