A propos...

Ce HowTo décrit l’installation du portail captif Chillispot sur une distribution Debian en version sarge (testing).

N’hésitez pas à m’envoyer un petit mail pour toute remarque et améliorer ce How-To.

Rq : les commentaires dans le code sont en italique : exemple de 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

Le logiciel ChilliSpot se compose de 2 modules : hotspotlogin.cgi (formulaire web d’authentification) et chilli (daemon). [description à compléter...] Par défaut, hotspotlogin.cgi utilise CHAP-Challenge et CHAP-Password pour communiquer avec le serveur Radius.

Voici les paramètres utilisés pour l’installation de Chillispot pour mon réseau sans-fil (tous les serveurs sont installés sur la même machine) :

Serveur DNS@IP 192.168.2.1
Serveur Apache@IP 192.168.2.1
Serveur Freeradius@IP 192.168.2.1
ppp0interface reliée à internet
eth1interface reliée au réseau sans-fil, adresse IP 192.168.2.1
192.168.2.0/24plan d’adressage du réseau sans-fil

Logiciels nécessaires (testés sur une Debian testing)

Le logiciel Chillispot nécessite que les logiciels suivants soient installés :

- iptables


# apt-get install iptables

- Apache


# apt-get install apache
# apt-get install libapache-mod-ssl

Je ne détaille pas la configuration de apache-ssl : vous pouvez trouver sur Internet de nombreuses documentations sur sa configuration.

- Freeradius


# apt-get install freeradius

Rq : Freeradius n’est pas disponible dans la Debian Woody, mais il existe un backport disponible sur cette source : deb http://ftp.lug.ro/people/gcbirzan/debian/ ./ ]

- Module TUN/TAP

Vous avez besoin du module tun.o (inclus dans les sources du kernel depuis les versions >= 2.4.7). Si vous ne l’avez pas, il faudra recompiler votre kernel (Network device support->Universal TUN/TAP device driver support pour un kernel 2.4.x) Debian ne crée pas le périphérique "tun" automatiquement. Taper les commandes suivantes :


# mkdir /dev/net
# mknod /dev/net/tun c 10 200
# modprobe tun

Vérifier que le fichier /etc/modules.conf contient la ligne suivante : alias char-major-10-200 tun, sinon mettre à jour la liste des alias :


# echo "alias char-major-10-200 tun" >> /etc/modutils/chillispot
# update-modules

Installation de ChilliSpot-0.97

Télécharger puis installer le package debian sur le site de Chillispot


# dpkg -i chillispot_0.97-1_i386.deb

Ce package ne fonctionne pas sur une Woody à cause de la version de glibc... En bas du tutorial sont données des indications pour créer un .deb à partir des sources de chillispot.

- Avertissement au lecteur...

