Coova Chilli

Coova Chilli, à quoi ça sert ?

Coova Chilli n’est rien d‟autre qu’ un portail captif, open-source sous la licence GPL. Un portail captif consiste à forcer les clients http d‟un réseau à afficher une page web dans un but d‟authentification avant de pouvoir avoir accès à internet.
Cela est obtenu en interceptant tous les paquets quelles que soient leurs destinations jusqu’à ce que l’utilisateur ouvre son navigateur web et essaie d’accéder à Internet. Le navigateur est alors redirigé vers une page web qui peut demander une authentification et/ou un paiement ou tout simplement demander d’accepter les conditions d’utilisation du réseau. Cette technique est souvent employée pour les accès Wi-Fi et peut aussi être utilisée pour l’accès à des réseaux filaires (ex. hôtels, campus etc.).

Ce dont nous avons besoin :

Afin de faire fonctionner notre Coova-chilli, toute une infrastructure autour de lui doit être mise au point.
Nous aurons besoin d‟une Debian (ou une autre distribution), d’un service Web (apache2), de freeradius, de MySQL, d‟un service DNS, de phpMyAdmin, de daloradius et bien évidemment de Coova-chilli.

Note : Cette manipulation ayant été testée il y a quelques temps, quelques changements peuvent apparaître. 

Le début des hostilités :

Nous allons commencer par configurer les interfaces réseaux.

Dans /etc/network/interfaces, nous allons déclarer 2 interfaces en statiques, eth4 sera l‟interface pour le WAN et eth5 pour le LAN (afin d‟utiliser coova-chilli dans les meilleures conditions) :

# interface vers WAN 
allow-hotplug eth4 
iface eth4 inet static 
   address 192.168.0.5 
   netmask 255.255.255.0 
   gateway 192.168.0.1
# interface vers LAN 
allow-hotplug eth5 
iface eth5 inet static 
   address 10.0.2.1
   netmask 255.255.255.0

Nous allons maintenant procéder au téléchargement des différents paquets qui nous seront utiles :

# apt-get install ssh bind9 apache2 mysql-server phpmyadmin php5 perl build-essential ssl-cert freeradius freeradius-mysql

Un mot de passe pour MySQL nous sera demandé. Dans cette démonstration, le mot de passe « mysqladminsecret » a été choisi.

  • Freeradius :

Dans cette étape nous allons travailler avec le paquet freeradius (qui sera notre serveur d‟authentification) et le paquet freeradius-mysql (qui va travailler avec MySQL pour comptabiliser et authentifier les utilisateurs).

Créons tout d‟abord une base de données dans MySQL, qu‟on appellera « radius » :

# mysql –u root –p
 Enter password : mysqladminsecret
 mysql > CREATE DATABASE radius;
 mysql > quit

Après ça, on va devoir rajouter les tables afin que freeradius puisse fonctionner avec la base de données « radius » :

# mysql –u root –p radius </etc/freeradius/sql/mysql/schema.sql
Enter password : mysqladminsecret
# mysql –u root –p radius < /etc/freeradius/sql/mysql/nas.sql
Enter password : mysqladminsecret

Rajoutons un utilisateur et donnons-lui les privilèges sur la base de données “radius”. Appelons cet utilisateur : « radius » :

# mysql –u root –p
Enter password : mysqladminsecret
mysql > GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY'mysqlsecret';
mysql > FLUSH PRIVILEGES;
mysql > quit

Il va falloir configurer 5 fichiers : clients.conf, radiusd.conf, sql.conf, user et default.
Les 4 premiers se trouvent tous dans /etc/freeradius, le dernier dans /etc/freeradius/sites-available/default.

Ces fichiers vont servir à préciser certaines informations à freeradius, afin que celui-ci puisse se connecter à la base de données.

On se rend dans le fichier sql.conf :

# nano /etc/freeradius/sql.conf

On modifie la ligne « password » : puisqu’on a choisi mysqlsecret comme mot de passe pour radius.

On laisse les autres lignes comme elles sont :

database = « mysql »
 Définit le type de base de données (mysql, mssql, oracle, postgresql)
server = « localhost »
 Définit l‟ip du serveur sql (ici localhost puisque nous sommes sur le même serveur)
login = « radius »
 Définit le login permettant de se connecter au serveur sql
Et on décommente la ligne readclient = yes.

Rendons nous dans le fichier clients.conf :

Ce fichier va permettre d‟autoriser certaines personnes à se connecter.

# nano /etc/freeradius/clients.conf

On trouve la ligne contenant le mot « secret » et on la modifie comme suit :

secret = radiussecret

Le mot de passe par défaut est « testing123 » pour des raisons de sécurité, nous l’avons changé.

