From bbe0297d2f18873c8d5f18917a5918063682706e Mon Sep 17 00:00:00 2001 From: GnunuX Date: Sun, 18 Mar 2012 22:12:39 +0100 Subject: [PATCH] ajout de la formation amon-sphynx --- Makefile | 14 +++ amon-sphynx.tex | 50 ++++++++ amon/00-commun.tex | 12 ++ amon/00-description.tex | 19 +++ amon/01-base.tex | 48 ++++++++ amon/02-distance.tex | 54 +++++++++ amon/03-era.tex | 131 +++++++++++++++++++++ amon/04-filtrage.tex | 220 +++++++++++++++++++++++++++++++++++ amon/05-sphynx.tex | 137 ++++++++++++++++++++++ amon/06-amonecole.tex | 54 +++++++++ commun/00-intro.tex | 49 ++++++++ commun/01-quatre_phases.tex | 110 ++++++++++++++++++ commun/02-administration.tex | 134 +++++++++++++++++++++ commun/03-configuration.tex | 46 ++++++++ commun/20-ead.tex | 95 +++++++++++++++ documents/preparation.txt | 17 +++ nufw.png | Bin 0 -> 24820 bytes 17 files changed, 1190 insertions(+) create mode 100644 Makefile create mode 100644 amon-sphynx.tex create mode 100644 amon/00-commun.tex create mode 100644 amon/00-description.tex create mode 100644 amon/01-base.tex create mode 100644 amon/02-distance.tex create mode 100644 amon/03-era.tex create mode 100644 amon/04-filtrage.tex create mode 100644 amon/05-sphynx.tex create mode 100644 amon/06-amonecole.tex create mode 100644 commun/00-intro.tex create mode 100644 commun/01-quatre_phases.tex create mode 100644 commun/02-administration.tex create mode 100644 commun/03-configuration.tex create mode 100644 commun/20-ead.tex create mode 100644 documents/preparation.txt create mode 100644 nufw.png diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f6bcfd1 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +#!/usr/bin/make + +all: + pdflatex amon-sphynx.tex + pdflatex amon-sphynx.tex + +clean: + find -name *.log -delete + find -name *.out -delete + find -name *.aux -delete + find -name *.toc -delete + find -name *.nav -delete + find -name *.snm -delete + find -name *.aux -delete diff --git a/amon-sphynx.tex b/amon-sphynx.tex new file mode 100644 index 0000000..2ea0c9e --- /dev/null +++ b/amon-sphynx.tex @@ -0,0 +1,50 @@ +%%presentation +\documentclass{beamer} +\usepackage{beamerthemetree} +%%impression +%\documentclass[a4paper,9pt]{extarticle} +%\usepackage{beamerarticle} +%% + +% class FR +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[frenchb]{babel} + +% image +\usepackage{graphicx} + +\usecolortheme{crane} +\beamertemplatetransparentcovered + +% le logo +%\logo{\includegraphics[height=1cm]{ban.png}} + +\title{Formation EOLE} +\subtitle{Amon/Sphynx} + +\author{GARETTE Emmanuel} +\institute{Cadoles} +\date{\today} + +\begin{document} +\frame{\titlepage} + +\include{commun/00-intro} +\include{amon/00-description} +\include{commun/01-quatre_phases} +\include{commun/02-administration} +\include{commun/03-configuration} +\include{amon/00-commun} + +\include{commun/20-ead} + +\include{amon/01-base} +\include{amon/02-distance} +\include{amon/03-era} +\include{amon/04-filtrage} +\include{amon/05-sphynx} +\include{amon/06-amonecole} + +\end{document} + diff --git a/amon/00-commun.tex b/amon/00-commun.tex new file mode 100644 index 0000000..d809904 --- /dev/null +++ b/amon/00-commun.tex @@ -0,0 +1,12 @@ +\begin{frame} + \frametitle{Utilisation de VirtualBox} + \begin{itemize} + \item Activer PAE/NX dans Préférences/Système/Processeur ; + \item choisir "Accès par pont" dans le "Mode d'accès réseau" dans Préférence/Réseau/Carte 1 ; + \item choisir "Réseau interne" "intadmin" dans le "Mode d'accès réseau" dans Préférence/Réseau/Carte 2 ; + \item choisir "Réseau interne" "intpeda" dans le "Mode d'accès réseau" dans Préférence/Réseau/Carte 3 ; + \item faire un instantané. + \end{itemize} +\end{frame} + + diff --git a/amon/00-description.tex b/amon/00-description.tex new file mode 100644 index 0000000..93ae13a --- /dev/null +++ b/amon/00-description.tex @@ -0,0 +1,19 @@ +\begin{frame} + \frametitle {Description} + \begin{itemize} + \item Amon, la passerelle pare-feu : + \begin{itemize} + \item partage des sous-réseaux et connexion à internet (pare-feu), + \item authentifications des utilisateurs, + \item réseau virtuel privé, + \item cache web, + \item reverse proxy web ; + \end{itemize} + \item Sphynx, concentrateur pour réseau privé virtuel : + \begin{itemize} + \item relier en réseau vos serveurs (RVP), + \item possibilité de haute disponibilité ; + \end{itemize} + \end{itemize} +\end{frame} + diff --git a/amon/01-base.tex b/amon/01-base.tex new file mode 100644 index 0000000..4c4bd95 --- /dev/null +++ b/amon/01-base.tex @@ -0,0 +1,48 @@ +\section{Fonctions de base d'Amon} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-11},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Serveur DNS} + \begin{itemize} + \item Amon propose un serveur DNS ; + \item il est possible de configurer un ou plusieurs DNS père. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Agrégation de lien} + \begin{itemize} + \item Utiliser deux abonnements Internet sur un même Amon ; + \item garantir une meilleure qualité de service ; + \item poids de chaque abonnement pour répartir la charge ; + \item la configuration se fait durant l'étape de configuration ; + \item limite : le RVP passe par un seul lien. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Réseau} + \begin{itemize} + \item VLAN : + \begin{itemize} + \item Segmentation des réseaux ; + \item se fait au niveau des équipements réseaux + \end{itemize} + \item RADIUS : + \begin{itemize} + \item RADIUS : protocole client-serveur permettant de centraliser des données d'authentification ; + \item permet de faire des sous-réseaux dynamique ; + \item nécessite des équipements réseaux compatible. + \end{itemize} + \end{itemize} +\end{frame} + diff --git a/amon/02-distance.tex b/amon/02-distance.tex new file mode 100644 index 0000000..65ccfe6 --- /dev/null +++ b/amon/02-distance.tex @@ -0,0 +1,54 @@ +\section{Les commandes à distances} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-11},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Activer la connexion ssh sur Amon} + \begin{itemize} + \item Possibilité d'interdire la connexion ssh à root ; + \item possibilité d'interdire la connexion sans clef rsa ; + \item choix des adresses autorisés. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Le protocole ssh} + \begin{itemize} + \item protocole de communication sécurisé ; + \item ouvrir une connexion : ssh utilisateur@ip\_serveur ; + \item ouvrir une connexion pour commande graphique : ssh -X utilisateur@ip\_serveur ; + \item transfert de fichier : scp fichier.txt utilisateur@ip\_serveur:. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Screen} + \begin{itemize} + \item si la connexion se coupe, impossible de récupérer la session ; + \item screen permet de détacher un shell et le récupérer ; + \item pour le lancer : screen ; + \item pour détacher : ctrl a d ; + \item attention déconnexion automatique : unset TMOUT ; + \item pour reprendre un screen : screen -rd + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Activer la connexion sur amonecole1 juste pour votre IP ; + \item se connecter sur le serveur amonecole1 en ssh ; + \item copier un fichier ; + \item lancer gen\_config à travers ssh ; + \item utiliser screen. + \end{itemize} +\end{frame} + diff --git a/amon/03-era.tex b/amon/03-era.tex new file mode 100644 index 0000000..14cff7a --- /dev/null +++ b/amon/03-era.tex @@ -0,0 +1,131 @@ +\section{Era} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-11},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Présentation} + \begin{itemize} + \item Outil de génération de règle pour pare-feu ; + \item enregistre la description de la politique de sécurité dans un fichier XML ; + \item génération de commande iptables par compilation ; + \item il est possible de mettre des variables Creole ; + \item zone de sécurité : correspond a une interface réseau ; + \item matrice de flux : classé par origine et destination ; + \item flux orienté (interdit pour les flux montant, autorisé pour les flux descendant, interdit pour les flux égaux) ; + \item politique par défaut ; + \item extrémité : machine ou réseau d'une zone ; + \item directive : règle. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Directive} + \begin{itemize} + \item Les extrémités + \item Les services et groupes de services + \item Les plages horaires + \item Les groupes d'utilisateurs (NuFW) : tous-identifiés, non-identifiés, ... + \item Les groupes d'applications (NuFW) + \item Les types de directive : autorisation/interdiction, redirection, NAT, ... + \item La journalisation + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Lancer Era et ouvrir le fichier 3zones-amonecole ; + \item identifier les zones, les flux et les directives ; + \item ajouter une extrémité ClientScribe en DMZ avec IP ; + \item ajouter un groupe de service avec le service samba3, smtp et pop ; + \item ajouter une plage horaire : du lundi à vendredi de 12h à 14h ; + \item ajouter interdire le groupe + plage horaire de pedago vers l'extrémité Scribe ; + \item ajouter une directive DNAT de Scribe vers 8500. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Les directives optionnelles} + \begin{itemize} + \item Directive activable et désactivable depuis l'EAD ; + \item il suffit de spécifier un libellé dans "directive optionnelle EAD" ; + \item alphanumérique + "\_" et " " (pas accent !) ; + \item notion de groupe de directives optionnelles ; + \item possibilité de directive optionnelle active ; + \item directive optionnelles cachées : /etc/eole/distrib/active\_tags. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Rendre la directive optionnelle et l'activer et désactiver dans l'EAD. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{La qualité de service} + \begin{itemize} + \item Zone interne vers extérieur ; + \item il faut fixé une valeur d'upload et de download en méga bits par secondes ; + \item spécifie un pourcentage d'utilisation ; + \item penser à activer la QOS dans les options. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Les règles netbios} + \begin{itemize} + \item Dans les options du modèle, possibilité d'activé les règles netbios ; + \item permet de bloquer les requêtes du réseau Microsoft vers l'extérieur. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Activer la qualité de service ; + \item configurer la QOS. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{NuFW} + \includegraphics[width=8cm]{nufw.png} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Activer NuFW sur l'Amon ; + \item se connecter sur NuFW depuis Clientscribe1 ; + \item inverser la politique par défaut sur flux pedago-DMZ ; + \item autoriser la pedago a aller sur scribe-pedago en DMZ ; + \item ajouter l'application /bin/nc-traditional et le groupe d'application "navigateur web" ; + \item autoriser le groupe "professeur" avec application "navigateur web" vers le Scribe en pédago sur le port 8500 ; + \item tester : + \begin{itemize} + \item serveur de destination : netcat -l -p \$numport -c "/bin/echo 'message'" + \item machine source : netcat \$destip \$destport + \item machine source : telnet \$destip \$destport + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Options avancées} + \begin{itemize} + \item Peut se connecter à Zéphir ; + \item héritage de modèle ; + \item l'inclusion statique. + \end{itemize} +\end{frame} + diff --git a/amon/04-filtrage.tex b/amon/04-filtrage.tex new file mode 100644 index 0000000..b2179ae --- /dev/null +++ b/amon/04-filtrage.tex @@ -0,0 +1,220 @@ +\section{Filtrage web} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-11},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Présentation} + \begin{itemize} + \item Possibilité : + \begin{itemize} + \item configurer la manière dont le filtrage s'effectue ; + \item associés des filtrages à des utilisateurs ; + \item associés des filtrages à des machines ; + \item configuration par zone de configuration ; + \item configuration par politique de filtrage ; + \item plusieurs configuration (1 et 2). + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Interdire ou autoriser des sites web} + \begin{itemize} + \item Interdire des sites : complèter la liste noir ; + \item autoriser des sites : forcer l'autorisation d'un site ; + \item applicable : zone entière ou a des politiques de filtrage ; + \item les listes sont mises à jour régulièrement ; + \item signaler pour améliorer les performances et la qualité des listes. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Politique de liste blanche} + \begin{itemize} + \item restreindre la navigation à un ensemble de site ; + \item ne pas confondre avec les site autorisé. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Filtre optionnel} + \begin{itemize} + \item la liste de site interdit comprend des catégories ; + \item par défaut seule les catégories "adult" et "redirector" sont activés ; + \item activation par configuration ou politique de filtrage ; + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Filtre syntaxique} + \begin{itemize} + \item Filtrage dynamique des pages ; + \item possibilité : + \begin{itemize} + \item sur les balises méta (par défaut) ; + \item sur la page entière ; + \item désactivé. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Filtre des extensions} + \begin{itemize} + \item Interdire le téléchargement portant certaines extensions ; + \item applicable : zone entière ou a des politiques de filtrage. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Filtre des types MIME} + \begin{itemize} + \item Un type MIME est une information donner par le serveur permettant de connaitre le format d'un document sans se baser sur l'extension. + \item + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Filtre par machine} + \begin{itemize} + \item filtrage par IP ; + \item possibilité : + \begin{itemize} + \item interdire l'accès au réseau ; + \item interdire la navigation web uniquement ; + \item autoriser la navigation web selon des horaires ; + \item associer une politique de filtrage. + \end{itemize} + \item attention, ancienne methode par "postes" n'est plus d'actualité. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Filtre par utilisateur} + \begin{itemize} + \item Pre-requis : il doit y avoir une authentification utilisateur ; + \item premet d'ajouter un filtrage spécial à un utilisateur ; + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Créer un groupe de machine : configuration1/Groupe de machine ; + \item tester ; + \item créer un utilisateur : Configuration1/Utilisateurs ; + \item tester. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Filtre par destination} + \begin{itemize} + \item Possible d'interdire l'accès à un sous-réseau depuis une interface. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Ne pas authentifier / mettre en cache} + \begin{itemize} + \item La destination : Sites de mise à jour ; + \item la source : Sources à ne pas authentifier. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Filtre antivirus web} + \begin{itemize} + \item Possible d'activer l'antivirus sur le filtrage web ; + \item utilise ClamAV. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Activer le filtrage antivirus dans gen\_config ; + \item télécharger différents fichiers. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Filtre P2P} + \begin{itemize} + \item Permet de bloquer les échanges de fichiers en P2P ; + \item 2 filtres au choix : l7filter ou ipp2p. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Horaire} + \begin{itemize} + \item Les horaires du pare-feu : ferme la totalité du pare-feu ; + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Numéro de filtrage web} + \begin{itemize} + \item il est possible de différencier les politiques de filtrage suivant l'interface ; + \item amon2 : administrateur de la 2eme configuration. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Observation} + \begin{itemize} + \item Il est possible de visualiser des logs par : + \begin{itemize} + \item date (obligatoire) + \item heure de visite ; + \item IP du visiteur ; + \item login du visiteur ; + \item seulement les accès refusés. + \end{itemize} + \item possibilité d'utiliser SARG. + \end{itemize} +\end{frame} + +%--------------------------------------------------------------- +\begin{frame} + \frametitle{Gérer au mieux les ressources} + \begin{itemize} + \item Ne pas activer trop de politique de filtrage par défaut (0 à 3 politiques) ; + \item ne pas démarrer trop d'instance Dansguardian (voir la configuration) ... ; + \item filtrage syntaxique (surtout sur la page entière) ; + \item antivirus. + \end{itemize} +\end{frame} + +%--------------------------------------------------------------- +\begin{frame} + \frametitle{Reverse proxy} + \begin{itemize} + \item permet relayer des requêtes Web provenant de l'extérieur vers les serveurs internes ; + \item permet de rediriger : + \begin{itemize} + \item SSO, + \item administration Envole 2.0, + \item HTTP, + \item HTTPS ; + \end{itemize} + \item si on redirige le SSO, il ne faut pas l'activer sur l'Amon. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Rendre disponible envole de Scribe depuis l'extérieur. + \end{itemize} +\end{frame} + diff --git a/amon/05-sphynx.tex b/amon/05-sphynx.tex new file mode 100644 index 0000000..10bb1ae --- /dev/null +++ b/amon/05-sphynx.tex @@ -0,0 +1,137 @@ +\section{Sphynx} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-11},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Présentation} + \begin{itemize} + \item Réseau Privé Virtuel en étoile (pas en maillage) ; + \item application centralisée ; + \item possibilité d'inter-établissement. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Différence PKI et clef-rsa} + \begin{itemize} + \item PKI : nécessite une autorité de certification (AGRIATES) ; + \item clef-rsa : fonctionne en mode autonome. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Monter un tunnel Amon-Sphynx} + \begin{itemize} + \item Sphynx et Amon doivent être sur le même plan d'adressage (généralement internet) ; + \item la configuration doit être préparé sur le Sphynx ; + \item la configuration est transféré sur l'Amon (disquette, clef, ...) ; + \item activation du RVP sur Amon. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Instanciation de Sphynx1 ; + \begin{itemize} + \item adresse IP fixe, + \item mode d'authentification clef-rsa ; + \end{itemize} + \item instanciation ; + \item logout (pour obtenir les variables d'environnements) ; + \item manage-sphynx.sh : Demande\_Certificat dans le "disque local" ; + \item mode pki : + \begin{itemize} + \item envoyer le fichier .p10, + \item copier le certificat dans ce répertoire ; + \end{itemize} + \item init-sphynx.sh ; + \item remarque : on ne peut plus changer la configuration réseau maintenant ; + \item voir la base dans /usr/share/eole/sphynx-vpn/xml/sphynx.xml. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Ajout d'un Amon amon1 sur le Sphynx : + \begin{itemize} + \item copier le fichier config.eol dans /home/data/amon1/config.eol du Sphynx ; + \item lancer manage-sphynx.sh ; + \item Gerer\_Amon\_Etablissement ; + \item Ajouter\_Amon. + \end{itemize} + \end{itemize} +\end{frame} + + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item configure l'Amon amon1 : + \begin{itemize} + \item copie du répertoire Sphynx /home/data/amon1 sur l'Amon, + \item onglet service : Activation du RVP, + \item à l'instanciation ou après avec la commande active\_rvp.sh choisir le répertoire, + \item en mode PKI, demande de mot de passe ; + \end{itemize} + \item test avec "test-rvp". + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Revoir la base dans /usr/share/eole/sphynx-vpn/xml/sphynx.xml. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Demarrage de RVP} + \begin{itemize} + \item Pour redemarrer l'ensemble des tunnels : redemarrer bastion + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Validité et révocation} + \begin{itemize} + \item Valide 5 ans (pour AGRIATES) ; + \item liste des certificats révoqués par Toulouse (rechargé toutes les 7 heures) ; + \item agent Zéphir (EAD ou Zéphir) : + \begin{itemize} + \item 45 jours avant : orange, + \item 30 jours avant : rouge, + \end{itemize} + \item Demander\_Certificat dans manage-sphynx.sh ; + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Sphynx et Zéphir} + \begin{itemize} + \item Gestion des configurations RVP : + \begin{itemize} + \item listing des configurations RVP (avec voyant suivant les étapes), + \item mise en place de la configuration RVP, + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Sphynx en haute disponibilité} + \begin{itemize} + \item Les règles sont synchronisés du maître vers l'esclave ; + \item Heartbeat surveille ; + \item une interface graphique (hb\_gui) permet de configure, d'administrer et de monitorer la haute disponibilité. + \end{itemize} +\end{frame} + diff --git a/amon/06-amonecole.tex b/amon/06-amonecole.tex new file mode 100644 index 0000000..00bfa90 --- /dev/null +++ b/amon/06-amonecole.tex @@ -0,0 +1,54 @@ +\section{Virtualisation AmonEcole} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-11},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Les commandes} + \begin{itemize} + \item virtualisation avec OpenVZ ; + \item un serveur maître Amon ; + \item des serveurs virtuels (Scribe, Eclair, ...) ; + \item des commandes spécifiques pour les modules virtualisés : + \begin{itemize} + \item configuration : virt\_gen\_config + \item instanciation : virt\_instance zephir.eol + \item reconfiguration : virt\_reconfigure + \item mise à jour : virt\_Maj-Auto [|-a] + \item diagnostic : virt\_diagnose + \item liste des modules : virt\_ctrl list + \item arrêt d'un module : virt\_ctrl stop + \item démmarage d'un module : virt\_ctrl start + \item entrer dans un module : virt\_ctrl enter + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Les montages} + \begin{itemize} + \item montage d'une partition dans un module : + \begin{itemize} + \item virt\_mount /device /repertoire\_du\_module + \item virt\_mount /repertoire /repertoire\_du\_module + \item virt\_mount //IP/partage /repertoire\_du\_module IP utilisateur mot\_de\_passe + \item automatisation : /etc/vz/eole/module.start et /etc/vz/eole/module.stop + \end{itemize} + \end{itemize} +\end{frame} + + +\begin{frame} + \frametitle{EAD AmonEcole} + \begin{itemize} + \item Possibilité d'arrêter/démarrer/redémarrer un serveur + \end{itemize} +\end{frame} + diff --git a/commun/00-intro.tex b/commun/00-intro.tex new file mode 100644 index 0000000..0197ff8 --- /dev/null +++ b/commun/00-intro.tex @@ -0,0 +1,49 @@ +\section{Introduction} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-12},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{EOLE} + \begin{itemize} + \item EOLE : Ensemble Ouvert Libre et Evolutif ; + \item projet national de serveur d'établissement scolaires et académiques ; + \item depuis 2000 ; + \item basé sur Ubuntu depuis 2007 sous forme de module ; + \item objectifs : + \begin{itemize} + \item utilisation de logiciels libres, + \item modulaire (évolutif, ouvert, adaptable), + \item facile a mettre en oeuvre et a déployer, + \item administrable à distance ; + \end{itemize} + \item mode de distribution : + \begin{itemize} + \item versionning, + \item rolling realise. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Nouveautés 2.3} + \begin{itemize} + \item Les conteneurs : + \begin{itemize} + \item séparation des services, + \item sécurité par isolation, + \item plusieurs conteneurs sur un serveur, + \item compatible les deux modes ; + \end{itemize} + \item mise en commun + \item séparation des services + \end{itemize} +\end{frame} + diff --git a/commun/01-quatre_phases.tex b/commun/01-quatre_phases.tex new file mode 100644 index 0000000..8d06a8a --- /dev/null +++ b/commun/01-quatre_phases.tex @@ -0,0 +1,110 @@ +\section{Les quatre phases} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-12},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{La phase d'installation} + \begin{itemize} + \item Pour installer un module, il suffit de : + \begin{itemize} + \item démarrer sur le CD-ROM téléchargé sur le site d'EOLE ; + \item sélectionner le module à installer parmi ceux proposés ; + \item valider. + \end{itemize} + \item Cas particuliers : Eolebase ou la présence de deux disques ; + \item à la fin de l'installation, cliquer sur "continuer", le système redémarre automatiquement ; + \item vous pourrez ouvrir une session avec l'utilisateur "root" et le mot de passe par défaut "\$eole\&123456\$" ; + \item en mode conteneur généré les conteneurs : "gen\_conteneur". + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{La phase de configuration} + \begin{itemize} + \item Il faut une bonne connaissance du réseau ; + \item en mode autonome : + \begin{itemize} + \item lancer la commande gen\_config, + \item configurer le serveur, + \item sauvegarder le fichier zephir.eol ; + \end{itemize} + \item En mode Zéphir : + \begin{itemize} + \item configuration dans l'application Zéphir : https://:8070/ ou via gen\_config, + \item enregistrement au Zéphir, + \item descente ou monté de la configuration. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{La phase d'instanciation} + \begin{itemize} + \item Lancer la commande "instance .eol" ; + \item renseigner les mots de passe ; + \item enregistrement de la base matériel ; + \item mise à jour ; + \item éventuellement redémarrage. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Les mots de passe} + \begin{itemize} + \item Au premier lancement de l'instanciation, il est nécessaire de modifier les mots de passe : + \begin{itemize} + \item root ; + \item administrateur à droits restreints eole ; + \item possibilité d'ajouter plusieurs administrateurs à droits restreints ; + \item sur amon, en cas d'utilisation d'un réseau pédagogique et au réseau administratif, un second administrateur (eole2) permet d'administrer le réseau pédagogique ; + \item admin sur Scribe et Horus ; + \item admin\_zephir sur Zéphir. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Les mots de passe} + \begin{itemize} + \item Par défaut, le système regarde la pertinence des mots de passe. Pour cela, il utilise un système de "classe de caractères" : + \begin{itemize} + \item les lettres en minuscule ; + \item les lettres en majuscule ; + \item les chiffres ; + \item les caractères spéciaux (Ex : \$*ù\%£, ; : !§/. ?). + \end{itemize} + \item Il faut utiliser différentes classes de caractères. + \item Par défaut, voici les restrictions : + \begin{itemize} + \item une seule classe de caractères : impossible ; + \item deux classes de caractères : 9 caractères ; + \item trois et quatre classes : 8 caractères. + \end{itemize} + \item Cette configuration est, bien évidement, modifiable dans gen\_config en mode expert. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{La phase d'administration} + \begin{itemize} + \item Correspond à l'exploitation du serveur ; + \item Chaque module possède des fonctionnalités propres, souvent complémentaires. + \item Diverses interfaces permettent la mise en œuvre de ces fonctionnalités et en facilite l'usage : + \begin{itemize} + \item l'interface d'administration EOLE : EAD ; + \item l'interface semi-graphique ; + \item divers interfaces d'administration (Zéphir-web, CUPS, Sympa, ...); + \item différents outils (Era, ...). + \end{itemize} + \item Gestion des mises à jour. + \end{itemize} +\end{frame} + diff --git a/commun/02-administration.tex b/commun/02-administration.tex new file mode 100644 index 0000000..f4ec1ac --- /dev/null +++ b/commun/02-administration.tex @@ -0,0 +1,134 @@ +\section{Administration commune} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-12},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Les mises à jour} + \begin{itemize} + \item Les différents dépôts : + \begin{itemize} + \item la version stable minimum, + \item la version stable complète, + \item la version candidate, + \item la version dev ; + \end{itemize} + \item procédure : + \begin{itemize} + \item par l'EAD, + \item par l'interface semi-graphique, + \item par Zéphir, + \item à la ligne de commande : + \begin{itemize} + \item Query-Auto : liste les mises à jour, + \item Maj-Auto : lance la mise à jour sans question, + \item Maj-CD : mise à jour grâce à un CD, + \item Upgrade-Auto : mise à jour version une version supérieur, + \end{itemize} + \item mise à jour automatique : de 01h à 6h un jour par semaine. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Instance ou Reconfigure} + \begin{itemize} + \item L'instance doit être lancé qu'une seule fois sur les modules ; + \item En cas de mise à jour, d'installation de paquet ou de changement de paramétrage : reconfigure. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique : mise à jour} + \begin{itemize} + \item Mettre à jour le serveur Scribe ; + \item faire un reconfigure. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Diagnostic} + \begin{itemize} + \item La commande "diagnose" permet de tester différent point du serveur ; + \item La commande "diagnose -L" propose un diagnostic étendu. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique : diagnostic} + \begin{itemize} + \item Lancer un diagnostic et un diagnostic étendu sur les serveurs. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Firewall} + \begin{itemize} + \item Sur tous les modules ; + \item firewall + tcpwrapper ; + \item géré par bastion ; + \item pour ouvrir le firewall ouvre.firewall ; + \item pour connaître la liste des règles : iptables-save. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Schedule} + \begin{itemize} + \item Gestion des tâches planifiées avec ou sans sauvegarde ; + \item tâche "pré" sauvegarde ; + \item tâche "post" sauvegarde ; + \item pour lister : /usr/share/eole/schedule/manage\_schedule. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Onduleur} + \begin{itemize} + \item Gestion des onduleurs (NUT) ; + \item maître esclave ; + \item visible dans les agents. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item Regarder la configuration de l'onduleur dans gen\_config. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Trouver de l'information sur le serveur} + \begin{itemize} + \item Lecture des journaux d'activité : + \begin{itemize} + \item /var/log/messages : contient tous les messages d'ordre général concernant la plupart des services et démons ; + \item /var/log/syslog : est plus complet que /var/log/messages, il contient tous les messages, hormis les connexions des utilisateurs ; + \item /var/log/auth : contient les connexions des utilisateurs ; + \item /var/log/mail.log : contient les envois et réception de mails ; + \item /var/log/cron : fichier log du service cron (planificateur système). + \end{itemize} + \item diagnose ; + \item gen\_rpt. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Trouver des informations sur Internet} + \begin{itemize} + \item la documentation ; + \item les FAQ ; + \item les archives des listes de diffusion ; + \item le Wiki EOLE ; + \item recherche sur Internet ; + \item équipes d'assistance académiques. + \end{itemize} +\end{frame} diff --git a/commun/03-configuration.tex b/commun/03-configuration.tex new file mode 100644 index 0000000..f182e8f --- /dev/null +++ b/commun/03-configuration.tex @@ -0,0 +1,46 @@ +\begin{frame} + \frametitle{Pratique : configuration autonome} + \begin{itemize} + \item Lancer gen\_config ; + \item informations utiles : + \begin{itemize} + \item Adresse ip de la carte eth0, + \item passerelle, + \item DNS : DNS de la machine hôte ; + \end{itemize} + \item interface : + \begin{itemize} + \item barre de menu, + \item les onglets, + \item la partie centrale, + \item validation ; + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique : gen\_config en mode texte} + \begin{itemize} + \item taper gen\_config txt ; + \item avoir l'aide help ; + \item open zephir.eol ; + \item choosegroup ; + \begin{itemize} + \item 0, + \item niveau de mise à jour : passer en "complete" ; + \end{itemize} + \item save + \item entrer le nom zephir.eol + \item exit + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Pratique} + \begin{itemize} + \item instancier. + \end{itemize} +\end{frame} + + + diff --git a/commun/20-ead.tex b/commun/20-ead.tex new file mode 100644 index 0000000..c3fb2dc --- /dev/null +++ b/commun/20-ead.tex @@ -0,0 +1,95 @@ +\section{L'interface d'administration EAD} +\begin{frame}{Plan} + \begin{columns}[t] + \begin{column}{5cm} + \tableofcontents[sections={1-6},currentsection, hideothersubsections] + \end{column} + \begin{column}{5cm} + \tableofcontents[sections={7-11},currentsection,hideothersubsections] + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Présentation général} + \begin{itemize} + \item serveur de commande ead-server (activé et non désactivable) : + \item interface ead-web : https://:4200/ (activé et désactivable) : + \begin{itemize} + \item gondole d'administration, + \item menu action, + \item les onglets, + \item la partie centrale. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Se connecter} + \begin{itemize} + \item Ajouter ou supprimer des onglets pour communiquer avec d'autres serveurs de commande ; + \item authentification locale ; + \item authentification SSO. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{SSO} + \begin{itemize} + \item EAD, deux systèmes d'authentification : + \begin{itemize} + \item authentification locale (PAM), + \item authentification SSO ; + \end{itemize} + \item permet de centraliser l'authentification ; + \item authentification unique ; + \item rôle plus fin. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Fonctions de base} + \begin{itemize} + \item Redémarrer, arrêter et reconfigurer ; + \item mise à jour ; + \item arrêt et redémarrage de service : + \begin{itemize} + \item mode expert, + \item mode normal ; + \end{itemize} + \item listing matériel ; + \item bande passante. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Gestion des rôles EAD} + \begin{itemize} + \item Rôle par défaut : + \begin{itemize} + \item admin : accès à toutes les actions, + \item professeur : modification des préférences personnelles, distribution de devoirs et CUPS, + \item responsable de classe : professeur + reinitialisation des mots de passe des élèves de sa classe ; + \end{itemize} + \item création de rôle personnalisé ; + \item association de rôle : + \begin{itemize} + \item pour l'authentification locale : sur le login, + \item pour l'authentification SSO : + \begin{itemize} + \item login de l'utilisateur ; + \item groupe d'utilisateur ; + \item classe associée à l'utilisateur ; + \item valeur de la clef typeadmin (professeur principal) ; + \end{itemize} + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{L'interface semi-graphique} + \begin{itemize} + \item L'interface semi-graphique est disponible sur différent module ; + \item permet d'exécuter quelques tâches simple d'administration du serveur. + \end{itemize} +\end{frame} diff --git a/documents/preparation.txt b/documents/preparation.txt new file mode 100644 index 0000000..0daf40e --- /dev/null +++ b/documents/preparation.txt @@ -0,0 +1,17 @@ +Installation d'AmonEcole + - 2 cartes réseau : NAT + intped + - instancier l'Amon avec un Scribe et le Scribe + - smbldap-usermod -s /bin/bash admin + +Installation de ClientScribe1 + - installation d'un eolebase + - Maj-Auto -i + - apt-eole install client-scribe + - instanciation + - apt-eole install eole-education-base + - apt-get clean + - suppression du fichier udev + +Installation de Sphynx + - faire une mise à jour + - suppression du fichier udev diff --git a/nufw.png b/nufw.png new file mode 100644 index 0000000000000000000000000000000000000000..77944334b411f34f3868773a65dc820fb4b1a9b7 GIT binary patch literal 24820 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%0AmHq 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 U^jl*|;A%+n(qO4liLd_u185tfd;kCd literal 0 HcmV?d00001