8. Association sans authentification

Ce premier exemple sert à mettre en place la configuration minimale nécessaire à la validation des communications radio. Il permet aussi d'illustrer le fonctionnement des outils utilisés.

Les caractéristiques générales de cet exemple sont les suivantes :

  • Identification du service Wi-Fi (SSID) : open

  • Réseau local virtuel (VLAN) utilisé sur le routeur ISR 877W : numéro 2

  • Réseau IP utilisé : 192.168.1.0/24

8.1. Configuration du point d'accès : routeur ISR 877W

On commence de façon très classique par la version du système d'exploitation utilisée et par la liste des interfaces réseau reconnues.

Cisco IOS Software, C870 Software (C870-ADVIPSERVICESK9-M), Version 12.4(20)T, RELEASE SOFTWARE (fc3)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2008 by Cisco Systems, Inc.
Compiled Fri 11-Jul-08 06:08 by prod_rel_team

<snipped/>

Cisco 877W (MPC8272) processor (revision 0x300) with 118784K/12288K bytes of memory.
Processor board ID FCZ113860FX
MPC8272 CPU Rev: Part Number 0xC, Mask Number 0x10
4 FastEthernet interfaces
1 ATM interface
1 802.11 Radio
128K bytes of non-volatile configuration memory.
28672K bytes of processor board System flash (Intel Strataflash)

On décrit ensuite les éléments de configuration minimale à partir des commandes ci-dessous.

  • Configuration du pont au niveau global.

    ! Activation de la fonction Integrated Routind and Bridging
    bridge irb
    ! Choix du protocole Spanning Tree
    bridge 2 protocol ieee
    ! Activation du routage des paquets sur l'interface virtuelle de pont 
    ! BVI: Bridge Virtual Interface
    bridge 2 route ip
    
  • Configuration de l'interface de pont.

    ! Interface virtuelle activée automatiquement
    interface BVI2
    ip address 192.168.1.2 255.255.255.0
    
  • Configuration de l'identificateur de service Wi-Fi (SSID) au niveau global.

    dot11 ssid open
    vlan 2
    authentication open
    guest-mode
    
  • Configuration de l'interface Wi-Fi.

    interface Dot11Radio0
    ! Adresse IP affectée au niveau pont (BVI2)
    no ip address
    ! Choix du mode de chiffrement minimal
    encryption mode wep optional
    ! Correspondance avec le SSID défini
    ssid open
    ! Sous interface propre au VLAN 2 et appartenant au pont 2
    interface Dot11Radio0.2
     encapsulation dot1Q 2
     bridge-group 2
    
  • Configuration de l'interface de réseau local virtuel (Switched Virtual Interface ou SVI).

    interface Vlan2
    ! Adresse IP affectée au niveau pont (BVI2)
    no ip address
    ! Interface appartenant au pont 2
    bridge-group 2
    
  • Configuration des interfaces filaires dans le VLAN numéro 2.

    int range fa0 - 3
    switchport access vlan 2
    

8.2. Configuration de la station sans outil d'authentification

