Sommaire
Ce chapitre est une description technique de la solution mise en œuvre au Cr@ns. Nous disposons de deux types d'éléments. Le premier est le serveur ragnarok qui sert de passerelle. Le second est constitué de l’ensemble des bornes WiFi que nous pouvons disséminer partout. Nous parlons ici du premier élément. Voir ../FirmWare pour ce qui concerne les bornes wifi.
Le serveur ragnarok
Ce serveur est hébergé dans nos locaux et agit comme un routeur. Il est équipé du système d'exploitation OpenBSD dans sa version 4.0. L'ensemble des services dédiés au WiFi tournent sur cette machine. Les services inclus dans le système de base bénéficient d'un audit de sécurité de la part de l'équipe des développeurs. La sécurité est le credo du projet OpenBSD qui met en œuvre un certain nombre de mécanismes pour éviter les attaques les plus courantes, comme par exemple la séparation systématique des privilèges ou la mise en place d'un bac à sable (chroot) pour chaque application dès que c'est possible. Leur politique s'avère payante au fil des ans car peu de failles sont finalement découvertes et très peu d'entre elles sont exploitables. On pourra consulter la page http://www.openbsd.org/errata.html pour consulter les failles concernant OpenBSD.
Le démon ISAKMP et la pile IPsec
L'élément principal de ragnarok est le démon ISAKMP, ISAKMPd, et la pile IPsec. Ces deux éléments constituent le fer de guerre de la solution WiFi. Le démon ISAKMP (RFC 2408) est chargé de la distribution des clefs à l'aide du protocole IKE et la gestion des associations de sécurité. Il est fourni et installé en standard dans OpenBSD. Sa configuration est générée à partir de la base LDAP, à chaque changement de celle-ci. Les éléments d'authentification sont les adresses IP et les secrets partagés : chaque client dispose de sa propre adresse IP et de son propre mot de passe. Celui-ci est généré de manière aléatoire (et non choisi) pour des raisons de sécurité.
Le démon ISAKMP négocie les différents paramètres de sécurité avec le client. Celui-ci peut choisir entre 3DES et AES pour le chiffrement. Ce dernier est préféré car il est à la fois plus rapide et plus sûr. Cependant, les clients Windows ne disposent que de 3DES. Le mécanisme d'intégrité est au choix HMAC-MD5 et HMAC-SHA1 ; ce dernier étant préféré. Si le client le désire, il peut également activer Perfect Forward Secrecy (PFS) qui permet d'éviter la compromission des clefs temporaires de session suite à la compromission de l'une d'entre elles.
Les fichiers de configuration pour ISAKMPd sont :
/etc/isakmp/isakmpd.conf
/etc/isakmp/isakmpd.policy
Une fois les paramètres de sécurité négociés, le démon IKE fournit à la pile IPsec les paramètres nécessaires pour construire l'association de sécurité et ainsi chiffrer les communications entre le client et le serveur. OpenBSD contient également en standard une pile IPsec basée sur l'implémentation de Kame. Cette implémentation sait tirer partie de l'accélération matérielle fournie par les cartes cryptos. Nectaris, le prédécesseur de ragnarok, disposait d'une de ces cartes, ce qui lui permettait de chiffrer 200 MBps de flux.
Pour lancer le démon ISAKMPd (la commande se trouve dans /etc/rc) :
cd / ; sudo systrace -U -A /sbin/isakmpd
Le serveur DHCP
Ragnarok contient également un serveur DHCP chargé de la configuration automatique des clients. Sa configuration est regénérée automatiquement à partir du contenu de la base LDAP. Ce serveur fait également partie du système de base et sert de relai aux bornes WiFi.
Le serveur Web
Une version modifiée de Apache 1.3 est également disponible. Elle ne sert que des pages statiques extraites de notre wiki. L'extraction se fait manuellement pour éviter qu'une personne mal intentionnée ne modifie les pages avec des instructions erronées. Les connexions non sécurisées sont redirigées vers le serveur sécurisé. Celui-ci est capable de détecter si le client a été redirigé de force ou de plein gré pour lui afficher la page d'explication adéquate.
Le serveur Web fait aussi partie de l'installation de base.
Mise à jour des bornes avec Apache
Apache sert aussi des paquets tar.gz qui permettent de mettre à jour des bornes. Il y a un virtual host wifi-update.crans.org. Dans celui-ci, l'URL / est réécrite selon le nom du demandeur :
# Est-ce que c'est bien une borne ? RewriteCond %{REMOTE_ADDR} !^138\.231\.148\.[0-9]*$ [OR] RewriteCond %{HTTP_USER_AGENT} !^Wifi-Update [OR] RewriteCond %{REQUEST_METHOD} !^GET RewriteRule ^(.*)$ https://wifi.crans.org$1 [L,R] # Est-ce que son fichier de config existe ? RewriteCond /wifi-update/%{REMOTE_HOST}.tar.gz -f RewriteRule ^/$ /%{REMOTE_HOST}.tar.gz [L] # S'il n'existe pas, on utilise un fichier par defaut. RewriteRule ^/$ /default.tar.gz [L]
Actuellement, le fichier correspondant au nom de la borne existe obligatoirement (et default.tar.gz pointe sur non-configure.wifi.crans.org.
Le paquet est construit en mixant le contenu de deux répertoires :
/etc/wifi/wifi-update-ng/common
/etc/wifi/wifi-update-ng/nom-de-la-borne
Si le second répertoire n'existe pas, c'est le répertoire /etc/wifi/wifi-update-ng/default qui est utilisé. Dans /etc/wifi/wifi-update-ng/common, on trouve notamment /etc/macip qui contient le fichier de correspondance MAC/IP utilisé à de nombreuses occasions. En plus du contenu de ces deux répertoires, on rajoute (ou complète) le fichier /etc/nvram.updates qui contient les valeurs des variables à mettre à jour. Il y a par exemple :
variables="lan_ipaddr wan_hostname" NVRAM_lan_ipaddr=138.231.148.54 NVRAM_wan_hostname=machin
Cela signifie que l'on va mettre à jour (si besoin) les variables lan_ipaddr et wan_hostname. Cf ../VariablesNvram pour une description de toutes les variables qu l'on utilise. On ajoute également à ce fichier des affectations directement issues de la description des bornes. Ainsi si la borne a un champ nvram (dans la base LDAP) du type : clef=valeur, on ajoutera la ligne suivante :
variables="${variables} clef" NVRAM_clef=valeur
Le contenu de l'archive sera récupéré par la borne et décompressé à la racine. Un fichier important est /tmp/update.sh : il sera exécuté après la décompression. Il permettra de relancer les services qui en ont besoin.
Pour lancer Apache (la ligne est dans /etc/rc) :
cd / ; sudo systrace -U -A /usr/sbin/httpd -DSSL
Le firewall
Ragnarok dispose également d'un firewall qui s'occupe de faire respecter la quasi totalité de la politique de sécurité. Le firewall est pf qui est le firewall standard sous OpenBSD. Son fichier de configuration se trouve dans /etc/pf.conf. Outre sa propre sécurité, le firewall vérifie un certain nombre de choses comme par exemple, pour les clients reconnus, seul IPsec, ISAKMPd et le portail captif sont autorisés.
Divers
Ragnarok utilise également SysTrace. Cf la page wiki qui lui est associée pour plus de renseignements.