lundi 22 janvier 2007

Installation de chillispot 0.99 + freeradius + mysql sur une debian etch



Recquiert : -une installation de debian etch valide (pour ma part j'ai utilisé le format 180 mega , installation par le réseau , sans interface graphique , testé sur un PII 233 Mhz) et les paquets suivants : -apache apache-ssl phpmyadmin mysql-server freeradius freeradius-mysql iptables




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







dpkg -i chillispot_0.99-1_i386.deb

Copier le fichier cgi fourni dans le répertoire adéquat

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

(vous pourrez éditer ce fichier une fois chillispot fonctionnel afin de personnalisez l'installation)

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 */


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


  1. net 192.168.1.0/24 ou laisser commenté pour utiliser la configuration par défaut192.168.182.0/24

  2. dns1 10.187.36.3 (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)

  3. radiuslisten 127.0.0.1 Décommenter sinon l’adresse 0.0.0.0 (NAS-IP-Address) apparaît dans les logs de freeradius

  4. radiusserver1 127.0.0.1 IP du serveur d’authentification

  5. Radiusradiusserver2 127.0.0.1 IP du serveur d’authentification Radius

  6. radiussecret secretradius secret partagé entre le serveur Radius et le daemon chilli

  7. radiusnasid portail NAS-ID : identifiant de votre chillispot

  8. radiuslocationid isocc=fr,cc=33,ac=87000,network=MonESSID

  9. dhcpif eth1 nom de l’interface reliée au point d’accès

  10. uamserver https://ipdevotreserveur/cgi-bin/hotspotlogin.cgi ou mettre https://192.168.182.1/cgi-bin/hotspotlogin.cgi si vous utilisez la configuration par défaut

  11. uamsecret secretchilli mettre le même secret que dans le fichier /usr/lib/cgi-bin/hotspotlogin.cgi

  12. uamlisten 192.168.1.1

  13. uamallowed localhost www.yahoo.fr

Règles du firewall:

# cp /usr/share/doc/chillispot/firewall.iptables /etc/chilli.iptables

# chmod u+x /etc/chilli.iptables


Vous devez avoir à l'intérieur :

EXTIF="eth0" /* 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

relancez ensuite les interfaces réseaux /etc/init.d/networking restart


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

#secret = testing123

secret = secretradius /* mettre le meme secret partagé que dans le fichier /etc/chilli.conf */


modifier le fichier /etc/freeradius/sql.conf

server = "localhost" (ou x.x.x.x l'ip de votre serveur mysql)

login = "radius"

password = "xxxx"


mettre dans /etc/freeradius/radiusd.conf
authorize {
preprocess chap suffix eap #files sql
}

authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
eap
}

accounting {
detail radutmp sql
}
session {
sql
}


On s'occupe ensuite de notre base mysql

# echo "create database radius;" mysql -u root -p

# echo "grant all on radius.* to radius@'%' identified by 'motdepasse_sql'; flush privileges;" mysql -u root -p

# zcat /usr/share/doc/freeradius/examples/mysql.sql.gz mysql -u root -p radius


si vous rencontrez des problèmmes insérez le script manuellement


-- phpMyAdmin SQL Dump-- version 2.6.1-- http://www.phpmyadmin.net-- -- Serveur: localhost-- Généré le : Lundi 22 Janvier 2007 à 16:21-- Version du serveur: 4.1.9-- Version de PHP: 4.3.10-- -- Base de données: `radius`--
-- --------------------------------------------------------
-- -- Structure de la table `nas`--
CREATE TABLE `nas` ( `id` int(10) NOT NULL auto_increment, `nasname` varchar(128) NOT NULL default '', `shortname` varchar(32) default NULL, `type` varchar(30) default 'other', `ports` int(5) default NULL, `secret` varchar(60) NOT NULL default 'secret', `community` varchar(50) default NULL, `description` varchar(200) default 'RADIUS Client', PRIMARY KEY (`id`), KEY `nasname` (`nasname`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- -- Contenu de la table `nas`--
-- --------------------------------------------------------
-- -- Structure de la table `radacct`--
CREATE TABLE `radacct` ( `RadAcctId` bigint(21) NOT NULL auto_increment, `AcctSessionId` varchar(32) NOT NULL default '', `AcctUniqueId` varchar(32) NOT NULL default '', `UserName` varchar(64) NOT NULL default '', `Realm` varchar(64) default '', `NASIPAddress` varchar(15) NOT NULL default '', `NASPortId` int(12) default NULL, `NASPortType` varchar(32) default NULL, `AcctStartTime` datetime NOT NULL default '0000-00-00 00:00:00', `AcctStopTime` datetime NOT NULL default '0000-00-00 00:00:00', `AcctSessionTime` int(12) default NULL, `AcctAuthentic` varchar(32) default NULL, `ConnectInfo_start` varchar(32) default NULL, `ConnectInfo_stop` varchar(32) default NULL, `AcctInputOctets` bigint(12) default NULL, `AcctOutputOctets` bigint(12) default NULL, `CalledStationId` varchar(50) NOT NULL default '', `CallingStationId` varchar(50) NOT NULL default '', `AcctTerminateCause` varchar(32) NOT NULL default '', `ServiceType` varchar(32) default NULL, `FramedProtocol` varchar(32) default NULL, `FramedIPAddress` varchar(15) NOT NULL default '', `AcctStartDelay` int(12) default NULL, `AcctStopDelay` int(12) default NULL, PRIMARY KEY (`RadAcctId`), KEY `UserName` (`UserName`), KEY `FramedIPAddress` (`FramedIPAddress`), KEY `AcctSessionId` (`AcctSessionId`), KEY `AcctUniqueId` (`AcctUniqueId`), KEY `AcctStartTime` (`AcctStartTime`), KEY `AcctStopTime` (`AcctStopTime`), KEY `NASIPAddress` (`NASIPAddress`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- -- Contenu de la table `radacct`--
-- --------------------------------------------------------
-- -- Structure de la table `radcheck`--
CREATE TABLE `radcheck` ( `id` int(11) unsigned NOT NULL auto_increment, `UserName` varchar(64) NOT NULL default '', `Attribute` varchar(32) NOT NULL default '', `op` char(2) NOT NULL default '==', `Value` varchar(253) NOT NULL default '', PRIMARY KEY (`id`), KEY `UserName` (`UserName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
-- -- Contenu de la table `radcheck`--
INSERT INTO `radcheck` VALUES (1, 'tux', 'Password', '==', 'tuxy');
-- --------------------------------------------------------
-- -- Structure de la table `radgroupcheck`--
CREATE TABLE `radgroupcheck` ( `id` int(11) unsigned NOT NULL auto_increment, `GroupName` varchar(64) NOT NULL default '', `Attribute` varchar(32) NOT NULL default '', `op` char(2) NOT NULL default '==', `Value` varchar(253) NOT NULL default '', PRIMARY KEY (`id`), KEY `GroupName` (`GroupName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
-- -- Contenu de la table `radgroupcheck`--
INSERT INTO `radgroupcheck` VALUES (1, 'pingouin', 'Auth-Type', ':=', 'Local');
-- --------------------------------------------------------
-- -- Structure de la table `radgroupreply`--
CREATE TABLE `radgroupreply` ( `id` int(11) unsigned NOT NULL auto_increment, `GroupName` varchar(64) NOT NULL default '', `Attribute` varchar(32) NOT NULL default '', `op` char(2) NOT NULL default '=', `Value` varchar(253) NOT NULL default '', `prio` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `GroupName` (`GroupName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- -- Contenu de la table `radgroupreply`--
-- --------------------------------------------------------
-- -- Structure de la table `radpostauth`--
CREATE TABLE `radpostauth` ( `id` int(11) NOT NULL auto_increment, `user` varchar(64) NOT NULL default '', `pass` varchar(64) NOT NULL default '', `reply` varchar(32) NOT NULL default '', `date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
-- -- Contenu de la table `radpostauth`--
-- --------------------------------------------------------
-- -- Structure de la table `radreply`--
CREATE TABLE `radreply` ( `id` int(11) unsigned NOT NULL auto_increment, `UserName` varchar(64) NOT NULL default '', `Attribute` varchar(32) NOT NULL default '', `op` char(2) NOT NULL default '=', `Value` varchar(253) NOT NULL default '', PRIMARY KEY (`id`), KEY `UserName` (`UserName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- -- Contenu de la table `radreply`--
-- --------------------------------------------------------
-- -- Structure de la table `usergroup`--
CREATE TABLE `usergroup` ( `id` int(11) unsigned NOT NULL auto_increment, `UserName` varchar(64) NOT NULL default '', `GroupName` varchar(64) NOT NULL default '', PRIMARY KEY (`id`), KEY `UserName` (`UserName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
-- -- Contenu de la table `usergroup`--
INSERT INTO `usergroup` VALUES (1, 'tux', 'pingouin');


Pour ajouter des utilisateur dans la base il faut ajouter un login + password dans la table radcheck de la base radius , un login plus le type d'authentification dans la table radgroupcheck et enfin un login associé à un nom de groupe dans la table usergroup

Vous pouvez vous référer au site officiel de chillispot pour l'ensemble des syntaxes supportés par chilli http://www.chillispot.org/features.html#mozTocId203873



Test pour l'authentification de freeradius


# /etc/init.d/freeradius stop


# freeradius -XXX -A <--mode débug de freeradius


[...]


Debug: Listening on authentication *:1812Debug:


Listening on accounting *:1813


Debug: Listening on proxy *:1814


Info: Ready to process requests.


dans une autre console on lance un radtest


# radtest tux tuxy 127.0.0.1 0 monsecret_nasradius


Sending Access-Request of id 95 to 127.0.0.1:1812


User-Name = "tux"


User-Password = "tuxy"


NAS-IP-Address = localhost


NAS-Port = 0


rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=95, length=20





Notre identification par rapport à mysql est donc fonctionnelle on peut dés à présent tester notre chillispot.





# /etc/init.d/freeradius stop (ctrl+c pour le mode débug)


# /etc/init.d/freeradius start


# ifconfig eth1 0.0.0.0


# /etc/init.d/chilli stop


# /etc/init.d/chilli start


# /etc/chilli.iptables

Vérifiez que la borne wifi à bien pris son adresse en dhcp puis connectez vous au réseau wifi avec votre poste, lancez une page web, si tout ce passe bien vous devriez être redirigé sur https://ipdevotreserveur/cgi-bin/hotspotlogin.cgi







Il vous reste maintenant à vous authentifier, si le radtest à été concluant l'authentification devrait réussir sans problèmme.





Un popup s'ouvre alors avec le temps de connection et la possibilité de se délogger tandis que la page que vous aviez ouverte est redirigé vers le site demandé.

Ce tutorial s'appui sur l'excellent tutorial de Thus0 / Petrus disponible à l'adresse suivante http://www.pervasive-network.org/SPIP/Installation-de-chillispot-sur-une qui ma permis de le tester sur une débian sarge avant de passer à la Etch

4 commentaires:

Anonyme a dit…

Hello, je suis hyper interesse par ton tuto, cependant il y juste un soucis. dans ton tuto, tu parles d IP table..ca veux dire que le serveur Radius ser aussi de passerrelle web...n a til pas moyen d eviter ca

herrleiche a dit…

Salut à toi, et bien si je comprend bien ta question tu voudrais avoir le serveur radius sur un autre poste que le serveur chillispot. C'est tout à fait possible dans ton fichier de configuration chilli.conf tu change l'adresse ip de ton serveur radius si tu veut en utiliser un distant.

Anonyme a dit…

Bonjour et merci pour ton tuto.
Voilà mon problème et que je n'arrive pas à accèder à l'authentification chillispot par le fichier hotspotlogin.cgi

J'ai apache2.
J'ai déposer le fichier hotspotlogin.cgi dans /srv/www/cgi-bin/ j'ai donné les droit chmod a+x hotspotlogin.cgi et indiqué à apache2 ou se trouve le dossier cgi-bin.

Mon chillipsot m'attribue bien une adresse IP dans sons réseau DHCP qoit en 192.168.182.2, j'accède bien aux sites que j'autorise sans authentification mais impossible de visualiser un autre site. Il m'affiche une page avec les mentions "ieframe.dll\page-500.html" à la place.

J'essaie de contacter la page http://adresse_serveur/cgi-bin/hotspotlogin.cgi mais rein à faire.

Dans les logs error d'apache :
[Tue Aug 21 22:40:11 2007] [error] [client XXX.XXX.XXX.XXX] Can't modify constant item in scalar assignment at /srv/www/cgi-bin/hotspotlogin.cgi line 28, near ""motsecret";"
[Tue Aug 21 22:40:11 2007] [error] [client XXX.XXX.XXX.XXX] BEGIN not safe after errors--compilation aborted at /srv/www/cgi-bin/hotspotlogin.cgi line 37.
[Tue Aug 21 22:40:11 2007] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: hotspotlogin.cgi

Voilà si tu peux m'aider !
@+
mail : wdg-tech@wanadoo.fr

Madao a dit…

A la ligne "uamallowed localhost www.yahoo.fr" je crois qu'il faut une virgule entre localhost et www.yahoo.fr.