On procède de la même façon que dans la section précédente sur la configuration du point d'accès. On donne les caractéristiques de la station utilisée un ordinateur portable.

  • Interface réseau sans-fil reconnue par le noyau Linux :

    $ lspci | grep -i network
    0c:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)
    

    Sur un ordinateur portable «moderne», l'interface de réseau sans fil est intégrée sur la carte mère. On retrouve cette interface dans la liste des périphériques connectés au bus PCI.

  • Liste des interfaces ayant des fonctions réseau sans-fil :

    # iwconfig
    lo        no wireless extensions.
    
    eth0      no wireless extensions.
    
    wmaster0  no wireless extensions.
    
    wlan0     IEEE 802.11  ESSID:""
              Mode:Managed  Frequency:2.447 GHz  Access Point: Not-Associated
              Tx-Power=15 dBm
              Retry min limit:7   RTS thr:off   Fragment thr=2352 B
              Encryption key:off
              Link Quality:0  Signal level:0  Noise level:0
              Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
              Tx excessive retries:0  Invalid misc:0   Missed beacon:0
    

    On relève qu'à ce stade de la configuration aucun identifiant de cellule Wi-Fi n'est affecté (ESSID:"") et que l'interface n'est associée à aucun point d'accès : Access Point: Not-Associated.

  • Liste des interfaces disponibles à la configuration :

    # ifconfig 
    <snipped/>
    wlan0     Link encap:Ethernet  HWaddr 00:1f:3c:54:5e:65  
              UP BROADCAST MULTICAST  MTU:1500  Metric:1     
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000              
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)              
    
    wlan0:avahi Link encap:Ethernet  HWaddr 00:1f:3c:54:5e:65  
              inet adr:169.254.5.5  Bcast:169.254.255.255  Masque:255.255.0.0
              UP BROADCAST MULTICAST  MTU:1500  Metric:1                     
    
    wmaster0  Link encap:UNSPEC  HWaddr 00-1F-3C-54-5E-65-00-00-00-00-00-00-00-00-00-00  
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1                         
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0                         
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0                       
              collisions:0 lg file transmission:1000                                     
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)                                     
    

    On relève qu'aucune adresse IP n'a été affectée à l'interface Wi-Fi.

Une fois que l'on a validé le fonctionnement de l'interface de réseau sans fil, on passe aux tests de communication. Comme nous sommes dans un cas extrêmement simple, on peut se contenter d'une configuration à la console.

  • On désactive les paramètres activés lors de l'initialisation du système d'exploitation.

    # ifdown wlan0
    There is already a pid file /var/run/dhclient.wlan0.pid with pid 5901
    killed old client process, removed PID file                          
    Internet Systems Consortium DHCP Client V3.1.1                       
    Copyright 2004-2008 Internet Systems Consortium.                     
    All rights reserved.                                                 
    For info, please visit http://www.isc.org/sw/dhcp/                   
    
    wmaster0: unknown hardware address type 801
    wmaster0: unknown hardware address type 801
    Listening on LPF/wlan0/00:1f:3c:54:5e:65   
    Sending on   LPF/wlan0/00:1f:3c:54:5e:65   
    Sending on   Socket/fallback               
    
  • On affecte l'identifiant de réseau Wi-Fi.

    # iwconfig wlan0 essid open
    # iwconfig 
    <snipped/>
    
    wlan0     IEEE 802.11  ESSID:"open"
              Mode:Managed  Frequency:2.447 GHz  Access Point: Not-Associated
              Tx-Power=15 dBm
              Retry min limit:7   RTS thr:off   Fragment thr=2352 B
              Encryption key:off
              Link Quality:0  Signal level:0  Noise level:0
              Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
              Tx excessive retries:0  Invalid misc:0   Missed beacon:0
    
  • On vérifie que l'association avec le point d'accès se fait bien ; dès que l'interface est active.

    # ifconfig wlan0 up
    # iwconfig 
    <snipped/>
    
    wlan0     IEEE 802.11  ESSID:"open"
              Mode:Managed  Frequency:2.447 GHz  Access Point: 00:1D:45:B7:EF:00
              Bit Rate=54 Mb/s   Tx-Power=15 dBm
              Retry min limit:7   RTS thr:off   Fragment thr=2352 B
              Encryption key:off
              Link Quality=100/100  Signal level=-19 dBm  Noise level=-60 dBm
              Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
              Tx excessive retries:0  Invalid misc:0   Missed beacon:0
    

    On relève l'adresse MAC du point d'accès auquel l'interface est associée (Access Point: 00:1D:45:B7:EF:00) ainsi que les paramètres qualitatifs de la couverture radio. Voir Section 3.1, « Commande iwconfig ».

  • La configuration du niveau réseau ne présente pas difficulté. Elle se fait soit manuellement soit à l'aide du client DHCP lorsque ce service est disponible. Voir la référence Configuration d'une interface réseau.

    # dhclient3 wlan0
    Internet Systems Consortium DHCP Client V3.1.1
    Copyright 2004-2008 Internet Systems Consortium.
    All rights reserved.
    For info, please visit http://www.isc.org/sw/dhcp/
    
    wmaster0: unknown hardware address type 801
    wmaster0: unknown hardware address type 801
    Listening on LPF/wlan0/00:1f:3c:54:5e:65
    Sending on   LPF/wlan0/00:1f:3c:54:5e:65
    Sending on   Socket/fallback
    DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8
    DHCPOFFER from 192.168.1.1
    DHCPREQUEST on wlan0 to 255.255.255.255 port 67
    DHCPACK from 192.168.1.1
    bound to 192.168.1.103 -- renewal in 690 seconds.
    