Il est possible que le serveur radius ne soit pas sur la même machine que les autres services, dans ce cas on pourra autoriser une ip / un hôte / un range d’ip. Pour configurer cela, il faut se rendre a la fin du fichier de configuration et décommenter les paramètres nécessaires.

On se rend dans le fichier default :

# nano /etc/freeradius/sites-available/default

Dans ce fichier, on retrouve de nombreux paragraphes. Ceux qui nous intéressent sont les suivants : « authorize », « accounting » et « session ».
Il va falloir décommenter dans ces paragraphes les lignes « sql » (afin que freeradius sache qu‟on va utiliser sql).

On va maintenant modifier le fichier radiusd.conf :

# nano /etc/freeradius/radiusd.conf

On y décommente la ligne 680 : $INCLUDE sql.conf
Seule cette ligne est à décommenter pour indiquer à freeradius qu‟il doit prendre en compte le fichier sql.conf afin de pouvoir se connecter à une base de données sql.

Cinquième et dernier fichier à modifier (users):

Dans ce fichier de configuration on entre des utilisateurs autorisés.

A Ligne 90, il existe déjà un exemple de configuration pour un utilisateur (John Doe).

Il suffit donc de recopier les 2 lignes d‟exemple en modifiant le nom d‟utilisateur et le mot de passe.

Dans notre cas, ce n’est utile que dans le cadre du test de freeradius avec la commande « radtest« .
Lorsque ces fichiers ont été modifiés, on peut tester notre serveur freeradius afin de vérifier qu‟il tourne correctement :

# echo “INSERT INTO radcheck(UserName, Attribute, Value) VALUES (‟usercheck‟, ‟Password‟, ‟passcheck‟); “ | mysql –u radius –p radius
Enter password : mysqlsecret

On redémarre le service et on peut utliser la commande radtest:

# /etc/init.d/freeradius restart
# radtest usercheck passcheck 127.0.0.1 0 radiussecret

On doit normalement obtenir quelque chose comme ça :

Nous avons bien un « access-accept » en réponse.

  • Coova-chilli

Voici l‟étape qui nous intéresse le plus. Nous tenterons donc d’être le plus précis possible.

Retournons dans le répertoire root :

# cd /root
# wget http://ap.coova.org/chilli/coova-chilli_1.2.2_i386.deb

On va se servir de dpkg pour installer coova-chilli :

# dpkg –i coova-chilli_1.2.2_i386.deb

Pour pouvoir configurer le serveur apache (dans l’étape suivante), on va devoir mettre en place certains fichiers :

# cp /etc/chilli/defaults /etc/chilli/config
# mkdir /var/www/hotspot
# cd /var/www/hotspot
# cp /etc/chilli/www/* /var/www/hotspot
# mkdir /var/www/hotspot/images
# cp /var/www/hotspot/coova.jpg /var/www/hotspot/images/
# mkdir /var/www/hotspot/uam
# cd /var/www/hotspot/uam
# wget http://ap.coova.org/uam/
# wget http://ap.coova.org/js/chilli.js

Occupons-nous maintenant du fichier chilli.js. A l‟aide de la commande sed, nous allons remplacer facilement une chaine de caractère dans ce fichier.

# sed –i 's/ap.coova.org\/js\/chilli.js/10.0.2.1\/uam\/chilli.js/g' /var/www/hotspot/uam/index.html
# sed –i 's/192.168.182.1/10.0.2.1/g' /etc/chilli/www/ChilliLibrary.js
# sed –i 's/192.168.182.1/10.0.2.1/g' /var/www/hotspot/ChilliLibrary.js

La première commande va permettre de modifier index.html en remplaçant ap.coova.org/js/chilli.js par 10.0.2.1/uam/chilli.js.
Les deux autres commandes vont permettre de remplacer 192.168.182.1 par la bonne adresse IP (10.0.2.1) dans les différents fichiers.
Le s/ signifie substitution c’est-à-dire que la commande va changer toutes les occurrences de l‟expression régulière dans une nouvelle valeur.
Le /g signifie global, ce qui indique que toutes les occurrences dans chaque ligne doivent être remplacées.

On se rend ensuite dans le fichier chilli :

# nano /etc/default/chilli

Et on va mettre un 1 (à la place du 0) à la ligne « START_CHILLI », ce qui va permettre à chilli de démarrer sans reboot.

Nous pouvons démarrer coova-chilli :

# /etc/init.d/chilli start

Une fois le service lancé, on constate que l‟interface tun0-00 est apparue :

Nous pouvons maintenant nous occuper du fichier le plus important :

# nano /etc/chilli/config

Explication de ce fichier:

