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
ppp0 interface reliée à internet
eth1 interface reliée au réseau sans-fil, adresse IP 192.168.2.1
192.168.2.0/24 plan 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/d... ./ ]

- 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 :

net 192.168.2.0/24 ou laisser commenté pour utiliser la configuration par défaut 192.168.182.0/24
dns1 213.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)
radiuslisten 127.0.0.1 Décommenter sinon l’adresse 0.0.0.0 (NAS-IP-Address) apparaît dans les logs de freeradius
radiusserver1 127.0.0.1 IP du serveur d’authentification Radius
radiusserver2 127.0.0.1 IP du serveur d’authentification Radius
radiussecret secretradius secret partagé entre le serveur Radius et le daemon chilli
radiusnasid WRT54G-Chillispot NAS-ID : identifiant de votre chillispot
radiuslocationid isocc=fr,cc=33,ac=75007,network=MonESSID WISPr-Location-ID de la forme : isocc=, cc=, ac=, network=
radiuslocationname PSF,Invalides WISPr-Location-Name : de la forme ,
dhcpif eth1 nom de l’interface reliée au point d’accès
uamserver https://192.168.2.1/cgi-bin/hotspotlogin.cgi ou mettre https://192.168.182.1/cgi-bin/hotspotlogin.cgi si vous utilisez la configuration par défaut
uamsecret secretchilli mettre le même secret que dans le fichier /usr/lib/cgi-bin/hotspotlogin.cgi
uamlisten 192.168.2.1
uamallowed www.chillispot.org,www.paris...

- 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)