====== Le portail de MiNET ====== ==== La machine ==== La VM ''portailguest'' présente sur le cluster ne contient pas le site web en lui-même, qui est sur le CT ''adh5''. Elle comporte en revanche trois interfaces, dans le VLAN d'admin (192.168.102.47), dans le VLAN 15 invité (192.168.12.1) et dans le VLAN publique (157.159.40.97). ==== Site web portail.minet.net ==== Tout adhérent n'arrivant pas à s'authentifier sur le réseau est redirigé vers ce site web. Il permet aux adhérents d'obtenir les informations de contact, accéder à leur compte MiNET pour ajouter/supprimer les adresses MAC ainsi que voir la date d'expiration de leur cotisation, voir les tutoriaux pour les services dédiés aux adhérents. ==== Modification des tutoriaux ==== Il faut se rendre sur la [[https://portail.minet.net/admin|page d'administration]] du portail. Les comptes utilisés pour se connecter sont ceux d'ADH5 La page d'accueil est la page Intro (spécifique à la langue), il faut l'éditer pour modifier le menu des tutoriaux (la liste n'est pas générée automatiquement). Les tutoriaux sont séparés par langue, il faut pour un même tutorial créer autant que de pages que de langues voulues. Les tutoriaux sont à écrire en [[http://www.siteduzero.com/tutoriel-3-13666-apprenez-a-creer-votre-site-web-avec-html5-et-css3.html | HTML ]] ou en ​[[https://fr.wikipedia.org/wiki/Textile_%28langage%29 | Textile ]]. ==== Développement ==== Ce site web utilise le framework ​[[http://www.rubyonrails.org/ | Ruby On Rails ]] Pour contribuer, se référer à [[wiki:services:adh5 |la page du wiki sur ADH5]]. ==== Les services ==== * iptables (pare-feu) qui permet la redirection vers le portail * un serveur DHCP pour distribuer des IPs dans le VLAN 15 * un serveur apache2 pour faire une redirection html (explications plus bas) ==== Mécanisme de redirection ==== Le portail captif est en fait un pare-feu qui s'occupe de rediriger toutes les requêtes web vers l'apache qui tourne sur la même machine. Pour ce faire, il faut bien évidemment laisser passer les requêtes DNS, puis après il "capte" les requêtes sur les ports TCP 80 et 443. Tous les paquets "non-web" ou à destination de sites non-autorisés sont détruits. === Configuration Iptables === Le script qui configure iptables est ici : **/etc/network/if-up.d/firewall**, il est lancé lors du démarrage des interfaces réseau (pas au démarrage de la machine, il ne trouverait pas ses interfaces). Si des modifications sont nécessaires je conseille fortement de s'entrainer à iptables avant. Ce n'est pas compliqué quand on connait le fonctionnement mais l'apprentissage n'est pas trivial. Les sites minet.net et it-sudparis restent accessibles, toutes les requêtes vers d'autres sites sont redirigées sur le port 5280 ce cette même machine. C'est sur ce port qu'apache écoute. (voir plus bas). #!/bin/bash iptables -F -t nat iptables -F -t mangle iptables -F -t filter iptables -X #mangle prerouting iptables -t mangle -N Portail iptables -t mangle -A PREROUTING -j Portail iptables -t mangle -A Portail -i eth1 -j MARK --set-xmark 0x4/0xffffffff #marque les paquets venants du vlan15 #nat prerouting iptables -t nat -N PortailCapture iptables -t nat -A PREROUTING -j PortailCapture iptables -t nat -A PortailCapture -s 192.168.12.0/22 -d 157.159.40.105/32 -p tcp -m tcp --dport 80 -j RETURN #site *.minet.net passe direct iptables -t nat -A PortailCapture -s 192.168.12.0/22 -d 157.159.40.105/32 -p tcp -m tcp --dport 443 -j RETURN #site *.minet.net passe directe en https aussi iptables -t nat -A PortailCapture -s 192.168.12.0/22 -d 157.159.11.8/32 -p tcp -m tcp --dport 80 -j RETURN #itsudparis iptables -t nat -A PortailCapture -s 192.168.12.0/22 -d 157.159.11.8/32 -p tcp -m tcp --dport 443 -j RETURN #itsudparis iptables -t nat -A PortailCapture -i eth1 -p tcp -m mark --mark 0x4 -m tcp --dport 53 -j DNAT --to-destination 157.159.40.55:53 #redirection des paquets pour le dns iptables -t nat -A PortailCapture -i eth1 -p udp -m mark --mark 0x4 -m udp --dport 53 -j DNAT --to-destination 157.159.40.55:53 #" iptables -t nat -A PortailCapture -i eth1 -p tcp -m mark --mark 0x4 -m tcp --dport 53 -j DNAT --to-destination 157.159.40.54:53 #" iptables -t nat -A PortailCapture -i eth1 -p udp -m mark --mark 0x4 -m udp --dport 53 -j DNAT --to-destination 157.159.40.54:53 #" iptables -t nat -A PortailCapture -p tcp -m mark --mark 0x4 -m tcp --dport 80 -j REDIRECT --to-ports 5280 # redirection des paquet web divers vers le port 5280 iptables -t nat -A PortailCapture -p tcp -m mark --mark 0x4 -m tcp --dport 443 -j REDIRECT --to-ports 5280 # #filter forward iptables -t filter -N Portail iptables -t filter -N PortailPorts iptables -t filter -A FORWARD -j Portail iptables -t filter -A Portail -j PortailPorts iptables -t filter -A Portail -s 192.168.12.0/22 -d 157.159.40.105/32 -p tcp -m tcp --dport 80 -j ACCEPT #on passer tt les sites autorisés et leut réponse iptables -t filter -A Portail -s 157.159.40.105/32 -d 192.168.12.0/22 -p tcp -m tcp --sport 80 -j ACCEPT iptables -t filter -A Portail -s 192.168.12.0/22 -d 157.159.40.105/32 -p tcp -m tcp --dport 443 -j ACCEPT iptables -t filter -A Portail -s 157.159.40.105/32 -d 192.168.12.0/22 -p tcp -m tcp --sport 443 -j ACCEPT iptables -t filter -A Portail -s 192.168.12.0/22 -d 157.159.11.8/32 -p tcp -m tcp --dport 80 -j ACCEPT iptables -t filter -A Portail -s 157.159.11.8/32 -d 192.168.12.0/22 -p tcp -m tcp --sport 80 -j ACCEPT iptables -t filter -A Portail -s 192.168.12.0/22 -d 157.159.11.8/32 -p tcp -m tcp --dport 443 -j ACCEPT iptables -t filter -A Portail -s 157.159.11.8/32 -d 192.168.12.0/22 -p tcp -m tcp --sport 443 -j ACCEPT iptables -t filter -A Portail -s 157.159.40.55/32 -d 192.168.12.0/22 -o eth1 -j ACCEPT iptables -t filter -A Portail -s 192.168.12.0/22 -d 157.159.40.55/32 -i eth1 -p tcp -m tcp --dport 53 -j ACCEPT iptables -t filter -A Portail -s 192.168.12.0/22 -d 157.159.40.55/32 -i eth1 -p udp -m udp --dport 53 -j ACCEPT iptables -t filter -A Portail -s 157.159.40.54/32 -d 192.168.12.0/22 -o eth1 -j ACCEPT iptables -t filter -A Portail -s 192.168.12.0/22 -d 157.159.40.54/32 -i eth1 -p tcp -m tcp --dport 53 -j ACCEPT iptables -t filter -A Portail -s 192.168.12.0/22 -d 157.159.40.54/32 -i eth1 -p udp -m udp --dport 53 -j ACCEPT iptables -t filter -A Portail -j DROP iptables -t filter -A PortailPorts -i eth1 -p tcp -m tcp --dport 5280 -j ACCEPT #accepte les paquets web qui ont été précédement changé de ports iptables -t filter -A PortailPorts -i eth1 -p udp -m udp --dport 5280 -j ACCEPT iptables -t filter -A PortailPorts -i eth1 -p tcp -m mark --mark 0x3 -j DROP #et on drop tout le reste !!! iptables -t filter -A PortailPorts -i eth1 -p udp -m mark --mark 0x3 -j DROP #nat postrooting iptables -t nat -N PortailNAT iptables -t nat -A POSTROUTING -j PortailNAT iptables -t nat -A PortailNAT -s 192.168.12.0/22 -o eth0 -m mark --mark 0x1 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -o eth0 -m mark --mark 0x2 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -o eth0 -m mark --mark 0x3 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -d 157.159.40.105/32 -p tcp -m tcp --dport 80 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -d 157.159.40.105/32 -p tcp -m tcp --dport 443 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -d 157.159.11.8/32 -p tcp -m tcp --dport 80 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -d 157.159.11.8/32 -p tcp -m tcp --dport 443 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -d 157.159.40.55/32 -p tcp -m tcp --dport 53 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -d 157.159.40.55/32 -p udp -m udp --dport 53 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -d 157.159.40.54/32 -p tcp -m tcp --dport 53 -j MASQUERADE iptables -t nat -A PortailNAT -s 192.168.12.0/22 -d 157.159.40.54/32 -p udp -m udp --dport 53 -j MASQUERADE ==== Configuration Apache ==== Tout est dans **/etc/apache2/sites-enabled/redirection-portail** On a un Virtualhost qui redirige toutes les demandes vers portail.minet.net. C'est le mécanisme notamment utilisé par les sites web dont l'adresse à changé pour rediriger vers la nouvelle page. Il est important de régler la durée maximale de mise en cache à 1 seconde. Les navigateur gardent sinon la redirection en mémoire même une fois authentifié sur le réseau minet. (Lors des 1ers tests, mon firefox me renvoyait systématiquement sur le portail dès que je tentais d'accéder à google, même une fois hors du campus !) ExpiresDefault "access plus 1 second" Redirect temp / http://portail.minet.net/ ExpiresDefault "access plus 1 second" Redirect temp / http://portail.minet.net ==== Le DHCP ==== * Il écoute seulement sur l'interface vlan15. * /etc/dhcp/dhcpd.conf subnet 192.168.12.0 netmask 255.255.252.0 { option routers 192.168.12.1; range 192.168.12.2 192.168.15.254; }