Annexes. OpenVPN. Installation



Documents pareils
Documentation technique OpenVPN

M2-RADIS Rezo TP13 : VPN

II- Préparation du serveur et installation d OpenVpn :

DHCPD v3 Installation et configuration

Serveur de partage de documents. Étude et proposition d'une solution afin de mettre en place un serveur de partage de documents.

Les réseaux des EPLEFPA. Guide «Clients OpenVPN»

Formation Iptables : Correction TP

VPN. Réseau privé virtuel Usages :

Installation d OwnCloud 8.0 sous Debian Avec connexion des utilisateurs active directory et mise en place de HTTPS

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

Réaliser un inventaire Documentation utilisateur

Projet n 10 : Portail captif wifi

But de cette présentation. Proxy filtrant avec Squid et SquidGuard. Serveur proxy. Serveur proxy. Hainaut P

Déploiement d OCS 1.02 RC2 sous Debian Etch 64

CONFIGURATION DE OPENVPN AVEC CLIENT FEDORA ET CLIENT WINDOWS. Distribution : Fedora 14 Noyau GNU/Linux : Version document : 1

Serveur DHCP et Relais DHCP (sous Linux)

Sécurité des réseaux Firewalls

pare - feu généralités et iptables

Procédure d'installation

NOTE: Pour une meilleure sécurisation, nous vous recommandons de faire l installation des outils web à l intérieur d un serveur virtuel.

FILTRAGE de PAQUETS NetFilter

VPN TLS avec OpenVPN. Matthieu Herrb. 14 Mars 2005

Dynamic Host Configuration Protocol

Sécurité GNU/Linux. Iptables : passerelle

Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A. TP réseau firewall

Ubuntu Linux Création, configuration et gestion d'un réseau local d'entreprise (3ième édition)

TP Linux : Firewall. Conditions de réalisation : travail en binôme. Fonctionnement du parefeu Netfilter. I Qu est ce qu'un firewall?

Installation GLPI-OCSNG-SSL Linux Debian Sarge

Installation UpdatEngine serveur (CentOs apache2 / MySQL)

Accès aux ressources informatiques de l ENSEEIHT à distance

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

Environnements informatiques

Proxy et reverse proxy. Serveurs mandataires et relais inverses

Réalisation d un portail captif d accès authentifié à Internet

BTS SIO SISR3 TP 1-I Le service Web [1] Le service Web [1]

Netfilter & Iptables. Théorie Firewall. Autoriser le trafic entrant d'une connexion déjà établie. Permettre le trafic entrant sur un port spécifique

Procédure d utilisation et de paramétrage (filtrage) avec IPFIRE

Guide Utilisateur pour accès au réseau WiFi sécurisé 802.1X

PROXY SQUID-SQARD. procédure

MISE EN PLACE DU FIREWALL SHOREWALL

SQUID Configuration et administration d un proxy

Licence 3 Systèmes et Réseaux II. Chapitre V : Filtrage

titre : CENTOS_CUPS_install&config Système : CentOs 5.7 Technologie : Cups Auteur : Charles-Alban BENEZECH

Autorité de certification

pfsense Manuel d Installation et d Utilisation du Logiciel

INSTALLATION D'OPENVPN:

Mise en place d'un Réseau Privé Virtuel

TP SECU NAT ARS IRT ( CORRECTION )

Mise en route d'un Routeur/Pare-Feu

OCS Inventory & GLPI

HAUTE DISPONIBILITÉ DE MACHINE VIRTUELLE AVEC HYPER-V 2012 R2 PARTIE CONFIGURATION OPENVPN SUR PFSENSE

Configuration d un Client VPN «TheGreenBow» 1) Création d un compte utilisateur dans la base LDAP Netasq

Note Technique Sécurité. Système d'authentification. Authentification hors APN LuxGSM Authentification 3G/APN. Système de notification

Linux Firewalling - IPTABLES

ASR4 Réseaux Département Informatique, IUT Bordeaux 1. DHCP Prénom : Nom : Groupe :

TP DHCP et DNS. Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A

Installation d'un serveur sftp avec connexion par login et clé rsa.

Gestion d identités PSL Installation IdP Authentic