[Note] Comment éviter les HotSpots ?

Suivant le contexte de couverture radio, il est fort probable que les manipulations soient perturbées par la présence de point d'accès de type HotSpots. Ces points d'accès émettent des trames de type beacon à un rythme assez élevé.

Pour éviter une association à un point d'accès HotSpot, on peut utiliser les commandes de configuration dans l'ordre suivant :

  1. Désactivation de l'interface : ifdown wlan0

  2. Affectation du SSID voulu : iwconfig wlan0 essid open

  3. Activation de l'interface : ifconfig wlan0 up

  4. Réaffectation du SSID voulu : iwconfig wlan0 essid open

En tout état de cause, un recensement des points d'accès présents dans la zone de couverture radio permet de repérer les «éléments perturbateurs». Voir Section 4, « Utilisation de kismet ».

Le tour est joué ! Il est maintenant possible de communiquer avec l'Internet «en clair» dans la zone de couverture radio du point d'accès sachant qu'il est lui même raccordé à une passerelle via le réseau filaire. Cette configuration correspond presque aux hotspots disponibles dans les lieux publics. Il manque le portail captif opérateur qui permet «d'extorquer des sommes exorbitantes» aux usagers isolés qui n'ont pas d'autre solution de communication.

Enfin, il reste à afficher les messages des systèmes permettant de confirmer que les opérations de configuration se sont bien déroulées.

  • Côté station, les messages systèmes donnent les informations sur le fonctionnement de l'interface réseau sans fil IEEE 802.11.

    # dmesg
    <snipped/>
    Registered led device: iwl-phy0:radio
    Registered led device: iwl-phy0:assoc
    Registered led device: iwl-phy0:RX
    Registered led device: iwl-phy0:TX
    ADDRCONF(NETDEV_UP): wlan0: link is not ready
    wlan0: Initial auth_alg=0
    wlan0: authenticate with AP 00:1d:45:b7:ef:00
    wlan0: RX authentication from 00:1d:45:b7:ef:00 (alg=0 transaction=2 status=0)
    wlan0: authenticated
    wlan0: associate with AP 00:1d:45:b7:ef:00
    wlan0: RX AssocResp from 00:1d:45:b7:ef:00 (capab=0x421 status=0 axml:id=4)
    wlan0: associated
    wlan0: switched to short barker preamble (BSSID=00:1d:45:b7:ef:00)
    ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
    wlan0: no IPv6 routers present
    

    Le message wlan0: link becomes ready déclenche les opération de configuration de niveau réseau une fois la partie association effectuée. On retrouve les étapes du synoptique ci dessous.

       __________             _¡_____¡_
      |    STA   |           |    AP   |
       ¯¯¯¯¯¯¯¯¯¯             ¯¯¯¯¯¯¯¯¯
                     <--- beacons
       probe request --->
                     <--- probe response
       authentication request --->
                     <--- authentication response
       association request --->
                     <--- association response
    
  • Côté point d'accès, les mêmes éléments sont présents dans les journaux systèmes et dans la table des associations.

    #sh dot11 associations
    
    802.11 Client Stations on Dot11Radio0:
    
    SSID [open] :
    
    MAC Address    IP address      Device        Name            Parent         State
    001f.3c54.5e65 192.168.1.103   unknown       -               self           Assoc
    
    #sh dot11 statistics client-traffic
    Clients:
    4-001f.3c54.5e65 pak in 9387 bytes in 1288304 pak out 5915 bytes out 2475207
          dup 170 decrpyt err 0 mic mismatch 0 mic miss 0
          tx retries 280 data retries 280 rts retries 0
          signal strength 32 signal quality 130
    

