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

这篇实验笔记详细介绍了如何使用FreeRADIUS的rlm_sqlcounter模块在MySQL中实现流量控制和时间限制。通过设置sqlcounter模块,可以计算并比较用户累计上线时间与预设的最大上线时间,达到限制登录的目的。同时,针对流量限制,通过Chillispot相关属性在radcheck和radreply表中设置,可以限制用户的上下行流量。重置频率和计数器的使用策略确保了限制的有效性。
摘要由CSDN通过智能技术生成

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}’"

}

trans.gif

将上边的内容加到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版本中没有实验成功,源码中好像也没有这样的参数,不能确定.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值