Mon la'Blog'atoire

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 11 mai 2007

FON et IP fixe

Cet article est la continuité des articles suivants :

L'idée est la suivante : après avoir identifié et autorisés quelques utilisateurs dans le WLAN grâce à leur adresse MAC, il faut maintenant leur affecter une adresse IP fixe (sur le WLAN et sur le WAN), permettant par exemple :

  • d'effectuer un filtrage firewall coté WAN spécifique pour cette machine
  • d'avoir une politique de proxy différente (cf article sur squid/squidguard)
  • de pouvoir faire des statistiques d'accès par utilisateur (avec sarg par exemple)
  • ...

Nous avons comme point de départ une identification de certains équipements par leur adresse MAC, permettant de contourner l'authentification FON (cf cet article) Avec cette configuration, ces machines rentre dans le moule standard et se voient attribuer une adresse IP en DHCP sur le WLAN, dans le pool 192.168.182/24. Coté WAN, une translation d'adresse est effectuée sur l'adresse publique du WAN (interface vlan1) grâce à un MASQUERADE iptables. Ainsi, toutes les connexions effectuées par un client FON seront vues avec l'adresse publique (WAN) du routeur FON.

En jouant sur la configuration d'iptables, de freeradius et de chillispot, il est possible de choisir quel type d'affectation d'IP aux adresses MAC identifiées :

  • classique : DHCP sur le WLAN, IP du routeur FON sur le WAN
  • partiel : IP fixe sur le WLAN, IP du routeur FON sur le WAN
  • fixe : IP fixe sur le WLAN, IP fixe sur le WAN

Concernant l'affectation d'IP fixe sur le WLAN, cela s'obtient en découpant la plage d'adresse 192.168.182.0/24 attribuée par chillispot (faisant office de serveur DHCP)

  • 192.168.182.0/25 sera la plage DHCP
  • 192.168.182.128/25 sera la plage d'IP fixe (à vous d'en faire la gestion)