8.3. Configuration de la station avec les outils d'authentification

Dans la section précédente, toutes les opérations réalisées à la console sont à répéter à chaque réinitialisation du système sachant qu'aucune sauvegarde de la configuration n'a été faite. L'objectif de cette section est justement de mettre en place une configuration sauvegardée. De plus, on présente les outils qui vont permettre d'utiliser différentes méthodes d'authentification par la suite.

Pour être capable de sauvegarder une configuration avec ou sans authentification il faut d'abord spécifier qu'une interface est de type Wi-Fi et qu'elle a recours à un supplicant.

Sur un système Debian GNU/Linux, c'est le fichier /etc/network/interfaces qui contient les paramètres de niveau 3 (IP) des interfaces réseau. Les paquets wpasupplicant et wpagui fournissent le logiciel nécessaire au processus conduisant à l'association de la station au point d'accès au niveau 2 (MAC).

De façon classique, on obtient les informations sur les paquets relatifs au supplicant en interrogeant le gestionnaire de paquets.

# dpkg -l wpa* |grep ^ii
ii  wpagui          0.6.4-1   GUI for wpa_supplicant
ii  wpasupplicant   0.6.4-1   Client support for WPA and WPA2 (IEEE 802.11i)

La principale ressource documentaire se trouve dans le fichier /usr/share/doc/wpasupplicant/README.Debian.gz du paquet wpasupplicant. Le mode de configuration le plus intéressant et celui utilisé dans ce document est baptisé Mode #2: Roaming Mode. Ce mode offre plusieurs fonctionnalités intéressantes.

Comme son nom l'indique, le mode «vagabondage» (roaming) doit supporter plusieurs configurations suivant la zone de couverture radio dans laquelle se trouve la station : lieu public, infrastructure d'entreprise, réseau domestique, etc. Le système de la station doit donc pouvoir changer de configuration dynamiquement sans qu'il soit nécessaire de le réinitialiser. Dans le contexte de ce document, il est possible d'interagir avec le supplicant et de tester les paramètres de configuration au cas par cas.

Voici une copie du fichier /etc/network/interfaces faisant appel au supplicant en mode roaming. Aucune définition d'infrastructure de réseau sans-fil n'a encore été implantée dans ce fichier.

# The loopback network interface
auto lo
iface lo inet loopback

# The Ethernet network interface
allow-hotplug eth0
iface eth0 inet dhcp

# The Wi-Fi network interface
allow-hotplug wlan0
iface wlan0 inet manual1
        wpa-driver wext2
        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf3

Ce fichier comprend trois interfaces :

  • L'interface de boucle locale lo nécessaire aux communications réseau (TCP/IP) entre les processus locaux exécutés sur la station.

  • L'interface filaire Ethernet eth0 dont la configuration réseau est obtenue dynamiquement via le service DHCP.

  • L'interface Wi-Fi wlan0 est configurée en mode manuel. Ses paramètres sont détaillés ci-après.

1

L'interface de réseau sans-fil est placée en mode manuel pour la configuration du niveau réseau sachant que l'on doit faire appel à un service particulier pour la configuration au niveau liaison : le supplicant. C'est cet outil qui est responsable de la gestion des associations entre la station (STA) et les différents point d'accès (AP) accessibles.