Installation et Configuration de Squid et SquidGuard sous Debian 7

INSTALLATION NG V2.1 D OCS INVENTORY. Procédure d utilisation. Auteur : GALLEGO Cédric 23/10/2014 N version : v1

Installation d un serveur AmonEcole

GLPI OCS Inventory. 1. Prérequis Installer un serveur LAMP : apt-get install apache2 php5 libapache2-mod-php5 apt-get install mysql-server php5-mysql

2013 Installation de GLPI-OCS. Florian MICHEL BTS SIO LYCEE SAINTE URSULE

Mise en place d un firewall d entreprise avec PfSense

Alexis Lechervy Université de Caen. M1 Informatique. Réseaux. Filtrage. Bureau S3-203

INSTALLATION DEBIAN. Installation par le réseau

LAB : Schéma. Compagnie C / /24 NETASQ

Compte rendu d'activité PTI n 2

Administration réseau Firewall

SÉCURITÉ DU SI. Mini PKI. Denoun Jérémy De Daniloff Cyril Bettan Michael SUJET (3): Version : 1.0

Projet Semestre2-1SISR

Comment développer et intégrer un module à PhpMyLab?

Live box et Nas Synology

Installation d OpenVPN

1 INTRODUCTION 2 2 PRE-REQUIS Export du certificat du serveur Date et heure du système Téléchargement du logiciel du terminal 2

L exemple d un serveur Proxy sous Windows NT 4 SERVER MICROSOFT PROXY SERVER 2 Installation et configuration Auteur : Eliane Bouillaux SERIA5

Fonctionnement de Iptables. Exercices sécurité. Exercice 1

WEB APPLICATION FIREWALL AVEC APACHE ET MOD_SECURITY

Installation du serveur WEB Apache ( MySQL, PHP) sous Debian 7.

Iptables. Table of Contents

TAGREROUT Seyf Allah TMRIM

MANIPULATION DE LA TABLE DE ROUTAGE IP. par. G.Haberer, A.Peuch, P.Saadé

Guide de configuration pour accès au réseau Wifi sécurisé 802.1X

Installation et configuration de Vulture Lundi 2 février 2009

TP Service HTTP Serveur Apache Linux Debian

Les réseaux des EPLEFPA. Guide «PfSense»

TP4 : Firewall IPTABLES

CONFIGURATION DE BASE. 6, Rue de l'industrie BP130 SOULTZ GUEBWILLER Cedex. Fax.: Tel.:

Le filtrage de niveau IP

FreeNAS Shere. Par THOREZ Nicolas

Le logiciel Netkit Installation et utilisation

Réseaux. Moyens de sécurisation. Plan. Evolutions topologiques des réseaux locaux

Tutoriel compte-rendu Mission 1

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Internet. Licence Pro R&S. TD 5 - Wifi / Radius. 1 Sur le réseau de distribution (DS) 1.1 Configuration des routeurs PC6

Administration Réseaux

Services proposés aux ligues par la M2L Accès Internet Les ligues disposent d'un accès Internet mutualisé que la M2L loue à un prestataire extérieur.

Transcription:

