{"id":2957,"date":"2014-02-23T12:34:01","date_gmt":"2014-02-23T10:34:01","guid":{"rendered":"http:\/\/www.collet-matrat.com\/?p=2957"},"modified":"2014-08-28T15:39:37","modified_gmt":"2014-08-28T13:39:37","slug":"howto-installation-et-configuration-dopenvpn-sous-debian-7","status":"publish","type":"post","link":"https:\/\/www.collet-matrat.com\/?p=2957","title":{"rendered":"[HowTo] Installation et configuration d&rsquo;OpenVPN sous Debian 7"},"content":{"rendered":"<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.collet-matrat.com\/wp-content\/uploads\/2014\/02\/photo_post_openvpn.jpg?w=584\" alt=\"Photo Post OpenVPN\" \/><\/center><\/p>\n<p style=\"text-align: justify;\">En bons Geeks nous avons tous besoin, \u00e0 un moment ou un autre, d'un VPN (pour se connecter en s\u00e9curit\u00e9 depuis un hot-spot public, pour acc\u00e9der \u00e0 des contenus disponibles qu'\u00e0 partir de certaines zones g\u00e9ographiques ...). Il existe bien entendu <a href=\"http:\/\/www.undernews.fr\/comparatifs-vpn\" target=\"_blank\"> une offre commerciale assez fournie <\/a> mais partant du principe qu'on est jamais aussi bien servi que par soi m\u00eame il n'est en fait pas tr\u00e8s compliqu\u00e9 de mettre en \u0153uvre sa propre solution (en s'appuyant par exemple sur des offres de VPS low cost ...).<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.collet-matrat.com\/wp-content\/uploads\/2014\/02\/openvpn_logo.png?w=584&#038;ssl=1\" alt=\"Logo OpenVPN\" \/><\/center><\/p>\n<p style=\"text-align: justify;\">Il existe aujourd\u2019hui diff\u00e9rentes technologies permettant la mise en place d'un tunnel VPN (IPSec, PPTP, L2TP ...). Toutefois ces protocoles n\u00e9cessitent tous l'ouverture de certains ports et\/ou protocoles au niveau des routeurs utilis\u00e9s pour la connexion \u00e0 l'Internet. Malheureusement lors de vos d\u00e9placements vous ne ma\u00eetrisez pas toujours ces aspects ... OpenVPN permet de s\u2019affranchir de ce type de probl\u00e8me. En effet il est capable d'utiliser un port standard (par exemple le TCP:443) qui est habituellement utilis\u00e9 pour les connexions HTTPS. S'agissant l\u00e0 d'un port largement utilis\u00e9 il est fort probable que tous les acc\u00e8s Internet que vous rencontrerez laisseront passer ce type de flux !<\/p>\n<p style=\"text-align: justify;\">Ce how-to est destin\u00e9 \u00e0 vous fournir les \u00e9l\u00e9ments n\u00e9cessaires \u00e0 la mise en \u0153uvre de ce type de VPN en toute autonomie (c\u00f4t\u00e9s serveur et client).<\/p>\n<p>OpenVPN en quelques concepts :<\/p>\n<ul>\n<li>Open VPN n\u00e9cessite un client sp\u00e9cifique en fonction de votre mat\u00e9riel (t\u00e9l\u00e9chargements disponibles <a href=\"http:\/\/openvpn.net\/index.php\/open-source\/downloads.html\">ICI<\/a> )<\/li>\n<li>L'authentification est bas\u00e9e sur un syst\u00e8me de certificats. Vous devrez g\u00e9n\u00e9rer ces certificats (et les cl\u00e9s associ\u00e9es) sur votre serveur pour chaque client. Ainsi qu'un certificat propre \u00e0 votre serveur (qui jouera le r\u00f4le d'Autorit\u00e9 de Certification). Ces fichiers seront ensuite utilis\u00e9s sur le client pour s'authentifier<\/li>\n<li>La configuration du client est r\u00e9alis\u00e9e au travers d'un fichier de conf sp\u00e9cifique<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Pr\u00e9-requis : vous devez disposer d'un serveur Linux fonctionnant sous Linux Debian 7 <del datetime=\"2014-02-23T13:42:26+00:00\">qui n'utilise pas actuellement le port TCP:443<\/del>(EDIT : voir le commentaire de Denis pour les possibilit\u00e9s de partage de ce port). Si vous utilisez d\u00e9j\u00e0 des r\u00e8gles IPtables vous serez amen\u00e9 \u00e0 adapter la configuration de votre Firewall ...<\/p>\n<p>Vous verrez c'est un peu long \ud83d\ude09 mais j'ai essay\u00e9 de d\u00e9tailler chaque op\u00e9ration le plus pr\u00e9cis\u00e9ment possible.<\/p>\n<p>C'est parti!<\/p>\n<ul>\n<li>Nous allons commencer \u00e0 installer le serveur OpenVPN<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-get install openvpn\n<\/pre>\n<ul>\n<li>On place au bon endroit les fichiers n\u00e9cessaires \u00e0 la g\u00e9n\u00e9ration des cl\u00e9s et certificats (OpenVPN est fourni avec un ensemble d'outils permettant la gestion de ces \u00e9l\u00e9ments : <em>Easy RSA<\/em>)<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncp -r \/usr\/share\/doc\/openvpn\/examples\/easy-rsa\/2.0\/ \/etc\/openvpn\/easy-rsa\/\ncd \/etc\/openvpn\/easy-rsa\/\n<\/pre>\n<ul>\n<li>On \u00e9dite ensuite le fichier \"vars\" qui int\u00e8gre les param\u00e8tres par d\u00e9faut pour la g\u00e9n\u00e9ration des cl\u00e9s et certificats (les informations \u00e0 modifier se situent \u00e0 la fin de ce fichier)<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nvim vars\n<\/pre>\n<p>et adaptez les informations en fonction de vos besoins ...<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# These are the default values for fields\n# which will be placed in the certificate.\n# Don&amp;#039;t leave any of these fields blank.\nexport KEY_COUNTRY=&amp;quot;FR&amp;quot;\nexport KEY_PROVINCE=&amp;quot;Auvergne&amp;quot;\nexport KEY_CITY=&amp;quot;ClermontFerrand&amp;quot;\nexport KEY_ORG=&amp;quot;BdX&amp;quot;\nexport KEY_EMAIL=&amp;quot;votre@email.com&amp;quot;\n...\n<\/pre>\n<ul>\n<li>On lance ensuite ces commandes n\u00e9cessaires \u00e0 l'initialisation de diff\u00e9rents param\u00e8tres de crypto et de l'Autorit\u00e9 de Certification<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsource .\/vars\n.\/clean-all\n.\/build-dh\n.\/pkitool --initca\n.\/pkitool --server server\n<\/pre>\n<ul>\n<li>Apr\u00e8s ces diff\u00e9rentes op\u00e9rations on cr\u00e9e le fichier de configuration du serveur OpenVPN (<em>openvpn.conf<\/em>)<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncd \/etc\/openvpn\/\nvim openvpn.conf\n<\/pre>\n<p>Votre fichier devrait ressembler \u00e0 \u00e7a :<\/p>\n<p>8&lt;----------------------------<br \/>\n<em>port 443<\/em><br \/>\n<em>proto tcp<\/em><br \/>\n<em>dev tun<\/em><br \/>\n<em>comp-lzo<\/em><br \/>\n<em>persist-key<\/em><br \/>\n<em>persist-tun<\/em><br \/>\n<em>keepalive 10 20<\/em><br \/>\n<em>server 10.8.0.0 255.255.255.0<\/em><\/p>\n<p><em>push \"redirect-gateway def1 bypass-dhcp\"<\/em><br \/>\n<em>push \"dhcp-option DNS 8.8.8.8\"<\/em><br \/>\n<em>push \"dhcp-option DNS 8.8.4.4\"<\/em><\/p>\n<p><em>ca \/etc\/openvpn\/easy-rsa\/keys\/ca.crt<\/em><br \/>\n<em>cert \/etc\/openvpn\/easy-rsa\/keys\/server.crt<\/em><br \/>\n<em>key \/etc\/openvpn\/easy-rsa\/keys\/server.key<\/em><br \/>\n<em>dh \/etc\/openvpn\/easy-rsa\/keys\/dh1024.pem<\/em><\/p>\n<p><em>status openvpn-status.log<\/em><\/p>\n<p><em>verb 3<\/em><br \/>\n8&lt;----------------------------<\/p>\n<ul>\n<li>On lance ensuite le serveur OpenVPN pour tester la conf ...<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nopenvpn openvpn.conf\n<\/pre>\n<p>Vous devriez obtenir quelque chose de ce style :<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nroot@debian:\/etc\/openvpn# openvpn openvpn.conf\nSun Feb 16 16:33:46 2014 OpenVPN 2.2.1 i486-linux-gnu &#x5B;SSL] &#x5B;LZO2] &#x5B;EPOLL] &#x5B;PKCS11] &#x5B;eurephia] &#x5B;MH] &#x5B;PF_INET6] &#x5B;IPv6 payload 20110424-2 (2.2RC2)] built on Jun 19 2013\nSun Feb 16 16:33:46 2014 NOTE: OpenVPN 2.1 requires &amp;#039;--script-security 2&amp;#039; or higher to call user-defined scripts or executables\nSun Feb 16 16:33:46 2014 Diffie-Hellman initialized with 1024 bit key\nSun Feb 16 16:33:46 2014 TLS-Auth MTU parms &#x5B; L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]\nSun Feb 16 16:33:46 2014 Socket Buffers: R=&#x5B;87380-&amp;gt;131072] S=&#x5B;16384-&amp;gt;131072]\nSun Feb 16 16:33:46 2014 ROUTE default_gateway=xxx.xxx.xxx.xxx\nSun Feb 16 16:33:46 2014 TUN\/TAP device tun0 opened\nSun Feb 16 16:33:46 2014 TUN\/TAP TX queue length set to 100\nSun Feb 16 16:33:46 2014 do_ifconfig, tt-&amp;gt;ipv6=0, tt-&amp;gt;did_ifconfig_ipv6_setup=0\nSun Feb 16 16:33:46 2014 \/sbin\/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500\nSun Feb 16 16:33:46 2014 \/sbin\/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2\nSun Feb 16 16:33:46 2014 Data Channel MTU parms &#x5B; L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3\/1 ]\nSun Feb 16 16:33:46 2014 Listening for incoming TCP connection on &#x5B;undef]\nSun Feb 16 16:33:46 2014 TCPv4_SERVER link local (bound): &#x5B;undef]\nSun Feb 16 16:33:46 2014 TCPv4_SERVER link remote: &#x5B;undef]\nSun Feb 16 16:33:46 2014 MULTI: multi_init called, r=256 v=256\nSun Feb 16 16:33:46 2014 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0\nSun Feb 16 16:33:46 2014 MULTI: TCP INIT maxclients=1024 maxevents=1028\nSun Feb 16 16:33:46 2014 Initialization Sequence Completed\n<\/pre>\n<ul>\n<li>Il est ensuite souhaitable de modifier le param\u00e9trage de votre syst\u00e8me afin qu'il autorise le forward des paquets au travers du serveur :<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nvim \/etc\/sysctl.conf\n<\/pre>\n<p>On d\u00e9-commente (vers la ligne 28) :<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnet.ipv4.ip_forward=1\n<\/pre>\n<p>et on lance les deux commandes suivantes<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsysctl -p\n\/etc\/init.d\/networking reload\n<\/pre>\n<ul>\n<li>Il est d\u00e9sormais n\u00e9cessaire de modifier les r\u00e8gles Iptables afin de permettre aux paquets de transiter au travers de votre passerelle VPN (pour vous servir de votre serveur VPN comme d'une passerelle vers d'autres r\u00e9seaux). Pour ce faire on cr\u00e9e puis on \u00e9dite un fichier <em>\"firewall.rules\"<\/em> que l'on place dans <em>\"\/etc\"<\/em>. Afin de faciliter la mise en \u0153uvre du syst\u00e8me j'ai cr\u00e9\u00e9 un fichier qui laisse entrer tous les flux ( <em>:INPUT ACCEPT<\/em> dans la section \"Filter\"). Vous devez bien entendu l'adapter en fonction de vos besoins ...<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nvim \/etc\/firewall.rules\n<\/pre>\n<p>Voici le contenu du fichier<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n*nat\n:PREROUTING ACCEPT\n:INPUT ACCEPT\n:OUTPUT ACCEPT\n:POSTROUTING ACCEPT\n-A POSTROUTING -s 10.8.0.0\/24 -o eth0 -j MASQUERADE\n-A POSTROUTING -o eth0 -j MASQUERADE\nCOMMIT\n\n*filter\n\n:INPUT ACCEPT\n:FORWARD DROP\n:OUTPUT ACCEPT\n\n-A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT\n-A FORWARD -i tun0 -o eth0 -j ACCEPT\n\nCOMMIT\n<\/pre>\n<ul>\n<li>On cr\u00e9e ensuite le fichier d'initialisation du firewall (qui va utiliser les directives donn\u00e9es au sein de <em>\/etc\/firewall.rules<\/em>)<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nvim \/etc\/init.d\/firewall\n<\/pre>\n<p>Voici le contenu du fichier<\/p>\n<p>#!\/bin\/sh<br \/>\n\/sbin\/iptables-restore \/etc\/firewall.rules<\/p>\n<p>On donne les droits d\u2019ex\u00e9cution \u00e0 ce script<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nchmod 755 \/etc\/init.d\/firewall\n<\/pre>\n<p>On lance une premi\u00e8re fois manuellement ce script<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/init.d\/firewall\n<\/pre>\n<p>Et on indique au syst\u00e8me que ce script doit \u00eatre lanc\u00e9 automatiquement au d\u00e9marrage du syst\u00e8me<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nupdate-rc.d firewall defaults\n<\/pre>\n<ul>\n<li>et pour finir c\u00f4t\u00e9 serveur on lance le service \"OpenVPN\"<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nservice openvpn start\n<\/pre>\n<ul>\n<li>On passe ensuite \u00e0 la g\u00e9n\u00e9ration des certificats et des cl\u00e9s destin\u00e9s aux clients : remplacez <em>nom_du_user<\/em> par le nom de l'utilisateur (pas d'espace, pas de caract\u00e8res sp\u00e9ciaux ...)<\/li>\n<\/ul>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncd \/etc\/openvpn\/easy-rsa\nsource vars\n.\/build-key nom_du_user\n<\/pre>\n<p>R\u00e9pondez aux questions (pour le CN - Common Name - utilisez la m\u00eame chaine que pour <em>nom_du_user<\/em>)<\/p>\n<ul>\n<li>A l'issue de cette op\u00e9ration on r\u00e9cup\u00e8re les fichiers suivants dans le r\u00e9pertoire <em>\/etc\/openvpn\/easy-rsa\/keys<\/em> (ces derniers devront \u00eatre d\u00e9pos\u00e9s sur votre client)<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>Nom du fichier<\/th>\n<th>Contenu<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>nom_du_user.crt<\/td>\n<td>Certificat de l'utilisateur<\/td>\n<\/tr>\n<tr>\n<td>nom_du_user.key<\/td>\n<td>Cl\u00e9 priv\u00e9e associ\u00e9e au certificat de l'utilisateur<\/td>\n<\/tr>\n<tr>\n<td>ca.crt<\/td>\n<td>Certificat de l'autorit\u00e9 de certification<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul>\n<li>Il faut ensuite cr\u00e9er le fichier de conf (c\u00f4t\u00e9 client) qui sera fourni au logiciel OpenVPN pour se connecter. Vous pouvez utiliser n'importe quel \u00e9diteur de texte sur votre OS habituel. Voici ce qu'on doit trouver dans ce fichier (extension <em>.conf<\/em> pour Linux\/MacOS ou <em>.ovpn<\/em> pour les clients Windows et Android). Respectez l'extension c'est important ! Sous Windows le fichier de conf doit \u00eatre d\u00e9pos\u00e9 au sein du r\u00e9pertoire <em>\"C:\\Program Files\\OpenVPN\\config\\\"<\/em>. N'oubliez pas de placer \u00e9galement les 3 fichiers cit\u00e9s ci-dessus (.crt\/.key) au sein de ce r\u00e9pertoire de configuration de votre client.<\/li>\n<\/ul>\n<p>Voici le contenu du fichier de configuration du client :<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nclient\ndev tun\nproto tcp\nremote INDIQUEZ_ICI_L_IP_DE_VOTRE_SERVEUR 443\nresolv-retry infinite\nnobind\n\nca ca.crt\ncert nom_du_user.crt\nkey nom_du_user.key\n\npersist-key\npersist-tun\n\ncomp-lzo\n\nverb 3\n<\/pre>\n<ul>\n<li>Si vous utilisez Windows voici deux points importants \u00e0 v\u00e9rifier (qui vous feront gagner du temps \ud83d\ude09 ) :<\/p>\n<\/li>\n<li>\n<p>que votre fichier de configuration porte bien l'extension <em>\".ovpn\"<\/em> (Windows \u00e0 souvent la bonne id\u00e9e d\u2019ajouter un .txt derri\u00e8re ... on se retrouve alors un .ovpn.txt le .txt \u00e9tant bien entendu masqu\u00e9 ...).<\/p>\n<\/li>\n<li>\n<p>que <em>OpnVpn GUI<\/em> soit bien lanc\u00e9 avec les droits d'administrateur (autrement \u00e7a ne fonctionne pas !)<\/p>\n<\/li>\n<\/ul>\n<p>Sous Windows il ne vous reste plus qu'\u00e0 cliquer-droit sur l'icone <em>OpenVPN GUI<\/em> dans la barre de t\u00e2che et de choisir \"connecter\" !<\/p>\n<p>Pour les autres plateformes je vous laisse vous reporter \u00e0 la documentation fournie avec votre client Open VPN en sachant que le fichier de conf ainsi que les certificats et cl\u00e9s sont compatibles sur tous les OS.<\/p>\n<p style=\"text-align: justify;\">Si vous rep\u00e9rez des erreurs, impr\u00e9cisions, omissions (et oui \u00e7a peut arriver ...) n'h\u00e9sitez pas \u00e0 me l'indiquer dans les commentaires !<\/p>\n<ul>\n<li>Cr\u00e9dit photo : <a href=\"http:\/\/www.flickr.com\/photos\/splorp\/3981832163\/in\/faves-18689371@N00\/\">splorp<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>En bons Geeks nous avons tous besoin, \u00e0 un moment ou un autre, d'un VPN (pour se connecter en s\u00e9curit\u00e9 depuis un hot-spot public, pour acc\u00e9der \u00e0 des contenus disponibles qu'\u00e0 partir de certaines zones g\u00e9ographiques ...). Il existe bien &hellip; <a href=\"https:\/\/www.collet-matrat.com\/?p=2957\">Lire la suite <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Sur le blog : \"[HowTo] Installation et configuration d'OpenVPN sous Debian 7\"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[91,7,86],"tags":[],"class_list":["post-2957","post","type-post","status-publish","format-standard","hentry","category-howto","category-linux","category-securite"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/posts\/2957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2957"}],"version-history":[{"count":67,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/posts\/2957\/revisions"}],"predecessor-version":[{"id":3025,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/posts\/2957\/revisions\/3025"}],"wp:attachment":[{"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}