La configuration du niveau réseau se fait à partir d'un identifiant d'interface partagé entre les fichiers de configuration du supplicant et celui des interfaces ; c'est à dire le fichier présenté ci-dessus (/etc/network/interfaces).

2

Le paramètre wpa-driver désigne l'interface logicielle d'échange entre le supplicant et le pilote d'interface réseau. La valeur wext correspond au mode d'échange par défaut sachant que l'interface utilisée dans cet exemple est de marque Intel™.

3

Le paramètre wpa-roam désigne le fichier de configuration du supplicant. C'est ce fichier qui doit contenir la liste des réseaux sans-fils auxquels la station est susceptible de se connecter. Pour chacun des réseaux sans-fils utilisables, un certain nombre de paramètres doivent doivent être présents. Les plus importants sont l'identifiant de cellule ou d'infrastructure et les méthodes d'authentification.

Voici une copie du fichier de configuration du supplicant avant introduction de définition de réseau sans-fil.

# cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant1
update_config=12

1

Le paramètre ctrl_interface désigne le répertoire contenant le socket de communication avec l'interface réseau sans-fil.

2

La valeur du paramètre update_config autorise la mise à jour dynamique du fichier de configuration à partir des logiciels wpa_gui et wpa_cli.

Avant de se lancer dans les opérations de configuration avec l'interface graphique fournie par le paquet wpagui, il faut que l'utilisateur normal ait la capacité à utiliser cette interface. Dans ce but, on doit déléguer les droits d'utilisation du programme /usr/sbin/wpa_gui en suivant la démarche donnée dans la Section 4.2.1, « Délégation des droits d'accès avec sudo ». La ligne concernant l'utilisateur normal phil du fichier /etc/sudoers devient :

phil    ALL=NOPASSWD: /sbin/iwspy, /sbin/iwconfig, /usr/bin/kismet, /usr/sbin/wpa_gui

À partir de cette étape, on peut lancer les opérations de configuration en dialoguant avec le supplicant via le socket dédié à l'interface. Voici un exemple d'identification de l'exécution du processus supplicant et du socket de communication avec l'interface réseau wlan0.

# ps auxww |grep wpa |grep -v grep
root      2801  0.0  0.0  21020  1020 ?        S<s  09:42   0:00 \
        /sbin/wpa_supplicant -B -P /var/run/wpa_supplicant.wlan0.pid \
        -i wlan0 -D wext -q -f /var/log/wpa_supplicant.wlan0.log \
        -C /var/run/wpa_supplicant

# ll /var/run/wpa_supplicant/wlan0
srwxrwx--- 1 root root 0 aoû 20 09:42 /var/run/wpa_supplicant/wlan0

Voici les copies d'écran présentant la mise en place de la configuration minimale sans authentification.

  1. Lancement de wpagui.

    $ sudo wpa_gui
    Selected interface 'wlan0'
    Trying to connect to '/var/run/wpa_supplicant/wlan0'
    
  2. Une fois l'application lancée, la première opération à faire est de lancer un recensement des points d'accès visibles depuis la station en utilisant le bouton SCAN.

  3. Un nouvel appui sur le bouton SCAN lance la reconnaissance des points d'accès accessibles.

    Le résultat du recensement donne la liste des cellules visibles de la station avec leurs identifiants SSID ainsi que les modes d'authentification supportés. Ces informations sont issues des trames de requête probe émises par la station en direction des différents points d'accès «visibles». Cette «visibilité» dépend elle-même des trames beacon émises par les points d'accès.

  4. Un double click sur le SSID du réseau Wi-Fi voulu ouvre une fenêtre de configuration des paramètres d'authentification.

    Dans le cas présent, on utilise l'identifiant open et il n'est pas nécessaire de modifier les paramètres d'authentification puisque l'on accède à un réseau ouvert.

  5. Enfin, une fois l'association réalisée, il ne reste plus qu'à lancer le client DHCP pour solliciter le serveur, obtenir une configuration réseau IP correcte et une référence de serveur de noms de domaines. Sachant qu'aucune configuration de niveau réseau n'a encore été sauvegardée dans le fichier /etc/network/interfaces, il est nécessaire de lancer manuellement la requête DHCP, à l'aide de la commande : # dhclient3 wlan0. On obtient ainsi une fenêtre du type ci-dessous.

  6. Pour sauvegarder les paramètres de la configuration courante, on passe par le menu File puis par l'option Save Configuration. Cette opération est possible grâce au paramètre update_config=1 préalablement placé dans le fichier /etc/wpa_supplicant/wpa_supplicant.conf.

