Description / How-To...

Ce tutorial / How-To décrit l’installation du serveur captif Chillispot sur un routeur sans-fil Linksys WRT54G, flashé avec le firmware openwrt en version expérimentale.

N’hésitez pas à m’envoyer un petit mail pour toute remarque et améliorer ce How-To. J’ai également écrit une documentation sur l’installation de chillispot sur une Debian, disponible ici : Installation de chillispot sur une Debian sarge (testing)

Rq : les commentaires dans le code sont en italique : exemple de commentaire ou /* autre commentaire */

Chillispot

Le logiciel ChilliSpot est un portail web captif destiné à "sécuriser" le partage d’une connexion sans-fil en redirigeant les utilisateurs vers une page web sur laquelle ils doivent s’authentifier via https avec un login/mot de passe, stoqué dans un serveur Radius. Pour cela, ChilliSpot crée une nouvelle interface réseau tun0 par laquelle tout le trafic sans-fil passera et sera filtré.

Architecture

- routeur WRT54G :

interface LAN [1] 192.168.1.1
interface WLAN [2] 192.168.182.1
interface WAN [3] 10.0.0.10
passerelle par défaut/gateway 10.0.0.1

- PC (serveur) relié au switch du WRT54G :

interface LAN 192.168.1.2
masque de sous réseau/netmask 255.255.255.0
passerelle par défaut/gateway 192.168.1.1

Installation de openwrt sur WRT54G

Télécharger le firmware expérimental sur le site openwrt.org

Uploader le firmware sur votre routeur par tftp avec le logiciel aftp (Advanced TFTP) (de préférence, n’utilisez-pas netkit-tftp: j’ai eu beaucoup de problèmes avec).


$ tftp
tftp> connect 192.168.1.1
tftp> mode octet
mode set to octet
tftp> trace
Packet tracing on.
tftp> verbose
Verbose mode on.
tftp> put openwrt-wrt54g-squashfs.bin

Si tout se passe correctement [4], vous pouvez vous connecter en telnet sur le routeur et modifier le mot de passe. Le serveur telnet sera alors désactivé et vous pourrez ensuite vous connecter en ssh sur votre routeur :


$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
You need to set a login password to protect your
Router from unauthorized access.

Use 'passwd' to set your password.
telnet login will be disabled afterwards,
You can then login using SSH.



