Configuration du FortigateInterface d'administrationOn crée une interface physique, et un réseau, d'administration du Wifi : port3 nommée admin_wifi 10.18.0.1/255.255.255.0 C'est le réseau d'adresses des bornes elles-même. On coche dans les Administrative Access : PING et CAPWAP, ce qui va créer automatiquement une interface virtuelle pour le réseau des clients Wifi. Le serveur DHCP de cette interface est paramétré de (start) 10.18.0.200 à 10.18.0.254 (end), masque 255.255.255.0 Default Gateway = same as interface IP Le DNS pointe vers forwarder 192.168.100.50 NPT = same as system Interface virtuelle du réseau clientL'interface virtuelle créée est renommée en "WIFI IUT" et on lui donne l'adresse 10.8.0.1/255.255.0.0 NOTE : on donne dans notre DNS le nom portail-wifi.iut-rodez.fr à l'adresse 10.8.0.1 Administrative Access = PING seulement Le serveur DHCP est paramétré de (start) 10.8.0.2 à (end) 10.8.255.254, masque 255.255.0.0 Default Gateway = same as interface IP Le DNS pointe vers forwarder 192.168.100.50 NPT = same as system Dans le menu "Advanced", on ajoute quelques options délivrées par le DHCP. La plupart des valeurs de ces options doivent être écrites en hexadécimal, il convient donc de faire une traduction de ASCII vers hexa au préalable. SNS utilise cet outil : http://www.asciitohex.com/ options ajoutées:
Le but est de configurer tous
les clients pour qu'ils pointent vers un proxy web nommé
wificache.iut-rodez.fr à l'extérieur du réseau captif, proxy fils de
cache.iut-rodez.fr le proxy principal. Comme le portail captif ne sait
intercepter que les ports 80 et 443, wificache est configuré pour
écouter sur son port 80 et pour relayer son trafic vers le port 8080 de
cache.iut-rodez.fr. Le fichier de configuration des clients est donc
simple :
SSID = IUT-RODEZ qui est le SSID public présenté par les bornes Security Mode = Captive Portal Portal Type = Authentication Authentication Portal = Local User Groups = Wifi_Group. Wifi_Group est un groupe créé par nous dans le menu "User and Device", il contient le serveur serads01.iut.local qui est le serveur d'authentification AD. La conf LDAP récupère tout DC=IUT, DC=LOCAL Customize Portal Messages : la page de login et de loigin failed sont customisée aux couleurs de l'IUT, voir plus loin Redirect after captive portal : specific URL = http://warning.iut-rodez.fr/wifi/ , page web sur laquelle on affiche un message d'avertissement sur les usages autorisés sur le réseau Wifi de l'IUT NOTE : on ne redirige pas sur la requête initiale parce que, vu qu'on dirige le trafic vers le port 80 d'un proxy hors du réseau wifi (requête émise au proxy : "GET http://lemonde.fr" au lieu de "GET /" au serveur du Monde), l'URL est mal re-écrite par le portail : http://lemonde.frhttp//lemonde.fr au lieu de http://lemonde.fr On coche "Broadcast SSID" et "Block Intra-SSID Traffic" pour diffuser de le SSID et empêcher les flux d'un client à un autre. Device Management : coche "Detect and Identify Devices" Policy
zzz_wifii_client (10.8.0.0/16) -> forwarder en DNS
zzz_wifi_client -> cache en HTTP cette règle doit être écrite avant (au dessus) les autres, on note son ID (475). On édite ensuite cette règle via le CLI de la console pour permettre le trafic sans capture du portail :
zzz_wifi_client -> wificache en HTTP Configuration console du Wifi#Passage du contrôleur en Country code FRANCE :
#Redirection http vers https :
#Sélection du certificat wifi, si on veut utiliser le certificat Fortinet au lieu de *.iut-rodez.fr
#URL de redirection du portail captif :
#Activer/désactiver la page de keepalive après la connexion :
end Certificat *.iut-rodez.fr et ADRenouvellement des certificats *.iut-rodez : On charge un wildcard délivré par Renater pour *.iut-rodez.fr sur le Fortigate. Menu System / Certificates : Import CA (remote ?) Certificates = on donne le nom du certificat (star_iut-rodez_fr) et de la chaîne de certification. Le certificat est chargé dans la zone "Certificates" AD : On charge un certificat AD pour serads01.iut.local Import CA Certificates. Le certificat est chargé depuis le PC local sous le nom CA_Cert_x où x est un nombre incrémenté à chaque chargement, ex : CA_Cert_3 Affectation des certificats *.iut-rodez.fr : Dans le menu User / Authentication / Settings, on précise que le certificat *.iut-rodez.fr doit être utilisé pour l'authentification : Protocol support : on coche tout Certificate : star_iut-rodez_fr AD : Dans le menu User/ Authentication /LDAP Server pour serads01.iut.local : name : serads01.iut.local IP : 10.5.0.4 port : 636 common name identifier : cn DN : DC=iut,DC=local Bind type regular : DN = CN=ldapcas,CN=Users,DC=iut,DC=local Secure connection : LDAPS Certificate : Cert_CA_3 WPADLes clients captifs configurés en détection automatique vont récupérer par le DHCP, soit l'URL de configuration "http://wpad.iut-rodez.fr/wpad.dat", soit le domaine de recherche et alors essayer de résoudre "wpad.iut-rodez.fr" et d'atteindre ensuite "http://wpad.iut-rodez.fr/wpad.dat". Il faut donc que cette ressource soit accessible directement par les clients captifs (voir Policy ci-dessus) et il faut que ce fichier donne la bonne configuration du proxy pour le réseau captif, à savoir d'utiliser wificache.iut-rodez.fr sur le port 80 sauf dans le cas où la requête est adressée directement au portail : portail-wifi.iut-rodez.fr Configuration Apache sur cache.iut-rodez.fr wpad.iut-rodez.fr est un CNAME de cache.iut-rodez.fr. On configure donc Apache pour qu'il délivre un fichier dédié nommé wpad-wifi2.dat (ou proxy-wifi2.pac) quand la requête arrive du réseau captif : /etc/apache2/sites-enabled/000-default : <Directory /var/www/> AddType application/x-ns-proxy-autoconfig .dat AddType application/x-ns-proxy-autoconfig .pac RewriteEngine On RewriteBase / RewriteCond %{REMOTE_ADDR} ^10\.10\.0\.2$ RewriteRule ^proxy\.pac$ proxy.outside.pac RewriteCond %{REMOTE_ADDR} ^10\.10\.0\.2$ RewriteRule ^wpad\.dat$ wpad-wifi.dat RewriteCond %{REMOTE_ADDR} ^10\.8\..* RewriteRule ^proxy\.pac$ proxy-wifi2.pac RewriteCond %{REMOTE_ADDR} ^10\.8\..* RewriteRule ^wpad\.dat$ wpad-wifi2.dat RewriteCond %{REMOTE_ADDR} !^10\..* RewriteCond %{REMOTE_ADDR} !^192\.168\..* RewriteRule ^proxy\.pac$ proxy.outside.pac Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # RewriteRule ^wpad.dat$ proxy.pac </Directory> /var/www/wpad-wifi2.dat (idem pour /var/www/proxy-wifi2.pac) function FindProxyForURL(url, host) { if (isInNet(dnsResolve(host), "10.8.0.1", "255.255.255.255")) { return "DIRECT"; } return "PROXY wificache.iut-rodez.fr:80"; } Wificache.iut-rodez.frSquid3 est installé sur la machine wificache.iut-rodez.fr située dans la DMZ. On configure Squid pour qu'il écoute sur le port 80 et qu'il relaie directement les requêtes à cache.iut-rodez.fr /etc/squid3/squid.conf acl reseau_captif src 10.0.0.0/8 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost cache_peer cache.iut-rodez.fr parent 8080 0 no-query proxy-only no-digest never_direct allow all http_access allow reseau_captif cache deny all http_access deny all icp_access deny all htcp_access deny all forwarded_for on http_port 80 https_port 443 access_log /var/log/squid3/access.log squid forwarded_for on Cache.iut-rodez.frOn configure Squid et Squidguard pour accepter les requêtes arrivant de Wificache. /etc/squid3/squid.conf
/etc/squid/squidGuard.conf dbhome /var/lib/squidguard/db logdir /var/log/squid # définition des dérogations dest derogations { domainlist db.iut/derogations/domains urllist db.iut/derogations/urls } dest cache { urllist db.iut/cache/urls } # définitions des groupes d'interdiction dest adult { domainlist adult/domains urllist adult/urls domainlist porn/domains urllist porn/urls log pornaccesses } dest haine { domainlist aggressive/domains urllist aggressive/urls domainlist agressif/domains urllist agressif/urls log hateaccesses } dest telechargement { domainlist filehosting/domains urllist filehosting/urls log filehostingaccesses } dest manga { domainlist manga/domains urllist manga/urls log mangaaccesses } dest hacking { domainlist hacking/domains urllist hacking/urls log hackingaccesses } dest jeu { domainlist games/domains urllist games/urls log gameaccesses } dest controle { domainlist remote-control/domains urllist remote-control/urls log remoteaccesses } dest tricheur { domainlist tricheur/domains urllist tricheur/urls log tricherraccesses } dest warez { domainlist warez/domains urllist warez/urls domainlist malware/domains urllist malware/urls log warezaccesses } dest blog { domainlist blog/domains urllist blog/urls log blogaccesses } dest audio-video { domainlist audio-video/domains urllist audio-video/urls log videoaccesses } dest proxies { domainlist redirector/domains urllist redirector/urls urllist redirector/usage domainlist proxy/domains urllist proxy/urls urllist proxy/usage log proxyaccesses } # groupe spécifique pour ajouts d'interdictions propres à l'IUT dest custom_iut { domainlist db.iut/iut/domains urllist db.iut/iut/urls log iutaccesses } # définition des profils src a102 { iplist salles/a102 } src a103 { iplist salles/a103 } src a104 { iplist salles/a104 } src a105 { iplist salles/a105 } src a200 { iplist salles/a200 } src a201 { iplist salles/a201 } src a202 { iplist salles/a202 } src a203 { iplist salles/a203 } src a205 { iplist salles/a205 } src a300 { iplist salles/a300 } src a304 { iplist salles/a304 } src a307 { iplist salles/a307 } src a306 { iplist salles/a306 } src b501 { iplist salles/b501 } src vm_neo { iplist salles/vm_neo } src test { iplist salles/test } src personnels { ip 192.168.0.0/255.255.0.0 } src persoadult { ip 192.168.0.0/255.255.0.0 } src etudiants { ip 10.0.0.0/255.0.0.0 } src wificache { ip 193.54.203.150/255.255.255.255 } # ACL acl { a102 { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a103 { pass none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a104 { pass none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a105 { pass none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a200 { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a201 { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a202 { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a203 { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a205 { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a300 { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a304 { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } a307 { pass none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } b501 { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } test { pass cache none redirect http://cache.iut-rodez.fr/warnings/ferme.php?ip=%a&src=%s&tgt=%t&url=%u } etudiants { pass derogations !in-addr !adult !haine !controle !hacking !jeu !tricheur !warez !telechargement !proxies $ redirect http://cache.iut-rodez.fr/warnings/interdit.php?ip=%a&src=%s&tgt=%t&url=%u } wificache { pass derogations !in-addr !adult !haine !controle !hacking !jeu !tricheur !warez !telechargement !proxies $ redirect http://cache.iut-rodez.fr/warnings/interdit.php?ip=%a&src=%s&tgt=%t&url=%u } personnels { pass derogations !haine !warez !controle !telechargement !proxies !adult redirect http://cache.iut-rodez.fr/warnings/interdit.php?ip=%a&src=%s&tgt=%t&url=%u } vm_neo { pass !audio-video redirect http://cache.iut-rodez.fr/warnings/video.php } default { pass cache none redirect http://cache.iut-rodez.fr/warnings/interdit.php?ip=%a&src=%s&tgt=%t&url=%u } } MécanismeLe client "accroche" le réseau Wifi de l'IUT par son SSID. Il émet une requête DHCP. Le portail lui attribue une adresse IP et lui livre, par les options DHCP, le domaine de recherche, le domaine courant (iut-rodez.fr) et l'URL d'auto-configuration de proxy (http://wpad.iut-rodez.fr/wpad.dat). S'il
est bien réglé en mode "détection automatique", le client essaie soit
de résoudre wpad.iut-rodez.fr puis de télécharger le fichier
http://wpad.iut-rodez.fr/wpad.dat, soit de le télécharger directement
s'il se base sur l'URL reçue. Le portail est configuré pour laisser
passer cette requête sans authentification. Le client s'auto-configure
donc pour utiliser le proxy wificache.iut-rodez.fr:80 dans tous les cas
sauf pour accéder à la page d'authentification du portail. Le proxy
écoute sur le port 80 parce que le portail ne sait intercepter que les
requêtes http sur les ports 80 et 443. Le client émet ensuite une première requête utilisateur http/https vers le port 80 du proxy. Le portail ne sait intercepter que les requêtes GET mais pas les requêtes CONNECT. Donc si la première requête est une requête https (donc CONNECT puisqu'elle est adressée au proxy), elle est simplement ignorée et il ne se passe rien de plus. Dès que le client émet une première requête GET (donc http) vers le port 80 du proxy, le portail redirige le client vers le formulaire d'authentification sur https://portail-wifi.iut-rodez.fr:1023/ (note : le certificat associé est le wildcard *.iut-rodez.fr chargé sur le Fortigate) Une fois le client authentifié il est redirigé vers la page http://warning.iut-rodez.fr/wifi/ qui est un avertissement sur les règles d'usage du WIFI dans l'établissement. Il atteint cette page comme n'importe quelle autre, c'est à dire en passant par le proxy wificache.iut-rodez.fr En fait, dès lors, tout le trafic Web du client est dirigé vers le port 80 de wificache.iut-rodez.fr qui le relaie simplement à cache.iut-rodez.fr qui applique les règles SquidGuard relatives à son ACL wificache. |