(english version)
FON
est un réseau collaboratif permettant de partager, via le Wifi, les connexions internet des individus.
Ce réseau utilise des routeurs spécialisés :
- WRT54G

- La Fonera

chacun d'eux fonctionne avec un firmware openWRT modifié (sous Linux).
Le portail captif est géré par le logiciel chillispot.
Les utilisateurs accèdent à Internet en s'attachant à un Wifi ouvert (non chiffré), puis en s'authentifiant sur la page Web du portail captif.
Tant que cette authentification n'a pas eu lieu, aucun trafic n'est authorisé vers internet.
Cette authentification est assurée par un serveur Radius situé chez FON.
La Nintendo DS
est une console de jeu permettant de se connecter et de jouer sur internet, pour peu que l'on dispose d'un acces Wifi ouvert, ou protégé
par du WEP. Le WPA et WPA2 ne sont pas supportés.
Cette console ne disposant pas de browser, il n'est pas possible d'utiliser la page d'authentification du portail FON.
Impossible à première vue d'utiliser les quelques jeux profitant du mode multijoueur sur Internet.
J'ai testé de nombreuses possibilités :
- forcage de l'IP dans le firewall iptables de la FON : l'interface tun0 (mappée sur l'interface wifi eth1) est une interface virtuelle, qui permet à un programme en userland (chillispot) d'effectuer lui-même le filtrage (entre autre). Les modifications dans iptables sont donc sans effet, le filtrage et la redirection vers la page du portail captif n'étant pas réalisé à ce niveau
- spoofing IP après authentification d'une machine : Trop complexe à mettre en oeuvre pour une utilisation par mes enfants ;-)
- modification du mécanisme d'authentification : là, il y a des choses à faire
En jouant avec chillispot, il est possible d'authoriser certains sites (option uamallowed) à être accèdé sans authentifcation. C'est ce qui est d'ailleurs utilisé dans la personnalisation du portail FON.
Des traces réseaux permettent d'obtenir les nombreux domaines et IPs accèdés par la console. L'ajout successif de ces domaines et IPs dans les exceptions de Chillispot permet d'accèder à ne nouveaux menus sur la DS :-) jusqu'au moment où la communication commence à utiliser des ports non standards (autres que http, https), bloqués par chillispot :-(
Piste abandonnée (il faudrait modifier chillispot pour cela)
Toujours en jouant avec chillispot, il est possible de mettre en oeuvre de l'authentification par MAC adresse plutôt que par login utilisateur, en évitant de devoir passer par la page du portail. Cependant, cette option ne permet pas de lister des MACs directement autorisées, mais des MACs qui seront utilisées comme login dans le cadre de l'authentification radius. Le password dans ce cas est fixé à "password", ou redéfini dans la conf de chillispot.
Reste à authentifier cette MAC en temps que login.
FON propose d'ajouter des utilisateurs identifiés dans son interface web, mais il n'est pas possible de rentrer une adresse MAC (zone trop courte, caractères invalides...).
Reste à travailler sur la partie radius directement. L'idée est de remplacer serveur radius de FON par un serveur radius que l'on contrôle, et d'ajouter les MACs dans sa base locale d'utilisateurs.
Si l'utilisateur n'est pas trouvé localement, une interrogation vers le serveur radius de FON sera effectué.
Je possède pour ma part un routeur WRT54g
en firmware FON Beta 0.6.6, et les informations suivantes concernent cet équipement uniquement. Il n'est pas exclu que cela fonctionne également avec la fonera, mais faute d'avoir testé...
Précautions d'usage :
Les opérations suivantes necessitent une bonne connaissance du routeur WRT54g et du firmware openWRT (et donc de Linux).
Je vous décourage de vous lancer dans ces modifications si vous ne savez pas comment débugger et réparer par vous même sous cet OS...
Cela étant dit, vous êtes désormais responsable de ce que vous faites.
- Rendre modifiable le fichier /etc/ipkg.conf
cp -f /rom/etc/ipkg.conf /etc/ipkg.conf
- Ajouter la source ipkg suivante (pour obtenir les packages de openWRT) :
/etc/ipkg.conf
...
src openwrt http://downloads.openwrt.org/whiterussian/packages/
...
- Installer les packages freeradius :
# ipkg update
# ipkg install freeradius
Installing freeradius (1.0.5-1) to root...
Downloading http://downloads.openwrt.org/whiterussian/packages//freeradius_1.0.5-1_mipsel.ipk
Installing libltdl (1.5.14-1) to root...
Downloading http://downloads.openwrt.org/whiterussian/packages//libltdl_1.5.14-1_mipsel.ipk
Installing libopenssl (0.9.8d-1) to root...
Downloading http://downloads.openwrt.org/whiterussian/packages//libopenssl_0.9.8d-1_mipsel.ipk
Installing libpthread (0.9.27-1) to root...
Downloading http://downloads.openwrt.org/whiterussian/packages//libpthread_0.9.27-1_mipsel.ipk
Configuring freeradius
Configuring libltdl
Configuring libopenssl
Configuring libpthread
Successfully terminated.
# ipkg install freeradius-mod-files
Installing freeradius-mod-files (1.0.5-1) to root...
Downloading http://downloads.openwrt.org/whiterussian/packages//freeradius-mod-files_1.0.5-1_mipsel.ipk
Configuring freeradius-mod-files
Successfully terminated.
# ipkg install freeradius-mod-realm
Installing freeradius-mod-realm (1.0.5-1) to root...
Downloading http://downloads.openwrt.org/whiterussian/packages//freeradius-mod-realm_1.0.5-1_mipsel.ipk
Configuring freeradius-mod-realm
Successfully terminated.
D'autres paquets devraient s'installer dans la foulée.
Chez moi, les paquets suivants ont été installés :
- libpthread_0.9.27-1_mipsel.ipk
- libltdl_1.5.14-1_mipsel.ipk
- libopenssl_0.9.8d-1_mipsel.ipk
- freeradius_1.0.5-1_mipsel.ipk
- freeradius-mod-files_1.0.5-1_mipsel.ipk
- freeradius-mod-realm_1.0.5-1_mipsel.ipk
Attention : Il y a des riques de saturation de l'espace de stockage lors de l'installation de ces packages (~800Ko). Si vous avez deja installé d'autres packages, il vous faudra peut-être les supprimer.
Afin de simplifier les opérations, les fichiers de configuration sont disponibles dans l'archive http://www.licour.com/blogfiles/fon_mac.tgz.
# cd /tmp
# wget http://www.licour.com/blogfiles/fon_mac.tgz
# tar xzf fon_mac.tgz
# cd fon_mac
# cp -a MAC /jffs
Le repertoire /jffs/MAC contient maintenant un script de configuration et des fichiers de configuration associés.
- Configuration de freeradius
# cp freeradius/* /etc/freeradius/
# ln -s /etc/init.d/radiusd /etc/init.d/S60freeradius
Les fichiers de configuration de freeradius sont positionnés. Le démarrage au boot est activé.
- Configuration de Chillispot
Globalement, cela consite à modifier le script de lancement pour la prise en compte de paramètres supplémentaires
# rm /etc/init.d/chillispot
# cp chillispot /etc/init.d/chillispot
- Ajout d'adresses MAC autorisées :
Il suffit pour cela de modifier le fichier suivant en precisant la liste des MAC adresses autorisées :
/jffs/MAC/fon_allowed_mac.lst
# This file store all MAC address that must be trusted by FON router
# Format : one MAC address per line, no space before, no space after
# MAC address format : XX-XX-XX-XX-XX-XX
#
# Don't forget to execute this script after each change in this file :
# /jffs/MAC/fon_update_mac.sh
# This is a test's MAC address. Please uncomment and change it
#00-01-02-03-04-05
puis à lancer le script suivant :
# /jffs/MAC/fon_update_mac.sh
Process MAC : XX-XX-XX-XX-XX-XX
updated /etc/freeradius/users
updated /jffs/MAC/fon_chillispot.sed
restarting chillispot
A reboot could help you...
# reboot
Details techniques :
Le script permet l'ajout des adresses MAC au bon format dans chillispot et freeradius:
- chillispot : afin de spécifier individuellement chaque MAC devant faire l'objet d'une authentification (option macallowed). Il est sinon possible d'utiliser l'option macauth, mais dans ce cas, toutes les machines tenteront une authentification MAC, qui seront relayées jusqu'au radius de FON, faute de les trouver en local. Pas très propre.
La modification du script de lancement permet d'intercaller une modification de la configuration de /etc/chilli.conf, celui-ci étant recréé dynamiquement à chaque lancement.
- freeradius : afin de créer la base d'utilisateur /etc/freeradius/users. On utilise le mécanisme de proxy radius pour toutes les requêtes n'ayant pas abouties localement. Le serveur radius local possède les même caracteristiques (shared secret) que le serveur radius de FON
Pour information, la forme d'une requête radius envoyée à FON est la suivante :
User-Name = "XX-XX-XX-XX-XX-XX"
User-Password = "password"
Calling-Station-Id = "XX-XX-XX-XX-XX-XX"
Called-Station-Id = "YY-YY-YY-YY-YY-YY"
NAS-Port = 0
NAS-IP-Address = 0.0.0.0
Service-Type = Login-User
NAS-Identifier = "YY-YY-YY-YY-YY-YY"
Acct-Session-Id = "4583a42800000000"
NAS-Port-Type = Wireless-802.11
Message-Authenticator = 0xa65b9efc35d573c5f9b43711f00d30c2
avec :
XX-XX-XX-XX-XX-XX : adresse MAC de la console DS
YY-YY-YY-YY-YY-YY : adresse MAC de l'interface wireless (eth1)
Il est bien évident que cette manipulation permet d'autoriser le contournement de l'authentification FON à n'importe quel équipement (PC, PDA...) munie d'une adresse MAC.
Attention dans ce cas à la sécurité lié au spoofing d'adresse MAC permettant de profiter du trou créé dans le portail.