Mar 09 2007

Déconnectez vos Users Radius avec le Packet of Disconnect

Publié par à 12:00 sous Freeradius

Mon but ici est de redémarrer automatiquement la session d’un client pour qui les paramètres Radius ont changé. Ceci est particulièrement intéressant après une mise en restriction ou une déconnexion pour usage intensif. Je suis assez surpris de trouver très peu d’information sur le « Packet Of Disconnect » en tapant « Radius » dans un moteur de recherche. J’ai écrit un script en langage Expect qui se loggue sur le routeur et redémarre une connexion en se basant sur le nom d’utilisateur.
Même si cela fonctionne, je pense que la méthode n’est pas vraiment adéquate. J’ai l’impression d’émuler un robot qui fait quelque chose qui devrait être manuel. C’est aussi difficile de gérer les erreurs puiqu’on est censé savoir à quelles réponses s’attendre. Quoiqu’il en soit, voici une solution bien meilleure: le « Packet Of Disconnect » Radius que nous allons utiliser avec une base utilisateurs Freeradius.


Packet Of Disconnect

Je ne devrais pas à avoir à trop détailler. Toutes les informations sont sur le wiki Freeradius. Je pense que ce n’est pas si évident à trouver, même en étant sur le wiki.
Quelques commentaires:

  • Vous n’avez pas à envoyer tous les attributs pour redémarrer une connexion. Le username est suffisant mais je pense qu’il est plus sécurisant d’y ajouter le session id.
  • Le Network Access Server (NAS) doit écouter sur le port 1700. Vérifiez dans la section suivante pour l’activer sur un routeur Cisco.


Configuration du Routeur / NAS

Le NAS doit écouter les requêtes sur le port UDP 1700. Il peut être changé bien sûr mais ceci est le port standard. Une fois de plus, cet exemple est spécifique à Cisco, lisez votre documentation si vous avez un autre type d’équipement sur votre réseau. Vous devez exécuter la commande aaa pod pour activer le port packet of disconnect Radius

aaa pod server clients your-server auth-type any server-key your-shared-secret


Remplacez your-server par l’IP de votre serveur qui hébergera votre script reset.
J’ai fixé ‘auth-type’ à ‘any’ puisque je n’envoie que les paramètres username et session id. Ils ne sont pas tous requis niveau sécurité. Vous pouvez obtenir plus d’information à ce sujet dans la référence des commandes Cisco.


Script de Déconnexion

La documentation sur le wiki Freeradius devrait être suffisante mais je voudrais mentionner un moyen rapide de récupérer le NAS and le session id relatif à un utilisateur donné. Une simple ligne de SQL fera l’affaire si vous avez configuré une base de données telle que Mysql ou Postgresql pour enregistrer l’accounting (Recommandé, c’est tellement plus facile pour chercher des données!)

SELECT Username, AcctSessionId, NASIPAddress
FROM radacct
WHERE username='username'
AND acctstoptime = 0
ORDER BY acctstarttime DESC limit 1;


Si aucune réponse n’est renvoyée, l’utilisateur n’est pas connecté et sa session n’a donc pas besoin d’être redémarrée.
Ayant toutes les informations requises, on peut faire un reset de la connexion Radius très simplement:

$ echo "Acct-Session-Id=D91XXXXXXXXX097" > packet.txt
$ echo "User-Name=username" >> packet.txt
$ echo "NAS-IP-Address=nasIPaddress" >> packet.txt

$ cat packet.txt | radclient -x nasIPaddrress:1700 disconnect ''secret''

2 responses so far

2 Réponses à “Déconnectez vos Users Radius avec le Packet of Disconnect”

  1. Thierry Bazzanellaon 16 Oct 2008 at 8:08

    C’est vrai, il n’y a pas beaucoup d’informations à ce sujet. On peut procéder ainsi avec un script shell :

    #!/bin/sh

    # Param1 = ‘NAS-IP-Address=192.168.0.254, User-Name=test,
    # Framed- IP-Address=192.168.1.253, Acct-Session-Id=
    # Param2 = 192.168.0.254:1700
    # Param3 = ‘passwordpartageradius’

    echo $1 > /usr/local/www/apache22/sites/exec/logparams.txt
    echo $2 >> /usr/local/www/apache22/sites/exec/logparams.txt
    echo $3 >> /usr/local/www/apache22/sites/exec/logparams.txt

    result=`echo « $1 » | /usr/local/bin/radclient $2 disconnect $3`
    echo $result > /usr/local/www/apache22/sites/exec/logexec.txt
    return 0

  2. Thierry Bazzanellaon 16 Oct 2008 at 8:11

    ceci permet de déconnecter l’utilisateur actif du NAS.

Comments RSS

Leave a Reply