<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>My1&#039; Blog : Cloud Computing, Sécurité, Web &#187; open vpn</title>
	<atom:link href="http://my1.fr/blog/tag/open-vpn/feed/" rel="self" type="application/rss+xml" />
	<link>http://my1.fr/blog</link>
	<description>Keep alive !</description>
	<lastBuildDate>Wed, 02 May 2012 19:35:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Créer son serveur VPN sous Debian</title>
		<link>http://my1.fr/blog/creer-son-serveur-vpn-sous-debian/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creer-son-serveur-vpn-sous-debian</link>
		<comments>http://my1.fr/blog/creer-son-serveur-vpn-sous-debian/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 18:47:10 +0000</pubDate>
		<dc:creator>Emilien</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[open vpn]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[planete-libre]]></category>

		<guid isPermaLink="false">http://www.my1.fr/blog/2008/03/27/creer-son-serveur-vpn-sous-debian/</guid>
		<description><![CDATA[Pour qui : un particulier ou une entreprise Pour quoi faire : Mise en réseau de sites distants Matériel minimum : Un serveur sous Debian GNU Linux, et un client sous Linux ou Windows ou MAC. But : Mettre en place un moyen sécurisé et efficace qui permet d&#8217;interconnecter une machine distante dans un Intranet, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Pour qui</strong> : un particulier ou une entreprise</p>
<p><strong>Pour quoi faire</strong> : Mise en réseau de sites distants</p>
<p><strong>Matériel minimum</strong> : Un serveur sous Debian GNU Linux, et un client sous Linux ou Windows ou MAC.</p>
<p align="JUSTIFY"><strong>But</strong> : Mettre en place un moyen sécurisé et efficace qui permet d&#8217;interconnecter une machine distante dans un Intranet, avec le minimum de moyens possible.</p>
<p align="JUSTIFY"><strong>Solution retenue</strong> : OpenVPN</p>
<p><strong>Détail du travail</strong> : Configurer le PKI OpenSSL, configurer le serveur OpenVPN , puis configurer les clients.</p>
<p><strong>Architecture réseau obtenue</strong> :</p>
<p>&nbsp;</p>
<p><a href="http://my1.fr/blog/wp-content/uploads/2008/03/architecture.png"><img class="alignnone size-medium wp-image-207" title="architecture" src="http://my1.fr/blog/wp-content/uploads/2008/03/architecture-300x168.png" alt="" width="300" height="168" /></a></p>
<p>&nbsp;</p>
<ul>
<li>
<p align="JUSTIFY"><span style="text-decoration: underline;"><strong>Présentation d&#8217;OpenVPN</strong></span></p>
</li>
</ul>
<p align="JUSTIFY">OpenVPN est une solution libre permettant de créer un réseau privé virtuel communément appelé VPN (Virtual Private Network), sur le protocole SSL (Secure Socket Layer).</p>
<p align="JUSTIFY">L&#8217;avantage principal d&#8217;OpenVPN est de pouvoir interconnecter plusieurs réseaux (ou plusieurs ordinateurs distants) entre eux via une technique de «<em> tunnel </em>», et cela de manière sécurisée à l&#8217;aide du protocole SSL. Il existe deux modes de fonctionnement d&#8217;OpenVPN :</p>
<ul>
<li>
<p align="JUSTIFY">le mode «<em> bridge </em>», qui permet d&#8217;interconnecter plusieurs réseaux distants.</p>
</li>
<li>
<p align="JUSTIFY">le mode «<em> routed </em>», qui permet d&#8217;interconnecter des machines distantes, et donc d&#8217;appliquer un filtrage plus précis.</p>
</li>
</ul>
<ul>
<li>
<p align="JUSTIFY"><span style="text-decoration: underline;"><strong>Installation des paquetages serveur</strong></span></p>
</li>
</ul>
<p align="JUSTIFY">Avant de pouvoir installer les paquetages d&#8217;OpenVPN, il est nécessaire d&#8217;avoir installé :</p>
<ul>
<li>
<p align="JUSTIFY">les options du noyau par défaut</p>
</li>
<li>
<p align="JUSTIFY">la librairie LZO</p>
</li>
<li>
<p align="JUSTIFY">la librairie OpenSSL (ainsi que ses composants de développement)</p>
</li>
</ul>
<p align="JUSTIFY">Tous les paquetages nécessaires se trouvent dans les dépôts officiels.</p>
<p align="JUSTIFY">Sur notre serveur Debian, la commande suivante installera les paquets :</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>apt-get install openssl libssl-dev liblzo1 liblzo-dev openvpn</strong></span></p>
</blockquote>
<p align="JUSTIFY">Grâce à APT, le système de gestion de paquetages de la distribution Debian, les dépendances seront résolues, et l&#8217;application s&#8217;installe sans soucis.</p>
<ul>
<li>
<p align="JUSTIFY"><span style="text-decoration: underline;"><strong>Génération des clés</strong></span></p>
</li>
</ul>
<p align="JUSTIFY">Pour mettre en place notre infrastructure à clés publiques (PKI), il va falloir générer :</p>
<ul>
<li>
<p align="JUSTIFY">une clé de pour le protocole d’échange diffie-hellman (<em>dh1024.key</em>)</p>
</li>
<li>
<p align="JUSTIFY">une clé et un certificat pour l’autorité de certification (<em>ca.crt</em>, <em>ca.key</em>)</p>
</li>
<li>
<p align="JUSTIFY">une clé et un certificat pour le serveur (<em>srv-vpn1.key</em>, <em>srv-vpn1.crt</em>)</p>
</li>
<li>
<p align="JUSTIFY">une clé et un certificat pour chaque client (<em>client1.crt</em>, <em>client1.key</em>)</p>
</li>
</ul>
<p align="JUSTIFY">Pour cela, des scripts existent pour simplifier la tâche. Il suffit d&#8217;exécuter un terminal en root, et de se déplacer dans le répertoire suivant :</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>su &#8211; root</strong></span></p>
<p align="JUSTIFY"><span style="color: #800000;"><strong>cd /usr/share/doc/openvpn/examples/easy-rsa/2.0 </strong></span></p>
</blockquote>
<p align="JUSTIFY"><span style="text-decoration: underline;">Création de l&#8217;autorité de certification :</span></p>
<p align="JUSTIFY">Éditer le fichier « vars » afin de paramétrer la PKI :</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>vim vars</strong></span></p>
</blockquote>
<ul>
<li>
<p align="JUSTIFY">export KEY_COUNTRY=<strong>&laquo;&nbsp;FR&nbsp;&raquo;</strong></p>
</li>
<li>
<p align="JUSTIFY">export KEY_PROVINCE=<strong>&laquo;&nbsp;France&nbsp;&raquo;</strong></p>
</li>
<li>
<p align="JUSTIFY">export KEY_CITY=&nbsp;&raquo;<strong>Paris&nbsp;&raquo;</strong></p>
</li>
<li>
<p align="JUSTIFY">export KEY_ORG=<strong>&laquo;&nbsp;Organisation &laquo;&nbsp;</strong></p>
</li>
<li>
<p align="JUSTIFY">export KEY_EMAIL=<strong>&laquo;&nbsp;contact@organisation.fr&nbsp;&raquo;</strong></p>
</li>
</ul>
<p align="JUSTIFY">Initialisation des variables :</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>. ./vars</strong></span></p>
</blockquote>
<p align="JUSTIFY">Ensuite, création du répertoire qui contiendra les clés :</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>./clean-all</strong></span></p>
</blockquote>
<p align="JUSTIFY">Génération du certificat principal du serveur (<em>ca.crt</em>) et la clé correspondante (<em>ca.key</em>):</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>./build-ca</strong></span></p>
</blockquote>
<p align="JUSTIFY">Nous confirmons les paramètres en appuyant à chaque fois sur [Entrée], sauf pour le Common Name, où il faut renseigner le «<em> hostname </em>» du serveur (exemple : srv-vpn1).</p>
<p align="JUSTIFY"><span style="text-decoration: underline;">Création du certificat et de la clé pour le serveur OpenVPN :</span></p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>./build-key-server srv-vpn1</strong></span></p>
</blockquote>
<p align="JUSTIFY">Nous confirmons les paramètres en appuyant à chaque fois sur [Entrée]. Ce n&#8217;est pas la peine de renseigner le paramètre « <em>Challenge Password </em>».</p>
<p align="JUSTIFY">La signature du certificat se fait en renseignant [Y]qu&#8217;il faudra confirmer toujours avec [Y].</p>
<p align="JUSTIFY"><span style="text-decoration: underline;">Création du certificat et de la clé pour un client OpenVPN :</span></p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>./build-key client1</strong></span></p>
</blockquote>
<p align="JUSTIFY">Nous confirmons les paramètres en appuyant à chaque fois sur [Entrée]. Chaque <em>Common Name</em> doit être différent pour chaque client (ici, nous renseignerons «<strong> client1 </strong>»). Ce n&#8217;est pas la peine de renseigner le paramètre « <em>Challenge Password </em>». La signature du certificat se fait en renseignant [Y] qu&#8217;il faudra confirmer toujours avec [Y]. Cette procédure est à faire pour chaque client.</p>
<p align="JUSTIFY"><span style="text-decoration: underline;">Création du paramètre Diffie Hellman :</span></p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>./build-dh</strong></span></p>
</blockquote>
<p align="JUSTIFY"><span style="text-decoration: underline;">Mise en place des certificats et des clés :</span></p>
<p align="JUSTIFY">Copie vers le répertoire du service OpenVPN :</p>
<blockquote>
<p align="LEFT"><span style="color: #800000;"><strong>mv ./keys/ca.crt /etc/openvpn/<br />
mv ./keys/serveur.crt /etc/openvpn/<br />
mv ./keys/serveur.key /etc/openvpn/<br />
mv ./keys/dh1024.pem /etc/openvpn/ </strong></span></p>
</blockquote>
<p align="JUSTIFY"><span style="text-decoration: underline;">Création de l&#8217;utilisateur du processus OpenVPN :</span></p>
<p align="JUSTIFY">Dans un soucis de sécurité toujours, nous allons créer le groupe «<em> openvpn </em>», puis l&#8217;utilisateur «<em> openvpn </em>» (sans shell, et sans répertoire de connexion) qui exécutera le processus OpenVPN :</p>
<blockquote>
<p align="LEFT"><span style="color: #800000;"><strong>groupadd openvpn<br />
useradd -d /dev/null -g openvpn -s /bin/false openvpn</strong></span></p>
</blockquote>
<ul>
<li>
<p align="JUSTIFY"><span style="text-decoration: underline;"><strong>Configuration du service OpenVPN :</strong></span></p>
</li>
</ul>
<p align="JUSTIFY">Nous allons partir de l&#8217;exemple fournis avec les paquetages :</p>
<blockquote>
<p align="LEFT"><span style="color: #800000;"><strong>cd /usr/share/doc/openvpn/examples/sample-config-files/<br />
gunzip server.conf.gz<br />
cp server.conf /etc/openvpn/</strong></span></p>
<p align="LEFT"><span style="color: #800000;"><strong>vim /etc/openvpn/server.conf</strong></span></p>
</blockquote>
<p align="JUSTIFY">Voici la configuration :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://my1.fr/blog/wp-content/plugins/wp-codebox/wp-codebox.php?p=5&amp;download=serveur.conf">serveur.conf</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p53"><td class="code" id="p5code3"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Port en écoute (pris au hasard par mesure de sécurité)</span>
<span style="color: #666666; font-style: italic;"># Attention à bien configurer le NAT sur le routeur, pour pouvoir rediriger le port vers le serveur</span>
port <span style="color: #000000;">2829</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Utilisation du protocole UDP, plus sécurisé</span>
proto udp
&nbsp;
<span style="color: #666666; font-style: italic;"># Configuration de l'interface en mode &quot;routed&quot;</span>
dev tun
&nbsp;
<span style="color: #666666; font-style: italic;"># Définition des chemins des certificats/clés</span>
ca ca.crt
cert srv-vpn1.crt
key srv-vpn1.key
&nbsp;
<span style="color: #666666; font-style: italic;"># Paramètres Diffie hellman</span>
dh dh1024.pem
&nbsp;
<span style="color: #666666; font-style: italic;"># Adresse du réseau virtuel</span>
server 10.8.0.0 255.255.255.0
&nbsp;
<span style="color: #666666; font-style: italic;"># Indique au client la route vers le réseau Intranet</span>
push <span style="color: #ff0000;">&quot;route 172.48.0.0 255.255.255.0&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Indique au client les informations DNS</span>
&nbsp;
push <span style="color: #ff0000;">&quot;dhcp-option DOMAIN organisation.fr&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Ping tous les 10sec, si au bout de 120sec il n'y a pas de réponse alors déconnexion</span>
keepalive <span style="color: #000000;">10</span> <span style="color: #000000;">120</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Compression</span>
comp-lzo
&nbsp;
<span style="color: #666666; font-style: italic;"># Restriction du processus à un utilisateur</span>
user openvpn
group openvpn
&nbsp;
<span style="color: #666666; font-style: italic;"># Pour que la connexion persiste</span>
persist-key
persist-tun
&nbsp;
<span style="color: #666666; font-style: italic;"># Fichier de sorties de logs</span>
status openvpn-status.log
&nbsp;
<span style="color: #666666; font-style: italic;"># Verbosité standard des logs</span>
verb <span style="color: #000000;">4</span></pre></td></tr></table></div>

<p align="JUSTIFY">Redémarrage du service OpenVPN :</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>/etc/init.d/openvpn restart</strong></span></p>
</blockquote>
<p align="JUSTIFY">Nous allons autoriser le serveur VPN à faire transiter des paquets vers un autre réseau :</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>echo 1 &gt; /proc/sys/net/ipv4/ip_forward</strong></span></p>
</blockquote>
<p align="JUSTIFY">Pour automatiser le dernier paramètre, il suffit de décommenter la ligne</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>net.ipv4.ip_forward=1</strong></span></p>
</blockquote>
<p align="JUSTIFY">dans le fichier <em><strong>/etc/sysctl.conf</strong></em>.</p>
<ul>
<li>
<p align="JUSTIFY"><span style="text-decoration: underline;"><strong>Installation des paquetages client :</strong></span></p>
</li>
</ul>
<ul>
<li>
<p align="JUSTIFY">Sur un client Debian, la commande suivante installera les paquets nécessaires :</p>
</li>
</ul>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>apt-get install openvpn liblzo1</strong></span></p>
</blockquote>
<ul>
<li>
<p align="JUSTIFY">Sur un client Microsoft Windows, nous utiliserons le logiciel OpenVPN-GUI (disponible à l&#8217;URL <a href="http://openvpn.se/download.html"><span style="color: #000080;"><span style="text-decoration: underline;"><em>http://openvpn.se/download.htm</em></span></span><span style="color: #000080;"><span style="text-decoration: underline;">l</span></span></a>)</p>
</li>
</ul>
<ul>
<li>
<p align="JUSTIFY"><span style="text-decoration: underline;"><strong>Configuration du client :</strong></span></p>
</li>
</ul>
<ul>
<li>
<p align="JUSTIFY">Si le client est sous Linux, il faut créer un fichier de configuration situé dans /etc/openvpn :</p>
</li>
</ul>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>vim /etc/openvpn/server.conf</strong></span></p>
</blockquote>
<ul>
<li>
<p align="JUSTIFY">Si le client est sous Windows, il faudra éditer le fichier <em><strong>config</strong></em> situé dans C:\Program Files\OpenVPN\</p>
</li>
</ul>
<p align="JUSTIFY">Voici la configuration :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://my1.fr/blog/wp-content/plugins/wp-codebox/wp-codebox.php?p=5&amp;download=client.conf">client.conf</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p54"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code" id="p5code4"><pre class="bash" style="font-family:monospace;">client
dev tun
proto udp
&nbsp;
<span style="color: #666666; font-style: italic;"># Adresse IP publique du serveur VPN, et son port d'écoute</span>
remote 220.0.0.1 <span style="color: #000000;">2829</span>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb <span style="color: #000000;">4</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Rajouter ces 2 lignes pour un client Windows Vista</span>
<span style="color: #666666; font-style: italic;"># ou Seven :</span>
route-method exe
route-delay <span style="color: #000000;">2</span></pre></td></tr></table></div>

<p align="JUSTIFY">Pour lancer la connexion sur Windows, il suffit de faire un clic droit sur l’icône « OpenVPN » situé à gauche de l&#8217;horloge et de choisir l’option «<em><strong> Connecter </strong></em>».</p>
<p align="JUSTIFY">Sur Linux, un redémarrage du service OpenVPN sera suffisant.</p>
<p align="JUSTIFY">Une fois connecté, le client distant est dans le réseau privé virtuel, qui connait la route vers le réseau Intranet. Le serveur VPN étant la passerelle, les machines de l&#8217;Intranet n&#8217;ont pas besoin de connaître la route vers le réseau privé.</p>
<p align="JUSTIFY">Pour vérifier l&#8217;état de la connexion, ou pour détecter le moindre de soucis, un</p>
<blockquote>
<p align="JUSTIFY"><span style="color: #800000;"><strong>tail -f /var/log/syslog</strong></span></p>
</blockquote>
<p align="JUSTIFY">ou encore la lecture du fichier <em><strong>openvpn-status.log</strong></em> renseigne toutes les informations nécessaires.</p>
<p align="JUSTIFY"><strong>Pour aller plus loin :</strong></p>
<p align="JUSTIFY">Installer un serveur Proxy dans l&#8217;Intranet peut permettre au client de surfer sur Internet comme s&#8217;il était dans l&#8217;Intranet. Très utile pour déjouer les filtrages réseaux appliqués par certains FAI, ou tout simplement lorsque l&#8217;on se trouve derrière un proxy. Les paquets HTTP seront encapsulés dans le tunnel VPN, et décapsulés en sortie, et vice-versa pour le retour.</p>
]]></content:encoded>
			<wfw:commentRss>http://my1.fr/blog/creer-son-serveur-vpn-sous-debian/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
	</channel>
</rss>