Concernant l'affectation d'IP fixe sur le WAN, il faut que ces adresses soient disponibles. Chacune des adresses identifiées sera attribuée au routeur FON (alias de l'interface vlan1)

Procédure d'installation :

  • Installation des outils

Afin de simplifier les opérations, les fichiers de configuration sont disponibles dans l'archive http://www.licour.com/blogfiles/fon_mac_v2.tgz.

# cd /tmp
# wget http://www.licour.com/blogfiles/fon_mac_v2.tgz
# tar xzf fon_mac_v2.tgz
# cd fon_mac_v2
# cp -a MAC /jffs

Le repertoire /jffs/MAC contient maintenant un script de configuration et des fichiers de configuration associés.

  • Fichier de configuration

Fichier : /jffs/MAC/fon_allowed_mac.lst Si vous possédez déjà un fichier de configuration issu d'une précédente version, celui-ci reste compatible Sinon, faites une copie du fichier template : fon_allowed_mac.lst.template

  • Modifier le fichier de configuration

En précisant les adresses IP fixes que vous voulez utiliser sur le WLAN et sur le WAN

  • Lancement automatique

Ajout le code suivant dans votre script /etc/init.d/S90user

# Execution script de configuration d'iptables de NAT statique
if [ -f /jffs/MAC/fon_nat.sh ]
then
  /jffs/MAC/fon_nat.sh
fi

Ce script permet la création automatique des alias de l'interface WAN (affectation des IP statiques WAN) et l'ajout des règles de translation iptables.

  • Lancement du script de configuration
# ./fon_update_mac.sh
[*] Process allowed MAC with DHCP
  -> Found MAC : 00-11-22-33-44-55
[*] Process allowed MAC with static WLAN IP (172.21.1.16 as WAN IP)
  -> Found MAC : 00-22-33-44-55-66,192.168.182.128
[*] Process allowed MAC with static WLAN IP and static WAN IP
  -> Found MAC : 00-33-44-55-66-77,192.168.182.129,10.0.0.129
[*] updated /etc/freeradius/users
[*] Removing old vlan1 aliases
[*] Filling iptables postrouting_mynat chain
[*] Creating vlan1 aliases
[*] updated iptables script
[*] updated /jffs/MAC/fon_chillispot.sed
[*] restarting chillispot
Reboot your router could help you...



Détails techniques :

Grâce au script /jffs/MAC/fon_nat.sh, vous devriez normalement voir de nouvelles interfaces vlan1:??

# ifconfig
...
vlan1     Link encap:Ethernet  HWaddr 00:xx:xx:xx:xx:xx
          inet addr:10.0.0.10  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:58758 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10790 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:5211506 (4.9 MiB)  TX bytes:1563161 (1.4 MiB)
vlan1:129  Link encap:Ethernet  HWaddr 00:xx:xx:xx:xx:xx
          inet addr:10.0.0.129  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
...


Ainsi qu'une nouvelle chaîne iptables :

root@fon:/jffs/MAC# iptables -t nat -L POSTROUTING -n
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
postrouting_mynat  all  --  0.0.0.0/0            0.0.0.0/0
postrouting_rule  all  --  0.0.0.0/0            0.0.0.0/0
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0
root@fon:/jffs/MAC# iptables -t nat -L postrouting_mynat -n
Chain postrouting_mynat (1 references)
target     prot opt source               destination
SNAT       all  --  192.168.182.129      0.0.0.0/0           to:10.0.0.129


La configuration freeradius inclus maintenant la notion d'IP affectée à l'adresse MAC.

/etc/freeradius/users
"00-11-22-33-44-55" Auth-Type := Local, User-Password == "password"
"00-22-33-44-55-66" Auth-Type := Local, User-Password == "password"
 Framed-IP-Address = 192.168.182.128
"00-33-44-55-66-77" Auth-Type := Local, User-Password == "password"
 Framed-IP-Address = 192.168.182.129


La configuration chillispot est modifiée en ajoutant les options de gestion des plages IP statiques et DHCP

/etc/chilli.conf
...
dynip 192.168.182.0/25
statip 192.168.182.128/25

jeudi 10 mai 2007

Filtrer le trafic FON par squidguard

Il peut sembler utile de filtrer le trafic FON par du contrôle de contenu. Je ne tiens pas à ce que ma connexion internet serve de lieu de transit à du contenu illégal.

La solution que j'ai utilisé consiste à mettre en place un proxy transparent entre mon routeur FON (un wrt54g et internet. Cette configuration permet la mise en place d'un proxy, sans que l'utilisateur ai besoin de modifier son navigateur. Tous les flux web passeront obligatoirement par le proxy, sans même que l'utilisateur le sache.

Un proxy squid a été utilisé, muni du redirector squidguard pour tout ce qui est filtrage de contenu.

Le proxy est situé côté WAN par rapport à FON, c'est à dire situé sur mon LAN, sur un serveur linux me servant déjà de proxy explicite pour les machines de mon LAN.

Une configuration spécifique au squid est nécessaire pour le rendre compatible en mode de fonctionnement transparent (sur la machine squid) :

/etc/squid/squid.conf
 httpd_accel_host virtual
 httpd_accel_port 80
 httpd_accel_with_proxy  on
 httpd_accel_uses_host_header on

Il faut ensuite modifier la configuration du routeur FON pour qu'il envoi les flux web vers le serveur proxy (adresse IP : 10.0.0.10) :

/etc/init.d/S90user
iptables -t nat -A prerouting_rule -i tun0 -p tcp --dport 80 -j DNAT --to 10.0.0.10:3128
iptables -I WAN_HOOK -p tcp --dport 3128 -d 10.0.0.10 -j ACCEPT

La première règle permet de mettre en place la redirection de trafic. La seconde règle permet d'autoriser les flux WLAN (les clients) vers le proxy situé sur le WAN (trafic interdit par défaut).

A partir de ce moment, tous les flux web seront dirigés vers le proxy squid, où vous pourrez activer (au choix) :

  • le caching des pages
  • le filtrage de contenu
  • le filtrage anti virus
  • le filtrage d'URL
  • la tracabilité
  • ...

Attention : L'authentification par le proxy n'est pas possible en mode transparent (le navigateur ne s'attendant pas à en utiliser)

A noter que ce mode de proxy transparent ne concerne que le protocole HTTP sur le port 80/tcp. Le protocole HTTPS n'est pas compatible avec ce mode et doit donc passer en direct.

Dans le cas d'un filtrage par squidguard, il est possible de mettre en place une page web où l'utilisateur est redirigé en cas de non conformité à la politique. Cette page ne peut par défaut pas être situé sur une machine située sur le WAN (car l'utilisateur n'y a pas accès). Le rajout d'une règle firewall peut alors être nécessaire.

Note : ce howto concerne le routeur WRT54g et non la fonera (pour le moment)

mercredi 9 mai 2007

Administrer un routeur FON depuis le WAN

Quel intérêt ?

Mon routeur FON (un wrt54g ) est situé derrière mon LAN et non directement sur internet. Le WLAN au sens FON est donc mon LAN, et il est donc judicieux de pourvoir administrer le routeur depuis ce réseau.

Pour effectuer cette manipulation, il est nécessaire de modifier le paramétrage du firewall. Ces modifications s'effectuent via des règles iptables, à reproduire à chaque reboot.

Il est donc necessaire de se créer un hook sur le système permettant d'insérer ces modifications. La création du fichier script suivant a cet effet :

/etc/init.d/S90user
iptables -A input_vlan1 -p tcp --dport 22 -j ACCEPT
iptables -A input_vlan1 -p tcp --dport 80 -j ACCEPT

dimanche 17 décembre 2006

Connecting a Nintendo DS on FON

(version française)

I succeded to connect a Nintendo DS through a FON Wifi connection, based on creating a MAC based's authorisation mecanism. Adding MAC address in a local MAC database let any equipement (DS, PC, PDA...) to connect through FON connection without the portal based's standard authentication mecanism. If the MAC is not in the database, standard authentication (portal based) will be there.

Please note that these modifications create a hole in the router, that can be exploit by spoofing... (however, FON use *un*encrypted communications...)

My FON router is a WRT54g with firmware FON Beta 0.6.6 and this howto is based on this hardware. Test have not been made on La Fonera , but it could work (based on firmware openWRT)


CAUTION : I discourage you to follow this Howto if you don't know what openWRT is and if you have any idea how to repair your rpouter if something goes wrong...

First, material for this operation is available here : http://www.licour.com/blogfiles/fon_mac.tgz.

You'll have to install freeradius on your router, as well as modify chillispot configuration. Here are the operations :

  • set write mode on /etc/ipkg.conf
cp -f /rom/etc/ipkg.conf /etc/ipkg.conf
  • Add the following ipkg source (openwrt one) :
/etc/ipkg.conf
...
src openwrt http://downloads.openwrt.org/whiterussian/packages/
...
  • Install freeradius packages :
# 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.

Other packages will be install during these operations. Here are the packages that were installed on my router

- 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

Caution : Adding these packages consume large storage space (~ 800Ko), and perhaps you'll have to free some space if you have already installed other packages.

  • install materials

To simplify, i created an archive with all configurations files : 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

There is now a script and confi files inside the directory /jffs/MAC

  • Freeradius configuration
# cp freeradius/* /etc/freeradius/
# ln -s /etc/init.d/radiusd /etc/init.d/S60freeradius

This install freeradius config files. Freeradius will now be start on boot

  • Chillispot configuration

This will modify chillispot's startup script to use specific options

# rm /etc/init.d/chillispot
# cp chillispot /etc/init.d/chillispot
  • Manage allowed MAC address :

You'll have to complete this file with your MAC addresses :

/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

After each modification, this script have to be launch :

# /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 the router
# reboot

enjoy...

Connecter une Nintendo DS sur FON

(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.

  • Installation des outils

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...
  • Rebooter le routeur
# 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.