eg.

sqlcounter noresetcounter {

counter-name = Max-All-Session-Time #没有发现有什么用

check-name = Max-All-Session #对应radcheck表中的attribute

reply-name = Session-Timeout #返回给NAS的attribute type,这里为Session-Timeout

sqlmod-inst = sql #指定查询类型

key = User-Name #

reset = never #sqlcounter重置频率,通常为hourly, daily, weekly, monthly,never

query = "SELECT SUM(AcctSessionTime) FROM radacct WHERE UserName=’%{%k}’"

}

将上边的内容加到radiusd.conf的modules中(在modules中已经有sqlcounter的示例),并在authorize中加入noresetcounter,这样在认证过程中就会调用这个sqlcounter,radius会去计算radacct表中该用户的所有AcctSessionTime之和,也就是累计上线时间,并与radcheck表中该用户的Max-All-Session进行比较,如果Max-All-Session大于AcctSessionTime之和,就会将差值(正数)指定为Session-Timeout的value,返回给NAS,反之拒绝登陆。这就实现了限制该用户最大的上线时间,累计时间达到了Max-All-Session的话便会拒绝的登陆。

示例中有reset为daily, weekly, monthly,如果是daily的话,这个时间限制只对当天有效,第二天就会重置数据了。关于这个没有做详细的实验,据说因为重置时间的原因计算的差值可能会有错误。具体可以看我在另一篇blog里( some mail about freeradius sqlcounter limit the octets)摘录的有关信息。

sqlcounter对时间的计算和限制登陆已经在freeradius的wiki里有详细的说明了,这里还要说一下对流量的限制。

根据流量来限制登陆可以在radreply表中添加Chillispot-Max-All-Octets(我用的NAS为coova-chilli)属性,该账号流量在达到这个值后,会被chilli强制下线。这里的流量包括上行和下行,如果只限制下行,则需要Chillispot-Max-Input-Octets,对应的上行则是Chillispot-Max-Output-Octets,这是coova-chilli的属性。实践证明,coova官网说:

ChilliSpot- Max-Output-Octets:Maximum number of octets the user is allowed to receive,ChilliSpot-Max-Input-Octets:Maximum number of octets the user is allowed to transmit这个正好说反了,但是在chillispot之前的版本中,比如chillipot 1.1.0却的确是这样的。

如果要防止流量已经达到了最大数值的账号再次登陆的话,上边的方法就不行了。因为上边只对当次登陆给了对应的属性来让他自动掉线,并没有对其他有任何的限制。这就要借用sqlcounter来实现。事实上,上边的方法完全是没有必要的。我们只需要设置一个sqlcounter,并在radreply不要再重复添加Chillispot-Max-All-Octets属性。这样就既可以限制本次也会对以后的登陆进行计算.

限制下行流量的sqlcounter

sqlcounter octets {

counter-name = Max-All-Session-Octets #没有发现有什么用

check-name = Chillispot-Max-Input-Octets #对应radcheck表中的attribute

reply-name = Chillispot-Max-Input-Octets #返回给NAS的attribute type,这里为Session-Timeout

sqlmod-inst = sql #指定查询类型

key = User-Name #

reset = never #sqlcounter重置频率,通常为hourly, daily, weekly, monthly,never

query = "SELECT SUM(AcctInputOctets) FROM radacct WHERE UserName=’%{%k}’"

}

最后别忘了将octets加入authorize中。

两点说明

1. 我在freeradius-1.1.3版本中测试时发现,reply-name被默认固定成了Session-Timeout,我们指定的reply-name没有效果,所以就不能用它来进行流量限制了。

2. 网上查到的资料还有一项参数,是error-msg还是reply-message,意思是返回给NAS的错误信息,但是我在1.1.7版本中没有实验成功,源码中好像也没有这样的参数,不能确定.

