freeradius防止用户异常断开无法重新链接上

编辑default文件里

vim /etc/freeradius/sites-enabled/default

在authorize块中加入以下语句

1 authorize{
2 ...
3 if(User-Name){
4 if("%{sql: UPDATE radacct set AcctStopTime=ADDDATE(AcctStartTime,INTERVAL AcctSessionTime SECOND), AcctTerminateCause='Clear-Stale Session' WHERE UserName='%{User-Name}' and CallingStationId='%{Calling-Station-Id}' and AcctStopTime is null}"){
5 }
6 }
7 }



这是一条服务器每当接收客户端认证时发生时检查的sql语句、看清楚了、第二个if块里面可是一行内的、千万别拆成两行、

解释下这条语句的作用吧、这里就是更新radacct表中的AcctStopTime字段、因为如果是异常断开的VPN用户、AcctStopTime会一直处于NULL的状态、这个时候、如果已经在freeradius设置成了单用户登录方式(通常都会这样)、所以就会禁止了VPN再次登录、而freeradius也一直在傻等着这个伪链接会几时断开、所以这里的处理方法是当用户再次登录上freeradius用户时、就把AcctStopTime的值设置为当前的会话时间加上开始的时间、具体的实现方法是用ADDDATE函数、AcctStartTime为被加时间、INTERVAL AcctSessionTime SECOND为关键字、以秒为单位、加上AcctSessionTime值、就成为了AccStopTime、而用户中止的类型也设置为Clear_stale Session、WHERE后面加了条件、条件为当前登录用户名、并且上次异常断开的IP这次登录的IP也要一致、而且AccStopTime的停止时间为空、当满足这三个条件后、就会自动把伪链接给强制断开、然后开启新会话接纳该用户

 

这个会造成一个问题:就是当用户恶意使用非正常方法断开VPN时、流量数据和时间会填写为0、因为freeradius并不是实时写入数据的、这样会与计费流程背离、不过相信大部分人还是好的、实在有这些用户就把它加入黑名单屏蔽掉吧、

 

posted @ 2012-02-08 13:04  klobodnf  阅读(2560)  评论(0编辑  收藏  举报