Le résultat des manipulations réalisées via l'interface graphique du programme wpa_gui se retrouve dans le fichier de configuration du supplicant.

# cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1

network={
        ssxml:id="open"
        key_mgmt=NONE
        id_str=""
}

Cette configuration doit être complétée au niveau réseau en faisant le lien entre le fichier de configuration du supplicant (/etc/wpa_supplicant/wpa_supplicant.conf) et le fichier de configuration de niveau réseau des interfaces (/etc/network/interfaces) via la chaîne de caractères d'identification désignée par le paramètre id_str.

Dans cet exemple, on utilise la chaîne open_testPod et les fichiers de configuration sont édités comme ci-dessous.

  • Fichier /etc/wpa_supplicant/wpa_supplicant.conf :

    ctrl_interface=/var/run/wpa_supplicant
    update_config=1
    
    network={
            id_str="open_testPod"
            ssxml:id="open"
            key_mgmt=NONE
    }
    
  • Fichier /etc/network/interfaces :

    # The Wi-Fi network interface
    allow-hotplug wlan0
    iface wlan0 inet manual
            wpa-driver wext
            wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    
    # id_str="open_testPod"
    iface open_testPod inet dhcp
    

8.4. Configuration de la station pour accéder à un hotspot

Dans les lieux publics, la tendance est au développement de la couverture radio Wi-Fi via un accès de type hotspot. Les opérateurs de téléphonie mobile sont très présents sur ce segment de marché. L'idée force consiste à dupliquer le modèle économique de la téléphonie mobile sur les accès aux réseaux sans-fils. Dans ce contexte, la station doit s'associer à n'importe quel point d'accès, obtenir une configuration réseau complète et se retrouver «piégée» par un portail captif qui intercepte toutes les communications réseau IP. Ce portail captif tient le rôle de point de facturation en fonction du temps de communication de la même façon qu'une carte téléphonique prépayée.

Du point de vue configuration de l'interface de station, on reprend les mêmes éléments que dans la section précédente en omettant de préciser l'identifiant Service Set IDentifier. Les fichiers de configuration sont complétés de la façon suivante :

  • Fichier /etc/wpa_supplicant/wpa_supplicant.conf :

    ctrl_interface=/var/run/wpa_supplicant
    update_config=1
    
    network={
            id_str="open_testPod"
            ssxml:id="open"
            key_mgmt=NONE
    }
    
    network={
            id_str="hotspot"
            ssxml:id=""
            key_mgmt=NONE
    }
    
  • Fichier /etc/network/interfaces :

    # The Wi-Fi network interface
    allow-hotplug wlan0
    iface wlan0 inet manual
            wpa-driver wext
            wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    
    # id_str="open_testPod"
    iface open_testPod inet dhcp
    
    # id_str="hotspot"
    iface hotspot inet dhcp
    

8.5. Chiffrement du trafic de la station avec ipsec

Dans le contexte des sections précédentes, le trafic réseau IP émis depuis la station circule «en clair» sur les ondes radio.

# dpkg -l ipsec-tools racoon |grep ^ii
ii  ipsec-tools            1:0.7.1-1                IPsec tools for Linux
ii  racoon                 1:0.7.1-1                IPsec IKE keying daemon