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 :
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.
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
Du mal à comprendre le rapport avec la configuration SSH.
# L'interface réseau de loopback auto lo iface lo inet loopback # L'interface réseau principale en provenance du routeur auto eth0 iface eth0 inet dhcp # L'interface réseau secondaire destinée aux clients auto eth1
Si dans le fichier /etc/network/interfaces il y a d'autres nom d'interfaces tel que ens160 et ens192 à la place de eth0 eth1 conservez les sinon vous obtiendrez une erreur en tapant service networking restart pour relancer les interface réseaux.
On indique ici que :
# Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1
sudo service networking restart
Installez les paquets freeradius freeradius-mysql
Ou en ligne de commande :
sudo apt-get install freeradius freeradius-mysql -y
mysql -u root -p #Entrer le mot de passe de Mysql. mysql> CREATE DATABASE radius; mysql> quit
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 (Lesquels?) faites le en Superutilisateur
mysqldump -u root -p radius > /home/'votre_nom_d'utilisateur'/backup.sql
client localhost { ipaddr = 127.0.0.1 [# explication commentée #sur plusieurs lignes #...] secret = votre_secret_radius #par defaut : testing123 }
Utilisez la fonction recherche Ctrl+W sur nano par exemple pour trouver les lignes dans le fichier
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 :
# This is an entry for a user with a space in their name. # Note the double quotes surrounding the name. # "John Doe" Cleartext-Password := "hello" Reply-Message = "Hello, %{User-Name}"
puis redémarrez votre système.
sudo shutdown -r now
sudo /etc/init.d/freeradius start
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"
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 |
[...] # unix # # Read the 'users' file # files # # Look in an SQL database. The schema of the database # is meant to mirror the "users" file. # # See "Authorization Queries" in sql.conf sql # # If you are using /etc/smbpasswd, and are also doing # mschap authentication, the un-comment this line, and # configure the 'smbpasswd' module. # smbpasswd [...]
Si vous voulez utiliser des logiciels comme ezRADIUS ou Admin Dialup vous avez besoin d'activer la journalisation de MySQL.
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" [...] }
readclients = yes ###Changer le manuellement
$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 }
$INCLUDE sql.conf ### Changer le manuellement
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 Il n'existe pas de répertoire /chilli dans /etc sur Ubuntu 16.04.2 LTS
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 :
id | UserName | GroupName |
---|---|---|
1 | utilisateur | groupe |
2 | prof1 | professeurs |
3 | élève1 | élèves |
id | UserName | Attribute | Op | Value |
---|---|---|---|---|
1 | utilisateur | Password | == | passuser |
2 | prof1 | Password | == | passprof |
3 | élève1 | Password | == | passeleve |
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.
Dans un terminal saisissez les commandes suivantes: Installationdes prérequis :
sudo apt-get install -y g++ automake autoconf libtool libltdl-dev gengetopt make cmake libssl-dev git
Clone du git
cd /tmp git clone https://github.com/coova/coova-chilli/ cd coova-chilli/
Changement de branche pour acceder à la v 1.4
git checkout -b 1.4 git branch
Premier script
./bootstrap
Deuxième script : configuration pour la compilation avec options (à rentrer ligne par ligne)
./configure --prefix=/usr --mandir=\$${prefix}/share/man \ --infodir=\$${prefix}/share/info \ --sysconfdir=/etc --localstatedir=/var --enable-largelimits \ --enable-binstatusfile --enable-statusfile --enable-chilliproxy \ --enable-chilliradsec --enable-chilliredir --with-openssl --with-curl \ --with-poll --enable-dhcpopt --enable-sessgarden --enable-dnslog \ --enable-ipwhitelist --enable-redirdnsreq --enable-miniconfig \ --enable-libjson --enable-layer3 --enable-proxyvsa --enable-miniportal \ --enable-chilliscript --enable-eapol --enable-uamdomainfile \ --enable-modules --enable-multiroute
Installation
make && make install
cd /usr/src wget http://downloads.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz tar zxvf haserl-0.9.35.tar.gz cd haserl-0.9.35
Compilation puis installation de Haserl
./configure && make && make install
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
: adresse introuvable :
wget http://ap.coova.org/uam/ wget http://ap.coova.org/js/chilli.js exit
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
A la fin du fichier /etc/chilli/up.sh ajouter la ligne :
iptables -I POSTROUTING -t nat -o $HS_WANIF -j MASQUERADE
Elle va permettre de transférer ce qui arrive par le Wifi vers l’Ethernet
Editer le fichier /etc/default/chilli et remplacer
START_CHILLI=0
par
START_CHILLI=1
Cela autorise le démarrage de CoovaChilli
Editer le fichier /etc/chilli/wwwsh et donner l’emplacement exact de haserl à la ligne 9
haserl=/usr/local/bin/haserl
Editer le fichier /etc/chilli/config et modifier ces valeurs en fonction de votre réseau :
HS_WANIF=eth0 HS_LANIF=wlan0 HS_NETWORK=192.168.10.0 HS_UAMLISTEN=192.168.10.1 HS_UAMALLOW=192.168.10.0/24 HS_SSID=PiHomeServerAP ... HS_RADSECRET=testing123 # Set to be your RADIUS shared secret
Le détail des paramètres configurés :
Redémarrez votre ordinateur.
Testez si la configuration de réseau s'est bien passée en démarrant tout simplement le serveur Chilli :
sudo /etc/init.d/chilli start
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".
/etc/init.d/chilli start --debug --fg
ou avec les dernières versions simplement :
chilli -fd
Par défaut, il sera supposé que :
Ensuite avec les dispositifs adéquats vous pourrez configurer et redémarrer le serveur Chilli.
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 ) |
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;
print <<ENDHTML; ....Ici vous pourrez coder en Html..... ENDHTML
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. Ce déclenchement se fait en fonction du contenu du script /etc/chili/ipup.sh qui n'existe pas par défaut. Créez le fichier /etc/chili/ipup.sh si besoin est.
Pour "aider" Coova Chilli, ajoutez ces lignes à la fin du fichier /etc/chilli/ipup.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/chilli/ipup.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.
Suivre cette documentation : securiser_apache2_avec_ssl
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
Contributeurs principaux : erwik666, Herrleiche, benjy4537