Eccovi semplice un how-to che vi consentirà di abilitare le limitazione di traffico e di tempo su freeradius in pochi passi utilizzando Rlm_sqlcounter.
In un vecchio post ho parlato di come installare e configurare Coovachilli su Ubuntu, e utilizzarlo con un’autenticazione Radius basata su Mysql. Oggi vi mostrerò come limitare gli account in base al volume di traffico e al tempo.
Lo strumento che andremo ad utilzzare è Rlm_sqlcounter.
Rlm_sqlcounter è un plugin per Freeradius che, tramite una query sql, restituisce il volume di tempo o di traffico rimanente nell’autenticazione mediante l’utilizzo di attributi radius specifici. In caso il tempo o il traffico siano terminati, l’autenticazione non andrà a buon fine.
Vi ricordo che l’autenticazione dovrà essere fatta tassativamente tramite mysql.
Gli attributi che verranno utilizzati sono:
Max-All-Session - Per quanto riguarda il volume di tempo (in secondi) Max-All-MB - Per quanto riguarda il volume di traffico (in bytes)
L’implementazione è semplice. Le più moderne distribuzioni pacchettizzate (Debian, Ubuntu, Centos) già prevedono la possibilità di attivare il plugin. Pertanto quello che dovrete fare è:
Attivare il plugin nel file di configurazione principale di freeradius:
vim /etc/freeradius/radiusd.conf oppure vim /etc/raddb/radiusd.conf
e decommentare la seguente riga:
$INCLUDE ${confdir}/sqlcounter.conf
Dopodiché aprite – o create in caso non esistesse – il file sqlcounter.conf e aggiungete queste righe:
vim /etc/freeradius/sqlcounter.conf oppure vim /etc/raddb/sqlcounter.conf
e aggiungete queste righe:
sqlcounter noresetcounter { counter-name = Max-All-Session-Time check-name = Max-All-Session sqlmod-inst = sql key = User-Name reset = never query = "SELECT SUM(AcctSessionTime) FROM radacct WHERE UserName='%{%k}'" } sqlcounter octetslimit { counter-name = Max-All-MB check-name = Max-All-MB reply-name = Chillispot-Max-Total-Octets key = User-Name reset = never query = "SELECT SUM(acctinputoctets+acctoutputoctets) from radacct WHERE UserName='%{%k}'" sqlmod-inst = sql }
Infine andate ad attivare il count del traffico e del tempo:
vim /etc/freeradius/sites-available/default oppure vim /etc/raddb/sites-available/default
e in fondo alla sezione authorize aggiungete:
authorize { ... ... ... noresetcounter octetslimit }
riavviate freeradius
/etc/init.d/freeradius restart oppure /etc/init.d/radiusd restart
A questo punto il vostro server dovrebbe essere apposto. Quello che resta da fare è provare a limitare un utente. Eccovi qualche esempio di utilizzo:
– L’utente test0001 ha un volume complessivo di tempo di 15 MegaBytes (l’utente può effettuare il login quante volte lo ritiene necessario, ma può essere online per una quantitaà totale di traffico di 15 MegaBytes, ovvero 165675008 bytes). La query da inserire sarà:
INSERT into radcheck VALUES ('','test0001','Max-All-MB','165675008',':=');
Fintanto che l’utente avrà a disposizione del tempo, l’autenticazione andrà a buon fine utilizzando la propria password:
[root@kingston raddb]# radtest test0001 test 10.100.0.1 0 passwordradius Sending Access-Request of id 228 to 10.100.0.1 port 1812 User-Name = "test0001" User-Password = "test" NAS-IP-Address = 173.255.219.122 NAS-Port = 0 rad_recv: Access-Accept packet from host 10.100.0.1 port 1812, id=132, length=20 ChilliSpot-Max-Total-Octets = 165675008 [root@kingston raddb]#
Una volta che il tempo si sarà esaurito, il radius non autenticherà l’utente:
[root@kingston raddb]# radtest test0001 test 10.100.0.1 0 passwordradius Sending Access-Request of id 228 to 10.100.0.1 port 1812 User-Name = "test0001" User-Password = "test" NAS-IP-Address = 173.255.219.122 NAS-Port = 0 rad_recv: Access-Reject packet from host 10.100.0.1 port 1812, id=228, length=68 Reply-Message = "Your maximum never usage time has been reached" [root@kingston raddb]#
Lo stesso comportamento succede per quanto riguarda l’attributo Max-All-Session.
Se avete problemi con con il funzionamento vi ricordo che si può attivare il debug in foreground arrestando il demone:
/etc/init.d/freeradius stop oppure /etc/init.d/radiusd stop
ed avviando la modalità debug:
freeradius -XXX oppure radiusd -XXX
oppure potete consultare i log che si trovano in:
/var/log/freeradius oppure /var/log/radius/
Happy Hacking!