freeradius防止用户异常断开无法重新链接上
freeradius防止用户异常断开无法重新链接上
http://www.cnblogs.com/klobohyz/archive/2012/02/08/2342532.html
编辑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并不是实时写入数据的、这样会与计费流程背离、不过相信大部分人还是好的、实在有这些用户就把它加入黑名单屏蔽掉吧、
配置freeradius各种限制
http://www.cnblogs.com/klobohyz/archive/2012/02/07/2341652.html
设置用户过期时间
例如、限制名为sxy的用户过期日期为2006年7月6号14时55分22秒、只需要写在radcheck表就行了

INSERT INTO `radius`.`radcheck` (
`id` ,
`username` ,
`attribute` ,
`op` ,
`value`
)
VALUES (
NULL , 'sxy', 'Expiration', ':=', '06 Jun 2006 14:55:22'
);

也可以限制组、把sxy等用户添加在相应的组下面、然后在radgroupcheck、插入这些数据、就实现整个组的过期时间了
设置每月的流量
如设置一个用户组limit下、每个用户的流量为1GB
编辑counter.conf文件
vim /etc/freeradius/sql/mysql/counter.conf
加入以下内容

sqlcounter monthlytrafficcounter {
counter-name = Monthly-Traffic
check-name = Max-Monthly-Traffic
reply-name = Monthly-Traffic-Limit
sqlmod-inst = sql
key = User-Name
reset = monthly
# DIV 1048576(equal 1024 * 1024),means set trafficcounter unit to MB
query = "SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"
}

