Contenu | Rechercher | Menus
Cette page est en cours de rédaction.
Apportez votre aide…

CoovaChilli

CoovaChilli, fork du projet abandonné ChilliSpot, est un portail captif.

Il permet de rediriger tous les clients HTTP d'un réseau vers une page web qui peut demander une authentification et/ou un paiement ou tout simplement demander d'accepter les conditions d'utilisation avant d'accéder à Internet. Cette technique est souvent employée pour les accès Wi-Fi et peut être utilisée aussi pour l'accès à des réseaux filaires (ex. hôtels, campus etc.).

Cette page visera à décrire :

  • L'installation puis la configuration d'un serveur Freeradius et d' un serveur Freeradius-mysql (en version 2 uniquement ),
  • L'installation puis la configuration d'un serveur Coova-chilli-1.2.6, complété d'un par-feu,
  • L'installation puis l'intégration d'une certification SSL à CoovaChilli,
  • La personnalisation de la page d’accès.

Les serveurs Freeradius et CoovaChilli fonctionnent cependant la documentation étant toujours en cours de développement, faites attention car plusieurs informations sont erronées, notamment le chapitre sur CoovaChilli. Alors ne vous lancez pas directement si vous n'avez pas d'expérience sur le sujet.

Pré-requis

FIXME

  • Tout pc avec 2 interfaces réseaux.
  • Ubuntu 11.04, 10.10, 10.04 édition de bureau. ( i386 uniquement ).
  • Un DNS.

Fonctionnement