Annexes OpenVPN Installation Nous avons travaillé sous la distribution Debian pour ce projet. Cependant ce programme est packagé dans la majorité des distributions et la hiérarchie des fichiers de configuration change très peu. apt-get install openvpn OpenVPN propose plusieurs scripts permettant la génération des certificats. Ces scripts sont contenus dans le répertoire easy-rsa, il se trouve dans /etc/openvpn. NB: ces scripts sont fournis avec OpenVPN et ne dépendent pas de la distribution. Dans ce répertoire se trouve le fichier vars. Vous devez remplir les champs KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG; et si cas spécifique, changer d'autres valeurs comme export CA_EXPIRE. Ensuite vous devez les deux scripts suivants:./clean-all./build-ca Ceci génère le certificat d'autorité de notre VPN. Ensuite nous devons générer un certificat pour le/les serveurs VPN. S'il y a plusieurs serveurs VPN, nous utiliserons le même certificat. Nous lançons le script suivant:./build-key-server server A la question qui demande le Common Name, mettez «serveur». Il faut répondre par l'affirmative aux deux questions suivantes : "Sign the certificate? [y/n]" and "1 out of 1 certificate requests certified, commit? [y/n]. Enfin nous devons générer les paramètres de Diffie Hellman avec la commande:./build-dh Résumé des fichiers générés: ca.crt : ce fichier est le certificat de notre VPN, ce fichier est public et doit être diffusé sur chaque élément du VPN (clients et serveurs). ca.key : ce fichier permet de signer des certificats. Ce fichier doit rester secret, seul sa présence sur la machine générant les certificats pour les clients est nécessaire. dh1024.pem : ce fichier n'est pas secret. Sa présence est requise uniquement sur le serveur. server.crt : ce fichier est public, il identifie le serveur VPN. Il doit donc se trouver sur chaque serveur VPN. server.key : ce fichier est secret. Il est doit se trouver sur chaque serveur VPN. Remarque: les.key sont les fichiers les plus critiques de notre système. Ils doivent être copiés par l'intermédiaire d'un canal sécurisé et gardé en lieux sûrs.

Configuration du serveur VPN proto udp : Connexion en UDP port 1194 : Port d'écoute dev tun : Utilise le routage pour l'interconnexion entre le réseau VPN et le LAN. ca privnet/ca.crt cert privnet/server.crt key privnet/server.key dh privnet/dh1024.pem server 10.8.0.0 255.255.255.0 : classe d'ip attribuée au client. Ne pas oublier que chaque client utilise une /30 ifconfig-pool-persist ipp.txt : contient la liste des clients avec leur ip keepalive 10 120 : Pingue le client toutes les 10 secondes et considère que le client n'est plus là au de 120 secondes comp-lzo : Active la compression des données (Cette option doit être activée sur le serveur ET sur le client) push comp-lzo : Informe les clients d'utiliser la compression des données user nobody : Utilisateur sous lequet tourne le démon OpenVPN group nobody persist-key : Permet d'empêcher de recharger certaines données qui ne serait plus accessible à cause du changement d'utilisateur. persist-tun status openvpn-status.log : contient l'état instantané du serveur verb 3 : ce niveau permet de garder en mémoire les connexions effectuées. push "redirect-gateway local def1" : permet de spécifier au client de rediriger tout le trafic réseau à travers le VPN up /etc/openvpn/gateway-up.sh : exécute le script gateway-up.sh au lancement du démon. down /etc/openvpn/gateway-up.sh : exécute le script gateway-up.sh à l'arrêt du démon. Remarque sur la configuration réseau Les clients sur le VPN ne peuvent pas communiquer entre eux. Les clients ne peuvent pas broadcaster sur le LAN. Une machine sur le LAN ne peut pas atteindre une machine connectée sur le VPN. Les clients VPN sont nattés, ils accédent au LAN avec l'adresse IP côté LAN du serveur VPN. Avantage du routage: plus efficace et meilleure montée en charge. Règles de filtrage sur le serveur: On part de la configuration firewall suivante: Bloqué en INPUT et FORWARD. Autorisé en OUTPUT. Eth0: interface côté LAN. Eth1: interface côté WiFi tun0 : interface VPN Accès au VPN: iptables -A INPUT -p udp --dport 1194 -i eth1 -j ACCEPT Autorise les clients du VPN à passer le serveur VPN. Dans ce cas, les clients VPN peuvent accéder à tout le LAN (et à Internet si une passerelle est configurée). iptables -A FORWARD -i tun0 -j ACCEPT Configuration du nat iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