counter-name、暂时没发现有什么用
check-name、这个属性非常重要、是到时加入sql的字段属性
reply-name、验证的类型、到时在dictionary定义、后面会讲
sqlmod-inst和key就不说了、基本不会变化
reset意思是每月重置一次设置、也可以选never、dayly等等
接下来就是一句SQL的查询语句、作用是查询这个月的总流量、SUM语句的作用是把流进流出的总流量加起来、然后再使用DIV除以1048576、因为流量单位是以字节为单位、非常的不方便、所以转换成以MB为单位1024字节等于1KB、1024KB等于1MB、所以1048576就这么来的、后面的WHERE是条件语句、%k代表key、key的值为User-Name、所以User-Name就是指代用户登录时的用户名、后来的UNIX_TIMESTAMP为从UNIX的某段时间至今的秒数、好像是从1976年吧、具体不记得、总之这个是一个定值、将连接的开始时间转换成总秒数和重置时间进行比较、%b就是从reset后的日期转化成UNIX_TIMESTAMP、这两个作比较、其实就是把最近一次重置时间之前的流量都忽略不计、只计算重置之后的总流量
然后在radiusd.conf打开读取counter.conf的配置
vim /etc/freeradius/radiusd.conf
取消掉counter.conf前的#来读取设置
#$INCLUDE sql/mysql/counter.conf
然后再打开文件default
vim /etc/freeradius/sites-enabled/default
在authorize块中加上monthlytrafficcounter、其实就是刚刚在counter.conf里面添加的那段函数名
authorize {
monthlytrafficcounter
}
然后再在dictionary加上以上字段
vim /etc/freeradius/dictionary |
然后在dictionary加上以下内容
ATTRIBUTE Max-Monthly-Traffic 3003 integer
ATTRIBUTE Monthly-Traffic-Limit 3004 integer
这里就是前面counter.conf的reply-name所用到的字词、前面的属性值是固定的、接着就是在counter.conf那里的、接下来的3003和3004则是一个类似于属性ID值的冬冬、有两个条件、范围是3000到4000、而且不允许重复!再下来就是属性值的类型了、
现在接着可以在SQL里定义相应的属性了、比如莪想限制一个用户组每月使用的流量是1G、便在radgroupcheck里定义以下内容
INSERT INTO radgroupcheck(groupname, attribute, op,value) values('limitgp','Max-Monthly-Traffic',':=','1024');
这句就是在组为limitgp的用户、限制每个月的流量为1024MB的方法、因为之前已经在counter.conf设置了单位为MB、所以这里直接写MB就可以了、不需要再使用字节了
freeradius防止用户异常断开无法重新链接上的更多相关文章
- PHP - 用户异常断开连接,脚本强制继续执行,异常退出回调
试想如下情况.如果你的用户正在执行一个需要非常长的执行时间的操作.他点了执行了之后,浏览器就开始蛋疼地转.如果执行5分钟,你猜他会干啥,显然会觉得什么狗屎垃圾站,这么久都不响应,然后就给关了.当然这个 ...
- 在c#中利用keep-alive处理socket网络异常断开的方法
本文摘自 http://www.z6688.com/info/57987-1.htm 最近我负责一个IM项目的开发,服务端和客户端采用TCP协议连接.服务端采用C#开发,客户端采用Delphi开发.在 ...
- python 服务端判断客户端异常断开
在进行 python 套接字编程时,服务端程序要判断客户端是否异常断开[由于断电或者其他突发情况导致链接中断],可以通过以下几种方式判断: 1.如果通信协议中,设有心跳包,则可记录上次收到时间,将服务 ...
- 同时大量PPPoE连接请求,攻击PPPoE服务器,导致的用户异常掉线故障分析
前几天接一个客户电话,PPPoE下用户异常掉线,掉线后拨号困难 到达后,我首先查看PPPoE日志,发现一秒钟内有大量PADI包,浪费服务器的SESSION,同时让服务器无法处理其他用户的请求. 打开W ...
- SSH乱码和Xshell异常断开解决方法
一.SSH Secure Shell Client中文乱码的解决方法 这是SSH Secure Shell Client多年未解决的短板,要求客户端和服务器端都要‘UTF-8’编码,我终于知道Wind ...
- socket选项自带的TCP异常断开检测
TCP异常断开是指在突然断电,直接拔网线等等情况下,如果通信双方没有进行数据发送通信等处理的时候,无法获知连接已经断开的情况. 在通常的情况下,为了使得socket通信不受操作系统的限制,需要自己在应 ...
- TCP连接异常断开检测(转)
TCP是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现.某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法检测到,以致始终保持着不存在的连接.下面介绍一种方法来检测这种异常断 ...
- (转)TCP连接异常断开检测
TCP是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现.某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法检测到,以致始终保持着不存在的连接.下面介绍一种方法来检测这种异常断 ...
- 初识VEH链(用户异常派发的进一步探究)
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 初识VEH链(用户异常派发的进一步探究) VEH链是进程处理异常 ...
随机推荐
- 【Python】python更新数据库脚本两种方法
最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 1 import ...
- BZOJ 1005 明明的烦恼(prufer序列+高精度)
有一种东西叫树的prufer序列,一个树的与一个prufer序列是一一对应的关系. 设有m个度数确定的点,这些点的度为dee[i],那么每个点在prufer序列中出现了dee[i]-1次. 由排列组合 ...
- 【bzoj3754】Tree之最小方差树 最小生成树
题目描述 给出一张无向图,求它的一棵生成树,使得选出的所有边的方差最小.输出这个最小方差. 输入 第一行两个正整数N,M 接下来M行,每行三个正整数Ui,Vi,Ci N<=100,M<=2 ...
- 【bzoj1692】[Usaco2007 Dec]队列变换 贪心+后缀数组
题目描述 FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛”.在这场比赛中,每个参赛者都必须让他的奶牛排成一列,然后领她们从裁判席前依次走过. ...
- Vika and Segments - CF610D
Vika has an infinite sheet of squared paper. Initially all squares are white. She introduced a two-d ...
- [洛谷P3950]部落冲突
题目大意:给你一棵树,有$3$个操作: $Q\;p\;q:$询问$p,q$是否连通 $C\;p\;q:$把$p->q$这条边割断 $U\;x:$恢复第$x$次操作二 题解:可以在割断时把这条边赋 ...
- BZOJ5011 & 洛谷4065 & LOJ2275:[JXOI2017]颜色——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5011 https://www.luogu.org/problemnew/show/P4065 ht ...
- 去掉vue 中的代码规范检测(Eslint验证)
去掉vue 中的代码规范检测(Eslint验证): 1.在搭建vue脚手架时提示是否启用eslint检测的. Use ESLint to lint your code? 写 no; 2.如果项目已经生 ...
- 专题训练之2-sat
推荐几篇博客:https://blog.csdn.net/JarjingX/article/details/8521690 研究总结2-sat问题 https://blog.csdn.net/wher ...
- shell中的颜色显示
By francis_hao Sep 30,2017 图片来自参考[1] 其中,"033"是八进制数,其对应的asciima也就是ESC.后面的颜色格式为:[背景 ...