Master 1 ère année UE Réseaux avancés I Projet Réalisation d un portail captif d accès authentifié à Internet Présentation du projet Le but du projet est de mettre en place un portail captif permettant : à un poste d un réseau privé d accéder à Internet après s être authentifié : le réseau privé sera défini dans l adresse 10.10.10.0/24 ; les postes connectés seront configurés automatiquement à l aide d un serveur DHCP ; le service d authentification choisi est celui de l Université de Limoges utilisant CAS, «Central Authentication Service», et «LemonLDAP», voir la fiche de TP n 6 ; l interception des connexions Web du poste (à destination du port 80 d une machine située hors réseau local) ; On parlera de «proxy transparent» puisqu il n est pas nécessaire de configurer le navigateur pour être pris en charge. la redirection de ces connexions de ce poste vers un serveur réalisant ce portail d accès : un formulaire de connexion, au format HTML, est retourné au client pour permettre la saisie du couple «login/mdp» ; une interrogation sécurisée par connexion SSL est réalisée vers le serveur cas.unilim.fr de l Université pour vérifier l existence du couple «login/mdp» : dans le cas d un succès : l accès du poste à Internet est autorisé ; dans le cas d un échec : le poste est maintenu dans son isolement. le filtrage ou non des connexions du poste et la prise en charge du SNAT nécessaire à l accès Internet par configuration du firewall présent sur le routeur. Synoptique du réseau privé 10.10.10.1 Internet / [ internal ] \ / **** / / \-------+** VM **+-------------- / \ -------+-----------+ - - - - - - Routeur [HOSTA: 10.10.10.10] [HOSTB: 10.10.10.11] La VM sera la même que celle utilisée durant les TPs, seul la configuration des containers et du «switch» les reliants sera modifiée. La plage d adresses, à affecter automatiquement par DHCP aux postes du réseau privé, est [10.10.10.10-10.10.10.20]. Pour réaliser le travail demandé, on utilisera : les capacités de routage du noyau Linux ; le firewall NetFilter et la configuration par iptables ; dnsmasq pour le serveur DNS et le serveur DHCP ; un pont virtuel fournit par le package Linux «bridge-utils» ; le navigateur en mode texte «links» ; les containers LXC. Resp. UE : P-F. Bonnefoi, http://libpfb.so/, «Projet» version du 9 décembre 2012, rédigé avec ConTEXt Don t Panic! 1/5
Configuration de dnsmaq, «DNS Masquerade», pour les services de DNS et de DHCP Pour installer dnsmasq sous votre VM, «Virtual Machine» : $ sudo apt-get install dnsmasq Pour utiliser dnsmasq, deux possibilités : à l aide du fonctionnement en mode «démon» activé à l installation : Pour le configurer, il faut éditer le fichier /etc/dnsmasq.conf ; Pour le redémarrer : $ sudo /etc/init.d/dnsmasq restart Pour le stopper, pour par exemple passer en mode «manuel» : $ /etc/init.d/dnsmasq stop en mode manuel, après l avoir préalablement stoppé : $ sudo dnsmasq -d -C fichier_dnsmasq_configuration Il se comporte dans ce cas comme un processus normal, que l on peut envoyer en tâche de fond ou bien interrompre avec un CTRL-C Un exemple de contenu pour le fichier de configuration utilisé par dnsmasq : 1 interface=eth1 2 domain=local 3 expand-hosts 4 dhcp-range=192.168.0.1,192.168.0.50,12h 5 server=164.81.1.4 6 server=164.81.1.5 Explications : ligne 1 : le nom de l interface où le service DNS offert par dnsmasq sera activé ; ligne 2 : le nom du domaine associé au réseau IP ; ligne 3 : le serveur ajoutera automatiquement le nom du domaine ; ligne 4 : la plage d adresse fournie par le serveur ; ligne 5&6 : pour l utilisation des serveurs de DNS de l université (il est possible de supprimer ces lignes si votre VM est déjà configurée correctement, c-à-d si elle possède un fichier /etc/resolv.conf déjà renseigné). Attention : vous devez indiquer vôtres serveurs DNS dans le cas d un développement avec connexion Internet hors de l Université de Limoges, ou bien les omettre si votre VM a été configurée correctement. Vous pouvez tester votre configuration DNS avec l outil dig (voir support de cours pour les explications). depuis un container, pour qu il se configure par DHCP, on lance la commande suivante : # dhclient eth0 Le container obtient depuis le serveur : son adresse IP, le préfixe réseau, la route par défaut passant par le routeur, le serveur DNS (le serveur DNS correspond, ici, au serveur dnsmasq s exécutant sur le serveur). Attention L utilisation de l outil dnsmasq entraîne la modification du fichier /etc/resolv.conf partagé par la VM et les différents containers. Pour éviter les «effets de bord», il est nécessaire d associer un fichier différent pour chaque container en lieu et place du fichier /etc/resolv.conf. Resp. UE : P-F. Bonnefoi, http://libpfb.so/, «Projet» version du 9 décembre 2012, rédigé avec ConTEXt Don t Panic! 2/5
Configuration d un container LXC avec des répertoires uniques associés Le but de cette configuration est de permettre à un container de disposer de son propre espace disque par rapport à celui de son hôte, afin de pouvoir y créer/modifier des fichiers sans conflit : lxc.utsname = HOST1 lxc.network.type = veth lxc.network.flags = up lxc.network.link = bridge_internal lxc.network.name = eth0 lxc.mount.entry = pour_resolv_conf_host1 /etc/ none rw,bind 0 0 Il faudra avant de lancer le container : créer les répertoires pour_resolv_conf_host1 ; copier les fichiers /etc/fstab, /etc/passwd, /etc/resolv.conf dans le répertoire pour_resolv_conf_host1. Faites attention à lancer le container depuis le répertoire parent de «pour_resolv_conf_host1». Quelques commandes Unix utiles Pour la configuration du réseau par DHCP : sudo dhclient eth0 : lance la configuration dhcp pour l interface eth0 ; sudo dhclient eth0 -r : dé-configure l interface eth0 ; Pour la mise à jour de la distribution GNU/Linux Ubuntu : sudo apt-get update : met à jour la base de données des différents paquetages disponibles ; sudo apt-get dist-upgrade : met à jour le système avec les dernières versions disponibles des paquetages installés ; Pour obtenir des informations concernant les ports utilisés : $ netstat -ap affiche la liste des sockets (Unix ou IP) ainsi que les processus auxquels elles sont attribuées. Pour activer la fonction de routeur dans votre noyau : $ sudo sysctl net.ipv4.ip_forward=1 $ sysctl net.ipv4.ip_forward Pour afficher l ensemble des règles du firewall : $ sudo iptables -t filter -L Pour surveiller, l application des règles et voir si elles se déclenchent : iptables -t nat -nvl La commande suivante permet de suivre l activité du firewall : watch iptables -t nat -nvl Pour «sniffer» le réseau avec tcpdump : tcpdump -nvvx -i eth0 Pour installer le navigateur links : sudo apt-get install links Resp. UE : P-F. Bonnefoi, http://libpfb.so/, «Projet» version du 9 décembre 2012, rédigé avec ConTEXt Don t Panic! 3/5
Travail demandé a. Configurez dnsmasq pour assurer la configuration par DHCP des containers connectés dans le réseau privé 10.10.10.0/24. Vous mettrez dans votre rapport la configuration du serveur et une trace des échanges de paquets pour la configuration d un container avec le serveur DHCP obtenu à l aide de tcpdump. b. Configurez le firewall présent sur le routeur (la VM) pour : bloquer par défaut le trafic en provenance du réseau privé 10.10.10.0/24 ; rediriger le trafic en provenance du réseau privé et à destination du Web (tcp et port destination 80) vers un serveur logiciel s exécutant sur le routeur et réalisant le travail du portail ; Vous mettrez dans votre rapport la liste des règles que vous avez employé pour configurer votre firewall : une sortie de la commande «iptables -nl» pour les différentes tables modifiées. c. Écrire un programme Python réalisant le travail du portail : il implèmente un serveur TCP discutant avec le poste client par l intermédiaire de son navigateur Web ; lors de la connexion d un client vers un site Web (depuis un container connecté au réseau privé) il répond par un formulaire de saisie de «login/mdp» ; il effectue l authentification sécurisée de ce «login/mdp» auprès du serveur CAS suivant la méthode du TP n 6 ; si l authentification est correcte, alors le trafic provenant de ce poste : doit être autorisé à traversé le routeur ; doit subir du SNAT en version «masquerading» pour la prise en charge du trafic vers Internet ; Vous modifierez les règles du firewall en conséquence, en utilisant la commande iptables au sein de votre programme Python à l aide du module commands.getoutput, voir dans le support de cours Python. Conseil : faites attention à l ordre des règles... Vous testerez votre serveur et le bon fonctionnement du portail à l aide de links lancé depuis le container. L appui sur la touche «Esc» permet d accèder à un menu en mode texte. rezo@ishtar:~/résavi$ links File View Link Downloads Setup Help +------------------------------+ Go to URL g Go back z History > Reload Ctrl-R Bookmarks s Save bookmarks Save as Save URL as Save formatted document Kill background connections Kill all connections Ctrl-S Flush all caches Resource info OS shell Exit q +------------------------------+ Resp. UE : P-F. Bonnefoi, http://libpfb.so/, «Projet» version du 9 décembre 2012, rédigé avec ConTEXt Don t Panic! 4/5
Allez sur Google : Recherche Images Maps Play YouTube Actualites Gmail Drive Plus >> Historique Web Parametres Connexion France Google Recherche avanceeoutils linguistiques [ Recherche Google ] [ J ai de la chance ] Le domaine Google.fr est disponible en : English Solutions publicitairessolutions d entreprisegoogle+a propos de GoogleGoogle.com Quittez avec la touche «q» : (c) 2012 - Confidentialite et conditions d utilisation +------------ Exit Links -------------+ Do you really want to exit Links? [ Yes ] [ No ] +-------------------------------------+ Vous pourrez tester avec deux containers différents (pensez à adapter les fichiers de configuration). Vous mettrez dans votre rapport : une trace de la modification des règles de firewall avant et après le succès de l authentification d un client ; une capture d écran du navigateur avec le formulaire d authentification lors de la soumission, et après succès & échec ; une capture obtenue à l aide de tcpdump du segment «SYN» d une connexion d un container avant et après le passage du routeur. Remise du travail Le travail devra être remis sous forme d une archive à bonnefoi@unilim.fr. Vous mettrez le programme source Python du portail. Vous inclurez les différents fichiers de configuration des containers, ponts, routage, firewall etc. Pour les captures et commentaires sur votre programme, vous joindrez un rapport au format PDF à cette archive. Ce rapport peut être rédigé simplement : pas de plan, juste les éléments techniques demandés. Resp. UE : P-F. Bonnefoi, http://libpfb.so/, «Projet» version du 9 décembre 2012, rédigé avec ConTEXt Don t Panic! 5/5