BusyBox v1.00 (2005.04.23-22:18+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

 _______                     ________        __
|       |.-----.-----.-----.|  |  |  |.----.|  |_
|   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
|_______||   __|_____|__|__||________||__|  |____|
         |__| W I R E L E S S   F R E E D O M
         
root@OpenWrt:/# passwd

Après la modification de votre mot de passe, rebootez votre routeur et connectez-vous en ssh :


$ ssh root@192.168.1.1
root@192.168.1.1's password:


BusyBox v1.00 (2005.04.23-22:18+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

 _______                     ________        __
|       |.-----.-----.-----.|  |  |  |.----.|  |_
|   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
|_______||   __|_____|__|__||________||__|  |____|
         |__| W I R E L E S S   F R E E D O M
         
root@OpenWrt:~#

Configuration des paramètres du réseau sans-fil

Pour un hotspot, en général, la sécurité est désactivée. Dans cet article, Les paramètres du réseau sans-fil sont les suivants :

identifiant réseau (ESSID) monhotspot
canal/channel 10
sécurité désactivée

# nvram set wl0_mode=ap
# nvram set wl0_ssid=monhotspot
# nvram set wl0_auth_mode=open
# nvram set wl0_wep=disabled
# nvram set wl0_channel=10
# nvram commit

Configuration des paramètres TCP/IP

La configuration des paramètres TCP/IP dépend de la version de votre WRT54G.

- WRT54G v1.x

Les interfaces réseau du WRT54G v1.x sont les suivantes :

LAN vlan2
WLAN eth2
WAN vlan1

# nvram set lan_ifname=vlan2
# nvram set lan_proto=static
# nvram set lan_ipaddr=192.168.1.1
# nvram set lan_netmask=255.255.255.0

# nvram set wifi_ifname=eth2
# nvram set wifi_proto=static
# nvram set wifi_ipaddr=0.0.0.0
# nvram set wifi_netmask=0.0.0.0

# nvram set wan_ifname=vlan1
# nvram set wan_proto=static
# nvram set wan_ipaddr=10.0.0.10
# nvram set wan_netmask=255.255.255.0
# nvram set wan_gateway=10.0.0.1
# nvram set lan_dns=10.0.0.1

# nvram commit

# reboot

- WRT54G v2.x/WRT54GS v1.x

Les interfaces réseau du WRT54G v2.x / WRT54GS v1.x sont les suivantes :

LAN vlan0
WLAN eth1
WAN vlan1

# nvram set lan_ifname=vlan0
# nvram set lan_proto=static
# nvram set lan_ipaddr=192.168.1.1
# nvram set lan_netmask=255.255.255.0
# nvram set lan_gateway=0.0.0.0

# nvram set wifi_ifname=eth1
# nvram set wifi_proto=static
# nvram set wifi_ipaddr=0.0.0.0
# nvram set wifi_netmask=0.0.0.0

# nvram set wan_ifname=vlan1
# nvram set wan_proto=static
# nvram set wan_ipaddr=10.0.0.10
# nvram set wan_netmask=255.255.255.0
# nvram set wan_gateway=10.0.0.1
# nvram set lan_dns=10.0.0.1

# nvram commit

# reboot

Installation de Chillispot-1.0RC3-1

A la date de rédaction de cet article, les versions fournies par openwrt sont les suivantes : chillispot-1.0RC3-1 et kmod-tun-2.4.30-1.


# ipkg update

# ipkg install kmod-tun
Downloading http://openwrt.org/downloads/experimental/bin/packages/kmod-tun_2.4.30-1_mipsel.ipk ...
Connecting to openwrt.org[208.185.247.160]:80
kmod-tun_2.4.30-1_mi 100% |**************************************************************************************|  4695       00:00 ETA
Done.
Unpacking kmod-tun...Done.
Configuring kmod-tun...Done.

# ipkg install chillispot

ipkg_depends: Warning: tun-module mentioned in dependency but no package found in /usr/lib/ipkg/lists

Downloading http://openwrt.org/downloads/experimental/bin/packages/chillispot_1.0RC3-1_mipsel.ipk ...
Connecting to openwrt.org[208.185.247.160]:80
chillispot_1.0RC3-1_ 100% |**************************************************************************************| 60574       00:00 ETA
Done.
ipkg_depends: Warning: tun-module mentioned in dependency but no package found in /usr/lib/ipkg/lists
Unpacking chillispot...Done.
Configuring chillispot...Done.

Configuration de chillispot

Le daemon chillispot fournit son propre serveur DHCP, il faut donc désactiver le serveur DHCP :


# rm /etc/init.d/S50dnsmasq

Modifier le fichier /etc/chilli.conf (cf. Installation de chillispot sur une Debian sarge (testing)) et vérifier que la variable dhcpif correspond à l’interface WLAN de votre WRT54G

WRT54G v1.x dhcpif eth2
WRT54G v2.x/WRT54GS v1.x dhcpif eth1

Décommenter les lignes suivantes dans le fichier /etc/chilli.conf

radiusserver1 192.168.1.2IP du serveur d’authentification Radius
radiusserver2 192.168.1.2IP du serveur d’authentification Radius
radiussecret secretradiussecret partagé entre le serveur Radius et le daemon chillispot
radiusnasid WRT54G-ChillispotNAS-ID : identifiant de votre chillispot
radiuslocationid isocc=fr,cc=33,ac=75007,network=monhotspotWISPr-Location-ID de la forme : isocc=PAYS, cc=CODE PAYS, ac=Ville, network=ESSID
radiuslocationname PSF,Invalides
dhcpif eth2pout un WRT54G v1.x ou eth1 pour un WRT54G v2.x/WRT54GS v1.x
uamserver https://192.168.1.2/cgi-bin/hotspotlogin.cgi
uamsecret secretchillisecret partagé entre chilli et le serveur web d’authentification
uamallowed www.chillispot.org,192.168.1.2sites web accessibles sans authentification

Configuration des règles iptables du Firewall

Supprimer les règles iptables fournies par openwrt et les remplacer par le script suivant :

texte - 1.7 ko
S45firewall
règles iptables pour chillispot

# rm /etc/init.d/S45firewall
# cd /etc/init.d
# wget http://www.pervasive-network.org/SPIP/IMG/txt/S45firewall.txt
# mv S45firewall.txt S45firewall
# chmod u+x /etc/init.d/S45firewall

Attention : ce script permet de se connecter en SSH sur le port WAN. Si vous voulez interdire l’accès en SSH depuis Internet sur votre WRT54G, commentez la ligne correspondante dans le script (vous pourrez toujours vous connecter depuis votre réseau filaire LAN).

Installation du serveur d’authentification sous Debian

cf. le chapitre correspondant de l’article : Installation de chillispot sur une Debian sarge (testing). Télécharger le fichier hotspotlogin.cgi et l’installer dans le répertoire cgi-bin de votre serveur web :

texte - 13.1 ko
hotspotlogin.cgi
/usr/lib/cgi-bin/hotspotlogin.cgi

# cd /usr/lib/cgi-bin
# wget http://www.pervasive-network.org/SPIP/IMG/txt/hotspotlogin.txt
# mv hotspotlogin.txt hotspotlogin.cgi
# chmod a+x hotspotlogin.cgi

Dans ce fichier, modifier la variable $uamsecret et mettre la même valeur que dans le fichier /etc/chilli.conf sur le WRT54G


$uamsecret = "secretchilli";

Configuration du serveur Freeradius sous Debian

cf. le chapitre correspondant de l’article : Installation de chillispot sur une Debian sarge (testing)

Dans le fichier /etc/freeradius/clients.conf, ajoutez les lignes suivantes :


client 192.168.1.1 {
      secret            = {{secretradius}} /* mettre le meme secret partagé que dans le fichier /etc/chilli.conf */
       shortname        = openwrt-chillispot
       nastype          = other
}

- Ajoutez un utilisateur dans Freeradius

Modifier le fichier /etc/freeradius/users


Thus0 Auth-Type:=Local, User-Password=="toto"

Test de l’install de Chillispot

cf. le chapitre correspondant de l’article : Installation de chillispot sur une Debian sarge (testing)

Lancer le serveur chillispot sur le routeur WRT54G


# insmod tun
# /etc/init.d/S45firewall
# chilli -f -d

Dernière étape

Si tout fonctionne bien, vous pouvez rendre les changements permanents pour que chillispot soit lancé automatiquement au démarrage du WRT54G


# mv /etc/init.d/chilli /etc/init.d/S60chilli

En cas de problème : firstboot

Si après l’upload du firmware, vous n’arrivez pas à vous connecter au routeur WRT54G, il faut démarrer le routeur dans un mode particulier, appelé "failsafe" (le routeur s’auto-attribue l’adresse IP : 192.168.1.1)
- débrancher le cordon d’alimentation du routeur
- rebrancher le cordon d’alimentation du routeur
- attendre que la diode DMZ s’allume et appuyer 2 secondes sur le bouton reset situé à l’arrière du routeur

Vous devrez alors pouvoir vous connecter en telnet sur le routeur et initialiser le système de fichiers du routeur :


$ telnet 192.168.1.1
root@OpenWrt:~# firstboot

... puis rebooter le routeur

Autres tutoriaux

  • [http://www.howtoforge.com/wireless_hotspot_howto] (décembre 2005)

[1] Local Area Network, réseau filaire

[2] Wireless Local Area Network, réseau sans-fil

[3] Wide Area Network, interface reliée à Internet

[4] en cas de problème, voir le dernier chapitre de cet article