mysql流量控制_freeradius中rlm_sqlcounter模块对时间和流量限制的实验笔记相关推荐

  1. mysql实际项目中使用多长时间_mysql - 存储过程在实际项目中用的多吗?

    怪我咯2017-04-17 16:19:5812楼 一.存储过程是非常有用滴.例如,在常见的登录场景中,需要记录用户的登入记录,你可以使用编程语言来实现: db.connect( "db_h ...

  2. python中time模块获取时间的使用

    import time() ·获取本地时间: time.time() #本地时间的时间戳格式. 1514273633.0474658 eg: int(time.time()) , int(time.t ...

  3. mysql实际项目中使用多长时间_存储过程在实际项目中用的多吗?

    我说说下自己的经验吧,很早就接触存储过程了,但是最近老板竟然要求所有业务都用存储过程,匪夷所思. 存储过程有它的优点: (1) 执行速度比写在代码里速度快,这个不用说了 (2) 能实现一定程度松耦合, ...

  4. python3中datetime模块当前时间多加一天、一小时、一分钟

    现在的时间减去2分钟31秒后得出的时间: >>>(datetime.datetime.now() - datetime.timedelta(minutes=2,seconds=31) ...

  5. Kubernetes中RBAC实战一 servicecount 10月2日实验笔记

    Kubernetes的servicecount简单实战 文章目录 Kubernetes的servicecount简单实战 一.创建servicecount 二.创建POD关联刚才创建sa 三.测试无权 ...

  6. Python使用datetime中的timedelta模块实现时间增减:python计算100天后是哪年那月那日?

    Python使用datetime中的timedelta模块实现时间增减:python计算100天后是哪年那月那日? 目录

  7. MySQL中的日期和时间类型

    文章目录 1 MySQL中的日期和时间类型 1 MySQL中的日期和时间类型 日期与时间类型是为了方便在数据库中存储日期和时间而设计的,数据库有多种表示日期和时间的数据类型.其中,YEAR类型表示年, ...

  8. mysql计算秒_如何在MySQL中基于秒计算时间?

    让我们首先创建一个表-mysql> create table DemoTable ( Logouttime time ); 使用插入命令在表中插入一些记录-mysql> insert in ...

  9. Mysql在sql中截取时间类型字段的年月日和时间-DATE_FORMAT() 函数

    Mysql在sql中截取时间类型字段的年月日和时间 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式.我们使用 N ...

最新文章

  1. 我的网站搭建 (第十七天) celery 定时刷新缓存
  2. 怎么用numpy读取excel的数据画三维图_python初学者,如何快速匹配excel任务
  3. uvalive5983(二分+dp)
  4. boost::ratio_multiply相关的测试程序
  5. 设计模式(六)------设计模式六大原则(5):迪米特法则
  6. opengl 安装_如何使得支持 OpenGL 的 Flatpak 应用和游戏在专有 Nvidia 图形驱动下工作 | Linux 中国...
  7. (20)FPGA多路选择器设计(第4天)
  8. ssh 多台服务器之间连接(linux)
  9. Spring IoC容器初始化过程分析
  10. vi毕业设计参考文献优秀范例
  11. Flask-Caching使用redis缓存后端加速页面重载
  12. 用scratch编写打地鼠游戏
  13. 基于Flutter的仿微信聊天应用
  14. 虚拟化技术—基础(1)
  15. 矩阵位移法是用于求解杆系结构的计算机方法,结构力学的教学思路
  16. Scala与Java语言的差异
  17. java p2p 技术可行性分析_Atitit JAVA p2p设计与总结  JXTA 2
  18. DC-DC上电时电压输出尖峰电压
  19. python计算存款本金和利息_python入门教程NO.8 用python写个存款利息计算器
  20. windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)

热门文章

  1. VTY方式接入网络设备
  2. 2020 年 5 月全国程序员工资出炉!
  3. 蕤仁肉(内仁肉、泪仁肉)简单介绍
  4. 1553C - Penalty
  5. Zilliz 合伙人、系统架构师郭人通出席GOTC 2021专题论坛,谈向量数据库的开发挑战...
  6. 关于今天一整天的记录以及认知
  7. 实习工作中的对于ubuntu系统命令使用的一个总结
  8. 专访曾宪杰:大型网站系统与Java中间件实践
  9. 全国首个兼容多种底层链和云服务的区块链服务平台发布
  10. 详解蔬菜自动售货机的结构设计原理