====== 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;
}