Configuration de la passerelle au démarrage d'openvpn Le portail captif rajoute des règles au pare-feu de la passerelle, notamment pour rediriger les utilisateurs vers la page d'accueil et pour laisser passer uniquement les utilisateurs authentifiés. Ces règles empêchent le bon fonctionnement du serveur VPN. Ainsi lorsque le serveur OpenVPN démarre, il exécute le script suivant: gateway-up.sh #!/bin/bash DEV_OUT=eth0 iptables -I FORWARD -i ${dev -o ${DEV_OUT -m state state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -I FORWARD -o ${dev -i ${DEV_OUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -I PREROUTING -i ${dev -j ACCEPT DEV_OUT représente l'interface côté LAN. Le paramètre ${dev est renseigné par OpenVPN lors de l'exécution du script. Il représente l'interface du tunnel (typiquement tun0). Les 2 premières lignes indiquent au pare-feu de laisser passer les paquets venant du VPN et de laisser entrer les paquets à destination du pare-feu s'ils correspondent à des connexions déjà initialisées. La 3ème ligne permet d'éviter que les paquets venant du VPN soit altérés par les règles de redirection du portail captif. Lors de l'arrêt du serveur OpenVPN, un script similaire est appelé: gateway-down.sh. Il se charge de supprimer les règles rajoutés par gateway-up.sh.

Installation Nocat Rappel du principe de fonctionnement de NoCat : les utilisateurs se connectent sans-fil à un point d'accés, lancent un navigateur web. Lorsqu'ils tentent d'accéder à une adresse, NoCat intercepte leur requête et ils sont redirigés vers le module d'authentification web sécurisée (https). Dés qu'ils sont authentifiés, une fenêtre pop-up est affichée. Tant que cette fenêtre est ouverte, ils peuvent accéder à internet. Pour un utilisateur non reconnue, toute connexion est impossible. NoCat se compose de deux modules : un module d'authentification web (authserv) qui doit être exécuté sur une machine faisant tourner apache-ssl, et un module passerelle (gateway), qui peut être exécuté sur une machine différente. Pour notre projet, les deux modules sont installés sur la même machine. L'installation ce fera sur une Debian. Voici le le plan d'adressage du réseau utilisé pour la maquette : Le serveur d'authentification, la passerelle de Nocat, le serveur dhcp et le serveur vpn sont installé sur une même machine (NoDog). Une deuxième machine se trouvant sur le réseaux de l'iup avec un serveur apache sera accessible depuis un utilisateur «associé» au hot spot sans passer par l'authentification. Elle permettra d'avoir accès au site de téléchargement de la solution VPN. Au préalable apache-ssl et un serveur DHCP doivent être installés. Les commandes à taper sont sur lignées en «commande» Le contenu des fichiers est sur ligné en «contenu» Tous les fichiers de configuration sont dans l'annexe.

