Sésame
Systeme d'authentification et firewall dynamique
The English translation of this document
(c) 2003 Jérôme KIEFFER (kieffer at terre-adelie dot org).
All the sesame project is licenced under the GPL
The main source is at : http://www.terre-adelie.org/sesame
A mirror can be found (with few add-on) at : http://www.crans.org/~kieffer/sesame/
Version Francaise (original) par Jérôme KIEFFER <kieffer at
terre-adelie dot org>
Version Anglaise by Kenn Sebesta <kenn
at eissQ dot com>
Principe :
Autoriser l'acces à un reseau par l'édition dynamique
de règles de firewall avec iptables en utilisant un système basée sur une
interface web cryptée par SSL (secure socket layer).
En fait ca sert à authoriser (ou pas) des gens à se connecter à internet
depuis votre reseau WIFI.
Il y deux categories d'acces : les "utilisateurs" en
IP fixe, et les "tickets" pour 1 heure par exemple. Ils ne sont pas gérés pareil
par exemple on ne peut que créer un ticket, pas le modifier, comme une télécarte.
Je ne cache pas m'etre inspire du projet "NoCat" qui est lui meme sous GPL.
Les pages web sont pompées de chez eux ainsi que la trame de certains programmes.
Si le design-web ne vous plait pas, je vous invite à ;e contacter pour ammeliorer l'aspect. Je ne
suis pas webmaster.
Pourtant sésame est un projet bien different de NoCat : il est écrit en python, pas en perl
et il est concu pour tourner sur une seule machine. La passerelle est donc aussi le serveur web.
Un grand merci donc à rob@nocat.net .
Le concept de sesame est le même que celui préconisé par la NASA.
Nécéssite :
- Linux avec kernel 2.4 ou + supportant netfilter/iptables
- apache-ssl
- Python (2.2 ou mieux)
- Un firewall déjà configuré. Ici on ne fait que modifier quelques petites règles
pour ouvrir ou fermer des portes.
TODO : Je vais inclure un firewall préconfiguré
d'ici peu pour un routeur simple
- sudo (pour modifier le firewall en tant que root via un "sudo iptables")
-
Installation
Dezipper l'archive, je vous conseille de la placer dans /usr/local/sesame
A default il faudra redefinir la variable home au debut de chaque executable.
(TODO : faire un makefile pour l'installation plus clean)
Installer et configurer apache-SSL pour faire pointer la racine dans
sesame/htdocs. De même autoriser les scripts CGI et faire pointer
le repertoire cgi-bin vers sesame/cgi-bin
Configurer les regles de firewalling dans ~/lib/sesame.py
Installer sudo et ajouter la regle contenue dans /usr/local/sesame/etc/sudo
dans votre /etc/sudoers (authoriser www-data à executer iptables)
Configurer CRON pour qu'il ferme les connection devenues inutiles. Pour cela
copier /usr/local/sesame/etc/cron.d dans /etc/cron.d/sesame
-
Ajout d'un utilisateur
Cela se fait simplement par la commande sesame/bin/edit-sesame executée
par un shell. Il faut fournir le nom, le mot de passe, la MAC et l'IP de la
carte reseau et quelques autres infos (email, adresse) facultatives.
Le programme va modifier le fichier sesame/etc/passwd.
Pour effacer un utilisateur,
le plus simple reste sans doute d'effacer la ligne correspondante dans le fichier passwd.
TODO : nouvelle interface en Ncurses ou mieux en chteumeul+cgi-bin pour l'administration.
en pratique cela pourait être pas mal de faire un programme qui modifie automatiquement
le fichier /etc/dhcpd.conf pour affecter l'IP fixe automatiquement.
-
Créer un ticket.
Un "ticket-internet" est un couple login-passwd qui permet à n'importe qui de se connecter
à internet. Il n'y a pas d'authentification MAC-IP puisque le script CGI lis l'IP du client et
détermine la MAC d'après la table ARP. Une configuration en DHCP avec IP dynamique est donc tout
a fait appropriée.
On peut créer un nouveau "ticket-internet" simplement en executant le programme :
sesame/bin/new-ticket et en précisant la durée du ticket
(1m = une minute, 0.25h = 15 minutes ...).
TODO: generer un fichier PDF et/ou proposez d'imprimer le ticket.
-
Utilisation
Si votre routeur se nomme "routeur", un client obtient une IP statique par DHCP (le serveur DHCP
peut se trouver sur le routeur ou ailleur, mais ils doivent êtres synchronisés).
Pour acceder à internet depuis le reseau (WIFI) local, il se connecte sur
le serveur web-ssl :
https://routeur
ceci est crypte pour eviter le sniffage du mot de passe.
Une fois authentifié, le progamme ouvre une porte du firewall pour laisser sortir
les paquets venant de la MAC/IP de l'ordinateur authentifie.
Les portes se referment au bout de 2 minutes d'inactivite.(ou alors si le temps du ticket est
écoulé.
POur les bugs report, autres commentaires ou si vous voulez me filer un coup de main, n'hesitez pas
à me contacter (en Français ou en Anglais) :
kieffer@crans.org
Changelog :
- Version 0.1 :
Toute la partie web fonctionne, la mise à jour du firewall fonctionne mais une erreur de debutant fait
que cela ne marche pas. (Jérôme : Tu me réciteras 10x l'advanced firewalling howto de Rusty Russel)
- Version 0.2 :
maintenant iptables est directement piloté par python. il faut
authoriser iptables dans sudo. Cela ne semble pas handicaper les perfs
mais c'est plus propre que d'appeler python en sudo par python (qui pose des problème, je ne
comprends pas trop pourquoi).
- Version 0.3 :
- Inutile de relancer le firewall si la contable n'est pas modifiee
- Logger les utilisateurs dans des fichers distincts
- Logger les temps en secondes unix
- Page CGI de deconnection (identification par IP seulement)
- Coller toutes les fonctions dans une biblotheque ds /lib
- Page de suivi de connection (identification par IP seulement)
- Ajouter user et time dans /etc/connected en vu du chronometrage de la connection
- Version 0.4 :
- Outil console pour changer le mot de passe et les autres infos
- Facturation d'un utilisateur entre 2 dates
- Création de ticket-internet de duree-definie (10minutes, 3 heures...)
- Version 0.5 :
- On ajoute une version anglaise grâce au travail de "Kenn Sebesta" kenn at eiss
Q.com
TODO : faire une internationnalisation propre....
-
Il faut aussi commencer à réfléchir à ...
- l'interaction avec un serveur de mot de passe distant
-
- dhcp dynamique, synchronisation entre la base DHCP et celle le Sesame
Gestion du credit temps ... fabriquer un "joli" outil qui sorte le temps de connection d'un
utilisteur pour une période donnée et établisse une vrai facture ( il faut connaitre le prix
horaire genre 1 euro/heure)
- Plutot que de flusher la sous-table et de la recréer régulierement, ce serait plus propre de
n'effacer que les règles périmées.
- Que penser de : http://airsnarf.shmoo.com.
Est ce la peine de se casser le cul ? Sans doute
oui car les solutions de VPN ne seront pas generalisés avant quelques années et surtout pas pour
des "hot spots wifi"