ATTENTION : une mauvaise configuration de ChilliSpot lancé en daemon peut bloquer votre console ou vous empêcher de vous connecter à distance en SSH sur le PC... donc, je vous conseille de ne pas lancer chilli au démarrage tant qu’il n’est pas bien configuré, pour pouvoir rebooter en cas de probleme (# update-rc.d chilli remove). Dans ce tutorial, je vais simplement renommer le fichier.


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

- Installation du CGI hotspotlogin.cgi


# cp /usr/share/doc/chillispot/hotspotlogin.cgi.gz /usr/lib/cgi-bin/
# cd /usr/lib/cgi-bin
# gunzip hotspotlogin.cgi.gz
# chmod a+x hotspotlogin.cgi

- Configuration du CGI hotspotlogin.cgi

Dans le fichier /usr/lib/cgi-bin/hotspotlogin.cgi, décommenter et modifier le paramètre suivant :


$uamsecret =        "secretchilli"        /* secret partagé entre le CGI hotspotlogin.cgi et le daemon chilli */

- Configuration du daemon chilli

Dans le fichier /etc/chilli.conf, décommenter et modifier les paramètres suivants :

net192.168.2.0/24ou laisser commenté pour utiliser la configuration par défaut 192.168.182.0/24
dns1213.36.80.1(le DNS de mon Fournisseur d’accès) ou laisser commenté pour utiliser la configuration par défaut (ie. les DNS spécifiés dans votre /etc/resolv.conf)
radiuslisten127.0.0.1Décommenter sinon l’adresse 0.0.0.0 (NAS-IP-Address) apparaît dans les logs de freeradius
radiusserver1127.0.0.1IP du serveur d’authentification Radius
radiusserver2127.0.0.1IP du serveur d’authentification Radius
radiussecretsecretradiussecret partagé entre le serveur Radius et le daemon chilli
radiusnasidWRT54G-ChillispotNAS-ID : identifiant de votre chillispot
radiuslocationidisocc=fr,cc=33,ac=75007,network=MonESSIDWISPr-Location-ID de la forme : isocc=, cc=, ac=, network=
radiuslocationnamePSF,InvalidesWISPr-Location-Name : de la forme ,
dhcpifeth1nom de l’interface reliée au point d’accès
uamserverhttps://192.168.2.1/cgi-bin/hotspotlogin.cgiou mettre https://192.168.182.1/cgi-bin/hotspotlogin.cgi si vous utilisez la configuration par défaut
uamsecretsecretchillimettre le même secret que dans le fichier /usr/lib/cgi-bin/hotspotlogin.cgi
uamlisten192.168.2.1
uamallowedwww.chillispot.org,www.paris-sansfil.fr,192.168.2.1

- Installation des règles iptables du Firewall

Copier le fichier de règles fourni en example dans le répertoire /etc/ :


# cp /usr/share/doc/chillispot/firewall.iptables /etc/chilli.iptables
# chmod u+x /etc/chilli.iptables

Dans ce fichier, modifier au moins les paramètres EXTIF et INTIF


EXTIF="ppp0"        /* interface reliée à Internet */
INTIF="eth1"        /* interface reliée au point d'accès */

Si ce n’est pas déjà fait, activer le forwarding entre les interfaces réseau. Vérifier la ligne suivante existe dans le fichier /etc/network/options :


ip_forward=yes

puis relancer les services réseau via la commande :


# /etc/init.d/network restart

Configuration de Freeradius

Dans le fichier /etc/freeradius/clients.conf, modifier le paramètre suivant :


client 127.0.0.1 {
       #
       #  The shared secret use to "encrypt" and "sign" packets between
       #  the NAS and FreeRADIUS.  You MUST change this secret from the
       #  default, otherwise it's not a secret any more!
       #
       #  The secret can be any string, up to 32 characters in length.
       #
       #secret         = testing123
       secret          = secretradius /* mettre le meme secret partagé que dans le fichier /etc/chilli.conf */

- Ajouter un utilisateur dans Freeradius

Ajouter dans le fichier /etc/freeradius/users, les lignes suivantes :


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

Personnalisation des règles iptables du Firewall

Pour avoir accès depuis le réseau sans-fil à certains ports de votre serveur, rajoutez les lignes adéquates dans le fichier /etc/chilli.iptables :


# serveur SSH
$IPTABLES -A INPUT -i tun0 -p tcp -m tcp --dport 22  --syn -j ACCEPT
# imap over SSL
$IPTABLES -A INPUT -i tun0 -p tcp -m tcp --dport 993  --syn -j ACCEPT

Test de l’install de ChilliSpot

Redémarrer les services freeradius et chilli


# /etc/init.d/freeradius stop
# /etc/init.d/freeradius start
# ifconfig eth1 0.0.0.0
# /etc/init.d/chilli.test stop /* ou # /etc/init.d/chilli stop si vous n'avez pas renommé le fichier comme indiqué plus haut */
# /etc/init.d/chilli.test start /* ou # /etc/init.d/chilli start si vous n'avez pas resnommé le fichier comme indiqué plus haut) */
# /etc/chilli.iptables

Attention, le daemon chilli fait office de serveur DHCP, donc arrêtez votre serveur DHCP avant de le lancer ou enlevez l’interface eth1 du fichier de configuration /etc/dhcp3/dhcpd.conf


# /etc/init.d/dhcp3-server stop

Sur le poste client sans-fil, si besoin renouveler son adresse IP (sous Microsoft Windows, taper dans une console DOS : ipconfig /renew) puis ouvrir un navigateur et taper une URL, par exemple http://www.google.fr. Vous devriez être redirigé vers le CGI hotspotlogin.cgi pour vous authentifier :

Rentrez votre login/mot de passe. Une page de confirmation apparait et une popup devrait apparaître, indiquant le temps de connexion :

Si tout fonctionne bien, vous pouvez renommer le fichier chilli et rajouter le service au démarrage du serveur :


# mv /etc/init.d/chilli.test /etc/init.d/chilli
# update-rc.d chilli 0123456

Proxy Transparent

Pour ceux que ca intéresse, j’utilise un proxy-cache transparent à base de squid+privoxy pour filtrer les pubs et sites indésirables... J’ai rajouté les 2 lignes suivantes dans le fichier /etc/chilli.iptables :


$IPTABLES -A INPUT -i tun0 -p tcp -m tcp --dport 3128  --syn -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i tun0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Utilisation de PAP

modif le 2005-03-04 ...en cours de redaction...

Création d’un package debian chilliXXXX.deb sur Debian Woody

[à compléter... notes en vrac]


# apt-get install debhelper
# cd /usr/src
# wget http://www.chillispot.org/download/chillispot-0.97.tar.gz
# tar -xvzf chillispot-0.97.tar.gz
# cd chillispot-0.97
# vi debian/rules Remplacer "-name chilli" par "-init-script=chilli"
# dpkg-buildpackage
# cd ..
# dpkg -install chillispot-0.97.deb

Installation de Chillispot sur routeur sans-fil WRT54G (firmware openwrt)

La documentation est disponible sur une page séparée (en cours de rédaction) : Installation de chillispot sur un routeur sans-fil WRT54G-openwrt experimental

Couplage de Freeradius avec MySQL + dialupadmin

La documentation est disponible sur une page séparée : Installation de Freeradius sur une Debian Sarge (testing)