<?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; shorewall</title>
	<atom:link href="http://michauko.org/blog/tag/shorewall/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>Tue, 29 Nov 2011 11:45:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</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>Installer un serveur OVH avec Debian Lenny &#171;&#160;nue&#160;&#187;</title>
		<link>http://michauko.org/blog/2009/08/04/installer-un-serveur-ovh-avec-debian-lenny-nue/</link>
		<comments>http://michauko.org/blog/2009/08/04/installer-un-serveur-ovh-avec-debian-lenny-nue/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 16:18:16 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[dédié]]></category>
		<category><![CDATA[ovh]]></category>
		<category><![CDATA[shorewall]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=416</guid>
		<description><![CDATA[A l&#8217;occasion de la location de 2 serveurs dédiés chez OVH, montés en Debian Lenny (what else? comme dirait l&#8217;autre), voici un petit tour du propriétaire et du coup un guide minimaliste d&#8217;installation/paramétrage d&#8217;un tel serveur. Ca fait aussi un petit retour d&#8217;expérience sur OVH. Y&#8217;a des trucs marrants, vous allez voir. Il s&#8217;agit de [...]]]></description>
			<content:encoded><![CDATA[<p>A l&#8217;occasion de la location de 2 serveurs dédiés chez OVH, montés en Debian Lenny (what else? comme dirait l&#8217;autre), voici un petit tour du propriétaire et du coup un guide minimaliste d&#8217;installation/paramétrage d&#8217;un tel serveur. Ca fait aussi un petit retour d&#8217;expérience sur OVH. Y&#8217;a des trucs marrants, vous allez voir.<br />
Il s&#8217;agit de 2 serveurs dont j&#8217;ai oublié les noms commerciaux, ceux à 69 € et 199 €.<br />
J&#8217;ai opté pour Debian &laquo;&nbsp;nue&nbsp;&raquo;, pas le truc prépackagé qui doit t&#8217;amener webmin et ce genre de bazar.<span id="more-416"></span></p>
<h1>Partitionnement par défaut</h1>
<p>Le serveur arrive avec en gros un swap et une partition &laquo;&nbsp;/&nbsp;&raquo; de quasimment 1 To (la capacité de mon disque) et un /var (dans mes souvenirs) de quelques dizaines de Mo. C&#8217;est assez cool pour héberger une base de données, genre des gros fichiers dans /var/lib/mysql&#8230;<br />
Aucune restriction type nosuid, noexec, nodev.<br />
Donc je suggère d&#8217;abord une réinstallation en mode &laquo;&nbsp;je personnalise mes partitions&nbsp;&raquo;. L&#8217;interface web est curieuse, il faut d&#8217;abord affecter un peu de place à /boot, puis de la place (mais pas tout) à /. (pas slashdot, c&#8217;est un point pour finir ma phrase <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )<br />
A ce moment là, l&#8217;interface vous permet de nommer et modifier n&#8217;importe que point de montage: /home, /var, /tmp, le swap. A votre convenance.<br />
Pour ce qui est des options noexec, nodev, nosuid, que vous voulez peut-être positionner, il faudra modifier /etc/fstab à la main et rebooter ou faire des <code>mount -o remount</code> qui vont bien.</p>
<p>A la fin j&#8217;ai ça, dans le cas d&#8217;un serveur en RAID 1 logiciel (celui à 69 €, l&#8217;autre est en RAID 1 hard, je préfère). Remplacez mentalement /dev/md par /dev/sda si ça vous pose un problème existentiel.</p>
<pre>/dev/md2        /       ext3    errors=remount-ro       0       1
/dev/md1        /boot   ext3    errors=remount-ro,nodev,nosuid,noexec   0       1
/dev/md3        /home   ext3    nodev,nosuid    1       2
/dev/md6        /tmp    ext3    nodev,nosuid    1       2
/dev/md7        /var    ext3    nodev   1       2
/dev/sda5       swap    swap    defaults        0       0
/dev/sdb5       swap    swap    defaults        0       0
proc            /proc   proc    defaults        0       0
sysfs           /sys    sysfs   defaults        0       0
</pre>
<h1>Sources logicielles (apt)</h1>
<p>Il y a un miroir OVH. Je n&#8217;aime jamais trop ce concept, ne sachant pas si c&#8217;est à jour ou pas.<br />
De toute manière, il manque le repository &laquo;&nbsp;volatile&nbsp;&raquo;. Quitte à l&#8217;ajouter, je suis revenu aux standards Debian, voici mon <code>/etc/apt/sources.list</code> :</p>
<pre>deb ftp://ftp2.fr.debian.org/debian/ lenny main contrib non-free
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb http://security.debian.org/ lenny/updates main contrib non-free
</pre>
<p>Un petit <code>aptitude update</code> et <code>aptitude safe-upgrade</code> plus tard, vous voilà à jour.</p>
<h1>Kernel</h1>
<p>Le kernel par défaut est le <code>2.6.27.10-grsec-xxxx-grs-ipv4-32</code> pour un serveur 32 bits. Le patch grsec apporte des modifications de sécurité (mouais) au kernel standard.<br />
Le truc louche est que je ne vois aucun <code>linux-image</code> installé via <code>dpkg -l</code>. J&#8217;ai tenté l&#8217;installation du dernier 2.6 packagé par Debian (le 2.6.26, via le paquet <code>linux-image-2.6-686</code>), ça a un peu foiré, j&#8217;ai lâché l&#8217;affaire.<br />
J&#8217;ai un peu peur de l&#8217;upgrade de sécurité du kernel, qui viendra bien un jour ou l&#8217;autre. Pas de paquet qui a amené le noyau (!) et je suis sur les repos autres que les miroirs OVH. Bref à mon avis, le kernel est figé pour longtemps. EDIT: A priori, vu des commentaires, c&#8217;est comme chez dedibox : un serveur FTP mettant à jour les noyaux. Supeeeer. Il doit y avoir une mailing-list ou un newsgroup pour suivre les upgrades recommandés, j&#8217;espère. C&#8217;est le cas chez dedibox.</p>
<h1>LILO vs. GRUB</h1>
<p>Ils ont choisi LILO. Soit. Je n&#8217;ai pas osé mettre GRUB, de peur de foutre la zone avec le reboot en mode rescue. ou de faire sauter (peut-être) le KVM sur IP (ça m&#8217;étonnerait quand même). &#8216;Pas eu envie de tester.<br />
Inconvénient de LILO : penser à taper <code>lilo</code> après un upgrade de noyau. Mais bon, vu la situation décrite ci-dessus&#8230;</p>
<h1>Accès SSH</h1>
<p>Evidemment, accès root autorisé, de toutes les IP.<br />
J&#8217;ai changé tout ça : <code>PermitRootLogin no</code> et <code>AllowUsers</code> après avoir créé des utilisateurs locaux. Pour ce qui du classique changement de port, j&#8217;ai plutôt opté pour du bridage par IP source sur ce port. Faites comme vous voulez.<br />
OVH peut se connecter en root via clef publique autorisée (installée avec la machine). Si le concept vous plait (et que vous ne virez pas la clef de authorized_keys), il serait judicieux de laisser passer le SSH pour l&#8217;IP source qu&#8217;ils utilisent (décrite dans le chapitre du firewall ci-après).<br />
Le PermitRootLogin doit être largement incompatible avec ce principe, au passage. Mais bon, on le sait, le RootLogin, c&#8217;est mal.</p>
<h1>Shorewall (ou iptables)</h1>
<p>Là, c&#8217;est l&#8217;épisode &laquo;&nbsp;La mise en place du firewall ou si tu bloques le ping, j&#8217;te reboote&nbsp;&raquo;. Arg. La cocasse anecdote. Je vous raconte ça comme je l&#8217;ai vécu. Les conclusions pour éviter une galère potentielle seront donc à la fin. C&#8217;est plus marrant comme ça.<br />
Donc, voici le truc.</p>
<p><em>(vous pouvez lire mon guide complet sur debian, notamment shorewall, à cette adresse : <a href="http://michauko.org/docs/debian_testing/">http://michauko.org/docs/debian_testing/</a></em></p>
<p>Après un <code>aptitude install shorewall</code>, il faut configurer Shorewall, avec le postulat de base &laquo;&nbsp;je bloque tout sauf ce qui m&#8217;intéresse&nbsp;&raquo;. Normal. J&#8217;ouvrirai le reste à mesure que j&#8217;installerai les services (MySQL, apache, mail&#8230;)</p>
<p>Les &laquo;&nbsp;templates&nbsp;&raquo; shorewall pour un serveur à une interface (c&#8217;est notre cas) sont amenés par le paquet <code>shorewall-common</code>, dans <code>/usr/share/doc/shorewall-common/examples/one-interface/</code><br />
Copiez donc tout le contenu dans <code>/etc/shorewall/</code> et passez en revue tous les fichiers pour que ça corresponde à vos besoins : bridage du SSH sur quelques IP par exemple.<br />
Attention à cette règle (policy) :</p>
<pre>$FW             net             ACCEPT</pre>
<p>Elle rend possible l&#8217;attaque réseau depuis votre machine si elle est compromise. Détailler chaque flux sortant peut permettre d&#8217;éviter ça, si votre machine a été compromise juste assez pour faire chier, mais pas assez pour être root, auquel cas l&#8217;intervenant fera mumuse avec votre shorewall de toute manière.<br />
Si vous avez besoin d&#8217;un fichier &laquo;&nbsp;params&nbsp;&raquo; vide, il est donné là  : <code>/usr/share/doc/shorewall-common/default-config/params</code>.<br />
Une fois votre conf adaptée, modifiez <code>/etc/default/shorewall</code> => <code>startup=1</code> et relancez shorewall. Testez votre connexion SSH sans perdre l&#8217;ancienne session, au cas où la conf n&#8217;accepte plus rien, suite à fausse manip&#8230;</p>
<p><strong>Cocasse anecdote </strong>: une sonde de leur côté (OVH) a immédiatement détecté que mon serveur ne répondait plus au ping=> REBOOT quasi-instantané pour cause de défaillance. O_o woooow. Que ça détecte une &laquo;&nbsp;panne&nbsp;&raquo;, admettons, que ça force un reboot, PUTAIN NON !!!!!<br />
J&#8217;ai eu un ticket quelques instants après m&#8217;indiquant qu&#8217;il y avait un kernel panic et qu&#8217;ils l&#8217;avaient donc passé en mode rescue. Moi je veux bien, mais sur la console, y&#8217;avait bien écrit &laquo;&nbsp;reboot&nbsp;&raquo;, et pas le bon gros figeage d&#8217;un &laquo;&nbsp;kernel panic&nbsp;&raquo;. Le type au téléphone m&#8217;avait confirmé quelques minutes avant qu&#8217;ils avaient forcé le reboot. Bref passons. Ca commence bien la relation client&#8230;<br />
Je pense surtout que quelqu&#8217;un a eu un excès de zèle et sous couvert d&#8217;un ping qui ne répondait pas, m&#8217;a rebooté comme un porc la machine, &laquo;&nbsp;pour m&#8217;aider&nbsp;&raquo;, en me la mettant en mode rescue. Ah ouais, super, ça m&#8217;aide à mort&#8230;<br />
Quelques cris  plus tard, un type du service des serveurs dédiés m&#8217;indique le &laquo;&nbsp;Guide OVH pour le firewall&nbsp;&raquo; (<a href="http://guides.ovh.net/fireWall">http://guides.ovh.net/fireWall</a>). A priori, il me confirme que les machines de monitoring évoquées dans ce guide ne changent pas et qu&#8217;il n&#8217;y en a pas d&#8217;autres en terme de monitoring qui feraient que ma machine serait vu comme défaillante et qui ferait que le mec qui s&#8217;emmerde au mois de juillet dans la salle serveur prendrait un coup de chaud et me rebooterait le serveur. Pour m&#8217;aider.</p>
<p>Bref, il faut laisser passer le ping pour les machines suivantes : proxy.ovh.net, proxy.p19.ovh.net, proxy.rbx.ovh.net, ping.ovh.net et les 3 premiers octets de votre IP+250/251/249 (3 machines en plus donc).<br />
Plus une machine pour le SSH si vous pouvez avoir besoin d&#8217;eux un jour.</p>
<p>Changez enfin les permissions 755 à 750 sur /etc/shorewall</p>
<p><em>Question : le &laquo;&nbsp;PermitRootLogin no&nbsp;&raquo; => peut-on quand même passer en mode rescue ? Je le pense, mais bon&#8230; car le pass du root est différent. C&#8217;est un autre OS qui boote, véritablement, avec uniquement un compte root. Si quelqu&#8217;un peut me confirmer ça en commentaire, merci.<br />
</em><br />
Le guide OVH donne la syntaxe iptables pour tolérer le ping de tout ça. Si vous adorez ces longues lignes iptables inbuvables, c&#8217;est pour vous. Pour le reste, il y a <del datetime="2009-08-04T14:48:58+00:00">mast </del> shorewall.<br />
Côté shorewall, avec les fichiers par défaut, il faut comprendre que tout traffic net -> $FW est bloqué par défaut, en &laquo;&nbsp;DROP info&nbsp;&raquo;, sauf une règle spéciale pour le ping en &laquo;&nbsp;DROP simple&nbsp;&raquo; &#8211; pour éviter de pourrir les logs. J&#8217;ai donc ajouté avant cette règle l&#8217;autorisation pour les machines de supervision OVH. Ca donne donc :</p>
<h2>/etc/shorewall/policy</h2>
<p>Inchangé dans cet exemple :</p>
<pre>#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
$FW             net             ACCEPT
net             $FW             DROP            info
net             all             DROP            info
# The FOLLOWING POLICY MUST BE LAST
all             all             REJECT          info
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE</pre>
<h2>/etc/shorewall/rules</h2>
<pre>#ACTION         SOURCE          DEST            PROTO   DEST    SOURCE         ORIGINAL RATE            USER/   MARK
#                                                       PORT    PORT(S)        DEST             LIMIT           GROUP

### PING
# ouverture pour monitoring OVH
ACCEPT          net:213.186.50.98       $FW     icmp    # proxy.ovh.net
ACCEPT          net:213.186.45.4        $FW     icmp    # proxy.p19.ovh.net
ACCEPT          net:213.251.184.9       $FW     icmp    # proxy.rbx.ovh.net
ACCEPT          net:213.186.33.13       $FW     icmp    # ping.ovh.net
ACCEPT          net:x.y.z.250       $FW     icmp    # specifique à mon IP : x.y.z.53
ACCEPT          net:x.y.z.249       $FW     icmp    # specifique à mon IP : x.y.z.53
ACCEPT          net:x.y.z.251       $FW     icmp    # specifique à mon IP : x.y.z.53
# des machines à moi :
ACCEPT          net:$une_machine     $FW     icmp
ACCEPT          net:$une_autre            $FW     icmp
#défaut :
Ping/DROP       net             $FW # le reste est en "DROP info". Là on va éviter des logs inutiles

### SSH
# moi, moi et moi :
ACCEPT          net:$une_machine     $FW     tcp     22
ACCEPT          net:$une_autre            $FW     tcp     22
# à la limite, eux :
ACCEPT          net:213.186.50.100      $FW     tcp 22  # cache.ovh.net, probablement inutile, pas de compte dans mon cas

### WEB, utiliser AllowWeb serait plus dans le coup non ?
ACCEPT          net                     $FW     tcp     80,443

### MAIL si besoin
ACCEPT          net                     $FW     tcp     25

#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE</pre>
<h2>/etc/shorewall/params : exemple</h2>
<pre># blabla...
#               net     eth0            130.252.100.255 routefilter,norfc1918
#
###############################################################################
une_machine=a.b.c.d
une_autre=e.f.g.h
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
</pre>
<h2>autres</h2>
<p>Dans cet exemple, les fichiers &laquo;&nbsp;interfaces&nbsp;&raquo;, &laquo;&nbsp;zones&nbsp;&raquo; etc sont bien tels quels.<br />
<strong>Pensez au restart de shorewall et au test afin d&#8217;être sûr de toujours pouvoir venir en SSH sur votre serveur.</strong></p>
<h1>Autres trucs à faire avant d&#8217;aller plus loin</h1>
<p>Je passe sur les softs que vous utiliserez ou non : postfix ou exim, snort, rkhunter&#8230;<br />
Pensez à cron-apt, apt-listbugs, ntp&#8230;</p>
<h1>Autre spécificité OVH</h1>
<p>Le script <code>/usr/local/rtm/bin/rtm</code> qu&#8217;on trouve dans <code>/etc/crontab</code>. Un outil maison de monitoring. Admettons. C&#8217;est expliqué là : <a href="http://guides.ovh.net/RealTimeMonitoring">http://guides.ovh.net/RealTimeMonitoring</a></p>
<p>A plus tard pour compléter ce retour d&#8217;expérience. En bien je l&#8217;espère <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/08/04/installer-un-serveur-ovh-avec-debian-lenny-nue/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Mise à jour de ma documentation Debian</title>
		<link>http://michauko.org/blog/2008/12/02/mise-a-jour-de-ma-documentation-debian/</link>
		<comments>http://michauko.org/blog/2008/12/02/mise-a-jour-de-ma-documentation-debian/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 16:08:35 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[doc]]></category>
		<category><![CDATA[etch]]></category>
		<category><![CDATA[lenny]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[shorewall]]></category>
		<category><![CDATA[spamassassin]]></category>
		<category><![CDATA[stable]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=171</guid>
		<description><![CDATA[Salut, (pas la peine de faire des commentaires de troll, je ne validerai pas) J&#8217;ai mis à jour ma doc d&#8217;installation + kit de survie + gros sujets &#171;&#160;serveur&#160;&#187; à l&#8217;instant. Elle est disponible au format Word (oui oui, je sais) et au format PDF (mais certains liens HTML dedans ne marchent pas, si quelqu&#8217;un [...]]]></description>
			<content:encoded><![CDATA[<p>Salut,</p>
<p>(pas la peine de faire des commentaires de troll, je ne validerai pas)</p>
<p>J&#8217;ai mis à jour ma doc d&#8217;installation + kit de survie + gros sujets &laquo;&nbsp;serveur&nbsp;&raquo; à l&#8217;instant.<br />
Elle est disponible au <a href="http://michauko.org/docs/debian_testing/install_debian.doc">format Word (oui oui, je sais)</a> et au <a href="http://michauko.org/docs/debian_testing/install_debian.pdf">format PDF </a>(mais certains liens HTML dedans ne marchent pas, si quelqu&#8217;un sait pourquoi&#8230; généré avec PDFCreator depuis Word 2007)<br />
Elle est destinée à des personnes connaissant un peu Linux et voulant installer un Linux qui a fait ses preuves, plutôt pour un usage serveur.</p>
<p>Le concept de cette n-ième mouture est le suivant :</p>
<ul>
<li>J&#8217;abandonne la partie graphique/bureautique => utilisez Ubuntu</li>
<li>Premiers chapitres sur les quelques trucs à savoir sur Debian (différentes versions etc)</li>
<li>Gros chapitre comparant, écran par écran, l&#8217;installation de &laquo;&nbsp;Etch mode expert&nbsp;&raquo;, &laquo;&nbsp;Lenny mode expert&nbsp;&raquo; et &laquo;&nbsp;Etch mode normal&nbsp;&raquo;. Afin de montrer les différences avec la prochaine release d&#8217;une part, et la comparaison normal/expert d&#8217;autre part &#8211; pour ceux à qui cela ferait peur.</li>
<li>Kit de survie : comment gérer les paquets, gérer son système &#8211; quelques spécificités Debian</li>
<li>Firewall &laquo;&nbsp;shorewall&nbsp;&raquo; : tout pour faire rapidement une conf propre</li>
<li>Serveur de mail : un exemple bien complet pour monter un serveur, de postfix à spamassassin, rulesemporium, tout ça</li>
<li>Un exemple d&#8217;installation d&#8217;application LAMP classique : gallery2</li>
</ul>
<p>Voilà. Vous pouvez me faire vos retours, vos impressions, tout ça.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/12/02/mise-a-jour-de-ma-documentation-debian/feed/</wfw:commentRss>
		<slash:comments>5</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>
	</channel>
</rss>