Ceci est le schéma de fonctionnement par défaut :

                    ________________                               _____________
                    |    Serveur   |                               |           |
                    |    Hotspot   |                               | Pc-Client |
                    |______________|                               | (Abonné)  |
  Internet          | Radius-Mysql |              )))Wifi((( ======>           | 
     ^              |      ^       |                  ^            |___________| 
     |              |      |       |                  |            
     V              |      V       |                  V             
    DHCP ====Eth0===> CoovaChilli  =Eth1===========>DHCP ou périphérique personnel.          
  • Le périphérique Eth0 a par exemple l'adresse IP 192.168.0.1
  • Le périphérique Eth1 a par exemple l'adresse IP 192.168.1.1

Initialisation du reseau

Configuration du SSH

En supposant que votre machine soit connectée à votre routeur ADSL (serveur DHCP), vous devrez trouver votre adresse IP en saisissant dans un terminal la commande suivante :

ip addr

FIXME Du mal à comprendre le rapport avec la configuration SSH.

Configuration du réseau :

  1. Ouvrez avec les droits d'administration le fichier /etc/network/interfaces pour y ajouter les lignes suivantes :
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp  
    
    auto eth1

    On indique ici que :

    • l'interface eth0 sera reliée au modem adsl/serveur en mode dhcp.
    • l'interface eth1 sera celle qui servira de passerelle avec les clients abonnés.
  2. Modifiez avec les droits d'administration le fichier /etc/sysctl.conf pour activer 1) le paramètre net.ip4.ip_forward2). Vous devriez obtenir ceci :
    net.ip4.ip_forward=1
  3. Relancez ensuite les interfaces réseaux :
    /etc/init.d/networking restart

    FIXME sudo ?

Installation et configuration du serveur Radius

Téléchargement de Freeradius depuis les dépôts officiels

Installation de la base de donnée MySQL

  1. Création de la base de données pour stocker les noms d'utilisateurs et mots de passe :
    mysql -u root -p
    #Entrer le mot de passe de Mysql.
    mysql> CREATE DATABASE radius;
    mysql> quit  
  2. Importation de la base de données avec les tables créées par les fabricants de Freeradius :
    mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql
    mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql
    mysql -u root -p
    #Entrer le mot de passe de Mysql.
    mysql> GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'le mot de passe de my sql';
    mysql> FLUSH PRIVILEGES;
    mysql> quit

    Si vous avez des doutes FIXME (Lesquels?) faites le en Superutilisateur

  3. Exportez votre base de données pour vérifier :
    mysqldump -u root -p radius > /home/'votre_nom_d'utilisateur'/backup.sql
  4. Modifiez avec les droits d'administration le paramètre suivant dans le fichier /etc/freeradius/clients.conf :
    client localhost {
        ipaddr = 127.0.0.1
        secret = votre_secret_radius
    }

Réglage du fichier de configuration

La configuration de Freeradius par défaut autorise les noms d'utilisateurs et mots de passe à partir d'un fichier se trouvant dans /etc/freeradius/users.
Afin de tester cette configuration avant de déplacer le lien d' autorisation provenant de la fonction fichier à la fonction mysql, il sera pris pour exemple le nom d'utilisateur « John Doe » auquel le mot de passe « hello » lui sera associé.

Éditez le fichier /etc/freeradius/users pour décommenter les lignes suivantes :

"John Doe"     Auth-Type := Local, User-Password == "hello"
               Reply-Message = "Hello, %{User-Name}"

puis redémarrez votre système.

Vérifier les fichiers de configuration FreeRadius

  1. Dans un terminal saisissez la commande suivante:
    sudo /etc/init.d/freeradius stop
    sudo freeradius -XXX

    Si tout va bien la dernière ligne devrait afficher :

    Mon Jun 20 18:33:54 2011 : Debug: Ready to process requests. 

    Appuyer sur les touches « Ctrl+C » de votre clavier pour quitter.

  2. Redémarrez le serveur Freeradius :
    sudo /etc/init.d/freeradius start
  3. Testez les autorisations du mot de passe précédemment configuré dans /etc/freeradius/users :
    sudo radtest "John Doe" hello 127.0.0.1 0 votre_secret_radius

    Si tout va bien, vous devriez obtenir une réponse comme ceci :

    Sending Access-Request of id 136 to 127.0.0.1 port 1812
            User-Name = "John Doe"
            User-Password = "hello"
            NAS-IP-Address = 255.255.255.255
            NAS-Port = 0
    rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=136, length=37
            Reply-Message = "Hello, John Doe"

Déplacement des autorisations pour intégrer MySql

Si les tests ci-dessus on réussi, vous pouvez désormais déplacer l'autorisation de la fonction Fichier à la fonction MySql. Pour cela il faudra éditez le fichier /etc/freeradius/sites-available/default et remplacer l’autorisation en commentant/décommentant3) comme ceci :

Fichiers == files remplacer par # files
MySql == # sql remplacer par sql

Vous ne pouvez utiliser qu'une seule méthode d'autorisation à un moment, pas les deux. Par conséquent,la fonction Fichier a besoin d'être commentée. Par ailleurs Freeradius tentera toujours d'autoriser /etc/freeradius/users avec la fonction Fichier, au lieu de la fonction MySql.

Journalisation de MySQL :

Si vous voulez utiliser des logiciels comme ezRADIUS ou Admin Dialup vous avez besoin d'activer la journalisation de MySQL.

  1. Éditez le fichier /etc/freeradius/sql.conf pour modifier comme ceci :
    sql {
            driver = "rlm_sql_mysql"  
            server = "localhost"(ou x.x.x.x l'ip de votre serveur mysql)
            login = "Votre login mysql"
            password = "le mot de passe de my sql"
            radius_db = "radius"
            [...]
            
    }
  2. Décommentez la fonction readclients pour permettre la lecture du client radius dans la base de donnée (table 'nas') :
    readclients = yes ###Changer le manuellement 
  3. Éditez le fichier /etc/freeradius/sites-available/default pour modifier comme ceci :
    $INCLUDE ${confdir}/sql.conf
    authorize {
    	preprocess
    
    	chap
    	suffix
    	eap {
    		ok = return
    	}
    #	files    ### Changer le manuellement
    	sql	 ### Changer le manuellement
    	pap
    }
    authenticate {
    	
    	Auth-Type PAP {
    		pap
    	}
    
    	Auth-Type CHAP {
    		chap
    	}
    
    	Auth-Type eap {
    		eap {
    			handled = 1  
    		}
    	}
    #	files   ###Changer le manuellement
    }
    accounting {
    	detail
    	radutmp
    
    	sql      ###Changer le manuellement
    }
    session {
    	sql      ### Changer le manuellement
    }
    post-auth {	
    	sql
    }
    #pre-proxy {
    #	files  ###Changer le manuellement
    #}
    post-proxy {
    	eap
    }
  4. Editez le fichier /etc/freeradius/radiusd.conf pour décommenter (~ ligne 683) :
    $INCLUDE sql.conf   ### Changer le manuellement

Ajouter un utilisateur dans la base de donnée MySql:

Exemple :

echo "INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('mysqltest', 'Password', 'testsecret');" | mysql -u root -p radius
#Entrer le mot de passe de Mysql.

Coovachilli utilise "chillispot" comme nom d'utilisateur et "chillispot" comme mot de passe pour se connecter au radius par défaut. Ajoutez également cet utilisateur dans la table radcheck.

Il faut le définir dans le fichier /etc/chilli/config

HS_ADMUSR=chillispot
HS_ADMPWD=chillispot

Puis les insérer comme ceci :

echo "INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('chillispot', 'Password', 'chillispot');" | mysql -u root -p radius
#Entrer le mot de passe de Mysql.

Ou d'une manière plus détaillé comme ceci :

Table usergroup
id UserName GroupName
1 utilisateur groupe
2 prof1 professeurs
3 élève1 élèves
Table radcheck
id UserName Attribute Op Value
1 utilisateur Password == passuser
2 prof1 Password == passprof
3 élève1 Password == passeleve

Test de la configuration de Freeradius et de Mysql

Redémarrez le serveur radius:

sudo /etc/init.d/freeradius restart

Vérifiez que Freeradius lit bien la base de données :

sudo radtest mysqltest testsecret 127.0.0.1 0 votre_secret_radius
sudo radtest chillispot chillispot 127.0.0.1 0 votre_secret_radius

Si tout ce passe bien vous devriez avoir le message suivant,

Sending Access-Request of id 169 to 127.0.0.1 port 1812
	User-Name = "chillispot"
	User-Password = "chillispot"
	NAS-IP-Address = 127.0.1.1
	NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=169, length=20

Vous pouvez passer a l'installation de Coovachilli.

Installation et configuration de Coovachilli

Installation de CoovaChilli à partir des fichiers Sources

Téléchargez puis installez le paquet .deb depuis le site officiel Coovachilli.
Par exemple pour la version 1.2.6 de CoovaChilli dans un terminal saisissez les commandes suivantes:

wget http://ap.coova.org/chilli/coova-chilli_1.2.6_i386.deb
sudo dpkg -i coova-chilli_1.2.6_i386.deb

Les paquets préfabriqués de Coova-Chilli sont compilés pour i386.
Pour un PC 64bits et pour éviter les soucis d'identification (MD5, SHA, SSL,…), il faudra (pour le moment) compiler à partir des sources téléchargeables sur le site de Coova.org

Paramétrage du serveur hotspot

Copie du fichier de configuration, et déplacement du dossier hotspot sur apache2.

sudo -s
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
exit

Il n'y a plus les IP dans le scripte ChilliLibrary.js. Les modifications suivantes ne sont plus valides (les 3 commandes 'sed')
Par contre vous devez re-adresser en local le scripte chilli.js
sed -i 's/ap.coova.org\/js\/chilli.js/.\/chilli.js/g' /var/www/hotspot/uam/index.html

Vous donnerez ici l'adresse de l'interface local eth1 au dossier hotspot. Pour l'exemple il s'agira de 192.168.1.1 :

sed -i 's/ap.coova.org\/js\/chilli.js/192.168.1.1\/uam\/chilli.js/g' /var/www/hotspot/uam/index.html

Faites le pont entre l'interface eth0 qui héberge le serveur chilli et l'interface du réseau eth1 qui hébergera les client abonnés :

sed -i 's/192.168.182.1/192.168.1.1/g' /etc/chilli/www/ChilliLibrary.js
sed -i 's/192.168.182.1/192.168.1.1/g' /var/www/hotspot/ChilliLibrary.js

Vous pouvez donner à l'interface eth0 la valeur 192.168.0.1/24, la valeur 192.168.182.1 étant celle par defaut FIXME du mal à comprendre le sens de la phrase et les adresses

Afin de déplacer FIXME (formulation "déplacer"???) l'adresse IP de l'interface réseau numéro 0 avec celle de l'interface réseau numéro 1 de votre ordinateur, éditez le fichier /etc/default/chilli pour donner à la fonction START_CHILLI la valeur 1

START_CHILLI=1

Redémarrez votre ordinateur.
Testez si la configuration de réseau s'est bien passée en démarrant tout simplement le seveur Chilli :

sudo /etc/init.d/chilli start

Configuration du serveur chilli

Instruction

Vous venez de copier le fichier de configuration par défaults dans le fichier config . Pour charger ces paramètres et démarrer le serveur Chilli, exécutez la commande suivante :

sudo service chilli start

Cela va générer automatiquement des fichiers main.conf, local.conf et hs.conf dans le dossier /etc/chili/. Si vous apportez des modifications aux paramètres à une date ultérieure, ré-exécutez un "chilli start".

Le script d’initialisation /etc/init.d/chilli du serveur chilli régénère un fichier main.conf. Lorsque vous démarrez le serveur chilli en mode débogage, on obtient le démarrage de Coovachilli sans la régénération de ce main.conf. Ainsi, le mode débogage permet d'éditer main.conf pour ensuite redémarrer le service normalement.
Si vous souhaitez redémarrer le serveur chilli en mode débogage il faudra donc taper ceci.

/etc/init.d/chilli start --debug --fg

ou avec les dernières versions simplement :

chilli -fd

Par défaut, il sera supposé que :

  • le périphérique eth0 sera relié à votre connexion internet.
  • le périphérique eth1 sera quand a lui l'interface (passerelle) que vous voudrez connecter avec des clients abonnés.

Si ce n'était pas le cas, il faudra pratiquer par exemple un changement de configuration avec la fonction HS_WANIF4) pour la relier à votre périphérique internet et relier également la fonction HS_LANIF5) directement à votre périphérique WiFi.

Ensuite avec les dispositifs adéquats vous pourrez configurer et redémarrer le serveur Chilli.

Configuration

Dans les exemples si dessous. L'adresse de l'interface réseau eth0 sera nommé 192.168.0.1 et les interfaces eth1 ou wlan0 seront nommées 192.168.1.1 .

Configuration du fichier /etc/chilli/config:

Paramètres Explications
HS_WANIF=eth0 Nom du périphérique WAN relié vers internet. Laissez le commentaire si vous n'utilisez pas votre propre périphérique wifi.
HS_LANIF=eth1 Nom du périphérique relié au point d’accès client (eth1 ou wlan0)
HS_NETWORK=192.168.182.0 Définition du réseau d'accueil des clients, ici avec 192.168.182.0, on attribut aux clients des IP du type 192.168.182.x
HS_NETMASK=255.255.255.0 Masque du réseau hotspots
HS_UAMLISTEN=192.168.182.1 Adresse IP de la passerelle client (eth1 ou wlan0) - doit faire partie du réseau client
HS_DNS1=208.67.222.222 Le DNS de votre fournisseur d’accès. Laissez commenté pour utiliser la configuration par défaut. Les DNS utilisés seront alors ceux spécifiés dans votre fichier /etc/resolv.conf
HS_NASID=nas01 Décommentez sinon l’adresse 0.0.0.0 (NAS-IP-Address) apparaît dans les logs de freeradius
HS_RADIUS=localhost Ip ou nom de l’hôte local que vous avez configuré dans /etc/freeradius/clients.conf (127.0.0.1)
HS_RADIUS2=localhost Ip ou nom de l’hôte local que vous avez configuré dans /etc/freeradius/clients.conf (127.0.0.1)
HS_RADSECRET=testing123 Votre secret_radius que vous avez configuré dans /etc/freeradius/clients.conf
HS_UAMAAAURL=http://my-site/script.php (en) Documentation Cisco sur AAAURL
HS_UAMDOMAINS=".paypal.com,.wikipedia.org" Permet de filtrer des noms de domaine ou DNS dans une "boite secrète". Attention ceci bloque l'accès aux autres URL
HS_SSID=<ssid> Nom du réseau du SSID si vous utilisez la WIFI
HS_UAMSERVER= Il faut remplacer $HS_UAMLISTEN par l'adresse du périphérique eth0 ($HS_NETWORK ou 192.168.0.1)
HS_UAMFORMAT= Il faut remplacer l'ancienne syntaxe par https: \$HS_UAMSERVER/uam/
HS_UAMSERVICE= Il faut ajouter l'adresse du périphérique eth1 https://peripherique_eth1/cgi-bin/hotspotlogin.cgi
HS_ADMUSR=chillispot Nom du superutilisateur du serveur chilli (permet la jonction avec MySql).
HS_ADMPWD=chillispot Mot de passe du superutilisateur du serveur chilli (permet la jonction avec MySql).
HS_LOC_NETWORK="My Network" Nom du réseau, ou SSID si vous utiliser la WIFI
HS_LOC_AC=408 HS_LOC_AC=87000
HS_LOC_CC=1 HS_LOC_CC=33 (suffix téléphonique +33)
HS_LOC_ISOCC=US HS_LOC_ISOCC=FR ( Voir doc wikipedia )

Créer et configurer une page de connexion

Vous avez besoin de créer une page de connexion qu' heureusement les créateurs de Coovachilli fournisse avec le paquet .deb à travers le script hotspotlogin.cgi
Pour trouver ce fichier, saisissez dans un terminal la commande suivante:

sudo find / | grep 'hotspotlogin.cgi'

L'exemple donné ici sera /usr/share/doc/coova-chilli/hotspotlogin.cgi.gz

Créez un nouveau répertoire dans la racine du serveur Apache2 et copiez-y le fichier hotspotlogin.cgi

sudo mkdir -p /var/www/hotspot/cgi-bin
zcat -c /usr/share/doc/coova-chilli/hotspotlogin.cgi.gz | sudo tee /var/www/hotspot/cgi-bin/hotspotlogin.cgi

Rendez-le exécutable :

sudo chmod a+x /var/www/hotspot/cgi-bin/hotspotlogin.cgi

Editez le script /var/www/hotspot/cgi-bin/hotspotlogin.cgi afin de décommenter et de modifier le « secret UAM » comme ceci :

$uamsecret = "votre_secret_UAM";
$userpassword=1;

Le langage de ce .cgi (Common Gateway Interface) étant du Perl6), si vous souhaitiez modifier le script, n'incluez pas de balise HTML classique. Editez-le comme ceci :

print <<ENDHTML;
....Ici vous pourrez coder en Html.....

ENDHTML 

Sécurité et certification d’authenticité

Installation du par-feu :

Les créateurs de CoovaChilli ont des règles prédéfinies pour iptables, mais leur script a besoin d'un peu d'aide avant que ça fonctionne. L' iptables de CoovaChilli est configuré dans le script /etc/chili/ up.sh qui déclenche l'interface TUN/TAP mise en place.

Dans les réseaux informatiques, TUN et TAP sont des périphériques virtuels dans le "Kernel réseau" (Noyaux réseau). Ce sont des dispositifs réseau qui sont entièrement à la charge du logiciel. Ils sont différents des périphériques réseaux ordinaires qui sont eux des adaptateurs réseaux matériel.

Pour "aider" Coova Chilli, ajoutez ces lignes à la fin du fichier /etc/chilli/up.sh :

[ -e "/var/run/chilli.iptables" ] && sh /var/run/chilli.iptables 2>/dev/null
iptables -I POSTROUTING -t nat -o $HS_WANIF -j MASQUERADE
# Exemple HTTP :
iptables -t nat -A logging -p tcp --dport 80 -j LOG --log-prefix "HTTP: " \
--log-level info
# Exemple HTTPS :
iptables -t nat -A logging -p tcp --dport 443 -j LOG --log-prefix "HTTPS: " \
--log-level info
# Exemple MSN :
iptables -t nat -A logging -p tcp --dport 1863 -j LOG --log-prefix "MSN: " \
--log-level info

Pour le rendre exécutable :

chmod +x /etc/chili/up.sh

Dans la configuration ci-dessus, vous avez relié le serveur DNS au périphériques locaux. C'est pourquoi, votre système doit posséder un serveur DNS que vous pouvez installer à partir de tasksel.

Installation de la certification SSL au server Apache 2

Suivre cette documentation : securiser_apache2_avec_ssl

Configuration

FIXME

Utilisation

FIXME

Désinstallation

Pour désinstaller CoovaChilli saisissez dans un terminal les commandes suivantes :

sudo rm /var/lib/dpkg/info/coova-chilli.prerm
sudo dpkg --remove --force-remove-reinstreq coova-chilli
sudo dpkg --purge --force-remove-reinstreq coova-chilli

Voir aussi


Contributeurs principaux : erwik666, Herrleiche, benjy4537

1) décommenter en retirant le dièse #
2) ligne 28
3) ajouter/ôter un dièse #
4) Wireless
5) Lan
6) langage interprété par le navigateur, tout comme le Php, ou le Java Script

coovachilli.txt · Dernière modification: Le 23/09/2013, 05:53 par fabux
Le contenu de ce wiki est sous licence : CC BY-SA v3.0