HS_WANIF=eth4 : Interface menant à Internet
HS_LANIF=eth5 : Interface reliée aux clients
HS_NETWORK=10.0.2.0 : L’adresse réseau du Hotspot
HS_NETMASK=255.255.255.0 : Le masque réseau du Hotspot
HS_UAMLISTEN=10.0.2.1 : L’adresse IP du Hotspot
HS_UAMPORT=3990 : C’est le port TCP qui est lié à l‟authentification des clients, si un client non   authentifié tente de se rendre sur internet, il sera redirigé sur ce port-là, à l‟adresse IP spécifiée plus haut.
HS_UAMUIPORT=4990 : Port permettant de contacter le portail captif
HS_DNS1=10.0.2.1 : L’adresse IP du DNS
HS_DNS2=10.0.2.1 : Puisqu’on utilise un seul DNS, on met le même ici
HS_NASID=nas01 : L’identifiant du serveur d‟accès réseau, par défaut nas0
HS_RADIUS=127.0.0.1 : On marque ici l‟adresse IP du serveur d‟authentification
HS_RADIUS2=127.0.0.1 : On réécrit la même chose
HS_UAMALLOW=10.0.2.0/24 : On reprend ici l’adresse réseau et le masque
HS_RADSECRET=radiussecret : On précise le mot de passe qu’on avait choisi précédemment
HS_UAMSECRET=uamsecret : Secret partagé en le serveur UAM et Chilli
HS_UAMALIASNAME=chilli : Alias pour les services UAM
HS_UAMSERVER=$HS_UAMLISTEN : URL du serveur WEB à utiliser pour authentifier les clients (ici 10.0.2.1)
HS_UAMFORMAT=http://\$HS_UAMLISTEN:\$HS_UAMUIPORT/www/login.chi : Définit l‟url du portail captif
HS_UAMHOMEPAGE=http://\$HS_UAMLISTEN:\$HS_UAMPORT/www/coova.html : L’url de la page d‟accueil pour les utilisateurs non authentifiés
HS_UAMSERVICE=https://10.0.2.1/cgi-bin/hotspotlogin.cgi : Permet d’aller rechercher chez un utilisateur ses informations de connexion et donc lui donner la possibilité de passer d’un AP à un autre sans avoir besoin d’avoir à se connecter au portail captif

HS_TCP_PORTS= »81″ : On ouvre un port, par exemple le 81 si on veut que les utilisateurs puissent s‟inscrire eux-mêmes
HS_LOC_NAME= »My Hotspot » : Permet de mettre un petit nom au Coova-Chilli

On rajoute ensuite le module haserl qui permettra d’exécuter des scripts dans une page web :

 # cd /usr/src
 # wget

http://downloads.sourceforge.net/project/haserl/haserldevel/

 0.9.26/haserl-0.9.26.tar.gz?use_mirror=ovh
 # tar xvf haserl-0.9.26.tar.gz
 # cd haserl-0.9.26
 # ./configure
 # make
 # make install

On modifie un fichier dans Coova-Chilli pour qu‟il sache où se trouve haserl :

# nano /etc/chilli/wwwsh

On remplace cette ligne : haserl=$(which haserl 2>/dev/null)
Par cette ligne-ci : haserl=/usr/local/bin/haserl (emplacement où se trouve haserl)

Et on va également modifier les règles de firewall (qui seront appliquées lorsqu‟un user se connectera avec succès à notre hotspot) :

# nano /etc/chilli/up.sh

On rajoute tout au bout de ce fichier :

[ -e “/var/run/chilli.iptables” ] && sh /var/run/chilli.iptables
iptables –A POSTROUTING –t nat –o $HS_WANIF –j MASQUERADE (cette commande permet d‟activer le NAT)
  • Apache

On place avant tout le fichier hotspotlogin.cgi au bon endroit.

# mkdir –p /var/www/hotspot/cgi-bin
# zcat –c /usr/share/doc/coova-chilli/hotspotlogin.cgi.gz | tee /var/www/hotspot/cgi-bin/hotspotlogin.cgi
# chmod a+x /var/www/hotspot/cgi-bin/hotspotlogin.cgi

On l‟édite :

# nano /var/www/hotspot/cgi-bin/hotspotlogin.cgi

On supprime/commente cette ligne :

$uamsecret=‟"ht2eb8ej6s4et3rg1ulp"

On installe le paquet suivant :

# apt-get install libapache2-mod-auth-mysql

On crée le dossier qui contiendra le certificat :

# mkdir /etc/apache2/ssl

