fedora6 kernel:2.6.18-1.2798.fc6
mysql 5.0.22
freeradius 1.1.7
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的話便會拒絕的登陸。
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 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版本中沒有實驗成功,源碼中好像也沒有這樣的參數,不能確定.