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,实现限制用户流量和登录人数相关推荐
- Ubuntu下配置FreeRADIUS + PPTP/L2TP + Mysql + daloRADIUS
PPTP/L2TP安装方法就不写了,前面好多文章都介绍了安装方法. 下面先安装FreeRADIUS-server Shell 1 2 3 4 5 6 7 #sudo apt-get install m ...
- ubuntu nginx安装php mysql,ubuntu下配置nginx+php+mysql详解
1.更新 复制代码 代码如下: sudo apt-get update 2.安装nginx 复制代码 代码如下: sudo apt-get intsall nginx Ubuntu安装之后的文件结构大 ...
- Ubuntu下安装Apache+PHP+Mysql
Ubuntu下安装 apache+php+mysql文本服务器! ------------------------------------------------------------------- ...
- Ubuntu下配置Nginx HTTPS
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入S ...
- openocd调试Linux内核,Ubuntu下配置OpenOCD+FT2232
Ubuntu下配置OpenOCD+FT2232 [1]确认调试器方案 将调试器插到电脑上,lsusb看一下: Bus 003 Device 009: ID 1457:5118 First Intern ...
- Star: Ubuntu下配置和编译cpp-ethereum客户端启动GPU加速交易
Ubuntu下配置和编译cpp-ethereum客户端启动GPU加速交易 Ethereum,中文翻译是"以太坊",是一个公有区块链的开源项目.因为以太坊是基于P2P网络所以没有中心 ...
- Ubuntu下配置samba实现文件夹共享
Ubuntu下配置samba实现文件夹共享 一.samba的安装: sudo apt-get intall samba sudo apt-get install smbfs 二.创建共享目录: mkd ...
- linux lighttpd php,Ubuntu下搭建Lighttpd+PHP+MySQL环境
简单的几个命令在Ubuntu下搭建Lighttpd+PHP+MySQL环境,Lighttpd是众多OpenSource轻量级的web server中较为优秀的一个.支持FastCGI, CGI, Au ...
- ubuntu下配置eclipse
ubuntu下配置eclipse 1.官方下载:http://www.eclipse.org/downloads/ 2.解压到指定目录:/opt 可先解压到当前目录然后 mv eclipse /opt ...
- Ubuntu 下配置 Typora 图片上传到 smms
Ubuntu 下配置 Typora 图片上传到 smms 首先在这里安装 PicGo,在Typora中的:File / Preferences / Image部分,找到Download and Upg ...
最新文章
- 关于MySQL redo log,挖些坑,慢慢填
- 【Xamarin开发 Android 系列 4】 Android 基础知识
- Pandas的学习(1.pandas的介绍以及pandas中的Series的创建)
- HawtIO在JBoss EAP上(第二部分)
- java 继承对象 初始化_java中具有继承关系的类及其对象初始化顺序
- 与近似比固定算法的高性能算法
- php中的递归调用函数返回值,深入理解php递归函数返回值的正确用法
- 16qam星座图 matlab,16qam星形和矩形星座图调制解调matlab代码.doc
- 使用python将文字转为语音
- python计算条件概率_统计算法_概率基础
- 计算机应用基础上海交通大学出版社双色版,计算机应用基础模块化教程
- 51nod1359 循环探求
- 【2018】【论文笔记】最后一米太赫——
- java库net2.0下载_visual j 2.0 下载-Visual J# 2.0(vjredist.exe)下载微软官方版-西西软件下载...
- 电脑怎么连接隐藏的无线WiFi ?
- 美国洛杉矶时间转 格林威治时间
- Electron 去掉标题栏并设定可拖动
- 8 精通matlab入门求微分方程组的通解特解数值解看这篇文章就够了
- Win10安装Selenium+Chrome+ChromeDriver(应用代码无需设置路径)
- Python E化-英文资料自动翻译