Sésame

Systeme d'authentification et firewall dynamique

(c) 2003 Jerome KIEFFER (kieffer@crans.org).
All the sesame project is licenced under the GPL
The main source is at : ftp://islay.dyndns.org/pub/sesame
A mirror can be found at : http://www.crans.org/~kieffer/sesame/

  1. 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 shell 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.
  2. Nécéssite :

  3. 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
  4. 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.
  5. 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.
  6. 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
  7. Changelog :