Installation d'apache-ssl apt-get install apache-ssl Installation du serveur DHCP apt-get install dhcp3-server Configuration du serveur DHCP (fichier de configuration : dhcpd.conf) La configuration des interfaces d'écoutes ce fait dans le fichier dhcp3-server (/etc/default/dhcp3- server) : INTERFACES="eth1" Configuration des paramètres du serveur dhcp : vim /etc/dhcp3/dhcpd.conf option domain-name-servers 192.169.0.1 [adresse de notre dns] default-lease-time 600; max-lease-time 7200; subnet 192.169.0.0 netmask 255.255.255.0 { range 192.169.0.10 192.169.0.100; option routers 192.169.0.1; ping-check = 1; Relancer le serveur DHCP /etc/init.d/dhcp3-server restart Packages également nécessaires : apt-get install iptables perl libdbi-perl libdbd-mysql-perl libnet-netmask-perl pgp apache-ssl Télécharger NoCat NoCat se trouvent à l'adresse http://nocat.net/download/nocatauth/. Nous utiliserons la version 0.82, pour le télécharger: wget http://nocat.net/download/nocatauth/nocatauth-0.82.tar.gz Installer NoCat L'installation se fera dans /usr/local/nocat.

tar xvzf NoCatAuth-0.82.tar.gz Dans le cas où vous avez un noyau 2.6, modifier le fichier bin/detect-fw.sh ligne 13, remplacez "2.4" par "2.6" cd NoCatAuth-0.82 mkdir /usr/local/nocat make PREFIX=/usr/local/nocat/gateway gateway make PREFIX=/usr/local/nocat/authserv authserv make PREFIX=/usr/local/nocat/authserv pgpkey Attention, lorsque au cours de la création de la clé PGP un mot de passe est demandé, n'en mettre aucun, cela produit des erreurs par la suite. cp /usr/local/nocat/authserv/trustedkeys.gpg /usr/local/nocat/gateway/pgp/ chown -R www-data:www-data /usr/local/nocat/authserv/pgp/ Configurer NoCat Dans notre exemple nous avons le réseau WiFi configuré grâce au serveur DHCP, l'adressage réseau est le suivant: 192.169.0.0/24, l'adresse IP sur le routeur est 192.169.0.1 On modifie les fichiers suivants pour paramétrer Nocat : vim /usr/local/nocat/gateway/nocat.conf : AuthServiceAddr 192.169.0.1 # Adresse du serveur d'authentification ExternalDevice eth0 # Nom de l'interface réseau extérieure InternalDevice ath0 # Nom de l'interface réseau intérieure WIFi IncludePorts 22 80 443 # Ports acceptés (si on commente cette ligne, tout est autorisé) AllowedWebHosts nodog.univ-avignon.fr # Nom de machine non concernées par l'authentification, ici la machine sur laquelle on récupère le client VPN. LogFacility internal vim /usr/local/nocat/authserv/nocat.conf : LocalNetwork 192.169.0.0/24 Création des certificats pour le HTTP sécurisé : cd /etc/ssl/certs openssl req -new > nocat.cert.csr openssl rsa -in privkey.pem -out new.cert.key openssl x509 -in nocat.cert.csr -out nocat.cert.cert -req -signkey new.cert.key -days 365 Configuration d'apache-ssl (Ajouter à la fin du fichier httpd.conf)

vim /etc/apache-ssl/httpd.conf LoadModule env_module /usr/lib/apache/1.3/mod_env.so <VirtualHost 192.169.0.1> ServerName 192.169.0.1 SSLCertificateFile /etc/ssl/certs/nocat.cert.cert SSLCertificateKeyFile /etc/ssl/certs/new.cert.key DocumentRoot /usr/local/nocat/authserv/htdocs Include /usr/local/nocat/authserv/httpd.conf </VirtualHost> On relance apache-ssl : /etc/init.d/apache-ssl restart Vérifiez que les lignes suivantes dans /usr/local/nocat/authserv/nocat.conf soient bien décommentées (décommenter une ligne signifie enlever le signe «#» en début de ligne) vim /usr/local/nocat/authserv/nocat.conf : DataSource UserFile GroupUserFile GroupAdminFile Passwd /usr/local/nocat/authserv/etc/passwd /usr/local/nocat/authserv/etc/group /usr/local/nocat/authserv/etc/groupadm Pour le projet, nous avons utilisé le fichier passwd pour l'authentification des utilisateurs. Néanmoins il est possible d'utiliser un base SQL ou un annuaire LDAP. (voir fichier de configuration dans les annexes). Création des utilisateurs : /usr/local/nocat/authserv/bin/admintool -c login motdepasse On lance le module passerelle : /usr/local/nocat/gateway/bin/gateway Si la passerelle doit être relancé : /usr/local/nocat/gateway/bin/gateway -R Voilà, Nocat est maintenant installer et quasiment configuré sur notre machine!

Documentation du code php permettant la gestion des certificats Deux fichier majeurs : dl.php affiche la clé privée client et le certificat client, propose deux liens pour les dl. gen_ssl.php est la fonction permettant la génération et l affichage de la clé et du certificat. Deux fichiers pour le téléchargement de la clé et du certificat : certificat.php pour le certificat. pkey.php pour la clé. Description de dl.php (commenté) : //Démarrage de la session session_start(); Nous démarrons une session pour ensuite vérifier que l utilisateur est connecté. echo'<html>'; //Indiquer ici le nom que l'on souhaite donner à la page web echo'<head><title>téléchargement d\'openvpn</title></head>'; echo'<body>'; Ouverture des balises nécessaires au HTML. //Identification de la connexion (c'est içi qu'on fera la connexion à la base pour vérifier le couple login mdp) if($_post['login']=='nodog' && $_POST['mdp']=='wifi'){ $_SESSION['logged']='yes'; $_SESSION['login']=$_POST['login']; Ici, nous vérifions que le couple login / mot de passe est correct. Si tel est le cas, nous définissons la variable de session logged à yes et la variable de session login prend comme valeur le login entré par l utilisateur. //Vérification de la connexion if(isset($_session['logged']) && $_SESSION['logged']=='yes'){ Nous vérifions que l utilisateur est bien connecté. Si tel est le cas, les actions suivantes seront effectuées. //Indiquer ici le nom et l'emplacement du certificat racine $CA_CRT = "ca.crt"; //Indiquer ici le nom et l'emplacement de la clé privée du serveur $CA_KEY = "ca.key"; //Indiquer ici le nom et l'emplacement du certificat généré SUR LE SERVEUR $CLIENT_CRT = "certificats/".$_session['login'].".crt";

//Indiquer ici le nom et l'emplacement de la clé privée générée SUR LE SERVEUR $CLIENT_KEY = "certificats/".$_session['login'].".key"; //Indiquer ici la durée en jour de validité du certificat $CLIENT_duree = 365; Ici sont configurables les divers paramètres qui permettront la génération de la clé privée et du certificat du client. $CA_CRT est le nom que port le certificat racine du serveur. $CA_KEY est le nom que porte la clé privée du serveur. $CLIENT_CRT est le nom du certificat qui sera généré sur le serveur. $CLIENT_KEY est me nom de la clé privée générée sur le serveur. $CLIENT_duree est la durée de validité du certificat en jour. Tous ces paramètres seront utilisés dans la fonction gen_ssl.php. //Génération de la clé privée et du certificat client include ('gen_ssl.php'); Nous appelons ici la fonction gen_ssl.php qui nous permet de générer la clé privée et le certificat du client. else { include ('login_secu.php'); echo 'login ou mdp incorrect'; Si le couple login / mot de passe n est pas valide, nous réaffichons la page de login avec une mention précisant l erreur. echo'<br /><a href="certificat.php">téléchargement du certificat</a><br />'; echo'<a href="pkey.php">téléchargement de la clé privée</a><br />'; Nous créons deux liens permettant de télécharger les fichiers. Les deux fichiers, certificat.php et pkey.php vers lesquels pointent les liens sont décrits dans ce document. echo'</body>'; echo'</html>'; Fermeture des balises nécessaires au HTML. Description de gen_ssl.php (commenté): //Génération d'une clé privée $req_key = openssl_pkey_new(); On commence par générer une requête de clé privée. if(openssl_pkey_export ($req_key, $out_key)) {

else { echo 'Echec de l\'exportation de la clé privée<br />'; On exécute la requête, si elle n aboutit pas on affiche un message d erreur. //Indiquer ici les informations relatives à l'université $dn = array( "countryname" => "FR", "stateorprovincename" => "PACA", "localityname" => "Avignon", "organizationname" => "CRI", "organizationalunitname" => "Certification", //Ici sont indiqués le nom de la personne utilisant cette clé privée et son adresse email "commonname" => "".$_SESSION['login']."", "emailaddress" => "".$_SESSION['login']."@univ-avignon.fr" ); Ici sont renseignés toutes les informations concernant la délivrance du certificat (pays, région, ville, organisation ). //Génération de la requête de signature de certificat $req_csr = openssl_csr_new($dn, $req_key); Comme pour la clé privée, on génère une requête pour la signature du certificat avec en paramètre toutes les données entrées précédemment. //Signature du certificat $req_cert = openssl_csr_sign($req_csr, "file://$ca_crt", "file://$ca_key", $CLIENT_duree); Ici a lieu la signature effective du certificat. if(openssl_x509_export ($req_cert, $out_cert)){ else { echo "Echec de cr&aecute;tion du certificat\n"; Export du certificat avec, en cas d échec, un affichage de message d erreur. //Export en fichier format PKCS12 (mix clé privée + certif) TODO fonction non reconnue par grumly... $fichier = "certificats/".$_session['login']."xxx.crt"; $pass = ""; if(openssl_pkcs12_export_to_file($out_cert, $fichier, $out_key, $pass)){ else{ echo " Echec de cr&aecute;tion du fichier PKCS12\n ";

Ici on exporte le tout (certificat et clé) sous un fichier de format PKCS12. Ainsi l utilisateur n aura qu un fichier à télécharger ce qui est plus ergonomique.