« FreeRadius » : différence entre les versions
(33 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Image:LOGO_FreeRadius.png|center]] | |||
= Présentation = | = Présentation = | ||
FreeRadius ''(Remote Authentication Dial-In User Service)'' est un serveur Radius libre sous license BSD soutenu par la société Network Radius SARL. Le protocol RADIUS permet de centraliser les informations d'authentification des utilisateurs. Ces informations sont stockées dans une base de données. Elles sont sollicitées lorsque le client ''(l'utilisateur)'' tente d'établir une session. La requête est alors transmise à un serveur ''(client)'' qui soumet la requête d'authentification au serveur radius central. Cet exemple peut être illustré avec les réseaux wifi de grande envergure. Les utilisateurs sont stockés dans la base de données du serveur radius. L'opérateur dispose de plusieurs points d'accès pour proposer son service sans fil. Lorsqu'un client se connecte avec ses identifiants, ces derniers sont soumis à la borne wifi. Cette dernière transmet la requête d'authentification au serveur RADIUS central qui répond favorablement ou non à la requête initiale. | FreeRadius ''(Remote Authentication Dial-In User Service)'' est un serveur Radius libre sous license BSD soutenu par la société Network Radius SARL. Le protocol RADIUS permet de centraliser les informations d'authentification des utilisateurs. Ces informations sont stockées dans une base de données. Elles sont sollicitées lorsque le client ''(l'utilisateur)'' tente d'établir une session. La requête est alors transmise à un serveur ''(client ou nas)'' qui soumet la requête d'authentification au serveur radius central. Cet exemple peut être illustré avec les réseaux wifi de grande envergure. Les utilisateurs sont stockés dans la base de données du serveur radius. L'opérateur dispose de plusieurs points d'accès pour proposer son service sans fil. Lorsqu'un client se connecte avec ses identifiants, ces derniers sont soumis à la borne wifi. Cette dernière transmet la requête d'authentification au serveur RADIUS central qui répond favorablement ou non à la requête initiale. | ||
[[Image:FREERADIUS_Architecture.png|thumb|600px|center|Architecture RADIUS]] | |||
= Installation = | = Installation = | ||
Ligne 8 : | Ligne 12 : | ||
{{ Box_Console | objet=sudo apt-get install freeradius freeradius-utils freeradius-mysql }} | {{ Box_Console | objet=sudo apt-get install freeradius freeradius-utils freeradius-mysql }} | ||
== clients.conf == | |||
Le fichier '''clients.conf''' contient la liste des machines autorisées ''(aussi appelés NAS)'' à transmettre une requête d'authentification au serveur RADIUS. Par défaut, le serveur est aussi un client RADIUS et on retrouve ces quelques lignes dans le fichier : | |||
client localhost { | |||
secret = testing123 | |||
ipaddr = 127.0.0.1 | |||
nastype = other | |||
} | |||
Si une autre machine - comme un point d'accès par exemple - est amené à transmettre des requêtes au serveur RADIUS, il faudra au préalable le renseigner dans le fichier '''clients.conf''' et définir un '''secret partagé'''. Dans notre cas le point d'accès dispose d'une IP fixe qui est '''10.0.0.110''' : | |||
client 10.0.0.110 { | |||
secret = secretpartage | |||
ipaddr = 10.0.0.110 | |||
nastype = other | |||
} | |||
= Module MySQL = | = Module MySQL = | ||
Ligne 13 : | Ligne 33 : | ||
== Installation du module == | == Installation du module == | ||
Ce module | Ce module permet de gérer directement les utilisateurs '''FreeRadius''' dans une base de données '''MySQL'''. | ||
{{ Box_Information | objet=Nous considérons qu'à ce stade vous disposez d'une base de données pleinement fonctionnelle sur laquelle une base de données et un utilisateur nommé '''freeradius''' ont été crées. }} | |||
* Importer le fichier de commandes MySQL nommé schema.sql se situant sous '''/etc/freeradius/3.0/mods-config/sql/main/mysql/'''. Il s'agit ici du fichier schema.sql.''' : | |||
{{ Box_Console | objet=cd /etc/freeradius/3.0/mods-config/sql/main/mysql/<br />mysql -uroot -pXXX freeradius < schema.sql }} | |||
* Pour que FreeRadius interroge la base de données MySQL, il faut adapter le fichier de configuration '''/etc/freeradius/3.0/mods-available/sql''' qui regroupe les informations de connexion au serveur : | |||
* Pour que FreeRadius interroge la base de données MySQL, il faut adapter le fichier de configuration '''sql | |||
sql { | sql { | ||
driver = "rlm_sql_mysql" | |||
dialect = "mysql" | |||
server = "<ip_server>" | server = "<ip_server>" | ||
login = "<login>" | login = "<login>" | ||
Ligne 139 : | Ligne 52 : | ||
} | } | ||
* | * Pour rendre le module actif, il faut place un lien vers le fichier de configuration depuis le répertoire '''/etc/freeradius/3.0/mods-enabled/''' : | ||
{{ Box_Console | objet=cd /etc/freeradius/3.0/mods-enabled/sql<br />sudo ln -s ../mods-available/sql }} | |||
* Et enfin dans le fichier '''/etc/freeradius/sites-enabled/default''' décommenter les lignes contenant le terme '''sql'''. | * Et enfin dans le fichier '''/etc/freeradius/3.0/sites-enabled/default''' il faut décommenter toutes les lignes contenant le terme '''sql'''. | ||
== Création d'un utilisateur == | == Création d'un utilisateur == | ||
Ligne 159 : | Ligne 73 : | ||
); | ); | ||
{{ Box Attention | objet=La colonne op doit contenir l'opérateur := et non == ! }} | {{ Box Attention | objet=La colonne op doit contenir l'opérateur ':='et non '==' ! }} | ||
= Vérification = | = Vérification = | ||
Pour vérifier le fonctionnement du serveur radius, il faut d'abord arrêter ce dernier si il a été démarré : | * Pour vérifier le fonctionnement du serveur radius, il faut d'abord arrêter ce dernier si il a été démarré : | ||
{{ Box Console | objet=sudo /etc/init.d/freeradius stop}} | {{ Box Console | objet=sudo /etc/init.d/freeradius stop}} | ||
Ensuite sur le même terminal, on exécute FreeRadius en mode débogueur pour voir en temps réel les requêtes qui lui sont soumises : | * Ensuite sur le même terminal, on exécute FreeRadius en mode débogueur pour voir en temps réel les requêtes qui lui sont soumises : | ||
{{ Box Console | objet=sudo freeradius -XX}} | {{ Box Console | objet=sudo freeradius -XX}} | ||
Puis dans un second terminal on va tester l'authentification de l'utilisateur test avec son mot de passe 123 | * Puis dans un second terminal on va tester l'authentification de l'utilisateur '''test''' avec son mot de passe '''123''' : | ||
{{ Box Console | objet=radtest test 123 127.0.0.1 0 testing123}} | |||
* Dans ce même terminal on observe immédiatement la réponse suivante : | |||
{{ Box Console | objet=Sending Access-Request of id 16 to 127.0.0.1 port 1812<br /> | |||
User-Name = "test"<br /> | |||
User-Password = "123"<br /> | |||
NAS-IP-Address = 127.0.1.1<br /> | |||
NAS-Port = 0<br /> | |||
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=16, length=20}} | |||
* Tandis que sur le premier terminal on obtient en détail la requête et sa résolution par le serveur : | |||
{{ Box Console | objet=rad_recv: Access-Request packet from host 127.0.0.1 port 34964, id=16, length=56<br /> | |||
User-Name = "test"<br /> | |||
User-Password = "123"<br /> | |||
NAS-IP-Address = 127.0.1.1<br /> | |||
NAS-Port = 0<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: # Executing section authorize from file /etc/freeradius/sites-enabled/default<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: +- entering group authorize {...}<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[preprocess] returns ok<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[chap] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[mschap] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[digest] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [suffix] No '@' in User-Name = "test", looking up realm NULL<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [suffix] No such realm "NULL"<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[suffix] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [eap] No EAP-Message, not doing EAP<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[eap] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[files] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] expand: %{User-Name} -> test<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] sql_set_user escaped user --> 'test'<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: rlm_sql (sql): Reserving sql socket id: 4<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] expand: SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'test' ORDER BY id<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] User found in radcheck table<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] expand: SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radreply WHERE username = 'test' ORDER BY id<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] expand: SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority -> SELECT groupname FROM radusergroup WHERE username = 'test' ORDER BY priority<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: rlm_sql (sql): Released sql socket id: 4<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[sql] returns ok<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[expiration] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[logintime] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[pap] returns updated<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: rlm_sqlcounter: Entering module authorize code<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: rlm_sqlcounter: Could not find Check item value pair<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[noresetcounter] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: rlm_sqlcounter: Entering module authorize code<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: rlm_sqlcounter: Could not find Check item value pair<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[dailycounter] returns noop<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: Found Auth-Type = PAP<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: # Executing group from file /etc/freeradius/sites-enabled/default<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: +- entering group PAP {...}<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [pap] login attempt with password "123"<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [pap] Using clear text password "123"<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [pap] User authenticated successfully<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[pap] returns ok<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: # Executing section post-auth from file /etc/freeradius/sites-enabled/default<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: +- entering group post-auth {...}<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] expand: %{User-Name} -> test<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] sql_set_user escaped user --> 'test'<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] expand: %{User-Password} -> 123<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: [sql] expand: INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ( '%{User-Name}', '%{%{User-Password}:-%{Chap-Password} }', '%{reply:Packet-Type}', '%S') -> INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ( <br /> 'test', '123', 'Access-Accept', '2011-08-31 00:39:53')<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: rlm_sql (sql) in sql_postauth: query is INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ( <br /> 'test', '123', 'Access-Accept', '2011-08-31 00:39:53')<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: rlm_sql (sql): Reserving sql socket id: 3<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: rlm_sql (sql): Released sql socket id: 3<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[sql] returns ok<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: ++[exec] returns noop<br /> | |||
Sending Access-Accept of id 16 to 127.0.0.1 port 34964<br /> | |||
Wed Aug 31 00:39:53 2011 : Info: Finished request 0.<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: Going to the next request<br /> | |||
Wed Aug 31 00:39:53 2011 : Debug: Waking up in 4.9 seconds.<br /> | |||
Wed Aug 31 00:39:58 2011 : Info: Cleaning up request 0 ID 16 with timestamp +27<br /> | |||
Wed Aug 31 00:39:58 2011 : Info: Ready to process requests. | |||
}} | |||
= Module counter = | |||
== Rôle == | |||
Ce module permet d'appliquer des restrictions de durée aux sessions des utilisateurs. | |||
== Activation == | |||
* Pour rendre le module actif, il faut place un lien vers le fichier de configuration depuis le répertoire '''/etc/freeradius/3.0/mods-enabled/''' : | |||
{{ Box_Console | objet=cd /etc/freeradius/3.0/mods-enabled/counter<br />sudo ln -s ../mods-available/counter }} | |||
* Il faut définir dans le fichier ''/etc/freeradius/dictionary'' RADIUS les attribus '''Max-All-Session''', '''Max-Daily-Session''' et '''Max-Monthly-Session''' : | |||
ATTRIBUTE Max-All-Session 3000 integer | |||
ATTRIBUTE Max-Daily-Session 3001 integer | |||
ATTRIBUTE Max-Monthly-Session 3002 integer | |||
* Ensuite il faut déclarer les fonctions définies dans le fichier '''/etc/freeradius/sql/mysql/counter.conf''' '''noresetcounter''', '''dailycounter''', '''monthlycounter''' dans le fichier de configuration '''/etc/freeradius/sites-enabled/default''' en les ajoutant à la section '''authorize''' comme ceci : | |||
''/etc/freeradius/sites-enabled/default'' dans la section authorize | |||
authorize { | |||
[...] | |||
pap | |||
noresetcounter | |||
dailycounter | |||
monthlycounter | |||
} | |||
== Utilisation == | |||
* Pour limiter à '''1 heure''' par jour la session utilisateur de '''test''' on ajoute dans la table '''radcheck''' l’attribue '''Max-Daily-Session''' avec pour valeur '''3600''' : | |||
INSERT INTO `freeradius`.`radcheck` ( | |||
`id` , | |||
`username` , | |||
`attribute` , | |||
`op` , | |||
`value` | |||
) | |||
VALUES ( | |||
NULL , 'test', 'Max-Daily-Session', ':=', '3600' | |||
); | |||
* Pour limiter à '''31 heure''' par mois la session utilisateur de '''test''' on ajoute dans la table '''radcheck''' l’attribue '''Max-Monthly-Session''' avec pour valeur '''111600''' : | |||
INSERT INTO `freeradius`.`radcheck` ( | |||
`id` , | |||
`username` , | |||
`attribute` , | |||
`op` , | |||
`value` | |||
) | |||
VALUES ( | |||
NULL , 'test', 'Max-Monthly-Session', ':=', '111600' | |||
); | |||
* Pour limiter à '''24 heure''' d'utilisation la session utilisateur de '''test''' on ajoute dans la table '''radcheck''' l’attribue '''Max-All-Session''' avec pour valeur '''86400''' : | |||
INSERT INTO `freeradius`.`radcheck` ( | |||
`id` , | |||
`username` , | |||
`attribute` , | |||
`op` , | |||
`value` | |||
) | |||
VALUES ( | |||
NULL , 'test', 'Max-All-Session', ':=', '86400' | |||
); | |||
= Limiter la bande passante = | |||
== Dowload == | |||
* Pour limiter la vitesse de téléchargement d'un utilisateur, il faut ajouter dans la table '''radreply''' un enregistrement avec comme attribue '''WISPr-Bandwidth-Max-Down''' et comme valeur le seuil de la vitesse de téléchargement exprimé en '''bps'''. Par exemple, on souhaite limiter la vitesse de téléchargement de l'utilisateur '''test''' à '''256 kbps''' : | |||
INSERT INTO `freeradius`.`radreply` ( | |||
`id` , | |||
`username` , | |||
`attribute` , | |||
`op` , | |||
`value` | |||
) | |||
VALUES ( | |||
NULL , 'test', 'WISPr-Bandwidth-Max-Down', '=', '256000' | |||
); | |||
{{ Box Attention | objet=La colonne op a pour valeur ici '=' et non := comme précédemment !}} | |||
== Upload == | |||
* Pour limiter la vitesse d'envoi de données d'un utilisateur ''(transfert de fichiers par exemple, VoIP, ...)'', il faut ajouter dans la table '''radreply''' un enregistrement avec comme attribue '''WISPr-Bandwidth-Max-Up''' et comme valeur le seuil de la vitesse de téléchargement exprimé en '''bps'''. Par exemple, on souhaite limiter la vitesse d'envoi de données de l'utilisateur '''test''' à '''128 kbps''' : | |||
INSERT INTO `freeradius`.`radreply` ( | |||
`id` , | |||
`username` , | |||
`attribute` , | |||
`op` , | |||
`value` | |||
) | |||
VALUES ( | |||
NULL , 'test', 'WISPr-Bandwidth-Max-Up', '=', '128000' | |||
); | |||
= Hints = | |||
== Ajout Domaine == | |||
DEFAULT NAS-IP-Address == "<NAS_IP>", User-Name !~ "^([^@]+)@<DOMAIN>" | |||
User-Name := "%{User-Name}@<DOMAIN>" | |||
== Domaine en fonction SSID == | |||
DEFAULT NAS-IP-Address == "<NAS_IP>", User-Name !~ "^([^@]+)@<DOMAIN>", Called-Station-ID =~ "^(.*):<WIFI-SSID>" | |||
User-Name := "%{User-Name}@m<DOMAIN>" | |||
= Liens = | |||
* http://www.warungdigital.com/freeradius-bandwidth-limit-for-network-users.htm | |||
* http://www.warungdigital.com/freeradius-disconnected-user-when-time-limit-exceed.htm | |||
* http://www.pervasive-network.org/SPIP/Installation-de-freeradius-2-4 | |||
* http://doc.ubuntu-fr.org/chillispot |
Dernière version du 27 février 2020 à 07:46
Présentation
FreeRadius (Remote Authentication Dial-In User Service) est un serveur Radius libre sous license BSD soutenu par la société Network Radius SARL. Le protocol RADIUS permet de centraliser les informations d'authentification des utilisateurs. Ces informations sont stockées dans une base de données. Elles sont sollicitées lorsque le client (l'utilisateur) tente d'établir une session. La requête est alors transmise à un serveur (client ou nas) qui soumet la requête d'authentification au serveur radius central. Cet exemple peut être illustré avec les réseaux wifi de grande envergure. Les utilisateurs sont stockés dans la base de données du serveur radius. L'opérateur dispose de plusieurs points d'accès pour proposer son service sans fil. Lorsqu'un client se connecte avec ses identifiants, ces derniers sont soumis à la borne wifi. Cette dernière transmet la requête d'authentification au serveur RADIUS central qui répond favorablement ou non à la requête initiale.
Installation
- Le logiciel serveur FreeRadius est disponible dans les dépôts Ubuntu. Pour l'installer il suffit de lancer la commande suivante :
|
|
clients.conf
Le fichier clients.conf contient la liste des machines autorisées (aussi appelés NAS) à transmettre une requête d'authentification au serveur RADIUS. Par défaut, le serveur est aussi un client RADIUS et on retrouve ces quelques lignes dans le fichier :
client localhost { secret = testing123 ipaddr = 127.0.0.1 nastype = other }
Si une autre machine - comme un point d'accès par exemple - est amené à transmettre des requêtes au serveur RADIUS, il faudra au préalable le renseigner dans le fichier clients.conf et définir un secret partagé. Dans notre cas le point d'accès dispose d'une IP fixe qui est 10.0.0.110 :
client 10.0.0.110 { secret = secretpartage ipaddr = 10.0.0.110 nastype = other }
Module MySQL
Installation du module
Ce module permet de gérer directement les utilisateurs FreeRadius dans une base de données MySQL.
|
Nous considérons qu'à ce stade vous disposez d'une base de données pleinement fonctionnelle sur laquelle une base de données et un utilisateur nommé freeradius ont été crées. |
- Importer le fichier de commandes MySQL nommé schema.sql se situant sous /etc/freeradius/3.0/mods-config/sql/main/mysql/. Il s'agit ici du fichier schema.sql. :
|
|
- Pour que FreeRadius interroge la base de données MySQL, il faut adapter le fichier de configuration /etc/freeradius/3.0/mods-available/sql qui regroupe les informations de connexion au serveur :
sql { driver = "rlm_sql_mysql" dialect = "mysql" server = "<ip_server>" login = "<login>" password = "<mot_de_passe>" radius_db = "<nom_de_la_base_mysql>" [...] }
- Pour rendre le module actif, il faut place un lien vers le fichier de configuration depuis le répertoire /etc/freeradius/3.0/mods-enabled/ :
|
|
- Et enfin dans le fichier /etc/freeradius/3.0/sites-enabled/default il faut décommenter toutes les lignes contenant le terme sql.
Création d'un utilisateur
Les utilisateurs sont définis dans la table radcheck. Ici, nous allons créer l'utilisateur test qui a pour mot de passe 123 :
INSERT INTO `freeradius`.`radcheck` ( `id` , `username` , `attribute` , `op` , `value` ) VALUES ( NULL , 'test', 'Cleartext-Password', ':=', '123' );
|
La colonne op doit contenir l'opérateur ':='et non '==' ! |
Vérification
- Pour vérifier le fonctionnement du serveur radius, il faut d'abord arrêter ce dernier si il a été démarré :
|
|
- Ensuite sur le même terminal, on exécute FreeRadius en mode débogueur pour voir en temps réel les requêtes qui lui sont soumises :
|
|
- Puis dans un second terminal on va tester l'authentification de l'utilisateur test avec son mot de passe 123 :
|
|
- Dans ce même terminal on observe immédiatement la réponse suivante :
|
|
- Tandis que sur le premier terminal on obtient en détail la requête et sa résolution par le serveur :
|
|
Module counter
Rôle
Ce module permet d'appliquer des restrictions de durée aux sessions des utilisateurs.
Activation
- Pour rendre le module actif, il faut place un lien vers le fichier de configuration depuis le répertoire /etc/freeradius/3.0/mods-enabled/ :
|
|
- Il faut définir dans le fichier /etc/freeradius/dictionary RADIUS les attribus Max-All-Session, Max-Daily-Session et Max-Monthly-Session :
ATTRIBUTE Max-All-Session 3000 integer ATTRIBUTE Max-Daily-Session 3001 integer ATTRIBUTE Max-Monthly-Session 3002 integer
- Ensuite il faut déclarer les fonctions définies dans le fichier /etc/freeradius/sql/mysql/counter.conf noresetcounter, dailycounter, monthlycounter dans le fichier de configuration /etc/freeradius/sites-enabled/default en les ajoutant à la section authorize comme ceci :
/etc/freeradius/sites-enabled/default dans la section authorize
authorize { [...] pap noresetcounter dailycounter monthlycounter }
Utilisation
- Pour limiter à 1 heure par jour la session utilisateur de test on ajoute dans la table radcheck l’attribue Max-Daily-Session avec pour valeur 3600 :
INSERT INTO `freeradius`.`radcheck` ( `id` , `username` , `attribute` , `op` , `value` ) VALUES ( NULL , 'test', 'Max-Daily-Session', ':=', '3600' );
- Pour limiter à 31 heure par mois la session utilisateur de test on ajoute dans la table radcheck l’attribue Max-Monthly-Session avec pour valeur 111600 :
INSERT INTO `freeradius`.`radcheck` ( `id` , `username` , `attribute` , `op` , `value` ) VALUES ( NULL , 'test', 'Max-Monthly-Session', ':=', '111600' );
- Pour limiter à 24 heure d'utilisation la session utilisateur de test on ajoute dans la table radcheck l’attribue Max-All-Session avec pour valeur 86400 :
INSERT INTO `freeradius`.`radcheck` ( `id` , `username` , `attribute` , `op` , `value` ) VALUES ( NULL , 'test', 'Max-All-Session', ':=', '86400' );
Limiter la bande passante
Dowload
- Pour limiter la vitesse de téléchargement d'un utilisateur, il faut ajouter dans la table radreply un enregistrement avec comme attribue WISPr-Bandwidth-Max-Down et comme valeur le seuil de la vitesse de téléchargement exprimé en bps. Par exemple, on souhaite limiter la vitesse de téléchargement de l'utilisateur test à 256 kbps :
INSERT INTO `freeradius`.`radreply` ( `id` , `username` , `attribute` , `op` , `value` ) VALUES ( NULL , 'test', 'WISPr-Bandwidth-Max-Down', '=', '256000' );
|
La colonne op a pour valeur ici '=' et non := comme précédemment ! |
Upload
- Pour limiter la vitesse d'envoi de données d'un utilisateur (transfert de fichiers par exemple, VoIP, ...), il faut ajouter dans la table radreply un enregistrement avec comme attribue WISPr-Bandwidth-Max-Up et comme valeur le seuil de la vitesse de téléchargement exprimé en bps. Par exemple, on souhaite limiter la vitesse d'envoi de données de l'utilisateur test à 128 kbps :
INSERT INTO `freeradius`.`radreply` ( `id` , `username` , `attribute` , `op` , `value` ) VALUES ( NULL , 'test', 'WISPr-Bandwidth-Max-Up', '=', '128000' );
Hints
Ajout Domaine
DEFAULT NAS-IP-Address == "<NAS_IP>", User-Name !~ "^([^@]+)@<DOMAIN>" User-Name := "%{User-Name}@<DOMAIN>"
Domaine en fonction SSID
DEFAULT NAS-IP-Address == "<NAS_IP>", User-Name !~ "^([^@]+)@<DOMAIN>", Called-Station-ID =~ "^(.*):<WIFI-SSID>" User-Name := "%{User-Name}@m<DOMAIN>"