Conception D'un Portail Captif Simple
Conception D'un Portail Captif Simple
Conception D'un Portail Captif Simple
La caverne de Joss
Accueil
Articles
Contact
Introduction
Cet article a pour objectif de décrire la conception d'un portail captif simple, en environnement GNU/Linux, opérant au
niveau 3 du modèle OSI.
De bonnes connaissances en réseau sont nécessaires pour la compréhension de cet article.
Le portail captif est une technique mise en oeuvre sur une passerelle d'accès permettant de bloquer toute commutation
externe et de forcer le client à se connecter sur une page Web, en redirigeant toutes les requêtes HTTP vers le serveur cible.
Cette technique a principalement pour objectif l'authentification du client sur le réseau. C'est une alternative légère et plus
simple à utiliser pour les clients néophytes que l'authentification 802.1x (radius), c'est pourquoi elle est couramment
utilisée sur les réseaux Wi-Fi ouverts.
Architecture
Pour la suite de l'article, nous prendrons en considération le réseau 10.100.1.0/24, ayant pour passerelle (route par défaut
des clients) 10.100.1.1.
Notre passerelle a pour interface "interne" eth1 (10.100.1.1) et pour interface "externe" eth0.
Il
existe 2 types de portails qui agissent respectivement aux niveaux 2 (liaison) et 3 (réseau) du modèle OSI. Le plus courant
est le portail captif de niveau 3, c'est donc sur celui-ci que nous nous attarderons.
Nous ferons abstraction du routage (éventuellement du NAT en postrouting), qui n'est pas le propos de l'article, et qui est
considéré comme acquis et déjà en place.
Pré-requis logiciel
La passerelle tourne sous un OS à base de Debian (Linux). Les paquets suivants doivent être installés :
iptables (netfiler)
sudo
apache2
php5 , php5-cli
bloquer le forwarding pour les clients non authentifiés depuis eth1 (interne) vers eth0 (externe).
rediriger les clients non authentifiés vers le serveur web local en cas de requête HTTP.
autoriser le forwarding de certains réseaux (site web du FAI, plateforme de paiement...).
2 EXT_IF=eth0
3 IP_CAPTIVE_PORTAL=10.100.1.1
4 IPTABLES=/sbin/iptables
Blocage du forwarding
Très simple :
https://www.josselin-lecocq.fr/articles-portailcaptif 1/3
11/06/2021 Conception d'un portail captif simple
1 ### Deny FORWARD by default
Redirection des clients non authentifiés vers le serveur web local, et "forcing" du DNS
Le fait de forcer le serveur DNS est utile pour la suite (déclaration d'un domaine local), et permet d'éviter les tunnels IP
over DNS (d'autant que de toute façon la commutation est bloquée).
Il peut être intéressant, quand on est FAI, d'autoriser les clients non authentifiés à se connecter au site web du-dit FAI, afin
d'enregistrer des abonnements.
En supposant que l'IP du serveur hébergant le site web du FAI soit 212.27.48.10, on entre les commandes suivantes :
1 # Allow free forwarding for 212.27.48.10
On peut aussi autoriser le trafic à destination de PayPal, utile en cas de paiement en ligne pour l'abonnement :
11
Bloquer et rediriger le trafic est une chose, mais lorsque le client est authentifié, il faut pouvoir l'autoriser à bypasser le
portail captif.
Libre à vous d'utiliser le langage de programmation de votre choix pour l'interface client, il vous faudra après
authentification rajouter deux règles iptables pour l'adresse MAC spécifique.
Par exemple, pour autoriser l'adresse MAC 5E:FF:56:A2:AF:15 à se connecter, on exécute les commandes suivantes :
Le but du portail est bien sûr de pouvoir authentifier de façon automatique des utilisateurs.
Pour ce faire, le programme executé sur le serveur doit posséder des droits suffisants pour faire appel à iptables (root). En
prenant l'exemple d'un script PHP, appelé par Apache (serveur web), apache doit posséder des droits suffisants.
Pour ce faire, on utilise sudo, en rajoutant la ligne suivante dans le sudoers (avec la commande visudo) :
1 # visudo
https://www.josselin-lecocq.fr/articles-portailcaptif 2/3
11/06/2021 Conception d'un portail captif simple
En PHP, l'implémentation d'une fonction permettant d'autoriser une adresse MAC à se connecter peut donner le code
suivant :
1 <?php
3 function enableMac($mac='inconnue')
4 {
5 if($mac == 'inconnue')
6 {
8 preg_match('/..:..:..:..:..:../',$mac , $matches);
9 @$mac = $matches[0];
10 }
11
14
15 return $r1.$r2;
16 }
17
18 ?>
Conclusion
Ainsi s'achève la conception de notre portail captif de niveau 3.
À titre d'exemple d'amélioration, il est possible prévoir une redirection du client sur un domaine dédié à l'authentification
(ex : auth.mon-fai.fr), avec un bon paramétrage DNS. Il est aussi possible (et conseillé) de proposer une version HTTPS
(SSL / TLS) du portail captif, afin de garantir la sécurité de l'authentification sur réseau ouvert.
J'espère avoir correctement traité ce sujet, et je tiens à remercier l'association Quantic Télécom pour les sources et codes
présentés ici.
Twitter -
Me contacter -
Quantic Telecom
https://www.josselin-lecocq.fr/articles-portailcaptif 3/3