% Copyright 2010-2013 by Entr'ouvert www.entrouvert.com
%
% This file may be distributed and/or modified
% under the GNU Public License v2

\documentclass{beamer}

% appearance:
\usetheme{Warsaw}
\usefonttheme[onlylarge]{structurebold}
\setbeamerfont*{frametitle}{size=\normalsize,series=\bfseries}

% packages
\usepackage{url}

% i18n/l10n
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

% Author, Title, etc.

\title[Prise en main d'UnivNautes] 
{%
  Le portail captif UnivNautes \\
  Prise en main%
}

\author[Entr'ouvert]{Entr'ouvert --- Thomas~Noël}

\institute{}

\date{Formation UnivNautes}

\begin{document}

\begin{frame}
  \titlepage
\end{frame}

\begin{frame}{Table des matières}
  \tableofcontents
\end{frame}

\section{Introduction}

\begin{frame}{Introduction}
  \begin{block}{}
    \textbf{UnivNautes} est une solution technologique de qualité répondant aux
    besoins du service \textbf{eduspot}. C'est une initiative de l'UNPIdF
    \url{http://www.unpidf.fr/}.
  \end{block}
  \begin{itemize}
    \item plateforme aisément déployable par n'importe quel établissement
    \item adaptable pour intégration dans les architectures et systèmes existants
    \item interfaces d'utilisation et de configuration standards, compatibles
    avec l'ambition nationale d'eduspot
    \item compatible avec les navigateurs du marché (HTML et CSS standards,
    cookies, javascript basique)
    \item logiciels en licences libres
  \end{itemize}
\end{frame}

\section{Principes}

\subsection{Principes généraux d'un portail captif}

\begin{frame}{Principe d'un portail captif}
  \begin{center}
    \includegraphics{portail-captif.png}
  \end{center}
  {\small
  \begin{itemize}
    \item[1] -- première requête HTTP interceptée~; redirection vers une page
    de connexion
    \item[2] -- authentification de l'utilisateur 
    \item[3] -- si l'authentification est réussie, le portail captif accepte
    les flux du couple adresse IP / adresse MAC
  \end{itemize}
  } % small
\end{frame}

\subsection{Principes spécifiques dans UnivNautes}

\begin{frame}{Principes dans UnivNautes}
  \begin{block}{Page de connexion en HTTPS}
  {\small
  \begin{itemize}
    \item[1] On capte les flux HTTP (port 80).

    \item[2] On renvoie une redirection vers le serveur HTTPS local. On indique
    au passage l'URL demandée initialement dans un paramètre
    \texttt{next\_url}. L'URL de redirection est donc de la forme :
    \url{https://spot.univ.fr/login?next\_url=http://www.abc.fr/}

    \item[3] Le serveur HTTPS local renvoie la page de connexion demandée.
  \end{itemize}
  } % small
  \end{block}
  \begin{block}{Certificat HTTPS du portail captif}
    Pour éviter toute alerte sur le poste client, ce serveur HTTPS doit
    disposer d'un certificat valide.
  \end{block}
\end{frame}

\begin{frame}{Principes dans UnivNautes}
  \begin{block}{L'authentification se fait en «SAML»}
  {\small
  \begin{itemize}
    \item[1] La page de connexion est une liste de fournisseurs d'identité
    (\textit{IdP}). L'utilisateur clique sur son fournisseur.

    \item[2] Une page intermédiaire est présentée, uniquement présente pour
    effectuer un envoi POST des données à l'IdP choisi. L'envoi est automatique
    ; l'utilisateur est donc redirigé vers son IdP.

    \item[3] Au retour de l'IdP, l'utilisateur arrive sur une page de
    connexion qui présente quelques attributs reçus (\textit{display name}) et
    quelques paramètres de sa session (date de début, IP, adresse MAC).
  \end{itemize}
  }
  \end{block}

\end{frame}

\begin{frame}{Principes dans UnivNautes}

  \begin{block}{Métadonnées}
  La liste des fournisseurs à afficher est fournie par la fédération choisie,
  au travers d'un fichier présentant l'ensemble des métadonnées des IdP
  (principalement : entityId, URL et clé publique). Pour eduspot, il s'agit
  de la fédération Éducation-Recherche : \url{https://federation.renater.fr/}
  \end{block}

  \begin{block}{Whitelist}
  Par ailleurs, le portail doit laisser les utilisateurs accéder à tous les
  fournisseurs listés. Il existe pour cela une \textit{whitelist} d'adresses
  IP cibles : \url{http://www.cru.fr/services/eduspot/whitelist}
  \end{block}

\end{frame}

\section{Implémentation}

\begin{frame}{Implémentation}

  \begin{block}{pfSense 2.0}
  \begin{itemize}
    \item Basé sur FreeBSD 8
    \item Centralise la configuration des différents composants liés à la
    gestion d'un pare-feu et des services de base réseau, y compris portail
    captif
    \item Interface de gestion web
    \item Ensemble des paramètres de configuration stocké au sein d'un fichier
    au format XML (\texttt{config.xml})
  \end{itemize}
  \end{block}

  \begin{block}{Services disponibles dans pfSense 2.0}
    filtrage et suivi IP et MAC (pf/ipfw), DHCP, DNS (forwarder), HTTP/HTTPS
    (lighttpd + fcgi), SNMP, syslog, NTP, VPNs, CARP, ... et bcp d'autres
    paquets, dont ceux de FreeBSD 8.1.
  \end{block}

\end{frame}

\begin{frame}{Implémentation}
  \begin{block}{Authentic / authsaml2}
    \begin{itemize}
      \item \textbf{Authentic2} : serveur d'identité versatile, en Django. Propose des
      modules permettant de gérer les entités, dans notre cas les IdP de la
      fédération
      \item \textbf{authsaml2} : middleware d'authentification SAML pour Django.
      Utilise les informations indiquées dans Authentic2 pour savoir quels IdPs
      contacter puis accepter
    \end{itemize}
  \end{block}
  \begin{block}{LASSO}
  bibliothèque C certifiée conforme ID-FF, ID-WSF et SAML\\
  Utilisée par Authentic2/authsaml2 lors des dialogues SAML
  \end{block}
\end{frame}

\begin{frame}{Implémentation}
  \begin{block}{pffedportal : la glue Django}
    \begin{itemize}
      \item il affichage des IdP sur la page de connexion
      \item il effectue l'authentification SAML via \textit{authsaml2}
      \item il lance la commandes pour ouvrir le portail captif
      (\texttt{cp\_allow}) (et \texttt{cp\_disconnect} lors
      d'une demande de déconnexion)
      \item il gère une session pour retenir les paramètres de connexion (date,
      displayname, IP, MAC, URL demandée)
      \item il affiche les paramètres de connexion sur la page d'accueil et/ou
      effectue les redirections consécutives
    \end{itemize}
  \end{block}

  \begin{block}{}
  Le design du portail captif est donc un ensemble de templates Django pour
  pffedportal + CSS, images et codes javascript.
  \end{block}
\end{frame}


\section{Pour en savoir plus}

\begin{frame}{Pour en savoir plus}
  \begin{block}{Briques logicielles}
  \url{http://pfsense.org} \\
  \url{http://dev.entrouvert.org/projects/authentic} \\
  \url{http://lasso.entrouvert.org/} \\
  \url{http://dev.entrouvert.org/projects/portail-captif}
  \end{block}
  \begin{block}{Autres lectures}
  \url{http://www.cru.fr/services/eduspot/index} \\
  \url{https://federation.renater.fr/} \\
  \url{http://en.wikipedia.org/wiki/SAML} \\
  \url{http://doc.entrouvert.org/univnautes/stable/}
  \end{block}
\end{frame}

\section{Travaux pratiques}

\subsection{Installation}

\begin{frame}{Installation}
  \begin{block}{}
  \url{http://doc.entrouvert.org/univnautes/stable/installation.html}
  \end{block}
%  \begin{block}{Configuration réseau}
%    Machine avec deux interfaces réseaux~:
%    \begin{itemize}
%      \item WAN avec accès Internet (au moins DNS, HTTP, HTTPS). Avec DHCP c'est plus simple.
%      \item LAN sur le réseau Ethernet des postes clients. Typiquement vers LAN wifi avec SSID \textit{eduspot}
%    \end{itemize}
%  \end{block}
  \vfill{}
  \begin{itemize}
  \item Accès à l'interface web d'administration sur \url{https://10.42.0.1:8443}.
  \item Première chose à faire : changer le mot de passe du compte \texttt{admin}.
  \end{itemize}
\end{frame}

\subsection{Configuration}

\begin{frame}{Configuration}
  \begin{block}{}
  \url{http://doc.entrouvert.org/univnautes/stable/configuration.html}
  \end{block}
\end{frame}

\subsection{Suivi de l'utilisation}

\begin{frame}{Suivi de l'utilisation --- Supervision}
  \begin{block}{}
    \begin{itemize}
      \item Suivi depuis l'interface web
        \begin{itemize}
	  \item service cp\_univnautes
	  \item widgets
	  \item menu Status
	  \item menu Status / System Logs
        \end{itemize}
      \item {\small et \url{http://doc.entrouvert.org/univnautes/stable/supervision.html}}
    \end{itemize}
  \end{block}
\end{frame}


%% la fin ...

\begin{frame}{}
  \begin{block}{}
      Questions ... \hfill{} ... Réponses
  \end{block}
  
  \vfill{}

  {\small
  En cas de grand silence, parcourir ensemble
  \url{http://doc.entrouvert.org/univnautes/stable/}
  }

\end{frame}

\end{document}
