<?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>Le blog de Michauko &#187; VPN</title>
	<atom:link href="http://michauko.org/blog/tag/vpn/feed/" rel="self" type="application/rss+xml" />
	<link>http://michauko.org/blog</link>
	<description>Si tu ne comprends pas le titre de l&#039;article, passe ton chemin</description>
	<lastBuildDate>Mon, 16 Apr 2012 10:10:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>OpenVPN les doigts dans le nez</title>
		<link>http://michauko.org/blog/2009/09/23/openvpn-les-doigts-dans-le-nez/</link>
		<comments>http://michauko.org/blog/2009/09/23/openvpn-les-doigts-dans-le-nez/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 12:56:27 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[certificat]]></category>
		<category><![CDATA[easy-rsa]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[masquerading]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[shorewall]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=631</guid>
		<description><![CDATA[Mmmmm, j&#8217;angoissais à l&#8217;idée d&#8217;installer à nouveau un serveur OpenVPN en urgence (psychose de la grippe A-H1N1-truc oblige, &#8216;faut que le pékin lambda puisse bosser à distance&#8230;). En effet, la génération des certificats, ce genre de trucs, ça m&#8217;énerve, je ne me souviens jamais des lignes de commandes. Renseignements pris, ça tombe bien, les choses [...]]]></description>
			<content:encoded><![CDATA[<p>Mmmmm, j&#8217;angoissais à l&#8217;idée d&#8217;installer à nouveau un serveur OpenVPN en urgence (psychose de la grippe A-H1N1-truc oblige, &#8216;faut que le pékin lambda puisse bosser à distance&#8230;). En effet, la génération des certificats, ce genre de trucs, ça m&#8217;énerve, je ne me souviens jamais des lignes de commandes.<br />
Renseignements pris, ça tombe bien, les choses ont dû évolué depuis&#8230; euh&#8230; la dernière fois. Et le projet OpenVPN fournit un bel outil &laquo;&nbsp;easy-rsa&nbsp;&raquo; pour générer facilement les clefs serveurs, client, les inscrire dans la base de clefs autorisées, les révoquer etc.<br />
Ca rend OpenVPN installable et exploitable facilement en 10 minutes + le temps de faire un peu de firewalling propre à votre configuration (et de prendre un café).</p>
<p>Toujours à mon habitude, j&#8217;essaye d&#8217;utiliser ce qu&#8217;a fait Debian pour moi. Point de compilation, de création de machin-bidule à la main lorsque ce n&#8217;est pas une absolue nécessité.</p>
<p>Pour le contexte, on va dire que le VPN va être installé sur une machine de type passerelle Internet-LAN. Pourquoi pas une Debian avec shorewall et 2 pattes : loc, net (et $FW of course). Je parlerai rapidement des modifications de firewall à la fin. Vous pouvez trouver une introduction à shorewall sur <a href="http://michauko.org/docs/debian_testing/">ma doc d&#8217;initiation à Debian</a>.<span id="more-631"></span></p>
<p>Je vais développer en 3 parties : <del datetime="2009-09-22T15:20:38+00:00">thèse, anti-thèse, foutaises, comme disait mon prof de philo au siècle dernier </del>installation, paramétrage du serveur, paramétrage du client, firewalling. Ca fait 4 ? bien, au moins y&#8217;en a qui suivent.</p>
<p>Let&#8217;s go.</p>
<h1>Installation de l&#8217;outil</h1>
<p>Ca devient presque rasoir, on commence direct dans le feu de l&#8217;action :</p>
<pre>aptitude install openvpn</pre>
<p>Tout descend par dépendances, comme d&#8217;habitude.<br />
Je n&#8217;ai pas pris de notes, mais je pense qu&#8217;à ce niveau là déjà, une interface réseau &laquo;&nbsp;tun0&#8243; est créée. Le futur sous-réseau du VPN est 10.0.8.x. Le serveur n&#8217;est pas lancé car il n&#8217;a aucune conf. Ca veut dire <code>/etc/openvpn/</code> vide ou pas loin. Et c&#8217;est tant mieux.</p>
<h1>Paramétrage serveur</h1>
<h2>Rappel : permissions</h2>
<p>On va jouer avec les clefs cryptées et les clefs publiques d&#8217;un outil donnant accès à l&#8217;intérieur de votre réseau. Faites un peu attention aux permissions des fichiers.</p>
<blockquote><p>Clef privée = permission limitée au niveau de l&#8217;OS, root:root + chmod 600<br />
Clef publique = root:root + chmod 644<br />
Ce qui ne concerne que le service et son lancement = root:root + chmod 640
</p></blockquote>
<p><em>Notez que le service openvpn sera lancé par root même s&#8217;il tournera au nom d&#8217;un utilisateur &laquo;&nbsp;openvpn&nbsp;&raquo;.</em></p>
<p>Traditionnellement, les clefs privées ont un nom en .key, les certificats publics en .crt.<br />
Notez bien les permissions de votre conf OpenVPN <strong>lorsqu&#8217;on l&#8217;aura monté </strong>et gardez ça à l&#8217;esprit tout le long :</p>
<pre>serveur:/etc/openvpn# ls -l
total 40
-rw-r--r-- 1 root root  1176 2009-09-14 14:46 ca.crt
-rw------- 1 root root   245 2009-09-14 14:47 dh1024.pem
-rw------- 1 root root    16 2009-09-23 08:23 ipp.txt
-rw------- 1 root root   232 2009-09-23 08:32 openvpn-status.log
-rw-r----- 1 root root 10560 2009-09-22 17:02 server.conf
-rwxr-xr-x 1 root root  1352 2008-09-18 00:33 update-resolv-conf
-rw-r--r-- 1 root root  3813 2009-09-14 14:46 vpnserveur.crt
-rw------- 1 root root   887 2009-09-14 14:46 vpnserveur.key</pre>
<p>En résumé, seules la clef publique de l&#8217;autorité de certification et la clef publique du serveur doivent être publiques.</p>
<h2>Présentation rapide de easy-rsa</h2>
<p>&laquo;&nbsp;easy-rsa&nbsp;&raquo; est un ensemble de scripts simplifiant votre vie pour gérer les certificats. Que ce soient ceux du serveur pour créer sa configuration ou ceux de vos postes clients.<br />
<em>Vous savez aussi sans doute qu&#8217;il vous faudra gérer votre base de certificats autorisés (et surtout révoqués). Lorsque le portable de votre collègue est oublié dans le train, il est intéressant d&#8217;être mis au courant dans la seconde pour révoquer le certificat en question. Sinon c&#8217;est la porte d&#8217;entrée dans l&#8217;entreprise, suivant le profil du <del datetime="2009-09-22T15:34:07+00:00">voleur </del>type qui a trouvé le portable.</em><br />
Cet outil descend avec OpenVPN et l&#8217;ensemble des scripts se situe dans <code>/usr/share/doc/openvpn/examples/easy-rsa/2.0/</code>. Il y a une version 1.0. J&#8217;ai opté pour la 2.0. Je ne me suis pas trop documenté sur le sujet.</p>
<p>Il y a un tout petit peu de paramétrage à faire sur easy-rsa.<br />
Je recommande de dupliquer le fichier <code>/usr/share/doc/openvpn/examples/easy-rsa/2.0/vars</code> en <code>/usr/share/doc/openvpn/examples/easy-rsa/2.0/vars.maconf</code> et de travailler dedans.<br />
Je vous montre un &laquo;&nbsp;diff&nbsp;&raquo; entre le fichier d&#8217;origine et le mien. C&#8217;est le minimum syndical à renseigner :</p>
<pre>serveur:/usr/share/doc/openvpn/examples/easy-rsa/2.0# diff -h vars vars.maconf
64,68c64,68
< export KEY_COUNTRY="US"
< export KEY_PROVINCE="CA"
< export KEY_CITY="SanFrancisco"
< export KEY_ORG="Fort-Funston"
< export KEY_EMAIL="me@myhost.mydomain"
---
> export KEY_COUNTRY="FR"
> export KEY_PROVINCE="France"
> export KEY_CITY="Petaouana"
> export KEY_ORG="MaBoite"
> export KEY_EMAIL="adminvpn@maboite.fr"</pre>
<p><strong>Notez : pour utiliser les scripts Easy-RSA, il faut à chaque fois positionner les variables d&#8217;environnement du fichier <code>vars.maconf</code>. Donc, à chaque nouvelle session dans laquelle vous jouez avec les scripts easy-rsa, il faudra commencer par la commande suivante :</strong></p>
<pre>. /usr/share/doc/openvpn/examples/easy-rsa/2.0/vars.maconf #sans oublier le point au début !!!</pre>
<p>.</p>
<p>Le répertoire où sont stockées les clefs générées (et d&#8217;autres choses, liste de certificats, certificats révoqués etc) est le sous-répertoire <code>keys/</code>. Inutile de préciser (?) que ce répertoire doit être archi-protégé :</p>
<pre>serveur:/usr/share/doc/openvpn/examples/easy-rsa/2.0# ls -ld keys
drwx------ 2 root root 4096 2009-09-14 18:22 keys</pre>
<p>Enfin, la première fois uniquement (ou tant que vous testez), vous pouvez nettoyer ce répertoire via la commande <code>./clean-all</code>.</p>
<h2>Création de l&#8217;autorité de certification</h2>
<p>Maintenant que vos &laquo;&nbsp;variables&nbsp;&raquo; sont prêtes et chargées dans votre session, on attaque.<br />
Bien évidemment, cette manip n&#8217;est à faire qu&#8217;une fois. Seule la manip de création de certificats pour vos clients (postes clients) sont à faire X fois.<br />
L&#8217;autorité de certification est &laquo;&nbsp;un nom et des clefs&nbsp;&raquo; signant vos certificats. Un exemple connu est Verisign. Ici, on va signer nous-même. Sur un serveur web, ça ferait des warnings de certificats bidouilleux, ici on s&#8217;en fout.</p>
<pre>./build-ca</pre>
<p>Vous obtenez le baratin standard de génération de clefs, lisez ce qui y est dit et renseignez le &laquo;&nbsp;Common Name&nbsp;&raquo;. Le reste doit descendre du fait du fichier &laquo;&nbsp;vars&nbsp;&raquo; chargé au préalable. <strong>Pour &laquo;&nbsp;Common Name&nbsp;&raquo;, mettez le nom de votre serveur.</strong></p>
<h2>Création de la clef Diffie-Hellman</h2>
<p>La <a href="http://fr.wikipedia.org/wiki/%C3%89change_de_cl%C3%A9s_Diffie-Hellman">clef Diffie-Hellman</a> est une clef permettant au client et au serveur de s&#8217;entendre sur une clef secrète pour crypter la conversation.<br />
Si je me souviens bien, les clefs publiques/privées servent à l&#8217;initialisation de la communication, mais, étant lourdes en calculs, on opte pour un cryptage plus simple pour le reste de la communication. C&#8217;est la clef DH. En gros hein. Et pardon aux puristes. Ou dites moi si je me trompe complètement.</p>
<p>On la génère comme suit, grâce aux script Easy-RSA :</p>
<pre>./build-dh</pre>
<p>Rien à saisir, ça prend juste un peu de temps.</p>
<h2>Génération du certificat serveur</h2>
<p>On continue, pour le dernier élément du serveur : sa propre clef.</p>
<pre>./build-key-server</pre>
<p>(trop cool les scripts Easy-RSA non ?)<br />
Ca sort aussi le baratin standard de génération de clefs. Vous devrez préciser le &laquo;&nbsp;Common Name&nbsp;&raquo;, éventuellement un mot de passe (je ne l&#8217;ai pas fait, je suppose qu&#8217;il demanderait du coup un mot de passe au lancement du service openvpn ; ça peut être contraignant lors de reboot).<br />
Par défaut, votre certificat sera valable 10 ans.<br />
Ca termine par l&#8217;inscription du certificat dans la &laquo;&nbsp;base&nbsp;&raquo; :</p>
<pre>1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated</pre>
<h2>Création des certificats d&#8217;un client</h2>
<p>Rappel : lorsque plus tard, vous créerez un autre certificat pour un autre PC, pensez à &laquo;&nbsp;sourcer&nbsp;&raquo; le fichier <code>vars.maconf</code>.<br />
Le script de génération se lance comme suit :</p>
<pre>./build-key pc123</pre>
<p>Je suggère un nom éloquent rappelant ou bien le PC, ou bien la personne.<br />
Là non plus, rien de sorcier : le &laquo;&nbsp;Common Name&nbsp;&raquo; sera le nom du PC et vous &laquo;&nbsp;committez&nbsp;&raquo; le certificat.</p>
<h2>Création des certificats d&#8217;un client avec mot de passe</h2>
<p>Tout pareil que le paragraphe du dessus, mais le script est <code>./build-key-pass pc123</code><br />
Il faudra alors renseigner le mot de passe là :</p>
<pre>Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:</pre>
<p>Rien à voir avec le &laquo;&nbsp;<code>Challenge password</code>&nbsp;&raquo; demandé plus tard.</p>
<h2>La révocation de certificats</h2>
<p>Si à ce niveau là de la configuration on n&#8217;a pas besoin de révoquer des certificats, ça deviendra obligatoire à mesure que les utilisateurs arriveront, partiront et perdront leur PC portables. Evidemment que c&#8217;est du vécu <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
La commande Easy-RSA est :</p>
<pre>./revoke-full pc123</pre>
<p>Il faut copier le fichier résultant, <strong>après chaque révocation</strong> :</p>
<pre>cp keys/crl.pem /etc/openvpn/</pre>
<p>Ce fichier est lu dès l&#8217;instant que vous avez mis en place l&#8217;option &laquo;&nbsp;crl-verify&nbsp;&raquo; dans votre fichier de conf serveur (voir plus haut).<br />
Notez aussi qu&#8217;il est relu à chaque tentative de connexion. Pas besoin de recharger OpenVPN après une révocation. <strong>Juste de recopier le fichier à jour.</strong> Si vous pensez faire un lien symbolique, attention aux permissions (c&#8217;est l&#8217;utilisateur openvpn qui fait tourner openvpn). Je n&#8217;ai pas testé la solution par lien symbolique.</p>
<p>Vous pourrez consulter la liste des certificats révoqués grâce à la commande :</p>
<pre>openssl crl -in /chemin/vers/keys/crl.pem -text</pre>
<p><em>CRL = Certificate Revocation List</em></p>
<h2>Lancement du service</h2>
<p>A ce niveau là, on a généré tout ce qu&#8217;il faut, mais le service ne tourne pas.<br />
Le contenu de votre sous-répertoire keys ressemble à ça :</p>
<pre>serveur:/usr/share/doc/openvpn/examples/easy-rsa/2.0# ls -l keys/
total 80
-rw-r--r-- 1 root root  3813 2009-09-14 14:06 01.pem
-rw-r--r-- 1 root root  3698 2009-09-14 14:29 02.pem
-rw-r--r-- 1 root root  1176 2009-09-14 14:03 ca.crt
-rw------- 1 root root   887 2009-09-14 14:03 ca.key
-rw-r--r-- 1 root root  3698 2009-09-14 14:29 client_test.crt
-rw-r--r-- 1 root root   668 2009-09-14 14:29 client_test.csr
-rw------- 1 root root   887 2009-09-14 14:29 client_test.key
-rw-r--r-- 1 root root   245 2009-09-14 14:32 dh1024.pem
-rw-r--r-- 1 root root   205 2009-09-14 14:29 index.txt
-rw-r--r-- 1 root root    20 2009-09-14 14:29 index.txt.attr
-rw-r--r-- 1 root root    21 2009-09-14 14:06 index.txt.attr.old
-rw-r--r-- 1 root root   101 2009-09-14 14:06 index.txt.old
-rw-r--r-- 1 root root     3 2009-09-14 14:29 serial
-rw-r--r-- 1 root root     3 2009-09-14 14:06 serial.old
-rw-r--r-- 1 root root  3813 2009-09-14 14:06 vpnserveur.crt
-rw-r--r-- 1 root root   664 2009-09-14 14:05 vpnserveur.csr
-rw------- 1 root root   887 2009-09-14 14:05 vpnserveur.key</pre>
<p>On y retrouve les clefs de l&#8217;autorité de certification (<code>ca*</code>), le certificat serveur (<code>vpnserveur.crt</code> et <code>vpnserveur.key</code>) et un futur poste client (<code>client*.[crt|key]</code>). <em>Les fichiers .csr sont les demandes de signatures, étape intermédiaire de la création des certificats, masquée par l&#8217;enrobage de commandes d&#8217;Easy-RSA. Inutile par la suite</em><br />
Il faut recopier (<strong>avec les bonnes permissions !!!</strong>) les fichiers suivants :</p>
<pre>cp -p dh1024.pem vpnser*crt vpnser*key ca* /etc/openvpn</pre>
<p>Ensuite, on va faire tourner le service sous un utilisateur/groupe sans droit, c&#8217;est mieux côté sécurité.</p>
<pre>groupadd openvpn
useradd -d /dev/null -g openvpn -s /bin/false openvpn</pre>
<p>Enfin, il faut créer le fichier de conf du serveur. Un exemple est donné dans le fichier <code>/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz</code>. Une fois dézippé et mis dans <code>/etc/openvpn</code>, on l&#8217;adapte.<br />
Voici son contenu, sans les commentaires :</p>
<pre>serveur:/etc/openvpn# egrep -v "^$|^#|^;" server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert vpnserveur.crt
key vpnserveur.key  # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.X.0 255.255.255.0"
push "dhcp-option DNS 192.168.X.Y"
push "dhcp-option DOMAIN maboite.net"
push "dhcp-option WINS 192.168.X.Y"
keepalive 10 120
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
verb 3
;crl-verify crl.pem # j'ai triché, j'ai ajouté le ";" il n'aurait pas dû sortir vu la commande egrep passée. Voir ci-dessous.</pre>
<p>Les 4 paramètres <code>push route</code> et <code>push dhcp-option</code> sont à adapter. Ce sont eux qui feront ajouter à votre PC client les règles de routages et DNS, domaine (et optionnellement WINS) à utiliser. Sinon, point de résolution de nom, point de routage depuis votre PC, tantôt vers sa connexion web, tantôt vers le VPN.<br />
Suivant la configuration de votre passerelle, le simple ajout de ces <code>push</code> ne sera pas suffisant pour permettre à vos postes client VPN de rebondir de votre passerelle vers le LAN. Voir plus bas le chapitre dédié.<br />
Enfin, le paramètre &laquo;&nbsp;crl-verify&nbsp;&raquo; prendra son importance avec les révocations de certificats (voir plus bas).<strong>Pour l&#8217;instant, il est en commentaire car j&#8217;ai noté que OpenVPN plantait (volontairement ?) lorsqu&#8217;on lui dit de tenir compte d&#8217;une liste de révocation et que cette liste n&#8217;existe pas, ou est un fichier vide. Ce sera donc à activer plus tard, après votre première révocation.</strong></p>
<p>Ah, j&#8217;oubliais :</p>
<pre>/etc/init.d/openvpn start</pre>
<p>Vérifiez dans les logs que tout va bien. Et <code>ifconfig</code> qui doit avoir affecté une IP à tun0, probablement 10.8.0.1.</p>
<h1>Paramétrage client (poste Windows dans mon cas)</h1>
<p>On a généré un premier ensembles de clefs d&#8217;un poste client.<br />
Dans le cas d&#8217;un PC sous Windows (cas à mon avis le plus courant lorsqu&#8217;il s&#8217;agit de fourni des portables d&#8217;appoint à des utilisateurs distants), installez OpenVPN <a href="http://openvpn.se/download.html">avec le GUI</a>.<br />
Injectez (par un moyen sûr, éviter d&#8217;envoyer la clef cryptée par mail à votre destinataire) les fichiers suivants dans le répertoire <code>C:\Program Files\OpenVPN\config</code> :</p>
<pre>ca.crt # et pas le .key !!!
client_test.key
client_test.crt</pre>
<p>Puis créez un fichier de configuration client nommé <code>nimportequoi.ovpn</code> dans le même sous-répertoire <code>config</code>. Il contiendra la conf suivante, si on oublie les commentaires :</p>
<pre>client
dev tun
proto udp
remote votre.serveur.vpn.votresociete.fr 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client_test.crt
key client_test.key
comp-lzo
verb 3</pre>
<p>Enfin, lancez le GUI d&#8217;OpenVPN situé dans le sous-répertoire <code>bin/</code> d&#8217;OpenVPN, bouton droit dans le &laquo;&nbsp;system tray&nbsp;&raquo; sur l&#8217;icône qui vient d&#8217;apparaitre, menu &laquo;&nbsp;Connect&nbsp;&raquo; et lisez ce qui passe pour commencer à débugger s&#8217;il y a un hic niveau réseau entre le PC portable et le serveur VPN. Attention à vos règles de firewalling en vigueur, que vous testiez de l&#8217;extérieur ou de l&#8217;intérieur (ce qui semble un peu stupide), vous pourriez ne pas être en mesure d&#8217;atteindre le service, d&#8217;où le chapitre ci-dessous.</p>
<h1>Considérations de firewalling</h1>
<p>Bon là, c&#8217;est bien beau, vous atteignez votre serveur VPN depuis l&#8217;extérieur, et encore, si vous avez bien ouvert la porte d&#8217;entrée vers le port UDP 1194 de votre serveur.<br />
Mais pour l&#8217;instant, point de rebond vers le LAN. Et heureusement que ça ne marche pas par défaut.</p>
<h2>Méthode gore pour tester vite fait</h2>
<p>En activant l&#8217;IP Forwarding à la main et en définissant quelques routes entre votre réseau VPN et votre LAN, vous obtiendrez vite fait un résultat. Mais c&#8217;est pas terrible je trouve.<br />
Activation de l&#8217;IP Forwarding comme un cochon :</p>
<pre>echo 1 > /proc/sys/net/ipv4/ip_forward</pre>
<p>Puis définition de routes. Plutôt que de donner un exemple qui ne sera pas le votre, tâchez plutôt de raisonner sur la liste des routes que vous avez et ajoutez celles qu&#8217;il faut, avec les commandes <code>route</code>, <code>route add</code> et <code>route delete</code>.</p>
<h2>Méthode réfléchie pour shorewall</h2>
<p><em>Si vous utilisez iptables, je ne peux rien pour vous. Enfin si, un conseil : songez à utiliser shorewall.</em><br />
Si vous ne connaissez rien à shorewall, c&#8217;est le moment de vous y mettre. Mais dans ce cas, faites vous la main *avant* d&#8217;installer le VPN, quand même. Voyez <a href="http://michauko.org/docs/debian_testing/">ma doc Debian</a> au besoin, il y a un chapitre consacré à shorewall.<br />
Sinon, dans une conf shorewall à 2 pattes (net, loc), on la modifie pour qu&#8217;elle passe à 3 pattes. Dans un cas idéal (mais néanmoins courant), ça se passera comme ça :</p>
<ul>
<li>Ajout de la ligne <code>vpn     ipv4</code> dans <code>/etc/shorewall/zones</code>.</li>
<li>Ajout de la ligne <code>vpn     tun0            detect</code> dans <code>/etc/shorewall/interfaces</code></li>
<li>Ajout de la ligne <code>eth0    tun0</code> dans <code>/etc/shorewall/masq</code> pour activer le Masquerading entre votre VPN et votre LAN, ici situé sur l&#8217;interface eth0</li>
<li>Ajout de toutes les règles par défaut dans <code>/etc/shorewall/policy</code>, concernant la probable interdiction par défaut d&#8217;aller de n&#8217;importe quelle zone vers le VPN et réciproquement. Le VPN doit en effet, à mon avis, être un moyen de secours pour donner accès à quelques services internes, pas à tout le LAN. A base de <code>vpn loc REJECT info</code> + réciproque.</li>
<li>Enfin, le vrai travail, l&#8217;ouverture du minimum d&#8217;autorisation entre toutes vos zones et le VPN. J&#8217;y consacre le paragraphe suivant.</li>
</ul>
<h2>Ouvertures minimum sur le firewall</h2>
<p>En considérant net=eth1 ; loc=eth0 et vpn=tun0, voici ce qu&#8217;il faudra ajouter au minimum, à mon avis :<br />
Déjà l&#8217;accessibilité du service VPN depuis le NET :</p>
<pre>ACCEPT          net     $FW         udp     openvpn</pre>
<p>Ensuite des règles du VPN vers le LAN :</p>
<pre>ACCEPT          vpn     loc:$dns1      tcp     domain # sinon on ne touche pas le serveur DNS => pas de résol de nom => problème...
ACCEPT          vpn     loc:$dns1      udp     domain # je ne sais pas s'il faut le TCP ou l'UDP. Oops.
Ping/ACCEPT     vpn     loc # pratique pour du dépannage
ACCEPT          vpn     loc:$leserveurapplicatif1 # c'est un exemple
ACCEPT          vpn     loc:$leserveurapplicatif2 tcp 80 # un exemple plus restreint, limité au port http
</pre>
<p>Les variables &laquo;&nbsp;$dns1&#8243; (par exemple), sont à définir dans <code>/etc/shorewall/params</code>, ou alors vous tapez l&#8217;IP en dur.</p>
<p>Et enfin quelques accès minimums vers la passerelle elle-même :</p>
<pre>Ping/ACCEPT     $FW     vpn # pratique pour les tests
SSH/ACCEPT      vpn     $FW # pour les admins tout au moins ?
ACCEPT          vpn     $FW     tcp     80 # s'il y a des intranets à consulter (outil de supervision, par exemple)
</pre>
<p>A noter aussi, pour le Masquerading, de forcer l&#8217;activer (valeur &laquo;&nbsp;On&nbsp;&raquo;) ou de laisser tel quel (valeur &laquo;&nbsp;Keep&nbsp;&raquo;) l&#8217;IP forwarding. Ca se passe dans <code>/etc/shorewall/shorewall.conf</code>, paramètre IP_FORWARDING.<br />
Il me semble que c&#8217;est ce paramètre qui force ou pas la modification du paramètre noyau <code>/proc/sys/net/ipv4/ip_forward</code>. Il me semble.</p>
<p>Voilà. Ca devrait marcher.<br />
Evidemment, comme c&#8217;est fortement lié à toute votre infrastructure réseau, tout ce qui précède est plutôt un guide des trucs-à-pas-oublier-pour-que-ça-marche.</p>
<h1>Divers</h1>
<h2>Ce que je n&#8217;ai pas abordé</h2>
<ul>
<li>Testez avant de déployez !!!! notamment les certificats révoqués, et avec eux la CRL et l&#8217;option <code>crl-verify</code>.</li>
<li>Il y a une notion de règles de routages paramétrables par certificat client. Ca peut être utile.</li>
<li>Vous utilisez Orange Business Everywhere pour votre clef 3G ? attention, ça semble intercaler un proxy sur votre Internet Explorer. Résultat, l&#8217;accès à des Intranets via le VPN ne marchait pas. Firefox passait bien. Je n&#8217;ai pas creusé plus pour l&#8217;instant.</li>
</ul>
<h2>Comportement lors d&#8217;une connexion avec un certificat révoqué </h2>
<p>Côté serveur, on voit cette discrète ligne dans /var/log/syslog :</p>
<pre>Sep 23 11:57:49 gw ovpn-server[24224]: 192.X.Y.Z:1120 CRL CHECK FAILED: /C=FR/ST=France/L=Petaouana/O=SOCIETE/CN=pctest/emailAddress=adminvpn@chezmoi.fr is REVOKED</pre>
<p>Côté client, c&#8217;est moins flagrant, on tourne en rond et tente de se reconnecter.<br />
Peut-être qu&#8217;en montant le niveau de verbosité (paramètre verb), on en saurait plus. Mais à la limite, ça intéresse qui ? (à part l&#8217;utilisateur qui s&#8217;est fait révoquer son certificat par erreur).</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/09/23/openvpn-les-doigts-dans-le-nez/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Bloquer Hamachi au niveau shorewall et squid</title>
		<link>http://michauko.org/blog/2008/09/17/bloquer-hamachi-au-niveau-shorewall-et-squid/</link>
		<comments>http://michauko.org/blog/2008/09/17/bloquer-hamachi-au-niveau-shorewall-et-squid/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 16:11:50 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[hamachi]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[shorewall]]></category>
		<category><![CDATA[squid]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=146</guid>
		<description><![CDATA[Sympa Hamachi, j&#8217;en parlais dans un précédent billet pour l&#8217;aspect &#171;&#160;je joue en réseau avec mes potes&#160;&#187;. => Aujourd&#8217;hui, j&#8217;en parle pour bloquer cette saloperie d&#8217;outil qui peut apporter de gros ennuis au boulot Pour rappel, c&#8217;est un VPN &#171;&#160;zero-conf&#160;&#187; qui permet à l&#8217;utilisateur nullissime en informatique (c&#8217;est-à-dire que vous n&#8217;avez rien besoin de connaître [...]]]></description>
			<content:encoded><![CDATA[<p>Sympa Hamachi, j&#8217;en parlais <a href="http://michauko.org/blog/2007/09/21/hamachi-client-vpn-zero-conf-pour-faire-plein-de-belles-vilaines-choses/">dans un précédent billet</a> pour l&#8217;aspect &laquo;&nbsp;je joue en réseau avec mes potes&nbsp;&raquo;.</p>
<p>=> Aujourd&#8217;hui, j&#8217;en parle pour bloquer cette saloperie <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  d&#8217;outil qui peut apporter de gros ennuis au boulot <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pour rappel, c&#8217;est un VPN &laquo;&nbsp;zero-conf&nbsp;&raquo; qui permet à l&#8217;utilisateur nullissime en informatique (c&#8217;est-à-dire que vous n&#8217;avez rien besoin de connaître en info pour installer/utiliser ce truc) d&#8217;installer un VPN pour atteindre ses copains au boulot ou son PC chez lui. Au-delà de ça, ça peut rapidement se transformer en une passerelle entre un réseau bien sale (celui de l&#8217;utilisateur lambda chez lui, nul en informatique je le rappelle) et votre entreprise. D&#8217;où problèmes. D&#8217;où envie de donner des baffes.</p>
<p>Voici comment le bloquer (du moins maintenant il ne passe plus à mon boulot et pourtant il essaye &#8211; donc je dois avoir fait le tour de la question), tant au niveau shorewall &#8211; si l&#8217;accès Internet est direct &#8211; qu&#8217;au niveau squid si vos utilisateurs <strong>*doivent*</strong> passer par le proxy pour atteindre Internet.</p>
<h1>Analyse à 2 balles du comportement de hamachi pour mieux le bloquer</h1>
<p>Au départ, <a href="http://www.hamachi.cc/">installez hamachi</a> pour tester. Ca devrait se connecter sans problème. Je pense qu&#8217;il va chercher la conf proxy dans les paramètres de IE.<br />
C&#8217;est typiquement le genre d&#8217;outils qui a prévu tout un tas de modes de connexions genre :<br />
- essayer tout un tas de ports standards<br />
- avoir plein de noms de machines pour atteindre le serveur par plusieurs chemins</p>
<p>MAIS, comme c&#8217;est un outil avec un point central (le serveur chez eux pour s&#8217;authentifier &#8211; puisque ça a une vocation commerciale, payante, tout ça), on peut à un moment donné repérer tous les serveurs centraux et les bloquer. C&#8217;est pas comme pour des protocoles décentralisés type peer-to-peer.<br />
Bon après, s&#8217;ils changent leurs noms ou IP tout le temps, ça peut devenir pénible.</p>
<p>Une fois connecté, allez voir vos logs squid, vous devriez voir tout un tas de requêtes du style :</p>
<pre>1221661590.889 350758 votre.ip.sur.lan TCP_MISS/200 3734 CONNECT ssl-24.hamachi.cc:443 - DIRECT/74.201.74.26 -</pre>
<p>De là, avec quelques commandes <code>hosts</code>, genre :</p>
<pre>for i in `seq -f '%02g' 1 40`
do
host ssl-$i.hamachi.cc
done</pre>
<p>Ainsi que :</p>
<pre>for i in `seq 1 255`
do
host 74.201.74.$i
done</pre>
<p>Ce qui donne :</p>
<pre>...
103.74.201.74.in-addr.arpa domain name pointer ns3.3amlabs.com.
104.74.201.74.in-addr.arpa domain name pointer www02-09.logmein.com.
105.74.201.74.in-addr.arpa domain name pointer www02-09.logmein.com.
106.74.201.74.in-addr.arpa domain name pointer www02-09.logmein.com.
...</pre>
<p>Vous verrez qu&#8217;en gros, la plage IP 74.201.74.0/24 est à eux et qu&#8217;avec 4/5 noms de domaines génériques, vous pourrez tout bloquer.</p>
<h1>Blocage niveau shorewall</h1>
<p>En considérant que votre shorewall fonctionne bien, vous pouvez soit blacklister dans le fichier <code>/etc/shorewall/blacklist</code> (si vous avez bien activé l&#8217;option &laquo;&nbsp;blacklist&nbsp;&raquo; dans le fichier <code>/etc/shorewall/interfaces</code>), soit faire une règle dans <code>/etc/shorewall/rules</code>.<br />
Dans &laquo;&nbsp;blacklist&nbsp;&raquo;, ajoutez la ligne :</p>
<pre>74.201.74.0/24</pre>
<p><strong>Ou, </strong>dans &laquo;&nbsp;rules&nbsp;&raquo;, ajoutez :</p>
<pre>DROP    lan     net:74.201.74.0/24      all
</pre>
<p>Relancez shorewall via <code>/etc/init.d/shorewall reload</code></p>
<h1>Blocage niveau Squid</h1>
<p>Allez dans le fichier <code>/etc/squid/squid.conf</code> et à l&#8217;endroit où sont définies des &laquo;&nbsp;ACL&nbsp;&raquo;, ajoutez celles-ci &#8211; c&#8217;est un exemple à adapter.</p>
<pre>acl tout_mon_lan src 172.16.0.0/255.255.0.0
acl vilain_hamachi dstdomain .hamachi.cc .logmeinhamachi.com .logmein.com .3amlabs.com logmeinrescue.com logmeinrescue-enterprise.com
http_access deny tout_mon_lan vilain_hamachi</pre>
<p>Ici je me base sur les noms de domaines, pas les IP. C&#8217;est un choix motivé par le fait que le client hamachi semble tenter des noms de machines, pas des IP. A voir si l&#8217;éditeur fait évoluer ça dans le temps.<br />
Et pensez à recharger squid : <code>/etc/init.d/squid reload</code></p>
<h1>Validez que ça ne marche plus</h1>
<p>Retestez la connexion à Hamachi. Vous devriez le voir s&#8217;exciter dans les logs squid sur quelques ssl-xx.hamachi.cc pris au hasard puis plus rien :</p>
<pre>1221666080.309      0 votre.ip.sur.lelan TCP_DENIED/403 1441 CONNECT ssl-14.hamachi.cc:443 - NONE/- text/html
1221666199.615      0 votre.ip.sur.lelan TCP_DENIED/403 1441 CONNECT ssl-15.hamachi.cc:443 - NONE/- text/html
1221666283.816      5 votre.ip.sur.lelan TCP_DENIED/403 1441 CONNECT ssl-13.hamachi.cc:443 - NONE/- text/html</pre>
<p>En images, ça reste sur ça :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2008/09/hamachi_bloque1.png'><img src="http://michauko.org/blog/wp-content/uploads/2008/09/hamachi_bloque1.png" alt="Hamachi bloqué" title="Hamachi bloqué" width="206" height="342" class="alignleft size-full wp-image-148" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/09/17/bloquer-hamachi-au-niveau-shorewall-et-squid/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>OpenVPN, OpenVPN GUI, droits admin et &#171;&#160;add route&#160;&#187;&#8230;</title>
		<link>http://michauko.org/blog/2008/04/03/openvpn-openvpn-gui-droits-admin-et-add-route/</link>
		<comments>http://michauko.org/blog/2008/04/03/openvpn-openvpn-gui-droits-admin-et-add-route/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 13:45:41 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[add route]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/2008/04/03/openvpn-openvpn-gui-droits-admin-et-add-route/</guid>
		<description><![CDATA[Si vous avez besoin de donner un accès OpenVPN sur des PC Windows à des personnes n&#8217;étant pas admin de leur poste (ce qui est largement raisonnable), il y a 2/3 pièges. Je vous fais part de mes recherches sur le sujet. Au final, c&#8217;est possible. Ouf ! Les pièges sont : - pouvoir accéder [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous avez besoin de donner un accès OpenVPN sur des PC Windows à des personnes n&#8217;étant pas admin de leur poste (ce qui est largement raisonnable), il y a 2/3 pièges. Je vous fais part de mes recherches sur le sujet. Au final, c&#8217;est possible. Ouf !<br />
Les pièges sont :<br />
- pouvoir accéder à l&#8217;interface virtuelle en tant que non-admin<br />
- pouvoir ajouter des routes en tant que non-admin<br />
- pouvoir utiliser proprement le OpenVPN GUI en tant que non-admin.</p>
<h1>Accéder à l&#8217;interface réseau virtuelle</h1>
<p>OpenVPN 2.0 ne permet pas d&#8217;exploiter la carte virtuelle si vous n&#8217;êtes pas admin, d&#8217;après ce que j&#8217;en comprends vu la remarque sur la version 2.1 <a href="http://openvpn.net/index.php/downloads.html">sur le site</a> : </p>
<pre>TAP-Win32 adapter can now be opened from non-administrator mode</pre>
<p>En fait sur ce sujet, avec OpenVPN 2.0, je ne sais plus si j&#8217;avais simplement un problème pour accéder à l&#8217;interface virtuelle ou pour créer des &laquo;&nbsp;routes&nbsp;&raquo; ou les 2. J&#8217;ai opté pour la 2.1 RC7 (et tant pis si ce n&#8217;est pas la finale).</p>
<p>Pour résoudre à coup sûr ce problème, utilisez la version 2.1.</p>
<h1>Ajouter des &laquo;&nbsp;routes&nbsp;&raquo;</h1>
<p>Une fois que l&#8217;utilisateur sans droit est capable de lancer l&#8217;openvpn, vous vous chopez des erreurs sur vos routes ajoutées dans la conf de votre VPN histoire que tout ce petit monde communique avec le reste de votre infra. En effet, sous Windows, le &laquo;&nbsp;add route&nbsp;&raquo; est réservé à l&#8217;admin&#8230; ou plus simplement aux personnes du groupe &laquo;&nbsp;Opérateurs de configuration réseau&nbsp;&raquo;.<br />
Donc ajoutez vos utilisateurs sans droits là-dedans. Ils ne seront pas admin complet mais pourront déjà abîmer leur configuration réseau&#8230;</p>
<h1>Impossible d&#8217;écrire des logs par le GUI</h1>
<p>Si vous avez cette erreur, pensez à donner les droits d&#8217;écriture sur tout le répertoire <code>C:\Program Files\OpenVPN\log</code>, pour tout le monde, ou, moins bourrin, pour votre utilisateur.<br />
Notez : le GUI OpenVPN est intégré à OpenVPN 2.1 maintenant. Ce n&#8217;est pas le cas avec le package 2.0</p>
<p>Cette fois, c&#8217;est bon, votre utilisateur presque-sans-droit peut faire du VPN et massacrer involontairement votre LAN depuis chez lui&#8230; :/</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/04/03/openvpn-openvpn-gui-droits-admin-et-add-route/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hamachi : client VPN zero-conf pour faire plein de belles (vilaines ?) choses</title>
		<link>http://michauko.org/blog/2007/09/21/hamachi-client-vpn-zero-conf-pour-faire-plein-de-belles-vilaines-choses/</link>
		<comments>http://michauko.org/blog/2007/09/21/hamachi-client-vpn-zero-conf-pour-faire-plein-de-belles-vilaines-choses/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 16:07:55 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[jeux]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[hamachi]]></category>
		<category><![CDATA[tun]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/2007/09/21/hamachi-client-vpn-zero-conf-pour-faire-plein-de-belles-vilaines-choses/</guid>
		<description><![CDATA[Hamachi est un client VPN zero-conf. En gros, vous êtes censé installer le bazar et point, votre VPN est monté, vos amis vous trouvent par magie, l&#8217;être cher revient, l&#8217;argent coule à flot et vous retrouvez la sérénité intérieure. Dans la pratique, y&#8217;a tout de même un peu plus à faire et tout cela mérite [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.hamachi.cc/">Hamachi</a> est un client VPN zero-conf. En gros, vous êtes censé installer le bazar et point, votre VPN est monté, vos amis vous trouvent par magie, l&#8217;être cher revient, l&#8217;argent coule à flot et vous retrouvez la sérénité intérieure.<br />
Dans la pratique, y&#8217;a tout de même un peu plus à faire et tout cela mérite quelques explications.</p>
<p>Au fait à quoi ça sert ? En gros un VPN à la maison, ça sert en général à des groupes d&#8217;amis un peu geeks voulant vraiment avoir leur VPN flottant au-dessus d&#8217;Internet pour s&#8217;échanger des fichiers facilement, avoir leurs réseaux fermés de je ne sais quoi.</p>
<p>Si maintenant on imagine que ce réseau fermé est &#8211; exemple tout à fait au hasard <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  &#8211; un serveur de jeu que vous voulez rendre accessible comme si vous étiez en LAN, alors que vous êtes sur Internet, certains trouveront cet outil complètement génialissime. Va savoir pourquoi&#8230; <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Enfin, si j&#8217;ai choisi Hamachi, c&#8217;est parce-que VOUS êtes quelqu&#8217;un aimant un peu l&#8217;informatique (sinon vous ne liriez pas cet article) et que vos amis joueurs sont des buses en informatique (cas classique). Ainsi, si vous leur demander d&#8217;installer un client VPN hyper compliqué, vous n&#8217;êtes pas près de jouer&#8230;</p>
<p>En relisant, je vois que l&#8217;article est long. Comme quoi, &laquo;&nbsp;zero-conf&nbsp;&raquo; <=> beaucoup d&#8217;explications. Allez, visite guidée.<span id="more-71"></span></p>
<p>Je vais décrire ce cas : un serveur de jeu (quel qu&#8217;il soit) sur un Linux, configuré pour un LAN, que je souhaite rendre accessible sur Internet à mes amis via ce VPN (donc comme si j&#8217;étais en LAN). Je vais donc vous expliquer trois choses. Premièrement : comment installer le client sur Linux et créer votre réseau d&#8217;amis. Deuxièmement : comment installer le client sur Windows et rejoindre votre réseau. Enfin, tout au long de la doc, quelques considérations de sécurité, des concepts derrière Hamachi etc.<br />
Notamment, si je ne parle pas de serveur Hamachi, c&#8217;est parce-qu&#8217;il n&#8217;y en a pas. Si j&#8217;ai bien tout compris, la mise en relation des utilisateurs (vous et vos amis) entre eux passe à un moment donné par un point central (chez l&#8217;éditeur d&#8217;Hamachi je suppose). Mais ce n&#8217;est pas pour autant ques tous les utilisateurs du VPN Hamachi peuvent se voir (il faut se donner l&#8217;accord mutuel). C&#8217;est un peu la seule solution pour rendre le tout &laquo;&nbsp;zero-conf&nbsp;&raquo;. Ensuite, les transferts passent en direct évidemment.</p>
<p>La plupart des trucs que je raconte sort des README et de la doc d&#8217;Hamachi, mais comme vous ne le lisez pas (ou que vous ne comprenez rien à l&#8217;anglais) et que, même en ayant lu tout ça, ça reste un peu opaque sans pratiquer, je vous commente la chose avec un exemple de bout en bout.</p>
<p>J&#8217;oubliais : ce n&#8217;est pas opensource mais c&#8217;est gratuit dans la limite de création de réseaux de 16 personnes (je crois).</p>
<p>Enfin, si vous voulez comprendre le principe avant de mettre en place, survolez tout l&#8217;article avant d&#8217;envoyer la purée <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Les différences entre Hamachi Linux et Windows sont :</strong></p>
<ul>- Sous Linux, il n&#8217;y pas d&#8217;interface graphique pour Hamachi</ul>
<ul>- Sous Linux, il faudra créer votre brin VPN à la main (3/4 commandes à recracher telles quelles)</ul>
<ul>- Sous Linux, il faudra balancer 3/4 commandes (simples) pour créer votre &laquo;&nbsp;compte&nbsp;&raquo; et votre réseau</ul>
<ul>- Sous Windows, tout cela sera graphique et automagique</ul>
<ul>- Sous Windows, vous faites tourner des serveurs de jeux vous ? Je serais surpris. Ben zappez la partie Linux dans ce cas.</ul>
<p><strong>Le principe d&#8217;Hamachi (valable pour Linux et Windows) :</strong></p>
<p>Vous allez vous créer un compte, identifié par une couple de clef de cryptage (pensez à les sauvegarder si vous réinstaller votre PC ou votre serveur Linux). Vous vous donnerez un surnom et le système Hamachi vous donnera une IP privée (de la plage 5.x.y.z) qui vous caractérise sur le VPN. En fait, tous les utilisateurs Hamachi sont plus ou moins tous le même VPN (puisqu&#8217;on a tous une IP 5.x.y.z qu&#8217;on ne contrôle pas et puisqu&#8217;on passe à un moment par un serveur Hamachi pour se connecter etc).<br />
Sauf que, histoire que ce ne soit pas une poubelle géante (un réseau interconnectant des gens entre eux qui ne le souhaitent pas), vous ne pouvez pas communiquer avec une IP 5.x.y.z (qu&#8217;elle corresponde ou non à un compte Hamachi) si vous ne faites pas partie d&#8217;un &laquo;&nbsp;réseau&nbsp;&raquo; (sorte de <em>channel</em> sur IRC si on voulait comparer &#8211; ou une <em>chatroom</em> à la limite), réseau protégé par un mot de passe et pour lequel n&#8217;existe aucune liste mentionnant son existence.<br />
En gros, si votre réseau s&#8217;appelle chezmoionsamuse, que le pass n&#8217;est pas trop bidon, il n&#8217;y a aucune chance qu&#8217;un intrus vienne vous perturber par hasard (je suppose). Si vous voulez vous en convaincre, finissez de mettre en place le bazar et essayez des ping sur des IP au hasard, ou mieux, sur l&#8217;IP 5.x.y.z d&#8217;un ami nouvellement inscrit (avant qu&#8217;il ait rejoint votre réseau et après qu&#8217;il l&#8217;ai fait).<br />
De plus, sous Linux, votre firewall refusera toute communication par défaut, je décrirai comment autoriser ce qu&#8217;il faut plus bas (notamment pour atteindre le serveur de jeu, c&#8217;est le but de mon exemple).<br />
Sous Windows, ça semble grand ouvert par défaut (encore une fois, aux personnes figurant sur un réseau où vous êtes vous-mêmes).<br />
Pas la peine de flipper, ça semble bien pensé à ce niveau-là.</p>
<p><strong>Sous Linux : installation de l&#8217;application</strong><br />
<a href="https://secure.logmein.com/products/hamachi/download.asp">Téléchargez l&#8217;outil</a>, décompressez l&#8217;archive quelque part, passez root et faites ceci :</p>
<pre>root$ make install

Copying hamachi into /usr/bin ..
Creating hamachi-init symlink ..
Compiling tuncfg ..
Copying tuncfg into /sbin ..

Hamachi is installed. See README for what to do next.</pre>
<p>En gros, vous venez de vous rajouter un binaire <code>/sbin/tuncfg</code> qui va servir à exploiter une carte réseau virtuelle, votre brin VPN.</p>
<p><strong>Sous Linux : installation de ce qu&#8217;il faut pour exploiter les tunnels virtuels</strong><br />
Votre noyau Linux doit avoir chargé le module &laquo;&nbsp;tun&nbsp;&raquo; (<a href="http://vtun.sourceforge.net/tun/faq.html">plus d&#8217;infos là</a>). Le plus simple est de charger le module grâce à l&#8217;outil <code>modconf</code> (<code>apt-get install modconf</code>). Ca donne ça :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2007/09/20070920_160631.png' title='modconf tun'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/20070920_160631.thumbnail.png' alt='modconf tun' /></a><br />
Si vous ne trouvez pas ce module, c&#8217;est que votre noyau est compilé main (et vous avez fait l&#8217;impasse sur plein de choses) ou que votre distribution Linux est naze <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Dans ce cas, recompilez-en un avec ce module (démerdez-vous un peu).<br />
Pour vérifier qu&#8217;il est chargé :</p>
<pre>$ lsmod | grep tun
tun                    11776  0</pre>
<p>Avec <code>modconf</code>, ce module sera chargé à chaque boot.</p>
<p>Il faut ensuite créer à la main (une seule fois) un périphérique réseau qui sera exploité pour ces tunnels. Si vous tapez actuellement <code>tuncfg</code> (en tant que root), vous obtenez :</p>
<pre>root$ tuncfg
tuncfg: cannot stat() /dev/net/tun -- No such file or directory
tuncfg: visit http://www.hamachi.cc/tuntap for more information</pre>
<p>Donc, en root, tapez ceci :</p>
<pre>root$ mkdir /dev/net
root$ mknod /dev/net/tun c 10 200</pre>
<p>Alors le lancement de <code>tuncfg</code> ne dit plus rien (preuve qu&#8217;il s&#8217;est bien lancé, faites un <code>ps</code> pour contrôler)</p>
<p><strong>Optionnel sous Linux : comment faire en sorte que <code>tuncfg</code> soit chargé au reboot ?</strong><br />
Si vous n&#8217;avez pas envie de devoir relancer à chaque reboot la commande <code>tuncfg</code>, vous pouvez par exemple créer un script qui sera appelé au boot. Je ne détaille pas le principe sous Linux, juste la procédure. Faites des <code>man</code> sur les commandes utilisées si vous êtes curieux.<br />
Créez un fichier <code>/etc/init.d/hamachi_tuncfg</code> avec les permissions d&#8217;exécution, contenant :</p>
<pre>#!/bin/sh
#script simple pour /etc/init.d de demarrage de tuncfg pour HAMACHI
#auteur : michauko

test -x /sbin/tuncfg || exit 0
. /lib/lsb/init-functions

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

case "$1" in
  start)
        log_daemon_msg "Demarrage TUNCFG pour HAMACHI" "tuncfg"
        if start-stop-daemon --start --quiet --oknodo --exec /sbin/tuncfg ; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;
  stop)
        log_daemon_msg "Arret TUNCFG pour HAMACHI" "tuncfg"
        if start-stop-daemon --stop --quiet --oknodo --name tuncfg ; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

  restart)
        log_daemon_msg "Redemarrage TUNCFG pour HAMACHI" "tuncfg"
        start-stop-daemon --stop --quiet --oknodo --retry 30 --name tuncfg
        if start-stop-daemon --start --quiet --oknodo --exec /sbin/tuncfg ; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

  *)
        log_action_msg "Usage: /etc/init.d/hamachi_tuncfg {start|stop|restart}"
        exit 1
esac

exit 0</pre>
<p>Ensuite, on crée les raccourcis qui vont bien dans les runlevels :</p>
<pre># <strong>update-rc.d  hamachi_tuncfg defaults</strong>
 Adding system startup for /etc/init.d/hamachi_tuncfg ...
   /etc/rc0.d/K20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc1.d/K20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc6.d/K20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc2.d/S20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc3.d/S20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc4.d/S20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc5.d/S20hamachi_tuncfg -> ../init.d/hamachi_tuncfg</pre>
<p>Pour simuler le reboot, appelez la commande <code>/etc/init.d/hamachi_tuncfg start</code> (ou stop ou restart). Contrôlez la (non-)présence du processus avec <code>ps</code>.</p>
<p>Voilààààà, tout est prêt au niveau de l&#8217;OS Linux pour lancer Hamachi.</p>
<p><strong>Lancement et utilisation de Hamachi sous Linux :</strong></p>
<p>Maintenant que la partie technique est faite (cf. les paragraphes ci-dessus), il faut vous créer un compte. Cette fois, vous allez utilisez un compte utilisateur &laquo;&nbsp;normal&nbsp;&raquo; (ie, pas root). Par exemple, pour en revenir au serveur de jeu, le compte de l&#8217;utilisateur qui héberge ledit serveur. La commande &#8211; à faire une seule fois &#8211; est la suivante :</p>
<pre>toto$ <strong>hamachi-init</strong>
Initializing Hamachi configuration (/home/toto/.hamachi). Please wait ..

  generating 2048-bit RSA keypair .. ok
  making /home/toto/.hamachi directory .. ok
  saving /home/toto/.hamachi/<strong>client.pub</strong> .. ok
  saving /home/toto/.hamachi/<strong>client.pri</strong> .. ok
  saving /home/toto/.hamachi/state .. ok

Authentication information has been created. Hamachi can now be started with
'hamachi start' command and then brought online with 'hamachi login'.</pre>
<p>Ensuite, les commandes suivantes servent à chaque fois que vous voulez vous connecter au &laquo;&nbsp;système Hamachi&nbsp;&raquo; (avant de lancer votre serveur de jeu par exemple).</p>
<p>D&#8217;abord lancer hamachi :</p>
<pre>toto$ <strong>hamachi start</strong>
Starting Hamachi hamachi-lnx-0.9.9.9-20 .. ok</pre>
<p>Puis vous connecter (passer &laquo;&nbsp;online&nbsp;&raquo;) :</p>
<pre>toto$ <strong>hamachi login</strong>
Logging in ....>....... ok</pre>
<p>Si vous voulez connaitre votre IP sur le VPN (<strong>c&#8217;est-à-dire à quelle adresse sera hébergée votre serveur de jeu</strong>), faites un :</p>
<pre>toto$ <strong>cat ~/.hamachi/state</strong>
Identity   <strong>5.168.x.y</strong> <em><---- c'est elle l'IP, c'est là que vos amis iront pour atteindre serveur "LAN sur Internet"</em>
Nickname   votre_nick_quand_vous_l_aurez_choisi
AutoLogin  yes
OnlineNet  vos_reseaux_lorsque_vous_en_aurez_crees_ou_rejoints</pre>
<p>Ensuite, choisissez-vous un beau nickname (à faire une seule fois, sauf pour en changer) :</p>
<pre>toto$ hamachi set-nick toto_qui_hoste_le_serveur_de_jeu
Setting nickname .. ok</pre>
<p>Ensuite, il faut créer un réseau. <strong>A noter que celui qui crée le réseau sera le seul à avoir le droit de le détruire ou de kicker des gens. Donc je suggère que le compte qui héberge le serveur de jeu soit celui qui crée ce réseau (rappel : ce réseau = ce point de ralliement, ce <em>channel</em>). </strong>Ca se fait comme ça :</p>
<pre>toto$ hamachi create mon_reseau mon_mot_de_passe
Creating mon_reseau .. ok</pre>
<p>Vous pouvez lister les personnes présentes (d&#8217;une part inscrites, d&#8217;autre part connectées ou non). Pour l&#8217;instant ce sera vide :</p>
<pre>toto$ hamachi list
   [mon_reseau]</pre>
<p>Vous-même n&#8217;êtes pas encore connecté à ce réseau (sinon il y aurait une &laquo;&nbsp;*&nbsp;&raquo; devant [mon_reseau]). Pour ce faire :</p>
<pre>toto$ hamachi go-online mon_reseau
Going online in mon_reseau .. ok</pre>
<p>(Ca vous demandera le mot de passe, évidemment).</p>
<p>Lorsque tous vos amis joueurs, sous Windows, auront rejoint votre réseau, ça ressemblera plutôt à :</p>
<pre>toto$ hamachi list
 * [mon_reseau]
       * 5.90.x.y       fredo                     83.a.b.c:1043
          5.168.d.e     warlord
        * 5.63.e.f       autrepote               82.g.h.i:1077</pre>
<p>Les &laquo;&nbsp;*&nbsp;&raquo; signifient que les gens sont connectés, vous avez leur IP VPN et leur IP Internet en fin de ligne. Si vous ne voyez pas les surnoms, il faut lancer la commande <code>hamachi get-nicks</code>.</p>
<p>Voilà vous savez tout.</p>
<p>Quelques autre commandes avant que je n&#8217;oublie, voyez :</p>
<pre><strong>toto$ hamachi --help</strong>
Hamachi, a zero-config virtual private networking utility, ver 0.9.9.9-20

  usage: hamachi [-c <cfg_path>] [command]

  -c         overrides default configuration directory (~/.hamachi)
  command    specifies an action. Can be one of the following -

             #  start [debug]
                stop
             #  set-nick <nickname>
                login
                logout
             #  list
                get-nicks
             #  create <network> [
<password>]
                delete <network>
                evict  <network> <5.x.x.x>
             #  join   <network> [
<password>]
                leave  <network>
             #  go-online <network>
                go-offline <network>

  If no command is specified, hamachi displays its status including version,
  pid, online status and the nickname</pre>
<p>et aussi, pour quitter Hamachi, le plus brutal est :</p>
<pre>toto$ hamachi stop
Shutting down .. ok</pre>
<p>Ca sauvegarde votre état, à savoir : online/offline, les réseaux auxquels vous étiez connectés etc. Vous pouvez quitter d&#8217;abord proprement tout ça (c&#8217;est pas utile) avec des commandes style <code>hamachi logoff</code> et <code>hamachi go-offline mon_reseau</code> (pour rejoindre un réseau : <code>hamachi go-online mon_reseau</code>).</p>
<p>Bon voilà, vous savez tout sous Linux pour :</p>
<ul>- mettre en place hamachi</ul>
<ul>- créer votre compte, vous connecter</ul>
<ul>- créer votre réseau et vous y (dé)connecter</ul>
<ul>- voir qui est dessus</ul>
<ul>- <strong>et surtout : connaitre votre IP sur le VPN, IP qui sera à donner à tout le monde pour joindre votre serveur.</strong></ul>
<p><strong>Sous Linux : quoi faire sur le firewall ?</strong></p>
<p>Si vous avez déjà des amis sous Hamachi sous Windows, vous verrez que ces amis n&#8217;arrivent pas à &laquo;&nbsp;ping-er&nbsp;&raquo; l&#8217;IP du VPN de l&#8217;utilisateur Hamachi sous Linux (donc potentiellement ils ne pourront pas joindre votre serveur de jeu).<br />
Il faut ouvrir le firewall proprement.<br />
En effet, sans ça, si vous tentez des ping dans un sens ou dans l&#8217;autre (depuis votre compte Hamachi Linux et depuis un compte que vous aurez sur une autre machine Windows par exemple), vos logs risquent de vous dire quelque chose comme ça :</p>
<pre>Listed by source hosts:
 Rejected 5 packets on interface <strong>ham0</strong>
    From 5.x.y.z - 4 packets
       To 5.a.b.c - 4 packets
          Service: 8 (icmp/8) (Shorewall:INPUT:REJECT:) - 1 packet
          Service: www (tcp/80) (Shorewall:INPUT:REJECT:) - 3 packets
    From 5.x.y.z - 1 packet
       To 5.a.b.c - 1 packet
          Service: 3 (icmp/3) (Shorewall:OUTPUT:REJECT:) - 1 packet</pre>
<p>Les curieux auront vu avec <code>ifconfig</code> qu&#8217;une nouvelle interface réseau est née : <code>ham0</code>.<br />
J&#8217;utilise shorewall (cf. <a href="http://michauko.org/docs/debian_testing/">ma doc Debian</a> pour plus d&#8217;infos). Si vous n&#8217; utilisez &laquo;&nbsp;que&nbsp;&raquo; <code>iptables</code>, vous êtes autiste et vous pourrez transposer ce qui suit.</p>
<p>Dans le fichier <code>/etc/shorewall/interfaces</code>, vous déclarez une zone correspondant à l&#8217;interface réseau virtuelle de Hamachi, ça donne quelque chose comme ça :</p>
<pre>net     eth0            detect          dhcp,tcpflags,norfc1918,routefilter,nosmurfs,logmartians,blacklist
#pour hamachi :
<strong>ham     ham0            detect          tcpflags,detectnets,nosmurfs</strong></pre>
<p>Ensuite, dans <code>/etc/shorewall/zones</code>, vous expliquez que cette &laquo;&nbsp;zone&nbsp;&raquo; est de type ipv4 classique :</p>
<pre>fw      firewall
net     ipv4
<strong>ham     ipv4</strong>
loc    ipv4</pre>
<p>Enfin, comme vous souhaitez sûrment être restrictif pour l&#8217;accès à ce réseau, il n&#8217;est sûrement pas la peine de préciser quelque chose dans le fichier <code>/etc/shorewall/policy</code> : tout est <em>droppé</em> par défaut. Le retour d&#8217;information du firewall (le serveur de jeu) vers les clients sera autorisé même sans règle type <code>ACCEPT fw ham</code> puisque la communication aura été initié dans l&#8217;autre sens (client joueur qui s&#8217;adresse au serveur). N&#8217;oublions pas que le firewall Linux est &laquo;&nbsp;stateful&nbsp;&raquo;.<br />
Donc on n&#8217;a plus qu&#8217;à ouvrir ce qui nous intéresse. Ci-dessous le port du jeu &laquo;&nbsp;Call Of Duty UO&nbsp;&raquo; et l&#8217;autorisation de ping (ça aide toujours un peu à débugger) dans le fichier <code>/etc/shorewall/rules</code> :</p>
<pre># HAMACHI
Ping/ACCEPT     ham             fw
ACCEPT          ham             fw      udp 28960 # CALL OF DUTY</pre>
<p>Vous relancez shorewall (<code>/etc/init.d/shorewall restart</code>), contrôlez son bon lancement (<code>tail /var/log/shorewall-init.log</code>). Et ô magie, le ping Windows/ip_hamachi -> Linux/ip_hamachi passe.</p>
<p>Pour ce qui est de la connexion au serveur de jeu dont il est question dans cet article, il faut encore que vous le lanciez en lui expliquant d&#8217;une manière ou d&#8217;une autre qu&#8217;il est configuré en LAN et que son adresse d&#8217;attachement est 5.x.y.z et non pas votre IP publique. Pigé ? Certains pourraient même avoir besoin de désactiver des contrôles de clefs&#8230;</p>
<p>Maintenant pour vos amis qui ne demandent qu&#8217;à jouer, pas à geeker, voici le chapitre qu&#8217;il leur faut :</p>
<p><strong>Installation &#038; utilisation sous Windows</strong></p>
<p>Ca, c&#8217;est le chapitre où vous expliquez au reste de votre équipe de bras cassés de l&#8217;informatique comment faire pour se connecter à votre VPN-machin sous Windows pour (enfin) pouvoir jouer. &#8216;y comprennent rien c&#8217;est grave <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Il faut installer <a href="https://secure.logmein.com/products/hamachi/download.asp">le client Windows</a>, le lancer et suivre ce que ça raconte. Il y a même un tuto obligatoire qui explique le B-A.BA pour prendre en main Hamachi. Ensuite, vos amis rejoindront votre réseau (qu&#8217;on a nommé ici &laquo;&nbsp;mon_reseau&nbsp;&raquo;) et c&#8217;est terminé.<br />
En image, ça donne ça :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_01.png' title='hamachi 01'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_01.thumbnail.png' alt='hamachi 01' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_02.png' title='hamachi_windows_02.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_02.thumbnail.png' alt='hamachi_windows_02.png' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_03.png' title='hamachi_windows_03.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_03.thumbnail.png' alt='hamachi_windows_03.png' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_04.png' title='hamachi_windows_04.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_04.thumbnail.png' alt='hamachi_windows_04.png' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_05.png' title='hamachi_windows_05.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_05.thumbnail.png' alt='hamachi_windows_05.png' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_06.png' title='hamachi_windows_06.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_06.thumbnail.png' alt='hamachi_windows_06.png' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_07.png' title='hamachi_windows_07.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_07.thumbnail.png' alt='hamachi_windows_07.png' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_08.png' title='hamachi_windows_08.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_08.thumbnail.png' alt='hamachi_windows_08.png' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_09.png' title='hamachi_windows_09.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_09.thumbnail.png' alt='hamachi_windows_09.png' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_10.png' title='hamachi_windows_10.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_10.thumbnail.png' alt='hamachi_windows_10.png' /></a></p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_11.png' title='hamachi_windows_11.png'><img src='http://michauko.org/blog/wp-content/uploads/2007/09/hamachi_windows_11.thumbnail.png' alt='hamachi_windows_11.png' /></a></p>
<p>Et je vous le donne en mille, dans le cas ci-dessus, l&#8217;utilisateur Linux (vous) qui a créé le réseau est la personne dont le nick est &laquo;&nbsp;ze_serveur&nbsp;&raquo;. Plus haut, j&#8217;ai du le nommer &laquo;&nbsp;toto_qui_hoste_le_serveur&nbsp;&raquo;. Pigé ?</p>
<p>Voilà. C&#8217;est fini. Fraggez bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2007/09/21/hamachi-client-vpn-zero-conf-pour-faire-plein-de-belles-vilaines-choses/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