(Il est préférable de vérifier le nom de la machine avant de créer le certificat : # hostname –f, ici debian)

On crée ensuite le certificat :

# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

Lorsqu’il est demandé le nom de la machine, on vient mettre ce qu‟on a obtenu via hostname.

On ajoute le module ssl à apache et on le restart :

# a2enmod ssl
# /etc/init.d/apache2 restart

On peut maintenant créer un nouveau site nommé hotspot :

# nano /etc/apache2/sites-available/hotspot

On le remplit par :

NameVirtualHost 10.0.2.1:443

<VirtualHost 10.0.2.1:443>
ServerAdmin webmaster@domain.org
DocumentRoot "/var/www/hotspot"
ServerName "10.0.2.1"

<Directory "/var/www/hotspot/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /var/www/hotspot/cgi-bin/

<Directory "/var/www/hotspot/cgi-bin/">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/log/apache2/hotspot-error.log
LogLevel warn
CustomLog /var/log/apache2/hotspot-access.log combined
ServerSignature On
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>

On active ensuite ce nouveau site :

# a2ensite hotspot
# /etc/init.d/apache2 reload

On modifie ensuite le fichier ports.conf :

# nano /etc/apache2/ports.conf

Il ne doit contenir que ceci :

Listen *:443
Listen *:80
Listen *:81

Ensuite on ouvre ce fichier :

# nano /etc/apache2/sites-available/default

Et on y rajoute en première ligne :

NameVirtualHost *:80

On se rend sur le fichier apache2.conf :

# nano /etc/apache2/apache2.conf

Et on rajoute à la fin de ce fichier :

ServerName 10.0.2.1

On ouvre le fichier hosts :

# nano /etc/hosts

Et on rajoute à la suite des 2 premières lignes :

10.0.2.1 debian debian

(si la machine ne s’appelait pas debian, il suffirait de mettre le nom de la machine éventuellement suivi du domaine dans lequel elle est)

On redémarre le serveur apache et on peut éventuellement redémarrer la machine :

# /etc/init.d/apache2 restart
# reboot

Notre HotSpot est prêt à fonctionner. Nous pouvons déjà vérifier que coova-chilli fonctionne sans erreur en nous rendant dans le navigateur, on tape http://www.google.be. Nous devrions être redirigés automatiquement sur le page de coova.

Coova

  • Daloradius

  # cd /usr/src
  # wget http://downloads.sourceforge.net/project/daloradius/daloradius/dalor  adius-0.9-8.tar.gz?use_mirror=ovh
  # tar xvf daloradius-0.9-8.tar.gz
  # cp daloradius-0.9-8/ /var/www –R
  # chmod 644 /var/www/daloradius-0.9-8/library/daloradius.conf.php
  # mysql –u root –p radius </var/www/daloradius-0.9-
  8/contrib/db/mysql-daloradius.sql
  Enter password : mysqladminsecret

On configure daloradius :

 # nano /var/www/daloradius-0.9- 8/library/daloradius.conf.php

On modifie ce fichier (user=radius, pass=mysqlsecret,
database=radius), il doit alors ressembler à ça :

Daloradius Configuration de la base de données :

$configValues[‘CONFIG_DB_ENGINE’] = ‘mysql';
 Définit le type de base de données (mysql, mssql, oracle, postgresql)
$configValues[‘CONFIG_DB_HOST’] = ‘127.0.0.1’;
 Définit l‟ip du serveur sql (ici 127.0.0.1 puisque nous sommes sur le même serveur)
$configValues[‘CONFIG_DB_USER’] = ‘radius';
 Définit le login permettant de se connecter au serveur sql
$configValues[‘CONFIG_DB_PASS’] = ‘mysqlsecret';
 Définit le mot de passe permettant de se connecter au serveur sql
$configValues[‘CONFIG_DB_NAME’] = ‘radius';
 Définit le nom de la base de données
$configValues[‘CONFIG_PATH_DALO_VARIABLE_DATA’] = ‘/var/www/daloradius/var';
 Définit le chemin vers le dossier „var‟ de daloradius

$configValues[‘CONFIG_MAINT_TEST_USER_RADIUSSERVER’] = ‘127.0.0.1’;
 Définit l‟ip du serveur Radius (ici 127.0.01 puisque nous sommes sur le même serveur)
$configValues[‘CONFIG_MAINT_TEST_USER_RADIUSSECRET’] = ‘radiussecret';
 Définit le secret partagé par tous les clients radius

On rajoute également le paquet suivant :

# apt-get install php-pear  

# pear install DB

On configure ensuite apache afin d‟accéder à daloradius de manière conviviale : # nano /etc/apache2/httpd.conf

On y rajoute :

Alias /daloradius ‟‟/var/www/daloradius-0.9-8/‟‟
<Directory /var/www/daloradius-0.9-8/>
Options None
Order deny,allow
deny from all
allow from all
</Directory>

Il faut également restart apache2.

On peut maintenant accéder à daloradius via le lien : http://10.0.2.1/daloradius (le nom d‟utilisateur de base pour daloradius est « administrator » et le mot de passe est « radius »).

DaloDola 3

Et voilà qui est fait…