我已在上篇文章讲解了如何搭建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,实现限制用户流量和登录人数相关推荐

  1. Ubuntu下配置FreeRADIUS + PPTP/L2TP + Mysql + daloRADIUS

    PPTP/L2TP安装方法就不写了,前面好多文章都介绍了安装方法. 下面先安装FreeRADIUS-server Shell 1 2 3 4 5 6 7 #sudo apt-get install m ...

  2. ubuntu nginx安装php mysql,ubuntu下配置nginx+php+mysql详解

    1.更新 复制代码 代码如下: sudo apt-get update 2.安装nginx 复制代码 代码如下: sudo apt-get intsall nginx Ubuntu安装之后的文件结构大 ...

  3. Ubuntu下安装Apache+PHP+Mysql

    Ubuntu下安装 apache+php+mysql文本服务器! ------------------------------------------------------------------- ...

  4. Ubuntu下配置Nginx HTTPS

    HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入S ...

  5. openocd调试Linux内核,Ubuntu下配置OpenOCD+FT2232

    Ubuntu下配置OpenOCD+FT2232 [1]确认调试器方案 将调试器插到电脑上,lsusb看一下: Bus 003 Device 009: ID 1457:5118 First Intern ...

  6. Star: Ubuntu下配置和编译cpp-ethereum客户端启动GPU加速交易

    Ubuntu下配置和编译cpp-ethereum客户端启动GPU加速交易 Ethereum,中文翻译是"以太坊",是一个公有区块链的开源项目.因为以太坊是基于P2P网络所以没有中心 ...

  7. Ubuntu下配置samba实现文件夹共享

    Ubuntu下配置samba实现文件夹共享 一.samba的安装: sudo apt-get intall samba sudo apt-get install smbfs 二.创建共享目录: mkd ...

  8. linux lighttpd php,Ubuntu下搭建Lighttpd+PHP+MySQL环境

    简单的几个命令在Ubuntu下搭建Lighttpd+PHP+MySQL环境,Lighttpd是众多OpenSource轻量级的web server中较为优秀的一个.支持FastCGI, CGI, Au ...

  9. ubuntu下配置eclipse

    ubuntu下配置eclipse 1.官方下载:http://www.eclipse.org/downloads/ 2.解压到指定目录:/opt 可先解压到当前目录然后 mv eclipse /opt ...

  10. Ubuntu 下配置 Typora 图片上传到 smms

    Ubuntu 下配置 Typora 图片上传到 smms 首先在这里安装 PicGo,在Typora中的:File / Preferences / Image部分,找到Download and Upg ...

最新文章

  1. 关于MySQL redo log,挖些坑,慢慢填
  2. 【Xamarin开发 Android 系列 4】 Android 基础知识
  3. Pandas的学习(1.pandas的介绍以及pandas中的Series的创建)
  4. HawtIO在JBoss EAP上(第二部分)
  5. java 继承对象 初始化_java中具有继承关系的类及其对象初始化顺序
  6. 与近似比固定算法的高性能算法
  7. php中的递归调用函数返回值,深入理解php递归函数返回值的正确用法
  8. 16qam星座图 matlab,16qam星形和矩形星座图调制解调matlab代码.doc
  9. 使用python将文字转为语音
  10. python计算条件概率_统计算法_概率基础
  11. 计算机应用基础上海交通大学出版社双色版,计算机应用基础模块化教程
  12. 51nod1359 循环探求
  13. 【2018】【论文笔记】最后一米太赫——
  14. java库net2.0下载_visual j 2.0 下载-Visual J# 2.0(vjredist.exe)下载微软官方版-西西软件下载...
  15. 电脑怎么连接隐藏的无线WiFi ?
  16. 美国洛杉矶时间转 格林威治时间
  17. Electron 去掉标题栏并设定可拖动
  18. 8 精通matlab入门求微分方程组的通解特解数值解看这篇文章就够了
  19. Win10安装Selenium+Chrome+ChromeDriver(应用代码无需设置路径)
  20. Python E化-英文资料自动翻译

热门文章

  1. 一次ibm服务器故障处理
  2. 关于作虚拟软盘启动(转)
  3. 大学生转入计算机专业申请书,计算机系大学生助学金申请书1000字
  4. 剑客之剑——倚天剑(Vim)
  5. 有向图的拓扑排序算法JAVA实现。
  6. PTA6-1 鸡兔同笼问题 (20分)
  7. 洛谷 P4234 LCT + 排序 + 枚举
  8. 计算机课程之间的关系
  9. Ubuntu20.04英文系统无法安装中文智能拼音输入法
  10. 前端根据后端数据生成表格 行列合并 指定表头