<?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; reseau et sécu</title>
	<atom:link href="http://michauko.org/blog/category/reseau-secu/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>Utilisation d&#8217;une clef 3g&#8230;</title>
		<link>http://michauko.org/blog/2010/12/02/utilisation-dune-clef-3g/</link>
		<comments>http://michauko.org/blog/2010/12/02/utilisation-dune-clef-3g/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 19:22:58 +0000</pubDate>
		<dc:creator>ours</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[3g]]></category>
		<category><![CDATA[clé]]></category>
		<category><![CDATA[clef]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[orange]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1179</guid>
		<description><![CDATA[Je jette pêle-mêle ici les informations nécessaire à l'utilisation d'une clef 3g Nokia CS-10 sous Debian (testing) avec un abonnement pro Orange.
]]></description>
			<content:encoded><![CDATA[<p>Je jette pêle-mêle ici les informations nécessaire à l&#8217;utilisation d&#8217;une clef 3g sous Debian (testing).<br />
Dans mon cas, il s&#8217;agit d&#8217;une clef Nokia CS-10, que j&#8217;utilise avec la SIM jumelle de mon téléphone pro (orange).<br />
<span id="more-1179"></span></p>
<p><strong>Packages requis:</strong></p>
<ul>
<li><code>comgt</code> pour gérer la partie code PIN;</li>
<li><code>ppp</code> pour la partie connexion à Internet;</li>
<li><code>gsm-utils</code> pour la partie envoyer/recevoir des SMS</li>
</ul>
<p><strong>Problème standard avec les clefs 3g:</strong><br />
Quand on les sorts de l&#8217;emballage et qu&#8217;on les branche sur un linux, on ne trouve pas la clef (pas de /dev/ttyUSBX, pas de /dev/ttyACMX ou /dev/nzX ou &#8230;).<br />
Elles sont vues dans le meilleurs des cas comme un support de stockage ou un CD-ROM que l&#8217;on peut monter pour y trouver en général le mode d&#8217;emploi, les drivers windows et mac et les petits softs qui vous pourrissent le système.<br />
Avec la Nokia CS-10, on contre ça avec un script et une règle udev qui désactivent et &laquo;&nbsp;éjectent&nbsp;&raquo; ce périphérique non voulu:<br />
Le script (<code>nokia-zerocd</code>) se mets dans <code>/lib/udev</code> (avec les bons droits: <strong>0755</strong>), et est assez basique:</p>
<blockquote><p>#!/bin/sh<br />
if [ -f /etc/udev/nokia-zerocd-noeject ]<br />
then<br />
        exit 1<br />
fi<br />
minor=$(echo $2 | sed &#8216;s/.[0-9]*\.//&#8217;)<br />
major=$(echo $2 | sed &#8216;s/\.[0-9]*$//&#8217;)<br />
if [ "$major" -gt "0" ] || &laquo;&nbsp;$minor&nbsp;&raquo; -gt &laquo;&nbsp;10&#8243; ]<br />
then<br />
        exit 1<br />
fi<br />
exit 0</p></blockquote>
<p>La régle udev (<code>99-nokia-zerocd.rules</code>) se met dans <code>/etc/udev/rules.d</code> (avec les bons droits: <strong>0644</strong>):</p>
<blockquote><p>SUBSYSTEMS==&nbsp;&raquo;usb&nbsp;&raquo;, SYSFS{idVendor}==&nbsp;&raquo;0421&#8243;, SYSFS{idProduct}==&nbsp;&raquo;060c&nbsp;&raquo;, ACTION==&nbsp;&raquo;add&nbsp;&raquo;, PROGRAM==&nbsp;&raquo;nokia-zerocd %M %s{serial}&nbsp;&raquo;, RUN+=&nbsp;&raquo;/usr/bin/eject -s %k&nbsp;&raquo;, OPTIONS+=&nbsp;&raquo;last_rule&nbsp;&raquo;</p></blockquote>
<p>Il suffit ensuite de recharger les règles udev: <code>sudo /etc/init.d/udev restart</code>.</p>
<p>Maintenant, on peut brancher la clef (où l&#8217;on a pensé à insérer la SIM), et elle devrait bien être détectée au bout de quelques secondes (on devrait trouver deux nouveaux <em>devices</em>: <code>/dev/ttyACM0</code> et <code>/dev/ttyACM1</code>).</p>
<p><strong>Activer/Connecter la carte au réseau 3g:</strong><br />
Cela se fait assez facilement, avec la commande <code>comgt</code>:</p>
<blockquote><p># comgt -d /dev/ttyACM0<br />
Enter PIN number: XXXX</p>
<p>Waiting for Regestration..(120 sec max)..<br />
Registered on Home network: &laquo;&nbsp;Orange F&nbsp;&raquo;,2<br />
Signal Quality: 19,0</p></blockquote>
<p>Maintenant, on peut se servir de la clef pour envoyer/recevoir des SMS ou se connecter à Internet.</p>
<p><strong>La partie simple: envoyer un SMS</strong></p>
<blockquote><p>gsendsms -d /dev/ttyACM0 0612345678 &laquo;&nbsp;mon message&nbsp;&raquo;</p></blockquote>
<p><strong>La partie plus &laquo;&nbsp;complexe&nbsp;&raquo;: se connecter à internet</strong></p>
<p>Cette partie est plus complexe parce qu&#8217;il faut savoir que ces modems ne supportent pas tous le même jeu de commandes AT, donc, tout ce qui suit ne fonctionnera pas forcément avec d&#8217;autres modem (il faudra sûrement adapter le nom du device et une partie des commandes AT qui permettent d&#8217;initialiser le modem).</p>
<p>A la fin du fichier <code>/etc/ppp/pap-secrets</code>, ajouter une ligne (adapter en fonction de votre cas):</p>
<blockquote><p>orange * orange</p></blockquote>
<p>Créer le fichier /etc/ppp/peers/orange (vous pouvez l&#8217;appelez autrement) en pensant à adapter le nom du <em>device</em>, le nom d&#8217;utilisateur et le débit du <em>device</em> à votre cas:</p>
<blockquote><p>ipcp-restart 7<br />
lcp-echo-failure 99<br />
lcp-echo-interval 0<br />
lcp-restart 10<br />
connect &#8216;/usr/sbin/chat -v -e -f /etc/ppp/peers/orange.chat&#8217;<br />
<em>/dev/ttyACM0</em><br />
<em>460800</em><br />
crtscts<br />
noipdefault<br />
defaultroute<br />
ipcp-accept-local<br />
ipcp-accept-remote<br />
noipx<br />
noccp<br />
usepeerdns<br />
nodeflate<br />
novj<br />
novjccomp<br />
nobsdcomp<br />
nopredictor1<br />
nopcomp<br />
noaccomp<br />
noauth<br />
user <em>orange</em></p></blockquote>
<p>Créer le fichier <code>/etc/ppp/peers/orange.chat</code> (vous pouvez l&#8217;appeler autrement, mais penser à modifier le fichier précédent):</p>
<blockquote><p>&nbsp;&raquo; ATZ<br />
OK-AT-OK &laquo;&nbsp;ATQ0 V1 E1 S0=0 &amp;C1 &amp;D2 +FCLASS=0&#8243;<br />
OK-AT-OK &#8216;AT+CGDCONT=<em>1,&nbsp;&raquo;IP&nbsp;&raquo;,&nbsp;&raquo;orange-mib&nbsp;&raquo;,&nbsp;&raquo;",0,0</em>&#8216;<br />
OK-AT-OK &#8216;<em><strong>ATD</strong>*99***1#</em>&#8216;<br />
CONNECT &#8216;\d\c&#8217;</p></blockquote>
<p><strong>ATTENTION!</strong><br />
Le numéro de téléphone n&#8217;a manifestement pas d&#8217;importance (<code>*99#</code>, <code>*99*1#</code> marcheraient aussi bien) et ne dépend manifestement pas de l&#8217;opérateur (il est juste là parce qu&#8217;il en faut un), par contre, la commande AT qui permet de le composer peut changer d&#8217;une clef et d&#8217;un opérateur à l&#8217;autre (<code>ATD</code><em>num</em> ou <code>ATDT</code><em>num</em> en général).<br />
La ligne <code>CGDCONT</code> dépend de votre opérateur <strong>et</strong> de votre abonnement, à vous de trouver la bonne <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Celle de cette exemple marche bien pour un abonnement orange pro avec forfait data.<br />
La première ligne devrait être la même partout, par contre, entre la première et les 3 dernières, ça peut-être totalement différent <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Notes en vrac:</strong></p>
<ul>
<li>La même chose doit pouvoir marcher en branchant le téléphone en USB et en le configurant en mode modem</li>
<li>Si vous connecter le téléphone via <em>bluetooth</em>, le device devrait s&#8217;appeller <code>/dev/rfcommX</code></li>
<li>En GPRS (2g), la vitesse du <em>device</em> est souvent <code>115200 bauds</code> (pas comme les <code>460800</code> de la 3g/umts/hsdpa)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/12/02/utilisation-dune-clef-3g/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SFTP, chroot et pas de SSH : bloquer un utilisateur dans un répertoire</title>
		<link>http://michauko.org/blog/2010/09/27/sftp-chroot-et-pas-de-ssh-bloquer-un-utilisateur-dans-un-repertoire/</link>
		<comments>http://michauko.org/blog/2010/09/27/sftp-chroot-et-pas-de-ssh-bloquer-un-utilisateur-dans-un-repertoire/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 08:15:21 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[chroot]]></category>
		<category><![CDATA[rssh]]></category>
		<category><![CDATA[scp]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1099</guid>
		<description><![CDATA[Salut, Un petit article sur ce sujet récurrent car il y a plein de méthodes, dont une assez simple, mais avec 2/3 points de paramétrage précis. Le but est de permettre à un client/fournisseur d&#8217;envoyer/récupérer des fichiers sur un serveur, en SFTP, sans pour autant lui donner accès en SSH (exécuter des commandes) et sans [...]]]></description>
			<content:encoded><![CDATA[<p>Salut,<br />
Un petit article sur ce sujet récurrent car il y a plein de méthodes, dont une assez simple, mais avec 2/3 points de paramétrage précis.<br />
Le but est de permettre à un client/fournisseur d&#8217;envoyer/récupérer des fichiers sur un serveur, en SFTP, sans pour autant lui donner accès en SSH (exécuter des commandes) et sans voir autre part que son &laquo;&nbsp;home&nbsp;&raquo;.<br />
Le tout sur un serveur SSH déjà monté et par ailleurs utilisé pour du SSH normal en interne, avec du SFTP normal aussi.</p>
<p>Il y a 3 méthodes courantes pour commencer à jouer avec les chroot ssh/sftp :</p>
<ul>
<li>
Héberger un serveur SSH en chroot normal : c&#8217;est chiant. Créer un &laquo;&nbsp;home&nbsp;&raquo;, reproduire un minimum d&#8217;arborescence standard, d&#8217;utilisateurs etc.
</li>
<li>
Utiliser rssh comme shell alternatif, c&#8217;est un shell qui limite l&#8217;utilisateur à du SFTP, SCP, CVS, RSYNC etc. On choisit ce qu&#8217;on veut tolérer. Mais, l&#8217;utilisateur peut quand même se promener dans le système (tout &laquo;&nbsp;/&nbsp;&raquo;).
</li>
<li>
Enfin, ce que je vais décrire : utiliser la fonctionnalité de &laquo;&nbsp;chroot&nbsp;&raquo; intégrée aux serveurs SSH (serveur ssh >= 4.8, donc n&#8217;importe quel SSH d&#8217;une Debian stable de nos jours). On va simplement brider quelques comptes et mettre quelques permissions bien senties.
</li>
</ul>
<p><span id="more-1099"></span></p>
<h1>Adaptation d&#8217;un utilisateur</h1>
<p>Le mieux est de prévoir large : on risque d&#8217;avoir plusieurs clients/fournisseurs qui voudront accéder.<br />
On va donc créer un groupe des utilisateurs SFTP seulement, nommé &laquo;&nbsp;sftpusers&nbsp;&raquo;.<br />
Je crée un utilisateur pour mon client, nommé xfer1, en changeant son home :</p>
<pre>xfer1:x:1011:1012:Transfert client1,,,:/transferts_partenaires/xfer1/:bin/bash</pre>
<p>Notez que le groupe 1012 est le groupe &laquo;&nbsp;sftpusers&nbsp;&raquo; :</p>
<pre>$ id xfer1
uid=1011(xfer1) gid=1012(sftpusers) groupes=1012(sftpusers)</pre>
<h1>Création du répertoire d&#8217;échange, permissions</h1>
<p>On crée l&#8217;arborescence qui va servir de home bidon à tout ces utilisateurs :</p>
<pre>$ mkdir --parents /transferts_partenaires/xfer1/
$ chown -R root:sftpusers /transferts_partenaires/
$ chmod -R 750 /transferts_partenaires/</pre>
<p>Les permissions ci-dessus sont hyper importantes. Le serveur SFTP refusera la connexion si le home de ces utilisateurs n&#8217;est pas en <strong>écriture uniquement pour le root </strong>! Donc oui, en l&#8217;état, notre utilisateur <code>xfer1:sftpusers</code> ne peut pas écrire dans son home. Il pourra lire, ce qui peut être suffisant si vous lui mettez simplement des fichiers à disposition. Mais pour écrire, il faudra créer un sous-répertoire, genre &laquo;&nbsp;upload&nbsp;&raquo;.</p>
<pre>mkdir /transferts_partenaires/xfer1/upload/
chown xfer1:sftpusers /transferts_partenaires/xfer1/upload/
chmod 700 /transferts_partenaires/xfer1/upload/</pre>
<h1>Déclaration du compte en SFTP uniquement</h1>
<p>Enfin, on paramètre le serveur SSH comme suit. Modifiez votre fichier <code>/etc/ssh/sshd_config</code> :</p>
<pre># param par défaut, on change : Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem     sftp   internal-sftp -f AUTH -l VERBOSE

# plus loin...
Match Group sftpusers
        ChrootDirectory /transferts_partenaires/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no</pre>
<p>A noter que les AllowUsers/DenyUsers s&#8217;appliquent toujours. L&#8217;utilisateur xfer1 &#8211; ou plutôt les utilisateurs du groupe sftpusers &#8211; doivent être autorisés d&#8217;une manière ou d&#8217;une autre.<br />
A noter aussi la beauté du geste avec le &laquo;&nbsp;%u&nbsp;&raquo; pour indiquer le nom de l&#8217;utilisateur.</p>
<p>Ensuite vous recharger le serveur SSH et testez les connexions SFTP et SSH-qui-passent-pas, sans oublier la distinction lecture/écriture.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/09/27/sftp-chroot-et-pas-de-ssh-bloquer-un-utilisateur-dans-un-repertoire/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>SFTP : mot de passe en ligne de commande</title>
		<link>http://michauko.org/blog/2010/08/24/sftp-mot-de-passe-en-ligne-de-commande/</link>
		<comments>http://michauko.org/blog/2010/08/24/sftp-mot-de-passe-en-ligne-de-commande/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 08:45:29 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[lftp]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[sftp]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1095</guid>
		<description><![CDATA[Petit souci du jour : utiliser sftp en ligne de commande, avec un mot de passe, en mode batch, MAIS sans passer par une authentification par clef. Sachant que sftp n&#8217;accepte pas de mot de passe en ligne de commande (ni via une redirection depuis STDIN). Pourquoi donc me direz-vous ? simplement parce-que dans l&#8217;éventualité [...]]]></description>
			<content:encoded><![CDATA[<p>Petit souci du jour : utiliser sftp en ligne de commande, avec un mot de passe, en mode batch, MAIS sans passer par une authentification par clef. Sachant que sftp n&#8217;accepte pas de mot de passe en ligne de commande (ni via une redirection depuis STDIN).</p>
<p>Pourquoi donc me direz-vous ? simplement parce-que dans l&#8217;éventualité où faire bouger le prestataire en face de vous (celui qui héberge le serveur SSH) coûterait trop d&#8217;énergie, on va supposer qu&#8217;on ne peut pas facilement faire avaler notre clef publique à l&#8217;hébergeur du serveur SSH.</p>
<p>Bref, la commande traditionnelle est :</p>
<pre>sftp utilisateur@serveur
Connecting to serveur...
utilisateur@serveur's password:
sftp&gt;</pre>
<p>J&#8217;ai trouvé une méthode simple : utiliser le client SFTP de &laquo;&nbsp;PuTTY&nbsp;&raquo;.<br />
Je pensais au départ utiliser celui de &laquo;&nbsp;lftp&nbsp;&raquo; et sauvegarder ma connexion (avec mot de passe) en bookmark, mais comme mon login dans l&#8217;histoire est un utilisateur de domaine windows (ouais, le serveur SSH en face est sous windows O_o), y&#8217;a un \ dans le login et même en le doublant, lftp semble mal le digérer, ben j&#8217;étais aussi bloqué.</p>
<p>Bref, en installant les outils de PuTTY :</p>
<pre>aptitude install putty-tools</pre>
<p>On peut alors taper :</p>
<pre>psftp -pw mon_pass utilisateur@serveur
Using username "utilisateur".
Remote working directory is /
psftp&gt;</pre>
<p><strong>Attention : le mot de passe est en clair dans la ligne de commande, donc dans les processus etc etc. Donc c&#8217;est pas idéal comme condition.</strong><br />
Enfin, je n&#8217;ai pas mis le paramètre -b pour mon batch, car ce n&#8217;est pas le propos là.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/08/24/sftp-mot-de-passe-en-ligne-de-commande/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Monter un serveur NTP, configurer les clients Windows et Linux</title>
		<link>http://michauko.org/blog/2009/11/13/monter-un-serveur-ntp-configurer-les-clients-windows-et-linux/</link>
		<comments>http://michauko.org/blog/2009/11/13/monter-un-serveur-ntp-configurer-les-clients-windows-et-linux/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 14:44:50 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></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[GPO]]></category>
		<category><![CDATA[ntp]]></category>
		<category><![CDATA[ntpd]]></category>
		<category><![CDATA[ntpdate-debian]]></category>
		<category><![CDATA[tcpdump]]></category>
		<category><![CDATA[W32Time]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=926</guid>
		<description><![CDATA[Bon, un p&#8217;tit billet aide-mémoire sur la configuration d&#8217;un serveur NTP Linux et des postes Windows et Linux de votre LAN. C&#8217;est un sujet tout bête, mais entre les postes Windows qui ne sont pas très bavards à ce sujet et l&#8217;amalgame, côté Linux, entre les paquets ntp et ntpdate utilisant ou pas des fichiers [...]]]></description>
			<content:encoded><![CDATA[<p>Bon, un p&#8217;tit billet aide-mémoire sur la configuration d&#8217;un serveur NTP Linux et des postes Windows et Linux de votre LAN.<br />
C&#8217;est un sujet tout bête, mais entre les postes Windows qui ne sont pas très bavards à ce sujet et l&#8217;amalgame, côté Linux, entre les paquets <code>ntp</code> et <code>ntpdate</code> utilisant ou pas des fichiers communs de conf, on peut être momentanément perdu. J&#8217;espère être clair par la suite.<span id="more-926"></span></p>
<h1>Préparez le serveur</h1>
<h2>Le paquet qui va bien</h2>
<p>Sur le serveur, installez le paquet &laquo;&nbsp;ntp&nbsp;&raquo;. Faisant office de serveur, il se met à jour (donc il fait office de client, si je ne dis pas connerie). Pas la peine donc d&#8217;installer &laquo;&nbsp;ntpdate&nbsp;&raquo; qui est un autre client possible.<br />
Les options du serveur sont dans <code>/etc/default/ntp.conf</code>, j&#8217;en parle un peu plus bas. Lisez le <code>man</code>.<br />
Les paramètres de <code>/etc/ntp.conf</code> sont :</p>
<pre>serv:~# egrep -v "^#|^$" /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
server 0.debian.pool.ntp.org iburst dynamic
server 1.debian.pool.ntp.org iburst dynamic
server 2.debian.pool.ntp.org iburst dynamic
server 3.debian.pool.ntp.org iburst dynamic
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap</pre>
<p>J&#8217;ai juste ajouté la plage 10.0.0.0 (c&#8217;est un exemple) pour autoriser mon LAN à joindre ce serveur.</p>
<h2>Firewalling ?</h2>
<p>Il faudra ouvrir en sortie le port &laquo;&nbsp;ntp&nbsp;&raquo; (123), en UDP, depuis le serveur vers les serveurs amonts. Si c&#8217;est la liste par défaut de <code>/etc/ntp.conf</code>, à savoir les &laquo;&nbsp;*.pool.ntp.org&nbsp;&raquo;, c&#8217;est une longue liste, amenée à évoluer dans le temps je suppose. A vous de voir comment faire. Le plus simple : ouvrir UDP/123 vers le web, point.<br />
Pour que les clients joignent votre serveur, c&#8217;est pareil, il faudra ouvrir le LAN vers votre passerelle, port UDP/123.</p>
<h2>Testez</h2>
<p>Je recommande d&#8217;ajouter <code>-l /var/log/ntp.log</code> dans les options du fichier <code>/etc/default/ntp</code>, soit :</p>
<pre>NTPD_OPTS='-g -l /var/log/ntp.log'</pre>
<p>Puis de redémarrer le service via :</p>
<pre>/etc/init.d/ntpd restart</pre>
<p>Vous verrez dans <code>/var/log/ntp.log</code> si votre serveur se met à jour, de combien de temps etc. <strong>Pensez à enlever ce log ou sinon à mettre en place une rotation de logs qui va avec</strong>.<br />
Ca ressemble à ça :</p>
<pre>13 Nov 11:19:30 ntpd[18381]: synchronized to 91.121.121.160, stratum 2
13 Nov 11:19:30 ntpd[18381]: time reset -0.169417 s
13 Nov 11:19:30 ntpd[18381]: kernel time sync status change 0001
13 Nov 11:23:57 ntpd[18381]: synchronized to 91.121.121.160, stratum 2
13 Nov 11:31:29 ntpd[18381]: synchronized to 91.121.86.143, stratum 2
13 Nov 11:35:30 ntpd[18381]: time reset +0.189846 s
13 Nov 11:35:50 ntpd[18381]: synchronized to 91.121.121.160, stratum 2
13 Nov 11:40:06 ntpd[18381]: synchronized to 81.19.16.225, stratum 2
13 Nov 11:42:57 ntpd[18381]: synchronized to 91.121.121.160, stratum 2</pre>
<p>On est maintenant prêt à dire à notre LAN d&#8217;aller taper sur ce serveur pour régler l&#8217;heure.</p>
<h1>Les postes Windows</h1>
<p>Le service W32Time (&laquo;&nbsp;Horloge Windows&nbsp;&raquo;) est en automatique par défaut depuis Windows XP. Il s&#8217;appuie sur le paramètre qu&#8217;on trouvera dans la clef de registre <code>HKLM/SOFTWARE/Policies/Microsoft/W32Time/Parameters</code>. La clef est &laquo;&nbsp;NtpServer&nbsp;&raquo;.<br />
Il faut donc mettre à jour cette clef, d&#8217;une manière ou d&#8217;une autre.</p>
<h2>&#8230;via des GPO</h2>
<p>Si vous êtes en domaine Windows, le réglage est ici :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2009/11/20091113_1502521.png"><img src="http://michauko.org/blog/wp-content/uploads/2009/11/20091113_1502521-150x150.png" alt="NTP" title="NTP" width="150" height="150"  /></a></p>
<p>En gros, vous indiquez le nom de votre serveur.<br />
Vous pouvez forcer la mise à jour des GPO sur un poste, pour tester, via <code>gpupdate /force</code>.</p>
<h2>En pas GPO (domaine Samba-sans-GPO, Workgroup etc)</h2>
<p>Il faut modifier la clef mentionnée plus haut, d&#8217;une manière ou d&#8217;une autre ; et probablement relancer le service &laquo;&nbsp;Horloge Windows&nbsp;&raquo;.</p>
<h2>Sous Windows, comment tester</h2>
<p>Le service Windows ne raconte rien et les &laquo;&nbsp;event logs&nbsp;&raquo; systèmes, c&#8217;est chiant.<br />
Je suggère sur le serveur, un joli <code>tcpdump</code> qui vous montrera qui fait quoi :</p>
<pre>serv:~# tcpdump -i eth0 dst port ntp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:14:49.071538 IP pc315.maboite.fr.ntp > imag.imag.fr.ntp: NTPv3, symmetric active, length 48
15:14:49.172627 IP imag.imag.fr.ntp > pc315.maboite.fr.ntp: NTPv3, symmetric active, length 48
15:15:29.305824 IP pc666.maboite.fr.ntp > serv.maboite.fr.ntp: NTPv3, symmetric active, length 48
15:15:29.306158 IP serv.maboite.fr.ntp > pc666.maboite.fr.ntp: NTPv3, symmetric active, length 48
</pre>
<p>Là, on voit un &laquo;&nbsp;pc315&#8243; qui continue de demander à l&#8217;extérieur (le firewall l&#8217;autorise pour l&#8217;instant) et un pc666 qui a prit le pli.</p>
<h1>Les postes Linux</h1>
<p>Installez le paquet &laquo;&nbsp;ntpdate&nbsp;&raquo; et planifiez <code>ntpdate-debian</code> en crontab. Le manuel explique : ntpdate-debian utilise le fichier <code>/etc/default/ntpdate</code> pour la configuration (liste des serveurs de temps etc). Il contient, sans les commentaires :</p>
<pre>NTPDATE_USE_NTP_CONF=yes
NTPSERVERS="0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org"
NTPOPTIONS=""</pre>
<p>Mais, dans ce cas, à cause du &laquo;&nbsp;yes&nbsp;&raquo;, il utilise la conf de l&#8217;éventuel <code>/etc/ntp.conf</code> installé via le serveur NTP (paquet ntp). Comme on ne l&#8217;a pas mis sur les clients (ça sert à rien de faire tourner un serveur NTP), il faut donc soit passer <code>NTPDATE_USE_NTP_CONF</code> à &laquo;&nbsp;no&nbsp;&raquo;, soit ne pas planifier <code>ntpdate-debian</code>, mais <code>ntpdate</code> avec une tartine de paramètres.<br />
Si vous mettez &laquo;&nbsp;no&nbsp;&raquo;, il faudra indiquer dans NTPSERVERS au moins / uniquement votre serveur du LAN. J&#8217;ai constaté qu&#8217;avec le nom de machine, ça ne passait pas. Mais avec l&#8217;IP, c&#8217;est OK. A creuser.</p>
<p>Pigé ? moi-même, je me perds régulièrement là-dedans.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/11/13/monter-un-serveur-ntp-configurer-les-clients-windows-et-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Limiter la bande passante entre 2 hosts (dont l&#8217;un en Linux)</title>
		<link>http://michauko.org/blog/2009/10/20/limiter-la-bande-passante-entre-2-hosts-dont-lun-en-linux/</link>
		<comments>http://michauko.org/blog/2009/10/20/limiter-la-bande-passante-entre-2-hosts-dont-lun-en-linux/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 09:23:55 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[bande passante]]></category>
		<category><![CDATA[LARTC]]></category>
		<category><![CDATA[limitation]]></category>
		<category><![CDATA[tc]]></category>
		<category><![CDATA[WSUS]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=865</guid>
		<description><![CDATA[Dans la série aide-mémoire. Imaginez : approbation d&#8217;une tonne de patchs de sécurité Windows en retard sur un WSUS avec des réplicats. Immédiatement, il commence à downloader, via un proxy Squid sous Linux, donc via une machine Linux. Et là, votre bande passante est réduite à de la poussière car WSUS, via le proxy, pompe [...]]]></description>
			<content:encoded><![CDATA[<p><em>Dans la série aide-mémoire.</em><br />
Imaginez : approbation d&#8217;une tonne de patchs de sécurité Windows en retard sur un WSUS avec des réplicats. Immédiatement, il commence à downloader, via un proxy Squid sous Linux, donc via une machine Linux.<br />
Et là, votre bande passante est réduite à de la poussière car WSUS, via le proxy, pompe tout, à fond.<br />
Raaaaaaaaaa. M&#8217;énerve.</p>
<p>Vite, iptables doit pouvoir m&#8217;aider. Je suis une buse en QoS, mais bon, j&#8217;ai confiance en Google <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span id="more-865"></span></p>
<p>Après quelques recherches, je suis tombé sur <a href="http://lartc.org/" target="_blank">LARTC</a>, Linux Advanced Routing &#038; Traffic Control. En quelques mots, une bande de fous-furieux qui aiment les lignes de commandes compliquées (à côté de ça, iptables est un joujou) pour faire de la QoS.<br />
Y&#8217;a un howto super complet : <a href="http://www.traduc.org/docs/howto/vf/lartc.html">http://www.traduc.org/docs/howto/vf/lartc.html</a>. Pas le temps, ça sent le sujet compliqué et vaste. On verra plus tard.</p>
<p>Là je veux juste limiter le trafic entre mon proxy et ce p~!?[n de serveur WSUS.</p>
<p>J&#8217;ai trouvé <a href="http://lartc.org/howto/lartc.ratelimit.single.html" target="_blank">3 lignes magiques ici </a>(après avoir survolé le <code>man tc</code> histoire de suivre le loin ce que je fais) :</p>
<pre>tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10mbit
tc class add dev eth0 parent 1: classid 1:1 cbq rate 400kbit allot 1500 prio 5 bounded isolated
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.1.2 flowid 1:1</pre>
<p>Je voulais limiter le trafic vers 192.168.1.2 via eth0 à 50 kB/s, soit en gros 400 kbit/s.<br />
Pour annuler, j&#8217;ai &laquo;&nbsp;annulé&nbsp;&raquo; les commandes, si je peux dire. Sans être trop sûr de moi, j&#8217;ai simplement tenté ça :</p>
<pre>tc filter del dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.1.2 flowid 1:1
tc class del dev eth0 parent 1: classid 1:1 cbq rate 400kbit allot 1500 prio 5 bounded isolated
tc qdisc del dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10mbit</pre>
<p>Je n&#8217;ai pas vu d&#8217;effet de bord (genre, tout bloqué ou rien qui ne se rétablit une fois le <em>tc</em> annulé). Donc on va dire que c&#8217;est probablement un peu crade, que je n&#8217;y comprends pas tout, mais que ça marche.</p>
<p>Voilà, si ça peut vous servir, j&#8217;en suis content.<br />
noob-powered</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/10/20/limiter-la-bande-passante-entre-2-hosts-dont-lun-en-linux/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mise en place de Nagios : en partant de rien</title>
		<link>http://michauko.org/blog/2009/10/07/mise-en-place-de-nagios/</link>
		<comments>http://michauko.org/blog/2009/10/07/mise-en-place-de-nagios/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 09:31:45 +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[supervision]]></category>
		<category><![CDATA[check_http]]></category>
		<category><![CDATA[check_ldap]]></category>
		<category><![CDATA[check_nt]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[NRPE]]></category>
		<category><![CDATA[NSClient++]]></category>
		<category><![CDATA[snmp]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=360</guid>
		<description><![CDATA[Introduction Gros guide de mise en place de Nagios sur Debian, avec comme principal objectif de vous amener petit à petit à monitorer tout ce qu&#8217;on peut imaginer sur un parc de serveurs Linux, Windows, des équipements réseaux etc. Ca part d&#8217;un exemple bien détaillé (je l&#8217;espère) pour bien faire comprendre les principes et l&#8217;esprit [...]]]></description>
			<content:encoded><![CDATA[<h1>Introduction</h1>
<p>Gros guide de mise en place de Nagios sur Debian, avec comme principal objectif de vous amener petit à petit à monitorer tout ce qu&#8217;on peut imaginer sur un parc de serveurs Linux, Windows, des équipements réseaux etc. Ca part d&#8217;un exemple bien détaillé (je l&#8217;espère) pour bien faire comprendre les principes et l&#8217;esprit Nagios pour espérer à la fin, vous avoir donné de quoi évoluer facilement pour ajouter n&#8217;importe quel test.<br />
Au départ, je voulais faire un guide super complet, mais avec Nagios, on ajoute des tests tous les jours, pour ainsi dire. Bref, ça fait 3 mois que j&#8217;attendais pour faire ce guide. Finalement je l&#8217;écourte un peu et j&#8217;ajouterai (peut-être) des chapitres plus tard sur ce blog.<br />
Après un premier exemple bien complet, je donne des exemples rapides de contrôles courants.</p>
<p>J&#8217;ai eu l&#8217;idée de rédiger cet article sachant que je ne connaissais rien à Nagios (rien de sa mise en place, rien des fichiers de conf, rien de sa syntaxe, rien des outils de base, rien des plug-ins supplémentaires et rien des contributions à gogo sur le web etc). L&#8217;intérêt, n&#8217;y connaissant rien justement, est que j&#8217;explique pas à pas, notamment les principes de l&#8217;outil pour comprendre comment le configurer, en détaillant parfois toutes les panneaux que j&#8217;ai pu me prendre, mais en donnant la solution rapidement <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><del datetime="2009-09-01T15:36:10+00:00">A la fin, je donne mes fichiers de conf, un peu anonymisés et allégés, ils peuvent vous servir pour de la mise en place de certains morceaux ou pour vous guider dans la syntaxe. Exemple, vous voulez surveiller vos serveurs DNS, cherchez le mot &laquo;&nbsp;dns&nbsp;&raquo; dans tous les fichiers, comprenez ce qui y est fait et copiez-collez-modifiez les bons blocs. Reste à changer les noms de hostname <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </del> Hum, ça, ce sera plus tard lorsque j&#8217;aurai complété par d&#8217;autres articles (cf. ci-dessus), je n&#8217;ai pas trop le temps, et sinon, je ne publierai jamais cet article&#8230; il traîne depuis 3 mois&#8230;</p>
<p>Je ne compte pas faire de l&#8217;ombre <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  à <a href="http://blog.nicolargo.com/nagios-tutoriels-et-documentations">Nicolargo</a> (passionné du sujet Nagios) mais mon approche est différente : je pars de ce que Debian a fait pour moi, pas des sources à compiler pour avoir l&#8217;absolue dernière version. Les répertoires de configuration et de chemins des binaires sont différents, tous les plug-ins classiques sont directement disponibles.<br />
Après, une fois l&#8217;outil fonctionnel sur quelques cas, ça reste du Nagios pur. Allez voir son site, il y a de bonnes docs et le forum peut aider aussi. Sans compter d&#8217;autres sites d&#8217;outils de monitoring complémentaires, notamment <a href="http://www.monitoringexchange.org/">http://www.monitoringexchange.org/</a>, et évidemment la <a href="http://nagios.sourceforge.net/docs/3_0/toc.html">doc officielle </a>qui est très bien foutue. J&#8217;y ferai référence autant de fois que j&#8217;y penserai.</p>
<p>La version actuellement packagée sous Debian &laquo;&nbsp;stable&nbsp;&raquo; (Lenny) est Nagios 3.0.6. Comme d&#8217;habitude avec Debian, un peu en retard sur la version officielle, mais il y a d&#8217;autres intérêts à utiliser tout de même la version packagée, à mon avis.<span id="more-360"></span></p>
<h1>Installation</h1>
<h2>Sur un air d&#8217;aptitude install</h2>
<p>Ca commence sur un air connu par un <code>aptitude install nagios3</code>. A noter que ça descend par dépendance 3 paquets <code>nagios-plugins*</code> qui contiendront tout un tas de plugins (contrôle de LDAP, de mail, de MySQL, de MRTG, de serveur FTP&#8230;).<br />
Une remarque pendant l&#8217;installation (pour le chapitre suivant) :</p>
<pre>[...]
Get:10 ftp://ftp.fr.debian.org lenny/main nagios3-doc 3.0.6-3 [2034kB]
[...]
serious bugs of nagios3-common (-> 3.0.6-3) <done>
 #519341 - nagios3-common: missing "then" in nagios3-common.prerm (Fixed: nagios3/3.0.6-4)
[...]</pre>
<p>On voit aussi passer ces plugins :</p>
<pre>[...]
Creating config file /etc/nagios-plugins/config/http.cfg with new version
Creating config file /etc/nagios-plugins/config/load.cfg with new version
Creating config file /etc/nagios-plugins/config/mail.cfg with new version
[...]</pre>
<p>Lisez de préférence tous les fichiers <code>README.Debian</code> des répertoires <code>/usr/share/doc/nagios3</code> et <code>/usr/share/doc/nagios-plugins</code>. Il y a 2/3 infos importantes, mais je les reprends au fil de l&#8217;eau dans la suite de l&#8217;article.</p>
<h2>Droits d&#8217;accès à l&#8217;interface web de Nagios</h2>
<p>Les <code>README.Debian</code> habituels qu&#8217;on trouve dans <code>/usr/share/doc/nagios*</code> parlent du truc et indiquent qu&#8217;on doit avoir une question posée pendant l&#8217;installation. Vu le bug mentionné plus haut par apt-listbugs (<a href="http://michauko.org/blog/2007/10/19/le-paquet-du-jour-apt-listbugs/">c&#8217;est quoi ?</a>), je ne m&#8217;étonne qu&#8217;à moitié de n&#8217;avoir pas vu passer de &laquo;&nbsp;fenêtre&nbsp;&raquo; (ncurses) pendant l&#8217;installation. Doc pas à jour ou vrai bug. Bon bref, il faut rectifier le tir.</p>
<p>On voit dans <code>/etc/apache2/conf.d/nagios3.conf</code> que les droits sont gérés par <code>htaccess</code> (voir directive <code>AuthUserFile</code>)dans <code>/etc/nagios3/htpasswd.users</code>. Or, ce fichier n&#8217;existe pas, on doit donc le créer.</p>
<pre>htpasswd -c /etc/nagios3/htpasswd.users nagiosadmin</pre>
<p>Le nom <code>nagiosadmin</code> semble important pour éviter certains ennuis (de ce que j&#8217;en ai lu, mais je ne sais plus où, peut-être <a href="http://www.onlamp.com/pub/a/onlamp/2002/09/26/nagios.html?page=3">là</a>).<br />
Enfin, vérifiez les droits sur le fichier en question, idéalement, il faut :</p>
<pre>chown root:www-data /etc/nagios3/htpasswd.users
chmod 640 /etc/nagios3/htpasswd.users</pre>
<p>Et recharger apache via <code>/etc/init.d/apache2 reload</code>.<br />
L&#8217;adresse d&#8217;accès doit être <code>http://votre.serveur/nagios3/</code>.</p>
<h1>Principe de base et cheminement de ma doc</h1>
<p>Une fois qu&#8217;on a pataugé un peu, il en ressort quelques grands principes pour gagner en autonomie et arriver à pondre du fichier de conf au kilomètre ou savoir où regarder pour trouver un plug-in tiers, le mettre en place, l&#8217;utiliser et même l&#8217;adapter.<br />
Quelques grandes idées pour démarrer :</p>
<ul>
<li>Nagios appelle des scripts permettant de contrôler un élément particulier (ou plusieurs d&#8217;un coup) : contrôler un service, les espaces disques, la charge CPU, la réponse d&#8217;un site web, la charge d&#8217;un port de switch etc</li>
<li>On a des modèles d&#8217;appels de scripts, nommés en général &laquo;&nbsp;check_quelquechose&nbsp;&raquo; permettant de comprendre les paramètres pour un contrôle donné (valeurs limites, nom du truc à regarder</li>
<li>Il faudra déployer des agents pour certains contrôles, notamment pour contrôler du Windows. En gros, pour obtenir des informations qui sont récupérables par un traitement local uniquement, pas à distance. Normal me direz-vous. Ces agents sont des à côtés du projet Nagios. Mais il y a déjà tout ce qu&#8217;il faut.</li>
<li>Il va falloir décrire nos machines une à une et ce qu&#8217;on contrôle pour chacune (forcément, c&#8217;est pas magique comme outil). On pourra faire des groupes de machines et y associer des contrôles appliqués à ces groupes. Exemples : toute machine hébergeant un serveur web aura de base un contrôle vérifiant le port 80 ; toute machine Windows aura de base un contrôle sur la nécessité d&#8217;applications de patchs, un contrôle sur l&#8217;espace disque etc&#8230;</li>
</ul>
<p>Dans cette doc, je vais décrire chaque sujet dans l&#8217;ordre dans lequel j&#8217;ai mis en place les contrôles, souvent en partant de la doc officielle (parfois pas exactement à jour) puis en adaptant au contexte Debian qui a, comme d&#8217;habitude, pré-mâché certaines choses (mise à dispo de scripts, &laquo;&nbsp;modèles&nbsp;&raquo; pour tel type de machine, de switchs etc).<br />
Je voulais avant tout contrôler un peu tous ces jolis serveurs Windows qui sont peu bavards en général (ou qui racontent uniquement des trucs dont on se fout)&#8230; Donc il y a une bonne partie sur l&#8217;interfaçage avec Windows ; cas somme toute courant je pense.<br />
Du coup, je dissémine des informations malgré moi à mesure de ma compréhension (lorsque j&#8217;ai &laquo;&nbsp;appris&nbsp;&raquo; Nagios) ; et surtout en ayant rédigé la doc quelques mois après (hum).</p>
<p>Bon, en bref, Nagios est un outil <strong>tout sauf clef-en-main</strong> (sauf peut-être si vous optez pour un système comme <a href="http://fannagioscd.sourceforge.net/">FAN</a>, mais vous aurez un système dédié &laquo;&nbsp;limité&nbsp;&raquo; à Nagios&#038;co je suppose)<br />
Le paramétrage est long et on en ajoute chaque jour.<br />
Pour le planning pour le patron, prévoyez large. Mise en place et premiers résultats quelques heures tout au plus, paramétrage plus poussé : quelques semaines. Plus on en découvre, plus on monitore de choses. On corrige les problèmes et on en anticipe d&#8217;autres grâce à Nagios. Bref, le bonheur avec reporting pour le patron. A la fin, on commence à écrire ses propres scripts, en n&#8217;importe quel langage.</p>
<p>Ah au fait, attention aux alertes par mail. Nagios vous dit tout : &laquo;&nbsp;tel service est tombé&nbsp;&raquo;, &laquo;&nbsp;tel service est toujours KO&nbsp;&raquo;, &laquo;&nbsp;tel service est revenu&nbsp;&raquo;. Multiplié par le nombre de service et de machines, ça fait des mails à la pelle. Faudra prévoir des règles de tri dans un premier temps&#8230;</p>
<h1>C&#8217;est parti</h1>
<h2>Surveillance des basiques de serveurs Windows (NT, 2000, XP, 2003 et +)</h2>
<p>Oui les libristes vont encore perdre du temps à critiquer le fait que je parle de Windows-le-mal-incarné d&#8217;abord. Economisez-vous. Mon point de vue est que justement, Nagios aide très bien à monitorer &laquo;&nbsp;du windows&nbsp;&raquo; là où Windows est quand même à chier niveau remontées d&#8217;alertes, en standard. Autant, un Linux un tant soit peu configuré vous remonte déjà plein de choses par mail, par exemple, qu&#8217;il ne sera pas forcément la peine d&#8217;aller contrôler par Nagios.</p>
<h3>Installation et 1er paramétrage de l&#8217;agent NSClient++</h3>
<p>Si vous voulez la doc officielle, commencez par là (<a href="http://nagios.sourceforge.net/docs/3_0/quickstart.html">http://nagios.sourceforge.net/docs/3_0/quickstart.html</a>) et enchainez sur <a href="http://nagios.sourceforge.net/docs/3_0/monitoring-windows.html">http://nagios.sourceforge.net/docs/3_0/monitoring-windows.html</a>.<br />
Il faut donc télécharger et déployer un agent windows pour Nagios. Disponible en 32, 64 bits. Je pense qu&#8217;il y en a plusieurs, j&#8217;ai opté pour celui-ci, qui m&#8217;a l&#8217;air complet : <a href="http://sourceforge.net/projects/nscplus">http://sourceforge.net/projects/nscplus</a>.<br />
Lorsque ça marchera pour une machine, il n&#8217;y aura qu&#8217;à déployer l&#8217;agent à distance et injecter le fichier de conf NSC.ini qui va bien sur chaque machine. Pensez aux outils <del datetime="2009-09-01T15:36:10+00:00">sysinternals.com</del> microsoft, notamment les <a href="http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx">PSTools et psexec</a>. C&#8217;est pratique pour automatiser.</p>
<p>L&#8217;agent apporte une interface entre l&#8217;appelant Nagios et un serveur Windows. Il apporte aussi de base quelques outils pour effectuer une certaine batterie de tests. Le paramétrage des tests que l&#8217;on veut se fait sur le serveur Nagios, pas du côté de l&#8217;agent Windows.<br />
Si on veut ajouter un test qui n&#8217;est pas prévu par cet agent, il faudra écrire un script, sous windows cette fois, et le définir dans l&#8217;agent, qui sert de relai, en gros. On le verra plus bas avec le contrôle des patchs Windows en attente d&#8217;installation.</p>
<p>Bref, une fois NSClient++ installé, la doc dit d&#8217;aller trafiquer les options du service Windows qu&#8217;on vient d&#8217;installer. Dans les propriétés du service, allez dans l&#8217;onglet &laquo;&nbsp;Connexion / Log on&nbsp;&raquo; et cocher la case pour autoriser à &laquo;&nbsp;interagir avec le bureau&nbsp;&raquo;.</p>
<p>Maintenant il faut ajuster un peu le fichier de paramétrage de l&#8217;agent, <code>C:\Program Files[ (x86)]\NSClient++\NSC.ini</code>. Sachant que je vais y revenir plus tard pour NRPE (voir plus bas), si c&#8217;est la galère pour déployer le fichier sur vos machines, attendez un peu pour le faire une seule fois (cherchez plus bas dans l&#8217;article NRPE). Enfin bon, commencez par un serveur avant de généraliser un truc qui ne fonctionne pas.</p>
<p>Dans la section [modules], décommenter comme suit (tout sauf CheckWMI.dll et RemoteConfiguration.dll) :</p>
<pre>[modules]
;# NSCLIENT++ MODULES
;# A list with DLLs to load at startup.
;  You will need to enable some of these for NSClient++ to work.
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
; *                                                               *
; * N O T I C E ! ! ! - Y O U   H A V E   T O   E D I T   T H I S *
; *                                                               *
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
FileLogger.dll
CheckSystem.dll
CheckDisk.dll
NSClientListener.dll
NRPEListener.dll
SysTray.dll
CheckEventLog.dll
CheckHelpers.dll
;CheckWMI.dll
;
; RemoteConfiguration IS AN EXTREM EARLY IDEA SO DONT USE FOR PRODUCTION ENVIROMNEMTS!
;RemoteConfiguration.dll</pre>
<p>Dans la partie [NSClient], attribuer un port d&#8217;écoute (celui par défaut à priori) et dans la section [Settings], à voir si vous voulez un mot de passe. Je n&#8217;en ai pas mis, j&#8217;ai limité l&#8217;écoute à l&#8217;adresse IP de mon serveur Nagios ; pratique dans ce cas simple avec un seul serveur de monitoring.</p>
<pre>[...]
[NSClient]
[...]
port=12489
[...]
[Settings]
[...]
;password=secret-password
allowed_hosts=192.168.y.x
[...]</pre>
<p>Notez la section <code>[log]</code> qui peut être pratique quand rien ne fonctionne et qu&#8217;il faut comprendre ce que NSClient reçoit de Nagios.</p>
<p>Redémarrez le service, le client est prêt.</p>
<h3>Premier morceau de config Nagios, la théorie</h3>
<p>Maintenant on va indiquer à Nagios d&#8217;aller voir ce qu&#8217;il se passe là-bas et quels tests de base effectuer pour une &laquo;&nbsp;machine windows&nbsp;&raquo;.<br />
On va partir d&#8217;un modèle de configuration de poste Windows fourni par Debian et définir notre machine, appelée &laquo;&nbsp;mamachine&nbsp;&raquo;.<br />
Là ça fait un peu mal au crâne la première fois, mais une fois le concept compris, vous pondrez des fichiers de conf Nagios au kilomètre. En effet, c&#8217;est le chapitre où on fait le baptême du feu dans la syntaxe Nagios. J&#8217;espère être clair dans ces prochains chapitres.</p>
<hr />
IMPORTANT</p>
<hr /><P><br />
L&#8217;organisation en terme de fichiers dans <code>/etc/nagios3/conf.d/</code> est complètement libre. Vous pouvez tout mettre dans un seul fichier ou couper par site (par exemple), ou encore séparer la déclaration des machines de celle des groupes de machines, mettre la définition de vos propres services à part ou proche des groupes de machines auxquelles ces services se rapportent etc.<br />
C&#8217;est votre choix, à la fin, Nagios intègrera l&#8217;ensemble des directives de configuration de &laquo;&nbsp;conf.d&nbsp;&raquo; (ainsi que des plugins, tout ceci est configuré en amont par Debian dans <code>/etc/nagios3/*conf</code>) et hurlera au &laquo;&nbsp;reload&nbsp;&raquo; si vous vous êtes trompés.<br />
C&#8217;est d&#8217;autant plus libre qu&#8217;en géréral, il y a plusieurs manières d&#8217;organiser les choses pour arriver à un même résultat. Premier exemple ci-dessous : est-ce que je dis que &laquo;&nbsp;mamachine&nbsp;&raquo; appartient au groupe (<em>hostgroup</em>) &laquo;&nbsp;windows-servers&nbsp;&raquo; ou est-ce que je dis que le groupe &laquo;&nbsp;windows-servers&nbsp;&raquo; contient comme membre (<em>members</em>) &laquo;&nbsp;mamachine&nbsp;&raquo;. A vous de voir.<br />
Je mets les mots-clefs Nagios entre parenthèse et <em>en italique </em>pour faire l&#8217;association &laquo;&nbsp;bon français&nbsp;&raquo;-&nbsp;&raquo;mot-clef Nagios&nbsp;&raquo;.</p>
<hr />
TNATROPMI</p>
<hr /><P></p>
<p>Donc, pour une conf de base pour tester une machine via NSClient++, je prends le &laquo;&nbsp;groupe&nbsp;&raquo; Windows (qu&#8217;on complètera plus tard) et je crée une machine &laquo;&nbsp;mamachine&nbsp;&raquo; appartenant à ce groupe. Ce qu&#8217;on appelle ici un &laquo;&nbsp;groupe&nbsp;&raquo; est un &laquo;&nbsp;ensemble des machines auxquelles un certains nombre de tests communs seront appliqués&nbsp;&raquo;. C&#8217;est un <em>&laquo;&nbsp;hostgroup&nbsp;&raquo;</em>. Debian a déjà affecté plusieurs tests à ce groupe. C&#8217;est pratique.<br />
L&#8217;idée sera d&#8217;ajouter par la suite au groupe (<em>hostgroup</em>) &laquo;&nbsp;windows-servers&nbsp;&raquo; d&#8217;autres les tests qui sont communs à tous les Windows : présence de patchs WSUS par exemple. Par exemple, on n&#8217;ajoutera <strong>pas</strong> le contrôle du disque F: qui n&#8217;existe peut-être pas sur tous les serveurs. Là il faudra faire par machine, ou alors un groupe &laquo;&nbsp;des machines ayant un disque F:&nbsp;&raquo;. C&#8217;est votre choix.</p>
<p>Attention, la notion de &laquo;&nbsp;template&nbsp;&raquo; dans Nagios est différente, c&#8217;est réellement un modèle qui définit d&#8217;autres informations sous-jascentes. On n&#8217;y touchera pas (il me semble). Il y a des templates &laquo;&nbsp;windows&nbsp;&raquo; (nommés windows-server, et pas windows-servers qui est le groupe de machine windows, vu ? <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ), mais aussi par exemple un &laquo;&nbsp;template&nbsp;&raquo; de service nommé generic-service sur lequel on se base pour déclarer un service.</p>
<h3>Premier morceau de config Nagios, la pratique</h3>
<p>Alors, je localise le groupe (<em>hostgroup</em>) &laquo;&nbsp;windows-servers&nbsp;&raquo; pré-mâché par Debian. On va l&#8217;utiliser car il amène en standard les contrôles de base : espace disque, charge CPU&#8230;</p>
<pre>srvnag:/etc/nagios3/conf.d# dpkg -S windows.cfg
nagios3-common: /usr/share/doc<strong>/nagios3-common/examples/template-object/</strong>windows.cfg
srvnag:/etc/nagios3/conf.d# cp /usr/share/doc/nagios3-common/examples/template-object/windows.cfg template-windows.cfg
</pre>
<p>Ce fichier contient, sans les commentaires standards mais avec les miens et une fois un peu remodelé, ceci :</p>
<pre>define host{ ; définition d'une machine basée sur le template "windows-server", nommé ci-dessous
        use             windows-server  ; Inherit default values from a template
        host_name       mamachine       ; The name we're giving to this host
        alias           C est mamachine       ; A longer name associated with the host
        address         192.168.x.y     ; IP address of the host
        ; #hostgroups windows-servers ; voir ci-dessous
}
</pre>
<p>Cette dernière ligne (hostgroups) aurait permis de dire &laquo;&nbsp;mamachine&nbsp;&raquo; appartient au groupe (<em>hostgroup</em>) &laquo;&nbsp;windows-servers&nbsp;&raquo; (donc elle hérite de tous ses tests). Dans mon cas, j&#8217;ai plutôt décidé de définir la liste des membres (=machines = <em>&laquo;&nbsp;host&nbsp;&raquo;</em>) d&#8217;un groupe (<em>hostgroup</em>) dans la définition de ce groupe. Voir ci-dessous.<br />
J&#8217;ai adapté les tests fournis par Debian pour le groupe &laquo;&nbsp;windows-servers&nbsp;&raquo; (qui ne contient qu&#8217;une machine pour l&#8217;instant). Voici le fichier résultant :</p>
<pre>### Déclaration du groupes windows-servers auquel on affectera les tests communs à tous les windows
define hostgroup{
        hostgroup_name  windows-servers ; Mes serveurs windows
        alias           Windows Servers ; Long name of the group
}

### Définition des SERVICE que l'on va associer au groupe windows-servers
# Create a service for monitoring the version of NSCLient++ that is installed
define service{
        use                     generic-service
;        host_name               mamachine ; non je ne raisonne pas par machine, mais par groupe
        hostgroup_name         windows-servers; voilà où est l'association service/groupe windows
        service_description     NSClient++ Version
        check_command           check_nt!CLIENTVERSION
}
# Create a service for monitoring the uptime of the server
define service{
        use                     generic-service
;        host_name               mamachine ; non je ne raisonne pas par machine, mais par groupe
        hostgroup_name         windows-servers; voilà où est l'association service/groupe windows
        service_description     Uptime
        check_command           check_nt!UPTIME
}
# Create a service for monitoring CPU load
define service{
        use                     generic-service
;        host_name               mamachine ; non je ne raisonne pas par machine, mais par groupe
        hostgroup_name         windows-servers; voilà où est l'association service/groupe windows
        service_description     CPU Load
        check_command           check_nt!CPULOAD!-l 5,80,90
}
# Create a service for monitoring memory usage
define service{
        use                     generic-service
;        host_name               mamachine ; non je ne raisonne pas par machine, mais par groupe
        hostgroup_name         windows-servers; voilà où est l'association service/groupe windows
        service_description     Memory Usage
        check_command           check_nt!MEMUSE!-w 80 -c 90
}
# Create a service for monitoring C:\ disk usage
define service{
        use                     generic-service
;        host_name               mamachine ; non je ne raisonne pas par machine, mais par groupe
        hostgroup_name         windows-servers; voilà où est l'association service/groupe windows
        service_description     C:\ Drive Space
        check_command           check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}
# Create a service for monitoring the W3SVC service
# c'est un exemple gardé en commentaire pour la syntaxe check_nt de contrôle d'un service, voir plus bas
;define service{
;        use                     generic-service
;        host_name               mamachine
;        service_description     W3SVC
;        check_command           check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
;}
# Create a service for monitoring the Explorer.exe process
# c'est un exemple gardé en commentaire pour la syntaxe check_nt de contrôle d'un processus, voir plus bas
;define service{
;        use                     generic-service
;        host_name               mamachine
;        service_description     Explorer
;        check_command           check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
;}</pre>
<p>Voilà. Si vous rechargez Nagios via <code>/etc/init.d/nagios3 reload</code>, <strong>ben ça plante !!!</strong><br />
Je décris ça juste après avoir décrit &laquo;&nbsp;check_command&nbsp;&raquo; histoire de finir l&#8217;initiation à la conf de base et aux problèmes pénibles du début :/.</p>
<h3>Autres principes à comprendre de cet exemple</h3>
<p>Qu&#8217;y a-t-il d&#8217;autre d&#8217;important dans cette configuration pour comprendre le principe de Nagios ? le mot-clef &laquo;&nbsp;check_command&nbsp;&raquo; bien sûr. Lors de la définition d&#8217;un service, la directive check_command est celle qui explique à Nagios comment effectuer le test et quels paramètres on lui passe. Les paramètres sont séparés par le &laquo;&nbsp;!&nbsp;&raquo;. Le premier argument est le nom de la commande (<em>command</em>) Nagios (et pas du script appelé, pas encore, qui lui s&#8217;appelle <em>command_line</em>).</p>
<p>Exemple :</p>
<pre>        check_command           check_nt!MEMUSE!-w 80 -c 90</pre>
<p>On voit les valeurs d&#8217;alertes warning et critical pour la charge mémoire utilisée, en pourcentage. On retrouvera souvent les mêmes noms d&#8217;arguments alors que les scripts n&#8217;ont rien à voir entre eux (-w pour seuil de warning etc). Il doit y avoir une sorte de norme dans le développement de ces scripts, je suppose.</p>
<p>Pour comprendre le lien entre la <em>command</em> et le script effectivement appelé sur l&#8217;OS, voici :</p>
<pre>srvnag:/etc/nagios-plugins# grep -r command_name * | grep check_nt
config/nt.cfg:  command_name    check_nt
[...]</pre>
<p>On y voit l&#8217;association entre cette commande Nagios et la commande OS appelée :</p>
<pre>srvnag:/etc/nagios-plugins/config/cat nt.cfg
define command {
        command_name    check_nt
        command_line    /usr/lib/nagios/plugins/check_nt -H '$HOSTADDRESS$' -v '$ARG1$'
# cette ligne est erroné d'ailleurs, on le verra plus tard.
}</pre>
<p>La commande (<em>command</em>) check_nt appelle donc le script <code>/usr/lib/nagios/plugins/check_nt</code>.<br />
<strong>C&#8217;est avec lui qu&#8217;il faudra jouer pour &laquo;&nbsp;tester certains tests&nbsp;&raquo; en ligne de commande, avant de comprendre pourquoi ils plantent depuis Nagios mais pas depuis la ligne de commande. C&#8217;est un cas courant.</strong>.<br />
Bon revenons au bug qui m&#8217;occupait et qui devrait aussi vous occuper, à priori un problème lors du reload (je n&#8217;ai plus le message précis), mais on comprend que :</p>
<h3>Il manque le template windows-server</h3>
<p>J&#8217;ai dit le template &laquo;&nbsp;windows-server&nbsp;&raquo;, pas &laquo;&nbsp;windows-servers&nbsp;&raquo; qui est un <em>hostgroup</em>, j&#8217;insiste.<br />
En effet, ce template est fourni dans les packages Debian, mais pas chargé par défaut. En cherchant un peu, on le trouve ici : <code>/usr/share/doc/nagios3-common/examples/template-object/templates.cfg.gz</code>.<br />
Mais si on le <code>gunzip</code> et qu&#8217;on le place dans <code>/etc/nagios3/conf.d</code>, il y a doublon de définition de <code>generic-service</code> comme le montre encore un reload qui plante. Ca se confirme avec cette commande :</p>
<pre>srvnag:/etc/nagios3/conf.d# egrep "name[[:space:]]+generic-service" *
generic-service_nagios2.cfg:        name                            generic-service ; The 'name' of this service template
templates.cfg:        name                            generic-service   ; The 'name' of this service template</pre>
<p>Deux fichiers définissent &laquo;&nbsp;generic-service&nbsp;&raquo;. Les emmerdes continuent.</p>
<p>Donc, je reprends le minimum du template générique, dans mon cas, &laquo;&nbsp;windows-server&nbsp;&raquo;, on verra plus tard si j&#8217;ai besoin de quelque chose d&#8217;autre de ce super-template. Je crée donc ce fichier, tout au moins j&#8217;ajoute ce bout de code quelque part dans ma conf Nagios :</p>
<pre>srvnag:/etc/nagios3/conf.d# cat windows-server_from_templates-gz.cfg
define host{ ; oui ça passe par un "host" pour définir ce modèle de machine "windows-server"
        name                    windows-server  ; The name of this host template
        use                     generic-host    ; Inherit default values from the generic-host template
        check_period            24x7            ; By default, Windows servers are monitored round the clock
        check_interval          5               ; Actively check the server every 5 minutes
        retry_interval          1               ; Schedule host check retries at 1 minute intervals
        max_check_attempts      10              ; Check each server 10 times (max)
        check_command           check-host-alive        ; Default command to check if servers are "alive"
        notification_period     24x7            ; Send notification out at any time - day or night
        notification_interval   30              ; Resend notifications every 30 minutes
        notification_options    d,r             ; Only send notifications for specific host states
        contact_groups          admins          ; Notifications get sent to the admins by default
        hostgroups              windows-servers ; Host groups that Windows servers should be a member of
        register                0               ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}</pre>
<p>Bien sûr, on comprend que ce template dépend lui-même du template &laquo;&nbsp;generic-host&nbsp;&raquo;, mais, ce &laquo;&nbsp;generic-host&nbsp;&raquo; est dans les templates de base de <code>/etc/nagios3/conf.d/</code>. Pas de problème cette fois.<br />
Là, le restart de Nagios devrait bien se passer <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  hop, connexion à l&#8217;interface. Moi perso, j&#8217;y ai vu une tartine de trucs avec des warnings, des &laquo;&nbsp;critical&nbsp;&raquo;, des machins à hurler partout. Surtout des trucs à débugger en fait. Ce qu&#8217;on va faire en expliquant.</p>
<p><em>Attention les remontées par mail vont commencer (par défaut root@localhost). Faites ce qu&#8217;il faut pour récupérer ces mails.</em></p>
<h3>Bug &laquo;&nbsp;missing -l parameters&nbsp;&raquo;</h3>
<p>Le premier bug relevé fût donc un résultat de commande &laquo;&nbsp;missing -l parameters&nbsp;&raquo; dans &#777;l&#8217;interface web&#777; de Nagios.<br />
Pour débugger, il faut en revenir à la ligne de commande comme montré brièvement plus haut. Si on exécute le vrai binaire <code>/usr/lib/nagios/plugins/check_nt</code>, ça marche. Depuis Nagios, ça ne marche pas. Tiens tiens.<br />
Demandez l&#8217;aide pour apprendre à utiliser ce plug-in en ligne de commande :</p>
<pre>srvnag:/etc/nagios-plugins# /usr/lib/nagios/plugins/check_nt
check_nt: Could not parse arguments
Usage:check_nt -H host -v variable [-p port] [-w warning] [-c critical][-l params] [-d SHOWALL] [-t timeout]</pre>
<p>Vous pouvez faire un <code>/usr/lib/nagios/plugins/check_nt --help</code> pour une doc plus complète.<br />
Si vous jouez avec l&#8217;outil en ligne de commande, ça marche pourtant, exemple :</p>
<pre>srvnag:/etc/nagios-plugins# /usr/lib/nagios/plugins/check_nt -H mamachine_ou_son_IP -v MEMUSE -p 12489 -w 80 -c 90
Memory usage: total:3945.26 Mb - used: 1287.70 Mb (33%) - free: 2657.56 Mb (67%) | 'Memory usage'=1287.70Mb;3156.21;3550.73;0.00;3945.26</pre>
<p><strong>Il y a deux problèmes. D&#8217;abord Nagios n&#8217;est pas configuré pour tolérer l&#8217;appel à des scripts &laquo;&nbsp;extérieurs&nbsp;&raquo; (raison sécuritaire). Ensuite, la <em>command</em> check_nt est mal définie (gasp !). J&#8217;en parlais plus haut.</strong></p>
<p>Le README.Debian le disait, et dans notre cas on en a besoin, il faut autoriser Nagios a appeler des scripts extérieur. Il faut positionner <code>set check_external_commands=1</code> dans <code>/etc/nagios3/nagios.cfg</code>. Ensuite, il faut modifier quelque chose dans dpkg pour qu&#8217;une manip soit retenue après mise à jour/upgrade de nagios par aptitude :</p>
<pre>srvnag:/etc/nagios3# /etc/init.d/nagios3 stop
Stopping nagios3 monitoring daemon: nagios3
.
srvnag:/etc/nagios3# dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
srvnag:/etc/nagios3# dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
srvnag:/etc/nagios3# /etc/init.d/nagios3 start
Starting nagios3 monitoring daemon: nagios3/etc/init.d/nagios3: line 64: kill: (19130) - No such process.</pre>
<p><em>A noter, j&#8217;ai vu plusieurs fois un problème de PID non trouvé, on dirait que le fichier /var/run/nagios3/nagios3.pid n&#8217;est pas purgé à l&#8217;arrêt de Nagios ; pas grave.<br />
</em><br />
Enfin, on modifie la <em>command</em> check_nt. Le &laquo;&nbsp;missing -l parameters&nbsp;&raquo; signifie bien qu&#8217;on n&#8217;a pas passé le paramètre &laquo;&nbsp;-l&nbsp;&raquo; au binaire check_nt, paramètre obligatoire pour certains tests. En fait, dans <code>/etc/nagios-plugins/config/nt.cfg</code>, l&#8217;appel à check_nt est défini comme suit :</p>
<pre>        #command_line    /usr/lib/nagios/plugins/check_nt -H '$HOSTADDRESS$' -v '$ARG1$'</pre>
<p>Mais souvent, dans les services associés à notre <em>hostgroup</em> windows-servers, on voit qu&#8217;un deuxième paramètre est passé. Le fameux &laquo;&nbsp;-l&nbsp;&raquo;. C&#8217;est simplement que la définition de la commande (<em>command_line</em>) ne s&#8217;occupe de récupérer qu&#8217;un seul paramètre&#8230;<br />
Je suggère donc de modifier <code>/etc/nagios-plugins/config/nt.cfg</code> comme suit :</p>
<pre>gw:/etc/nagios-plugins/config# cat nt.cfg
# 'check_nt' command definition
define command {
        command_name    check_nt
        #command_line    /usr/lib/nagios/plugins/check_nt -H '$HOSTADDRESS$' -v '$ARG1$'
        command_line    /usr/lib/nagios/plugins/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
}</pre>
<p>Reload de Nagios. Enfin les premiers testent passent !<br />
Pour dire vrai, je suis passé par un stade intermédiaire de &laquo;&nbsp;wrong -l argument&nbsp;&raquo;. J&#8217;ai forcé l&#8217;appel du port (-p 12489) dans la <em>command_line</em> pour régler le problème. Si vous voulez rendre ce port variable, à vous de modifier la définition des services (dans les <em>define service</em>) appelant check_nt pour passer un n-ième argument.<br />
J&#8217;ai aussi fait sauter les apostrophes, ça me faisait des trucs bizarres.<br />
<em>FIXME : si quelqu&#8217;un sait comment activer une trace qui permet de savoir comment a été appelée telle ou telle commande par Nagios, ce serait cool ça permettrait de débugger plus facilement. J&#8217;ai tenté plusieurs niveaux de débuggage, sans succès.</em></p>
<h1>Ouf, premiers tests fonctionnels. Vite, d&#8217;autres !</h1>
<p>Ca marche, c&#8217;est pas trop tôt. Quelques suggestions tirées de ce qui précède :</p>
<ul>
<li>Dans <code>/etc/nagios-plugins/conf.d/</code>, il y a plein de noms de commandes à lire, pour voir ce qu&#8217;on va pouvoir rapidement contrôler. Exemple : contrôler un port https, avec ou sans authentification (plusieurs commandes dispo).</li>
<li>Dans <code>/usr/lib/nagios/plugins/</code>, il y a le pendant en terme de binaires. C&#8217;est bien de se familiariser avec ceux qu&#8217;on compte utiliser pour être sûr de savoir les utiliser en ligne de commande avant de s&#8217;ajouter des bugs en les définissant mal dans la conf Nagios.</li>
</ul>
<p>Je considère par la suite que vous avez bien assimilé ce qu&#8217;on vient de voir et que vous êtes maintenant parés pour créer de la configuration Nagios à grand coup de grep et de copier-coller d&#8217;exemples. Je vais pouvoir donner des bouts de codes en vrac, par thème.</p>
<p>C&#8217;est reparti.<br />
<em>C&#8217;est là où j&#8217;aurais voulu faire une doc méga-complète, mais c&#8217;est impossible. J&#8217;ajouterai donc plus tard des chapitres lorsque j&#8217;estimerai que tel ou tel sujet n&#8217;était pas trivial à mettre en place ou qu&#8217;il y a un concept fort que je n&#8217;ai pas abordé.</em></p>
<h2>Contrôle DHCP</h2>
<p>Plus exactement, &laquo;&nbsp;tester si le serveur DHCP est en mesure d&#8217;attribuer des IP&nbsp;&raquo; (plage pleine ? service KO ?).<br />
Je considère ici mon serveur Nagios comme un simple ordinateur client DHCP sur le réseau (ou une partie du réseau). En exécutant un script, l&#8217;outil check_dhcp simulera une demande de bail et vérifiera que tout se passe bien.<br />
En lisant <code>/etc/nagios-plugins/config/dhcp.cfg</code>, vous voyez vite que la <em>command_line</em> attend un paramètre, l&#8217;adresse du serveur DHCP. Donc, en ajoutant quelque part dans votre <code>/etc/nagios3/conf.d/quelquechose.cfg</code> les lignes suivantes, on met en place le contrôle DHCP :</p>
<pre>define service {
        use     generic-service
        host_name mon_serveur_dhcp ; ou alors vous raisonnez par hostgroups, au choix
        service_description     Reponse du DHCP
        check_command           check_dhcp
}</pre>
<p>En ayant bien sûr défini &laquo;&nbsp;mon_serveur_dhcp&nbsp;&raquo; dans un bloc <code>define host</code> quelque part.<br />
Notez qu&#8217;il y a aussi un check_dhcp_interface, qui d&#8217;après <code>/usr/lib/nagios/plugins/check_dhcp --help</code> permet de spécifier une interface particulière.</p>
<p>Ce contrôle est un bon exemple car il faut qu&#8217;il soit lancé avec les droits root &#8211; ou en sudo &#8211; car le principe, je suppose, doit être de forger des paquets pour déclencher une attribution de bail du serveur DHCP ; et forger des paquets => droit root, un peu comme l&#8217;outil de scan de port &laquo;&nbsp;nmap&nbsp;&raquo; dans certains types de scans. Lire <code>/usr/share/doc/nagios-plugins/README.Debian</code> à ce propos. Ca raconte de faire :</p>
<pre>dpkg-statoverride --update --add root nagios 4750 /usr/lib/nagios/plugins/check_dhcp</pre>
<p>Sinon, vous aurez un joli <code>Warning: This plugin must be either run as root or setuid root.</code> dans l&#8217;interface Nagios.<br />
Dans mon cas, le serveur DHCP est un Windows (ah, j&#8217;te parle plus). J&#8217;ai donc aussi installé le client NSC++ sur cette machine afin de pouvoir remonter de base tous les autres indicateurs. En effet, j&#8217;ai déclaré &laquo;&nbsp;mon_serveur_dhcp&nbsp;&raquo; dans la catégorie windows-servers, donc il récupère de base tous les tests concernant le groupe &laquo;&nbsp;windows-servers&nbsp;&raquo;, contrôle des disques, RAM, blablabla.<br />
Hop, un test de plus.</p>
<h2>Zoom sur les groupes de machines</h2>
<p>J&#8217;en parle tout de suite car il y a déjà des groupes (<em>hostgroups</em>) définis dans <code>/etc/nagios3/hostgroups_nagios2.cfg</code>. Notamment les machines &laquo;&nbsp;pingables&nbsp;&raquo;. Je trouve que c&#8217;est une bonne idée d&#8217;ajouter des groupes type &laquo;&nbsp;les serveurs web&nbsp;&raquo; ou &laquo;&nbsp;les serveurs de mail&nbsp;&raquo;. Même si pour l&#8217;instant vous n&#8217;avez pas encore défini de service (<em>define service</em>) pour ces groupes, ça permet de s&#8217;organiser et de prévoir la distribution automatique de plein de tests à mesure qu&#8217;on déclare nos <em>host</em> et qu&#8217;on les affecte à ces groupes (<em>hostgroup</em>), et non pas aux machines.</p>
<p><em>Au passage, avec un bon <code>dpkg -S base/debian.png</code> et un grep qui va bien, vous allez vite localiser le bout de configuration qui permet d&#8217;affecter des icones aux types de serveurs, pour faire joli dans l&#8217;interface.</em></p>
<h2>Droits d&#8217;utilisateurs, contacts</h2>
<p>Pour créer un utilisateur en lecture (votre patron par exemple, il faut le limiter, pour pas qu&#8217;il fasse n&#8217;importe quoi depuis l&#8217;interface), le mieux est de lire <a href="http://nagios.sourceforge.net/docs/3_0/cgiauth.html">http://nagios.sourceforge.net/docs/3_0/cgiauth.html</a>. Attention, c&#8217;est fourbe car le menu de replanification &#8211; par exemple &#8211; de test de service est disponible pour tous les utilisateurs, mais c&#8217;est après validation de l&#8217;action qu&#8217;on voit que la personne n&#8217;a bien <strong>pas</strong> le droit de lancer une planification de tests.</p>
<p>Dans le cas d&#8217;une installation énorme de serveurs, il est possible d&#8217;affecter des contacts à tel ou tel serveur. Vous pouvez aussi donner les droits de supervision à une personne sur un certain ensemble de contrôles uniquement, ce genre de trucs.<br />
Car la liste peut être longue une fois déclarés une 20aine de serveurs triés en X catégories&#8230;</p>
<h2>Vue par service</h2>
<p>Dans l&#8217;interface web de Nagios, vous avez sûrement trouvé le menu qui permet d&#8217;avoir un aperçu par <em>hostgroup</em>. On peut aussi créer une vue par service. Exemple, j&#8217;ai mis plein de contrôles de &laquo;&nbsp;services publics&nbsp;&raquo;, à savoir la réponse d&#8217;un FTP distant, la présence d&#8217;un serveur web distant, la réponse spécifique (recherche d&#8217;un mot dans un page web reçue) etc. J&#8217;estime que tout ça représente un ensemble, mes &laquo;&nbsp;services publics dont j&#8217;aimerais être sûr qu&#8217;ils sont bien online à tout moment sinon on perd nos clients&nbsp;&raquo;.<br />
Je vais donc définir un &laquo;&nbsp;groupe de service&nbsp;&raquo; (<em>servicegroup</em>) rassemblant des couples (machine , service).</p>
<p>Plus précisemment, il s&#8217;agit de lister des couples (<em>host_name</em> d&#8217;un <em>host</em> , <em>service_description</em> d&#8217;un <em>service</em>).<br />
Petit exemple :</p>
<pre>define servicegroup {
        servicegroup_name       public-services
        alias                   Services Internet
        members                 srvweb,Check URL non signee,ftpext,Check FTP ; les fameux couples host/service
}</pre>
<p>Je suppose ici que les <em>define host</em> &laquo;&nbsp;srvweb&nbsp;&raquo; et &laquo;&nbsp;ftpext&nbsp;&raquo; sont définis, ainsi que les <em>define service</em> &laquo;&nbsp;Check FTP&nbsp;&raquo; et &laquo;&nbsp;Check URL non signee&nbsp;&raquo; ; ces exemples seront donnés plus bas dans cette doc.<br />
Pour les services, il s&#8217;agit bien de leur description longue, pas de leur nom.<br />
Ainsi, dans le menu &laquo;&nbsp;servicegroup overview&nbsp;&raquo;, vous verrez un groupe &laquo;&nbsp;Services Internet&nbsp;&raquo; vous donnant d&#8217;un coup d&#8217;oeil l&#8217;état de tous vos services publics/web.</p>
<h2>Contrôle de services Windows</h2>
<p>Exemple pour un serveur Exchange ou pour une base Oracle, je veux être sûr que tous les services associés sont en cours d&#8217;exécution.<br />
Bon cette fois, je passe sur les groupes de machines Oracle qu&#8217;on pourrait créer. Là le but est d&#8217;appréhender le contrôle de services Windows via NSClient++.</p>
<h3>Exemple avec Exchange</h3>
<p>Si je vous suggère de tester la commande suivante, vous allez vite comprendre :</p>
<pre>srvnagw:/usr/lib/nagios/plugins# ./check_nt -H mon_serveur_exchange -p 12489 -v SERVICESTATE -d SHOWALL -l MSExchangeIS,MSExchangeMTA,SMTPSVC,RESvc,W3SVC</pre>
<p><strong>La liste des noms technique des services s&#8217;obtient en double-cliquant sur le nom d&#8217;un service Windows, dans ses propriétés</strong>.<br />
Reste à définir le service et la commande qui va bien et à l&#8217;affecter à votre serveur ou votre groupe de serveurs Exchange.<br />
Voir plus bas mes exemples si vous êtes paumés.</p>
<p>Ce qui est bien avec cet agent NSClient++, c&#8217;est que ça marche pour n&#8217;importe quel service. Ci-dessous, on découvre que ça marche aussi pour perfmon <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<h3>Exemple avec l&#8217;anti-virus Sophos, remarque sur la syntaxe</h3>
<p>Attention, certains services ont des espaces dans leur nom.</p>
<ul>
<li>Pour les nommer/utiliser en ligne de commande, il faut un backslash \</li>
<li>Pour les nommer/utiliser depuis Nagios, il faut 2 backslash \</li>
</ul>
<p>Exemple :</p>
<pre>define service {
        use generic-service
        hostgroup_name          sophos-servers
        service_description     Svc SOPHOS server
        check_command           check_nt!SERVICESTATE!-d SHOWALL -l Sophos\\ Agent,Sophos\\ Certification\\ Manager,Sophos\\ EMLibUpdate\\ Agent,Sophos\\ Enterprise\\ Manager\\ Scheduler,Sophos\\ Management\\ Service,Sophos\\ Message\\ Router
}
</pre>
<p>Pour tester ce check_nt en ligne de commande, un seul \ suffirait.</p>
<h3>Exemple de surveillance des services Oracle</h3>
<p>Ben c&#8217;est la même chose, un gros <code>check_nt!SERVICESTATE!-d SHOWALL -l blabla</code> où &laquo;&nbsp;blabla&nbsp;&raquo; est la liste de noms de noms instances Oracle, du listener etc.</p>
<h2>Contrôle de perfmon</h2>
<p>Dans la lignée de ce qui précède, si vous voulez surveiller des indicateurs perfmon de serveurs Windows, c&#8217;est jouable.<br />
Notez que perfmon permettant de surveiller à peu près n&#8217;importe quoi sur Windows (charge réseau par exemple), ce test peut être une variante d&#8217;un test de charge via SNMP ; en ce qui concerne la charge réseau. Pour d&#8217;autres indicateurs de perfmon, il n&#8217;y a que NSClient++ je suppose, ou un script dédié.<br />
Notamment, vous pouvez contrôler la taille des files d&#8217;attente du serveur Exchange monitoré précédemment.<br />
Je ne m&#8217;étends pas, mais il faut appeler check_nt avec &laquo;&nbsp;-v COUNTER&nbsp;&raquo; et le nom des indicateurs que l&#8217;on veut suivre.</p>
<h2>Contrôle de switchs</h2>
<p>Les informations sont décrites là : <a href="http://nagios.sourceforge.net/docs/3_0/monitoring-routers.html">http://nagios.sourceforge.net/docs/3_0/monitoring-routers.html</a>.<br />
Il faut être un peu habitué à SNMP, ou alors c&#8217;est l&#8217;occasion de s&#8217;y mettre. Il faut savoir activer le SNMP sur un switch et connaître quelques OIDs.<br />
Ceci dit attention, vous pourrez tester l&#8217;état de certains ports, l&#8217;uptime d&#8217;un switch. Mais pour contrôler la bande passante du trafic d&#8217;un port, il n&#8217;y a pas d&#8217;OID. Il faudra écrire votre script vous-même ou alors, interfacer avec Cacti qui lui stocke l&#8217;historique des informations de compteurs de trafic, permettant ainsi de calculer des vitesses moyennes. Je suis dessus là, donc j&#8217;en parlerai sûrement de ce ces 4.<br />
Le principe est le suivant :</p>
<ul>
<li>Il faut activer le &laquo;&nbsp;requêtage&nbsp;&raquo; SNMP sur le routeur en question, définir une &laquo;&nbsp;communauté&nbsp;&raquo; (si autre que &laquo;&nbsp;public&nbsp;&raquo;), un éventuel mot de passe (si SNMP v3)</li>
<li>S&#8217;inspirer ensuite du modèle de conf générique des switchs dispo ici : <code>/usr/share/doc/nagios3-common/examples/template-object/switch.cfg</code></li>
<li>Reprendre le template generic-switch (et uniquement lui) de <code>/usr/share/doc/nagios3-common/examples/template-object/templates.cfg.gz</code></li>
<li>Lire <a href="http://fr.wikipedia.org/wiki/Snmp">http://fr.wikipedia.org/wiki/Snmp</a></li>
<li>Lire <a href="http://doc.ubuntu-fr.org/snmp">http://doc.ubuntu-fr.org/snmp</a> pour comprendre rapidement les MIB</li>
<li>Tester en ligne de commande pure d&#8217;abord, avec check_snmp</li>
</ul>
<p>Pour activer le SNMP sur un 3com type 4400, l&#8217;attaquer en telnet (menu system management snmp community) car ce n&#8217;est pas accessible en interface web. Pour un netgear, c&#8217;est gérable par l&#8217;interface web du switch (ou alors ça dépend de la version du firmware, j&#8217;ai déjà vu ça aussi). On peut limiter à une interface IP, par exemple le serveur Nagios exécutant la requête.</p>
<h2>Appel à un script tiers, sous Windows : contrôle des patchs en attente</h2>
<p>Truc très pratique, au lieu d&#8217;aller voir dans WSUS-qui-rame-et-qui-est-à-moitié-pratique.<br />
On va utiliser <a href="http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf">NRPE</a>, un agent qui tournera localement sur la machine distante et qui permettra d&#8217;exécuter des scripts. Ca tombe bien NSClient++ peut assurer ce rôle, du moment qu&#8217;on a décommenter <code>NRPEListener.dll</code>, voir plus haut dans la doc.<br />
Nagios appellera donc NRPE qui appellera un script (ici un .wsf). Au niveau des alertes NAgios, on obtiendra des &laquo;&nbsp;warnings&nbsp;&raquo; et &laquo;&nbsp;critical&nbsp;&raquo; suivant la nature des patchs.<br />
J&#8217;utilise le script <a href="http://www.monitoringexchange.org/cgi-bin/page.cgi?g=Detailed%2F2547.html;d=1">suivant </a>(<a href="http://www.monitoringexchange.org/cgi-bin/page.cgi?g=1546.html;d=1">ou celui là, </a>je ne sais plus, essayez les deux).<br />
Placez les par exemple sur C:\ du serveur à monitorer.</p>
<h3>Conf NRPE pour patchs Windows</h3>
<p>Dans la section <code>[NRPE]</code> du fichier NSC.ini d&#8217;un serveur à monitorer, j&#8217;ai dû paramétrer les choses suivantes :</p>
<pre>;# COMMAND ARGUMENT PROCESSING
;  This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1

;  This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&#038;><'"\[]{}) characters in arguments.
allow_nasty_meta_chars=1

allowed_hosts=192.mon.nag.ios</pre>
<p>Et dans la section <code>[NRPE Handlers]</code>, comprenez "les commandes autorisées via NRPE", j'ai simplement créé une commande appelée (au niveau de NSClient/NRPE) "windows_updates" :</p>
<pre>command[windows_updates]=c:\\windows\\system32\\cscript.exe //NoLogo //T:120 c:\\check_windows_updates.wsf /w:0 /c:1
;# RESTE du blabla pour que vous situiez l'endroit
;# COMMAND DEFINITIONS
;# Command definitions that this daemon will run.
;# Can be either NRPE syntax:
;command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
</pre>
<p>Attention aux doubles backslashs/slashs etc.<br />
Rechargez le service NSClient++.<br />
Je suppose que le port par défaut (5666) est accessible depuis NAgios vers votre serveur.</p>
<h3>Conf Nagios pour patchs Windows</h3>
<p>Si tous vos serveurs Windows sont équipés du script et que la conf NRPE dans NSClient++ est bonne pour chacun, vous pouvez ajouter quelque part dans /etc/nagios3/conf.d/ ce bout de code :</p>
<pre>define service{
        hostgroup_name          windows-servers
        use                     generic-service
        service_description     Windows Update
        check_command           check_nrpe_1arg!windows_updates
}</pre>
<p>Si vous n'avez qu'une machine (pour tester), pensez à utiliser <code>host_name toto</code> au lieu de <code>hostgroup_name</code>.</p>
<p>Ensuite, on va définir un test Nagios qui appelle la commande "windows_updates" via NRPE. Le nom windows_updates est bien celui reprit dans la conf NSC.ini, section [NRPE Handlers].<br />
Après quelques tests, j'ai dû recréer mon propre passage d'argument à check_nrpe, script qui d'ailleurs vient normalement avec les plugins de Nagios. Voyez :</p>
<pre>monnagios:/etc/nagios-plugins/config# cat check_nrpe.cfg
# this command runs a program $ARG1$ with arguments $ARG2$
define command {
        command_name    check_nrpe
        command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}

# this command runs a program $ARG1$ with no arguments
define command {
        command_name    check_nrpe_1arg
#JACQUES
        command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 60
        #command_line   /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}</pre>
<p>Notamment en ajoutant un timeout (-t) plus long et en supprimant le 2è argument.<br />
Comme d'habitude, pour inventer cela, il faut jouer avec la commande <code>/usr/lib/nagios/plugins/check_nrpe</code> directement. Et commencer par jouer localement avec le script .wsf (sur la machine Windows, donc), histoire de vérifier que tout va bien et de débugger pas à pas votre bazar (script mal placé, NRPE mal configuré, Nagios mal paramétré pour ce test etc).</p>
<p>Voilà, normalement ce test fonctionne aussi.</p>
<h1>Trucs en vrac</h1>
<p>Par manque de temps et impossibilité de faire un guide "complet", je note 2/3 idées en vrac :</p>
<p>Attention après un <code>/etc/init.d/nagios3 reload</code> : temps de latence (tests en pending) et lorsqu'un test échoue, il est replanifié pour X minutes plus tard. On peut forcer sa réexécution, mais il faut y aller mollo et ne pas être trop impatient.</p>
<p>Il reste tant à dire : la dépendance entre services, la carte des machines, les prévisions de <em>downtime</em> de machines (pour éviter les mails et alertes inutiles), la fréquence des tests.<br />
Mais là, maintenant que vous avez la base, vous allez pouvoir facilement lire n'importe quelle doc (je veux dire, même celles où très peu de choses sont expliquées) pour peaufiner votre installation. J'espère.</p>
<p>A+</p>
<p>(enfin c'est publié, youhou.... ; j'espère que le tout reste cohérent et utile vu que ça a été écrit en plein de fois et à différents moments de mon apprentissage Nagios)</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/10/07/mise-en-place-de-nagios/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<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>Concept de &#171;&#160;Port knocking&#160;&#187;</title>
		<link>http://michauko.org/blog/2009/07/28/concept-de-port-knocking/</link>
		<comments>http://michauko.org/blog/2009/07/28/concept-de-port-knocking/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 16:02:39 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=411</guid>
		<description><![CDATA[Je ne vais pas plagier, je profite de ce qui est écrit là : http://www.commandlinefu.com/commands/view/2785/port-knocking pour résumer en quelques mots et surtout faire connaître ce site (www.commandlinefu.com) qui rassemble des commandes parfois bien sympathiques. On découvre des choses. A vos aggrégateurs RSS, voici son flux. Port knocking : - tant que votre poste client n&#8217;a [...]]]></description>
			<content:encoded><![CDATA[<p>Je ne vais pas plagier, je profite de ce qui est écrit là : <a href="http://www.commandlinefu.com/commands/view/2785/port-knocking">http://www.commandlinefu.com/commands/view/2785/port-knocking</a> pour résumer en quelques mots et surtout faire connaître ce site (<a href="http://www.commandlinefu.com/">www.commandlinefu.com</a>) qui rassemble des commandes parfois bien sympathiques. On découvre des choses.<br />
A vos aggrégateurs RSS, <a href="http://feeds2.feedburner.com/Command-line-fu">voici son flux</a>.</p>
<p>Port knocking :<br />
- tant que votre poste client n&#8217;a pas fait une bonne séquence au guichetier (knock-daemon <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , tel ou tel service est bloqué pour votre IP, via iptables.<br />
- à la fin, vous jouez une séquence pour fermer, ou pas.</p>
<p>Bon j&#8217;avoue, je n&#8217;ai pas testé. M&#8217;enfin, ça doit marcher tout ça. A voir, comme avec le genre fail2ban, si ça ne peut pas être utilisé pour provoquer des dénis de service &#8211; le genre je fais bannir/fermer telle IP que je ne suis pas, évidemment.</p>
<p>Ca + du changement de port sur certains services (SSH notamment), et votre machine devrait être une tombe, normalement. Reste les services publics (http&#8230;) pour chercher une faille.</p>
<p>(et puis si vous adorez mon site, ce dont je ne doute pas, voici <a href="http://michauko.org/blog/feed/rss/">mon flux</a> &#8211; façon de parler ; mais je doute que vous aviez besoin de mon aide pour le trouver)</p>
<p>Bonnes vacances</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/07/28/concept-de-port-knocking/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Windows et les alias (CNAME)</title>
		<link>http://michauko.org/blog/2009/06/30/windows-et-les-alias-cname/</link>
		<comments>http://michauko.org/blog/2009/06/30/windows-et-les-alias-cname/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 08:08:44 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[bugs]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[CNAME]]></category>
		<category><![CDATA[DisableStrictNameChecking]]></category>
		<category><![CDATA[imprimante]]></category>
		<category><![CDATA[LanmanServer]]></category>
		<category><![CDATA[partage]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=363</guid>
		<description><![CDATA[On continue dans la série des articles Windows sur mon blog où autrefois, je parlais de Linux Bon, trève de plaisanterie, j&#8217;ai voulu installer des imprimantes sur un alias de serveur, genre \\mon_serveur_d_impression, quelle que soit la machine utilisée réellement, disons \\vraisrv1. L&#8217;objectif est de rendre transparente la conf sur les postes, si on décide [...]]]></description>
			<content:encoded><![CDATA[<p>On continue dans la série des articles Windows sur mon blog où autrefois, je parlais de Linux <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Bon, trève de plaisanterie, j&#8217;ai voulu installer des imprimantes sur un alias de serveur, genre \\mon_serveur_d_impression, quelle que soit la machine utilisée réellement, disons \\vraisrv1.<br />
L&#8217;objectif est de rendre transparente la conf sur les postes, si on décide de bouger les imprimantes ; et éviter de se payer une grosse reconfig de tous les PC&#8230;</p>
<p>Je vous décris la manip <strong>en tenant compte du bug Microsoft qui va avec</strong> (ou de la feature de sécurité, appelez ça comme vous voulez).<span id="more-363"></span><br />
Le bug est le suivant : impossible d&#8217;accéder à un partage (fichier ou imprimante) en utilisant un alias (CNAME) d&#8217;une machine sur Windows serveur (au moins 2000 et 2003).</p>
<p>Voici comment faire.</p>
<p>Sur votre DNS, créez le CNAME qui pointe de mon_serveur_d_impression et rechargez-le.<br />
Testez, ça ne marche pas : <code>net view vraisrv1</code> affiche les partages et <code>net view mon_serveur_d_impression</code> n&#8217;affiche rien et crie au scandale avec un message complètement inapproprié :</p>
<pre>C:\>net view mon_serveur_d_impression
L'erreur système 52 s'est produite.

Vous n'étiez pas connecté car il y avait un nom en double sur le réseau. Allez dans Système dans le Panneau de configuration et modifiez le nom de l'ordinateur et essayez à nouveau.
</pre>
<p>Appliquez donc la correction décrite ici : <a href="http://support.microsoft.com/?kbid=281308">http://support.microsoft.com/?kbid=281308</a>, à savoir, ajoutez une clef &laquo;&nbsp;DisableStrictNameChecking&nbsp;&raquo; à valeur 1 dans la base de registre, à l&#8217;emplacement &laquo;&nbsp;HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters&nbsp;&raquo;. A faire sur le serveur &laquo;&nbsp;vraisrv1&#8243;, celui pour lequel on veut créer un alias.<br />
Redémarrez le service &laquo;&nbsp;Serveur&nbsp;&raquo; (correspondant à LanmanServer) &#8211; ça, c&#8217;est pas dit dans la doc Microsoft &#8211; ou, plus simplement redémarrez le serveur. Car le service &laquo;&nbsp;Serveur&nbsp;&raquo; est central et il y a pas mal de dépendances.</p>
<p>Ensuite, le <code>net view mon_serveur_d_impression</code> fonctionnera, ou, plus simplement, le &laquo;&nbsp;Démarrer -> Exécuter -> \\mon_serveur_d_impression&nbsp;&raquo;</p>
<p>Avec un nom comme &laquo;&nbsp;DisableStrictNameChecking&nbsp;&raquo;, on pourrait presque croire que c&#8217;est un paramètre de sécurité&#8230;. ils sont forts au marketting Windows. Je vois d&#8217;ici le transparent Powerpoint lors d&#8217;une grand-messe : &laquo;&nbsp;nous avons permis un paramètre laxiste pour permettre de ne plus contrôler le nom réel du serveur&nbsp;&raquo;. Traduction : &laquo;&nbsp;on a corrigé un bug bien moisi qu&#8217;on trouvé des admins sachant gérer un DNS et ayant compris à quoi ça sert&nbsp;&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/06/30/windows-et-les-alias-cname/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>SquidGuard : filtre d&#8217;URL et listes à jour (le plus dur)</title>
		<link>http://michauko.org/blog/2009/05/20/squidguard-filtre-durl-et-listes-a-jour-le-plus-dur/</link>
		<comments>http://michauko.org/blog/2009/05/20/squidguard-filtre-durl-et-listes-a-jour-le-plus-dur/#comments</comments>
		<pubDate>Wed, 20 May 2009 07:53:27 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[filtre]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[squid]]></category>
		<category><![CDATA[squidguard]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=313</guid>
		<description><![CDATA[Edit 02/02/2011 : l&#8217;auteur de Squidguard précise : Bonjour à tous, Suite à une demande récurrente, et visiblement partagée par un certain nombre d'organisme, nous créons une nouvelle catégorie : "social_networks". Elle permettra de filtrer plus spécifiquement les sites de réseaux sociaux, en ne les incluant pas dans des catégories finalement inadaptées. Nous essayerons, tant [...]]]></description>
			<content:encoded><![CDATA[<hr />
<strong>Edit 02/02/2011 : l&#8217;auteur de Squidguard précise :</strong></p>
<pre>    Bonjour à tous,

    Suite à une demande récurrente, et visiblement partagée par un certain nombre d'organisme, nous créons une nouvelle catégorie : "social_networks".

    Elle permettra de filtrer plus spécifiquement les sites de réseaux sociaux, en ne les incluant pas dans des catégories finalement inadaptées.

    Nous essayerons, tant que faire ce peut, de sortir les sites complets des autres catégories (par exemple facebook de la catégorie blog).

    Cordialement </pre>
<p><strong>FIN</strong></p>
<hr />
<p>Pour faire suite à l&#8217;article sur la mise en place de <a href="http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/">Privoxy pour faire sauter les pubs</a> dans toute votre société (ou chez vous sur votre petit réseau local), voici un complément : le filtre d&#8217;URL par catégorie.<span id="more-313"></span></p>
<p>J&#8217;ai eu l&#8217;occasion de jouer avec SquidGuard à travers un serveur IPCOP mis en place par mes soins dans l&#8217;école primaire de mon village, avec la bénédiction du Ministère de l&#8217;Education. Ca marche pas mal, il faut avouer. N&#8217;ayant pas de moyen, une école optera certainement pour des listes de filtrages gratuites. Si une seule était à retenir, ce serait <a href="http://cri.univ-tlse1.fr/blacklists/">celle de l&#8217;Université de Toulouse</a>.</p>
<p><strong>Deux objectifs possibles :</strong></p>
<ul>
<li>éviter les abus en entreprises :sites sociaux à la facebook, vidéos à gogos, porno et autres contre-productivités sur le clavier etc&#8230;</li>
<li>filtrer les sites pour vos enfants (<a href="http://cri.univ-tlse1.fr/documentations/cache/protection_enfance.html">lisez ça aussi, ça donnera d&#8217;autres pistes</a>)</li>
</ul>
<h1>Mise en place sur Debian</h1>
<h2>Installation et docs de base</h2>
<p>Contrairement à pas mal d&#8217;outils sous Debian, l&#8217;installation ne fait rien en soit, elle amène simplement de l&#8217;outillage et la plus grosse part est après.<br />
Commencez par installer le logiciel, via un classique <code>aptitude install squidguard</code>.<br />
Evidemment, votre squid est déjà en place et fonctionnel.</p>
<p>Pensez à lire le fichier <code>/usr/share/doc/squidguard/README.Debian</code> ; c&#8217;est d&#8217;ailleurs une règle générale après une installation de paquet Debian, mais surtout pour SquidGuard qui, après l&#8217;installation, ne fait rien tout seul.</p>
<h2>Principes de fonctionnement</h2>
<p>Je décris le principe avant de foncer la tête dans le guidon.</p>
<p>SquidGuard est simplement une sorte d&#8217;extension à base de scripts et d&#8217;ACL Squid pour filtrer des URL en se basant sur des domaines et des expressions régulières d&#8217;URL<br />
Lui même n&#8217;apporte aucun niveau de filtrage et il faudra aller chercher une liste à jour de sites. C&#8217;est là toute la difficulté.<br />
J&#8217;arrête tout de suite ceux qui pensent bloquer facebook.com en écrivant une ACL bidon genre <code>deny blabla facebook.com</code> dans Squid. Entre les sites genre how-to-un-unblock-facebook.com et les &laquo;&nbsp;redirectors&nbsp;&raquo; genre proxies anonymes, ce sera impossible. D&#8217;où l&#8217;aide de listes, payantes ou non, robotisées ou non, mises à jour régulièrement ou non.<br />
Soit vous payez une liste type urlblacklist.com, soit vous optez pour une gratuite, mais néanmoins efficace, comme celle de l&#8217;Université de Toulouse, cf. plus haut. Sinon, <a href="http://www.squidguard.org/blacklists.html">allez voir là</a> &#8211; je n&#8217;ai pas testé les 2 premiers liens.</p>
<p>La README évoqué ci-dessus parle d&#8217;un paquet &laquo;&nbsp;chastity-list&nbsp;&raquo;, <code>apt-cache search chastity</code> n&#8217;ayant rien donné, je n&#8217;ai pas cherché plus loin.</p>
<p>Une fois la liste choisie, vous obtiendrez généralement des fichiers textes, classés par catégories. Il faut les transformer en base de données type Berkeley-machin (fichiers .db) pour qu&#8217;ils soient efficaces en mémoire.<br />
Ce sera évidemment à scripter automatiquement toutes les nuits (nouvelles listes => nouveaux .db => rechargement de Squid).<br />
A noter que les fichiers .db seront générés par SquidGuard <strong>uniquement lorsqu&#8217;il verra que vous utilisez telle ou telle catégorie dans <code>/etc/squid/squidGuard.conf</code></strong>. SquidGuard n&#8217;ira pas compiler les bases inutilisées (ce qui prend du temps sur des grosses listes, genre &laquo;&nbsp;adult&nbsp;&raquo; (=porno))</p>
<p>Enfin, vous ajouterez les catégories qui vous intéressent en ayant pris soin de créer une belle page qui indique à l&#8217;utilisateur pourquoi tel site est bloqué (je suis sympa, je vous fournis un tel script minimaliste ; en gros une correction de celui fourni dans le package SquidGuard qui est passablement foireux)</p>
<p>Je ne parle pas des aspects communication en entreprise : filtrer les sites aura sûrement un impact important sur le moral des troupes, fonction du gain de bande passante, fonction de la productivité <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Mise en place pratique</h2>
<p>J&#8217;illustre la suite par le blocage de la catégorie &laquo;&nbsp;hacking&nbsp;&raquo;, où l&#8217;on pourra tester par exemple www.warez.com, à partir des listes de l&#8217;Université de Toulouse</p>
<h3>Récupération de la liste de l&#8217;Université de Toulouse</h3>
<p>La base : récupérez soit <a href="ftp://ftp.univ-tlse1.fr/blacklist/">une catégorie</a>, soit <a href="ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz">la totalité</a> (je pars sur cette option). Voyez <a href="http://cri.univ-tlse1.fr/blacklists/">l&#8217;explication de chaque catégorie ici</a>.</p>
<pre>mkdir /root/squidguard
cd /root/squidguard
wget ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz
tar xzvf blacklists.tar.gz
mv blacklists/* /var/lib/squidguard/db/
chown -R  proxy:proxy /var/lib/squidguard/db/
</pre>
<h3>Choix d&#8217;une catégorie</h3>
<p>Dans <code>/etc/squid/squidGuard.conf</code>, on va toucher le minimum. Ajoutez n&#8217;importe où :</p>
<pre>dest hacking {
   domainlist hacking/domains
   urllist hacking/
   log guard_hacking.log
}
</pre>
<p>Pour savoir si une catégorie contient des &laquo;&nbsp;domaines&nbsp;&raquo;, des &laquo;&nbsp;URL&nbsp;&raquo; ou des &laquo;&nbsp;expressions&nbsp;&raquo;, allez voir dans <code>/var/lib/squidguard/db/la_categorie/</code>. En effet, seules quelques catégories ont des &laquo;&nbsp;expressions&nbsp;&raquo;, il s&#8217;agit avant tout des catégories de pubs. Je considère que <a href="http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/">privoxy</a> est là pour ça. Donc je n&#8217;ajoute pas <code>expression hacking/expressions</code> (même pas sûr de la syntaxe). Pour m&#8217;assurer que les &laquo;&nbsp;expressions&nbsp;&raquo; sont utilisées uniquement pour la pub, j&#8217;ai fait ça et vu des fichiers de taille 0 ou non-existant pour la plupart des catégories :</p>
<pre>srv:/var/lib/squidguard/db# ls -l */expres*
-rwxr-xr-x 1 proxy proxy  57 2006-05-10 07:47 ads/expressions
-rw-r--r-- 1 proxy proxy   0 2005-10-18 16:51 adult/expressions
-rw-r----- 1 proxy proxy   0 2002-11-06 14:08 aggressive/expressions
-rw-r----- 1 proxy proxy   0 2002-11-06 14:08 agressif/expressions
-rw-r--r-- 1 proxy proxy   0 1999-03-04 08:07 forums/expressions
-rw-r--r-- 1 proxy proxy   0 1999-03-04 08:07 mail/expressions
-rw-r--r-- 1 proxy proxy  42 2009-03-19 10:42 malware/expression
-rw-r--r-- 1 proxy proxy  47 2009-03-20 13:30 malware/expressions
-rw-r--r-- 1 proxy proxy   0 2005-10-18 16:51 porn/expressions
-rw-r--r-- 1 proxy proxy   0 1999-10-06 17:37 proxy/expressions
-rwxr-xr-x 1 proxy proxy  57 2006-05-10 07:47 publicite/expressions
-rw-r--r-- 1 proxy proxy   0 1999-10-06 17:37 redirector/expressions
-rw-r--r-- 1 proxy proxy 123 2005-06-14 21:33 strict_redirector/expressions
-rw-r--r-- 1 proxy proxy 505 2006-05-23 22:05 strong_redirector/expressions
-rw-r----- 1 proxy proxy   0 2002-11-06 14:08 violence/expressions
-rw-r--r-- 1 proxy proxy   0 1999-04-19 14:04 warez/expressions</pre>
<p>Ensuite, on indique à SquidGuard (donc à Squid) comment réagir pour cette catégorie. Modifier la section <code>acl {}</code> du fichier <code>/etc/squid/squidGuard.conf</code> pour qu&#8217;il y ait ça (gardez ou non la palanquée de lignes de commentaires) :</p>
<pre>acl {
   default {
      pass !hacking all
      redirect http://srv/cgi-bin/squidGuard-simple.cgi?clientaddr=%a&#038;srcclass=%s&#038;targetclass=%t&#038;url=%u
   }
}
</pre>
<p>Si vous voulez bloquer plusieurs catégories, ce sera à base de <code>pass !hacking !adult !blabla all</code>.<br />
Notez dans la section <code>acl {}</code> l&#8217;adresse de redirection utilisée : une page spéciale hébergée sur le serveur, nommée <code>squidGuard-simple.cgi</code>. Il faut maintenant la mettre en place.<br />
A noter aussi, il me semble que de base, la ligne &laquo;&nbsp;redirect&nbsp;&raquo; contient des &laquo;&nbsp;+&nbsp;&raquo; à la place des &laquo;&nbsp;&&nbsp;&raquo; pour passer les arguments. J&#8217;ai pas bien pigé, j&#8217;ai toujours vu des &laquo;&nbsp;&&nbsp;&raquo; et avec les &laquo;&nbsp;+&nbsp;&raquo;, ça ne marchait pas.</p>
<h3>Redirection vers une page spéciale</h3>
<ul>
<li>Attention, j&#8217;ai ouï dire que si le script n&#8217;était pas là, ça passait silencieusement et la requête aboutissait malgré la demande de blocage. Je n&#8217;ai pas testé, j&#8217;ai surtout testé une URL de chaque catégorie que je suis censé bloqué.
</li>
<li>Je considère que votre site web est configuré pour que /cgi-bin/ soit en un &laquo;&nbsp;Alias&nbsp;&raquo; de &laquo;&nbsp;/usr/lib/cgi-bin/&nbsp;&raquo;, c&#8217;est en général défini dans la configuration par défaut d&#8217;Apache2 et vous pouvez vous en assurer rapidement avec cette commande <code>grep cgi-bin /etc/apache2/sites-enabled/*</code> pour voir si ça répond &#8211; en gros.</li>
<li>La liste des variables que l&#8217;on peut passer au script de redirection est donnée dans la doc HTML, <code>/usr/share/doc/squidguard/CONFIGURATION.html</code></li>
</ul>
<p>Deux scripts sont fournis par le mainteneur du paquet Debian pour nous donner une trame pour l&#8217;écriture du script de redirection &#8211; le script qui dira &laquo;&nbsp;accès bloqué blabla, si vous pensez que c&#8217;est une erreur, contactez l&#8217;administrateur blabla&nbsp;&raquo;. Ils sont là :</p>
<pre>srv:/var/lib/squidguard/db# dpkg -S squidGuard*.cgi
squidguard: /usr/share/doc/squidguard/examples/squidGuard.cgi.gz
squidguard: /usr/share/doc/squidguard/examples/squidGuard-simple.cgi.gz</pre>
<p>Le premier est apparement plus complet, prévu pour du multi-langues etc, <strong>mais récupère comme un pied les variables qu&#8217;on lui passe</strong>. J&#8217;ai opté pour l&#8217;autre car rapidement, j&#8217;ai pu mettre en place une page qui indiquait clairement et simplement le site bloqué, la catégorie, l&#8217;IP du demandeur et donnait le mail de contact de l&#8217;administrateur.<br />
Donc soit vous optez pour ces scripts, soit pour le <a href='http://michauko.org/blog/wp-content/uploads/2009/05/squidguard-simple.zip'>mien fourni ici</a>, basé sur le 2è script, traduit en français et épuré de certains trucs inutiles. Voyez :</p>
<p><a href="http://michauko.org/blog/wp-content/uploads/2009/05/20090520_092614.png"><img src="http://michauko.org/blog/wp-content/uploads/2009/05/20090520_092614-300x213.png" alt="squidguard" title="squidguard" width="300" height="213" class="aligncenter size-medium wp-image-336" /></a></p>
<p>On est fin prêt pour un test grandeur nature.</p>
<h3>Relance de Squid via la compilation des listes de blocage</h3>
<p>Lancez la commande <code>/usr/sbin/update-squidguard</code> pour contrôler les droits sur les fichiers de <code>/var/lib/squidguard/db/</code> et générer les .db.<br />
Attention, sur la liste &laquo;&nbsp;adult&nbsp;&raquo; (environ 1 million de domaines), ça peut prendre quelques minutes.<br />
Ce script recharge Squid.<br />
Testez un site de la catégorie &laquo;&nbsp;hacking&nbsp;&raquo;, exemple www.warez.com</p>
<h2>Script de mise à jour automatiques des listes</h2>
<p>Voici un script que j&#8217;ai mis en crontab pour automatiser la récupération de la liste de l&#8217;Université de Toulouse (si mise à jour), la mise à jour qui va bien, création de .db et relance de Squid.</p>
<pre>srv:~# cat /root/squidguard/update_toulouse.sh
#!/bin/sh
cd /root/squidguard
wget -N ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz
rm -rf blacklists
rm -rf /var/lib/squidguard/db/*
tar -xzvf blacklists.tar.gz
# proprio et perm fixées de toute manière par update-squidguard
chown -R proxy:proxy blacklists
mv blacklists/* /var/lib/squidguard/db/
/usr/sbin/update-squidguard
# A priori, si le site est down ou connx internet HS, on reutilisera le .tar.gz actuel
# donc pas de risque de se retrouver avec une base vide
</pre>
<p>Mettez les droits d&#8217;exécution via <code>chmod u+x /root/squidguard/update_toulouse.sh</code> et collez ça dans la crontab :</p>
<pre>0 3 * * 1-5     root    /root/squidguard/update_toulouse.sh</pre>
<p>Ca devrait rouler !</p>
<h2>Divers</h2>
<h3>Log des accès interdits</h3>
<p>J&#8217;ai passé sous silence la ligne &laquo;&nbsp;log guard_hacking.log&nbsp;&raquo;. Elle est optionnelle et permet de garder ou non une trace des accès interdit, par catégorie. A voir, vie privée des gens, tout ça. J&#8217;ai choisi de la nommer quelque_chose.log car ce fichier ira directement dans <code>/var/log/squid/</code> et sera donc &laquo;&nbsp;logrotaté&nbsp;&raquo; naturellement comme tous les logs Squid, via ce qu&#8217;on trouve en standard dans le logrotate de Squid, <code>/etc/logrotate.d/squid</code>, à savoir : <code>/var/log/squid/*.log</code><br />
Vu ?</p>
<h3>Plages horaires</h3>
<p>Vous noterez que la conf simpliste ici peut être étoffée, dans le fichier <code>/etc/squid<br />
/squidGuard.conf</code>, vous avez tous les commentaires nécessaires,  notamment pour faire du [dé]blocage par plages horaires.</p>
<h3>D&#8217;autres compléments pour Squid ?</h3>
<p>Après <a href="http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/">Privoxy</a>, il faudrait un 3è article maintenant sur HAVP. Je vais y penser éventuellement.</p>
<h3>Générer la conf pour toutes les catégories</h3>
<p>Ne réutilisez pas le résultat brutalement, vous bloqueriez même Google, car il est listé dans ce qui ressemble plus à une whiteliste propre à l&#8217;Université de Toulouse, la catégorie &laquo;&nbsp;liste_bu&nbsp;&raquo;.<br />
Afin d&#8217;obtenir la liste complète des déclarations de catégories pour squidGuard.conf, vous pouvez utiliser celà :</p>
<pre>srv:/var/lib/squidguard/db# for i in `find . -maxdepth 1 -type d|awk -F'/' '{print $2}' | sort`
do
	echo -e dest $i {
	echo -e \\t"domainlist $i/domains"
	echo -e \\t"urllist $i/urls"
	echo -e \\t"log guard_$i.log"
	echo }
done</pre>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/05/20/squidguard-filtre-durl-et-listes-a-jour-le-plus-dur/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>&#171;&#160;calamaris&#160;&#187; en Debian stable, ça bug :)</title>
		<link>http://michauko.org/blog/2009/04/21/calamaris-en-debian-stable-ca-bug/</link>
		<comments>http://michauko.org/blog/2009/04/21/calamaris-en-debian-stable-ca-bug/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 09:08:40 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[calamaris]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=244</guid>
		<description><![CDATA[Calamaris est un outil d&#8217;analyse de logs de squid (et d&#8217;autres), qui génère facilement des reports intéressants sur l&#8217;utilité de votre proxy (efficacité du cache, sites les plus demandés etc). La conf de base de calamaris fonctionne bien (encore qu&#8217;il ne faut pas avoir trop modifié le format de ses logs Squid). Cependant, il y [...]]]></description>
			<content:encoded><![CDATA[<p>Calamaris est un outil d&#8217;analyse de logs de squid (et d&#8217;autres), qui génère facilement des reports intéressants sur l&#8217;utilité de votre proxy (efficacité du cache, sites les plus demandés etc).<span id="more-244"></span></p>
<p>La conf de base de calamaris fonctionne bien (encore qu&#8217;il ne faut pas avoir trop modifié le format de ses logs Squid). Cependant, il y a une option intéressante documentée dans <code>/usr/share/doc/calamaris/README.Debian</code>, qui permet de générer des graphiques associés aux reportings tableaux.<br />
<strong>La doc dit de penser à installer le paquet libgd-graph-perl.</strong><br />
Ce qu&#8217;elle ne dit pas, c&#8217;est de corriger un bug connu, <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=501396">décrit ici</a>, pour lequel <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=28;filename=calamaris-graph.patch;att=1;bug=501396">un patch </a>est proposé et corrige effectivement le problème.</p>
<p>Le symptome du bug est le suivant :</p>
<pre>bla:# /etc/cron.daily/calamaris
Use of uninitialized value in concatenation (.) or string at /usr/bin/calamaris line 4083, <> line 22053.
Use of uninitialized value in concatenation (.) or string at /usr/bin/calamaris line 4115, <> line 22053.
Use of uninitialized value in concatenation (.) or string at /usr/bin/calamaris line 4115, <> line 22053.
Can't call method "png" on an undefined value at /usr/bin/calamaris line 4128, <> line 22053.
</pre>
<p>En attendant mieux&#8230; car le développeur de calamaris semble avoir d&#8217;autres chats à fouetter <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pour appliquer la correction, téléchargez le patch et appliquez-le :</p>
<pre>cp -a /usr/bin/calamaris /usr/bin/calamaris.orig
patch calamaris /your/downloaded/calamaris.patch
</pre>
<p>Et voilà :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2009/04/20090421_105303.png"><img src="http://michauko.org/blog/wp-content/uploads/2009/04/20090421_105303-300x299.png" alt="calamaris" title="calamaris" width="300" height="299" class="aligncenter size-medium wp-image-246" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/04/21/calamaris-en-debian-stable-ca-bug/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tunnels TCP via SSH, putty etc</title>
		<link>http://michauko.org/blog/2009/02/23/tunnels-tcp-via-ssh-putty-etc/</link>
		<comments>http://michauko.org/blog/2009/02/23/tunnels-tcp-via-ssh-putty-etc/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 08:01:53 +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[Ubuntu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[tunnels]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=181</guid>
		<description><![CDATA[Salut, Je reprends cette doc écrite il y a 5 ans et anciennement disponible en bon gros HTML-vi-powered dispo ici : http://michauko.org/blog/2009/02/23/tunnels-tcp-via-ssh-putty-etc/ Les photos d&#8217;écrans datent de l&#8217;époque. Mais comme le concept n&#8217;a pas bougé&#8230;. et l&#8217;interface de PuTTY très peu aussi&#8230;. Let&#8217;s go En relisant l&#8217;article, je vois que c&#8217;était vraiment vulgarisé pour être [...]]]></description>
			<content:encoded><![CDATA[<p>Salut,<br />
Je reprends cette doc écrite il y a 5 ans et anciennement disponible en bon gros HTML-vi-powered dispo ici : http://michauko.org/blog/2009/02/23/tunnels-tcp-via-ssh-putty-etc/<br />
Les photos d&#8217;écrans datent de l&#8217;époque. Mais comme le concept n&#8217;a pas bougé&#8230;. et l&#8217;interface de PuTTY très peu aussi&#8230;.</p>
<p>Let&#8217;s go<br />
<em><strong>En relisant l&#8217;article, je vois que c&#8217;était vraiment vulgarisé pour être accessible au plus grand nombre, pardonnez donc les imprécisions techniques et le baratin simplifié &#8211; MERCI</strong></em><br />
<P>&#8211;<P><br />
J&#8217;ai écrit ce document pour 2 raisons. La première est que j&#8217;en ai marre d&#8217;expliquer sans cesse à mes amis cette méthode, la deuxième est que c&#8217;est vraiment une méthode très pratique, puissante et qui n&#8217;a que quelques limitations (et encore – voir chapitre à venir : VPN sur SSH).</p>
<h1>1. Avez-vous besoin de SSH au boulot ?</h1>
<p>Vous êtes 8h par jour au boulot et le proxy chargé de la sécurité de l&#8217;entreprise se charge surtout de vous bloquer quelques sites web et quelques protocoles réseaux à priori non professionnels. En gros, il vous emmerde à longueur de temps et vous aimeriez pouvoir faire les choses suivantes depuis votre boulot :</p>
<ul>
<li>Lire vos mails en POP, IMAP (par un client mail classique plutôt que via le web et l&#8217;interface nullissime de votre fournisseur).</li>
<li>Utiliser Jabber, ICQ, MSN (ou autre protocole) depuis le boulot pour pouvoir rester en contact avec belle-maman.</li>
<li>Prendre le contrôle à distance (VNC, pcAnywhere etc) de votre PC perso avec sa ligne ADSL pour faire je ne sais quoi. D&#8217;autant plus que des outils comme VNC ne gèrent tout simplement PAS les proxys.</li>
<li>Suivre les résultats du football ou consulter un site d&#8217;actualités – en général le proxy bloque largement les sites foot, jeux, facebook et bien d&#8217;autres.</li>
<li>et plein d&#8217;autres choses encore&#8230;</li>
</ul>
<p>Dans ce document, je présenterai le concept ainsi que la mise en oeuvre de la solution (sous Linux ou Windows).</p>
<h1>2. Principe général</h1>
<p>SSH est un outil qui permet de se connecter à une machine distante en mode texte. Sous Linux, on accède à un shell, sous Windows, on pourra voir ça comme l&#8217;accès à une fenêtre DOS, à priori pas très utile, certes. Ca ressemble donc de loin à une connexion telnet, sauf que c&#8217;est laaaaargement plus sécurisé (je n&#8217;en débattrai par ici mais vous pouvez me croire sur parole) et beaucoup plus puissant.<br />
SSH permet notamment de faire du transfert de fichiers (SFTP) et surtout, des tunnels de communication, dans les deux sens (vous comprendrez plus tard). Un tunnel va servir à encapsuler (capturer) des flux réseaux entre le SSH client (votre PC en entreprise avec accès web restreints qu&#8217;on veut contourner) et votre serveur SSH (votre PC à la maison avec ADSL branché 24/24).</p>
<p>Tout se résume à ça : le client SSH établit une connexion avec le serveur SSH à travers le proxy en utilisant une connexion autorisée par le proxy (méthode CONNECT vers un port autorisé). Ensuite, grâce à ça, des tunnels vous permettront de faire passer presque n&#8217;importe quoi à travers le proxy (voir chapitre 4 sur les limitations de ce système).</p>
<p>Le client SSH que j&#8217;utilise est putty (premier lien sur google), c&#8217;est un client libre, gratuit etc, qui permet de faire du telnet, du ssh et surtout d&#8217;utiliser les fonctionnalités de ssh, les tunnels par exemple. Il sait aussi se connecter à travers un proxy.</p>
<h1>3. Mise en place</h1>
<h2>3.1. Côté serveur SSH</h2>
<p>Chez vous, il faut d&#8217;abord installer un serveur SSH.</p>
<h3>3.1.1. Installation</h3>
<p>Sous Linux, vous trouverez forcemment un paquet correspondant à votre distribution. Exemple sous Debian, tapez « apt-get install ssh » et ça devrait le faire.</p>
<p>Sous Windows, c&#8217;est moins simple. Je ne connais pas d&#8217;implémentation libre directement fonctionnelle sous Windows. Et comme vous n&#8217;allez quand même pas payer la version payante de www.ssh.com, vous devrez utiliser www.cygwin.com pour installer un « environnement Linux dans votre Windows ». Cet environnement comprend ensuite la plupart des outils Linux, dont OpenSSH bien sûr. Deux options (au moins) s&#8217;offrent à vous :</p>
<ul>
<li>Installer cygwin de manière classique avec ce qu&#8217;il faut, notamment le paquet ssh (il vous faudra lire un peu de doc à priori).</li>
<li>Utiliser le projet sshwindows qui propose un programme d&#8217;installation global comprenant un cygwin minimaliste et sshd associé. Je n&#8217;ai pas testé personnellement cette solution.</li>
</ul>
<p>Présentation barbare de l&#8217;installation de cygwin : dans les grandes lignes, vous téléchargez le setup.exe puis vous choisissez un miroir de téléchargement, vous installez le minimum vital (par défaut je crois) et vérifiez bien que le paquet ssh est inclus. Au final, vous obtenez une sorte de raccourci façon « fenêtre DOS », sauf que vous êtes dans un environnement Linux et disposez de sa panoplie d&#8217;outils en ligne de commande et même graphique si vous cherchez bien (pour peu que vous ayez installé les paquets qu&#8217;il faut).</p>
<h3>3.1.2. Génération des clefs</h3>
<p>Si vous ne connaissez pas le principe d&#8217;authentification par clefs de SSH, sachez juste que vous devez générer une paire de clefs cryptées utilisées pour la communication entre le serveur et les clients. Même si dans ce document je ne vais pas détailler l&#8217;authentification par clefs, mais juste par mot de passe, cette paire de clefs est nécessaire pour l&#8217;identification du serveur et pour les premières étapes de l&#8217;établissement de la connexion (par mot de passe).<br />
Si vous avez installé SSH sous Debian, le programme d&#8217;installation génère automatiquiment les clefs, pour les solutions, je ne sais pas. Sous cygwin par exemple, vous devrez donc générer ces clefs via la commande « ssh-keygen -t dsa ». Vous pourrez voir ces clefs dans « /etc/ssh », les fichiers sont ssh_host_dsa_key*.</p>
<h3>3.1.3. Etape supplémentaire pour Cygwin</h3>
<p>Un détail sous cygwin (encoooooore), il faut que vous lisiez les docs pour savoir comment lancer le serveur SSH en tant que service Windows plutôt qu&#8217;à la main le matin en partant au boulot&#8230; (cherchez des infos sur le programme cygrunsrv.exe). Pour la version « packagée » par le projet sshwindows, je ne sais pas, lisez la doc.</p>
<p>Sous Linux, ce sera forcemment fait automatiquement.</p>
<h3>3.1.4. Changement du port du serveur SSH</h3>
<p>SSH tourne sur le port 22 par défaut et vous pouvez être quasimment sûr que le proxy du boulot bloque ce port. Donc vous ne pourrez pas atteindre votre serveur depuis chez vous. Ajoutez donc dans le fichier de configuration de sshd (/etc/ssh/sshd_config) une ligne « Port 443 » après la ligne « Port 22 » ou remplacez cette dernière. Redémarrez le service. On choisit le port 443 car c&#8217;est le port https par défaut et le proxy du boulot tolèrera forcemment ce port (au pire, prenez le port 80, http). De plus, https et SSH présentent des similitudes (la couche SSL) et donc utiliser le port 443 a l&#8217;avantage d&#8217;être plus discret (voir chapitre 4.2.).<br />
Si votre firewall le tolère, vous pouvez aussi faire un forward du port 443 vers le 22 en ne laissant que la ligne « Port 22 » dans sshd_config.</p>
<h3>3.1.5. Votre firewall</h3>
<p>Enfin, vous avez certainement chez vous un firewall, n&#8217;oubliez pas d&#8217;ouvrir le port 443 ou 22 (voir chapitre précédent).<br />
Vous avez très probablement aussi une adresse IP dynamique et donc il faut que vous vous trouviez un nom de domaine (essayez www.dyndns.org, ils ont un service gratuit et vous aurez un nom du style chezmoi.dyndns.org mis à jour à chaque reconnexion de votre ADSL). Sinon, vous devrez récupérer votre adresse IP tous les matins et priez pour que l&#8217;ADSL ne tombe pas auquel cas vous risqueriez de changer d&#8217;IP.</p>
<p>Je suppose maintenant que votre serveur est lancé, accessible depuis l&#8217;extérieur et qu&#8217;il fonctionne correctement.</p>
<h2>3.2. Côté client SSH</h2>
<h3>3.2.1. Récupération des paramètres proxy</h3>
<p>Pour les utilisateurs d&#8217;Internet Explorer, allez dans Outils -> Options Internet -> Connexions -> Paramètres réseaux. Vous aurez 2 possibilités, soit l&#8217;adresse et le port sont directement écrit :</p>
<p><img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel1.png" alt="tunnel1" title="tunnel1" width="384" height="361" class="alignnone size-full wp-image-194" /></p>
<p>Soit votre entreprise utilise un script d&#8217;autoconfiguration :</p>
<p><img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel2.png" alt="tunnel2" title="tunnel2" width="384" height="361" class="alignnone size-full wp-image-196" /></p>
<p>Dans ce dernier cas, téléchargez ce script en recopiant l&#8217;adresse dans votre navigateur. Ouvrez-le, c&#8217;est un fichier texte. C&#8217;est simple à comprendre et en général, les dernières lignes vous donnent le proxy qui permet d&#8217;atteindre les sites extérieurs (Internet). La fin ressemble à quelque chose comme « PROXY host:port ».</p>
<p>Si vous utilisez un autre navigateur (je l&#8217;espère pour vous <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , vous saurez sûrement où trouver ces informations.</p>
<h3>3.2.2. Installation de putty (client SSH)</h3>
<p>Téléchargez putty. Il n&#8217;y a pas d&#8217;installation, pas besoin d&#8217;être admin de son poste. Vous n&#8217;avez besoin que de putty.exe sinon prenez le zip qui contient tous les binaires. Le paramétrage se fait comme suit :<br />
<img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel3.png" alt="tunnel3" title="tunnel3" width="426" height="435" class="alignnone size-full wp-image-197" /></p>
<p>Vous saisissez dans le menu « Session » l&#8217;adresse du PC chez vous (IP ou DNS), précisez le protocole SSH et modifiez le port où tourne le serveur SSH (443 à priori – voir chapitres précédents).</p>
<p><img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel4.png" alt="tunnel4" title="tunnel4" width="426" height="435" class="alignnone size-full wp-image-198" /></p>
<p>Dans le menu « Connection », activez l&#8217;envoi de paquets vides réguliers, toutes les 10 secondes par exemple. La connexion SSH se faisant via la méthode CONNECT (comme pour du https), le proxy risque fort de la couper régulièrement si aucun trafic n&#8217;est généré.<br />
<img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel5.png" alt="tunnel5" title="tunnel5" width="426" height="435" class="alignnone size-full wp-image-200" /></p>
<p>Dans le menu « Proxy », vous indiquez le type de proxy, à priori HTTP, son adresse, son port et l&#8217;utilisateur/mot de passe si besoin. La ligne « telnet command » représente en gros le début de la communication entre putty et le proxy pour permettre la connexion au serveur distant (le PC chez vous). Tentez la ligne suivante : « connect %host %port HTTP/1.1\nHost: %host » si la ligne par défaut ne fonctionne pas.</p>
<p><img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel6.png" alt="tunnel6" title="tunnel6" width="426" height="435" class="alignnone size-full wp-image-201" /></p>
<p>Enfin, dans le menu « SSH », vous précisez que vous utilisez le protocole en version 2 et activez la compression – c&#8217;est toujours ça de gagné.</p>
<p>Retournez dans le menu « Session », donnez un nom à votre session et faites « Save » à nouveau. Puis « Open ».</p>
<h3>3.2.3. Le moment de vérité</h3>
<p>Faites « Open », si tout va bien, vous obtiendrez un écran du genre :<br />
<img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel7.png" alt="tunnel7" title="tunnel7" width="278" height="106" class="alignnone size-medium wp-image-203" /></p>
<p>Connectez vous et ça roule. Dans les autres cas, vérifiez bien les informations saisies et éventuellement changez le type de proxy. Parmi les 25 entreprises que j&#8217;ai pu visiter (grandes multinationales comprises), seules 2 ont refusé cette connexion, la première car le proxy était un logiciel merdico-archaïque de Microsoft qui avait déjà du mal à fonctionner normalement avec IE, la deuxième car le proxy était buggé et avait l&#8217;air de ne pas respecter le protocole « normal » entre putty et le serveur ssh (d&#8217;après les traces que j&#8217;ai analysées, le serveur SSH était atteint puis tout partait n&#8217;importe comment).</p>
<p>A ce niveau là, si la connexion est établie et que vous pouvez accéder à votre machine, c&#8217;est banco, vous pourrez « tuyauter » n&#8217;importe quoi via SSH <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>3.3. Les tunnels</h2>
<h3>3.3.1. Créer un port mapping</h3>
<p>Dans le menu « Tunnels », créez un tunnel vers vos serveurs de messagerie (ATTENTION, lisez le chapitre 4.1.3 à propos du forward de messagerie) :</p>
<p><img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel8.png" alt="tunnel8" title="tunnel8" width="426" height="435" class="alignnone size-full wp-image-205" /></p>
<p>Cette fois-ci, lorsque la fenêtre putty sera ouverte et que vous serez signé sur le serveur SSH, il y aura eu création d&#8217;un port mapping du port local 10110 du poste client vers le port 110 du serveur POP de votre provider (le tout via le relai SSH <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Idem pour les ports 10025/smtp:25. J&#8217;ai choisi des numéros de ports locaux (10110 et 10025) différents des vrais ports notamment pour la compréhension. Rien (ou presque) ne vous empêcherait de mapper les port 25 et 110 vers les ports 25 et 110 des serveurs POP et SMTP de monprovider.com.</p>
<p>Ca veut dire que si un programme de messagerie (mozilla, thunderbird, outlook express, lotus notes etc) s&#8217;adresse à votre propre machine (localhost) sur le port 10025, c&#8217;est bien le serveur SMTP de monprovider.com:25 qui répondra. Idem pour le port 10110/110, c&#8217;est le serveur POP qui répondra. A partir de là, configurez votre client mail en indiquant que les serveurs POP et SMTP de monprovider.com sont respectivement localhost (sur port 10110) et localhost (sur port 10025).<br />
Lorsque le client mail fera une requête, c&#8217;est putty qui interceptera la communication et dira au serveur d&#8217;effectuer la requête à partir de l&#8217;autre bout du tunnel vers le serveur:port précisé. Et voilà ! (j&#8217;espère que c&#8217;est clair <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Attention : vérifiez bien que votre client mail n&#8217;utilise aucun proxy pour les connexions locales ! (exemple : « outlook express » utilise la configuration de IE, veillez bien à cocher dans IE la case qui précise de ne « pas utiliser de proxy pour les connexions locales », ça devrait être fait par défaut).</p>
<p>Avec un beau schéma, ça donne ça :<br />
<img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel9.png" alt="tunnel9" title="tunnel9" width="710" height="476" class="alignnone size-full wp-image-209" /><br />
Maintenant que vous savez faire ça, vous pouvez mapper n&#8217;importe quoi et vous coimprendrez rapidement que le port mapping n&#8217;est pas la solution pour tous les problèmes. Exemple, si vous voulez faire de l&#8217;IRC, le serveur que vous joindrez ne sera pas toujours le même suivant les réseaux que vous voulez utiliser.</p>
<h3>3.3.2. Tunnel dynamique (pour ICQ par exemple)</h3>
<p>La limitation des port mapping apparaît rapidement car il faut définir absolument toutes les connexions dont vous avez besoin, ce qui peut être très lourd. Imaginez que vous vouliez mapper certains sites web interdits, comme www.pleindetrucsinterdits.com. Vous n&#8217;avez qu&#8217;à créer un port mapping du style « localhost:12345 -> www.pleindetrucsinterdits.com:80 ». Ca fonctionne – pas dans tous les cas à cause des « virtual hosts » (Merci Toine) &#8211; mais il ne faut pas avoir 50 sites à mapper sinon c&#8217;est l&#8217;enfer.</p>
<p>Une autre limitation est que vous ne pouvez tout simplement pas de cette manière vous connecter à certains services comme ICQ par exemple : en effet, vous pourriez faire un port mapping vers le serveur d&#8217;authentification login.icq.com:5190 par exemple, mais le reste de la communication ne se fera pas car il y a ensuite tout un tas de ports dynamiques alloués qui entrent en jeu. Impossible donc.</p>
<p>La solution est le mapping dynamique. En gros, vous créez un port d&#8217;écoute (port 1080 dans la suite du texte) qui se charge de prendre toute trame réseau qui rentre telle quelle et de la « faire exécuter » depuis l&#8217;autre bout du tunnel. Ca ressemble à un proxy n&#8217;est-ce pas ? En effet, c&#8217;est bien un service que l&#8217;on utilise pour contacter n&#8217;importe quel site/port inaccessible depuis le réseau où l&#8217;on est. C&#8217;est pas beau ça ?<br />
Ca veut notamment dire que dans l&#8217;application qui doit utiliser ce « proxy », vous devez préciser que le nouveau proxy est localhost:1080 et non pas le proxy de l&#8217;entreprise.</p>
<p>Dans putty, créez un tunnel « Dynamic » sur le port 1080 par exemple :</p>
<p><img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel10.png" alt="tunnel10" title="tunnel10" width="282" height="165" class="alignnone size-full wp-image-211" /></p>
<p>Ca donne ça :</p>
<p><img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel11.png" alt="tunnel11" title="tunnel11" width="275" height="125" class="alignnone size-full wp-image-212" /></p>
<p>Et globalement, on peut donc schématiser ça comme ça :</p>
<p><img src="http://michauko.org/blog/wp-content/uploads/2009/02/tunnel12.png" alt="tunnel12" title="tunnel12" width="713" height="482" class="alignnone size-full wp-image-213" /></p>
<p>ATTENTION : une fois ce système mis en place, n&#8217;oubliez pas de dire à l&#8217;application concernée que le proxy pour sortir n&#8217;est plus le proxy de l&#8217;entreprise mais le « proxy » de type SOCKS 4 (si vous avez besoin de le préciser) situé sur localhost, port 1080 ! Pigé ?</p>
<p><strong>(MAJ 2009)</strong><br />
Si vous n&#8217;arrivez pas à faire utiliser ce proxy à votre navigateur, pourquoi ne pas installer un vrai proxy sur votre serveur relai et le mapper via un tunnel normal ? (un &laquo;&nbsp;squid&nbsp;&raquo; local à votre serveur relai fera l&#8217;affaire)</p>
<h3>3.3.3. Tunnel remote ? Ou comment exporter un serveur local (interne) vers l&#8217;extérieur</h3>
<p>Enfin, sur l&#8217;interface de putty, vous avez peut-être remarqué une fonctionnalité inexplorée jusqu&#8217;à présent : les tunnels « remote », par opposition aux tunnels « locaux ». Ca permet non pas de mapper un port local vers un couple machine/port distant mais de faire l&#8217;inverse : mapper un couple machine/port local vers un port distant (sur la machine PC ADSL). Vous ne voyez pas à quoi ça peut servir ? Lisez la suite :</p>
<p>Attention : c&#8217;est mal de faire ça <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  car ça vous permet de rendre accessible un serveur d&#8217;Intranet (par exemple) à partir de votre machine extérieure (PC ADSL) et donc potentiellement accessible à tout le monde depuis le web si vous ne faites pas attention à votre configuration réseau !</p>
<h1>4. Compléments d&#8217;informations</h1>
<h2>4.1. Limitations</h2>
<h3>4.1.1. Bande passante</h3>
<p>Gardez à l&#8217;esprit que vous faites tout passer par la machine chez vous, certainement plus lente en débit que l&#8217;accès web de l&#8217;entreprise notamment pour l&#8217;upload (le retour de communication de votre PC ADSL vers putty). Donc si vous mappez des sites web interdits, ne vous étonnez pas si ça raaaaame, surtout si votre client favori de peer-to-peer tourne plein pot&#8230;</p>
<h3>4.1.2. Jouer en réseau ?</h3>
<p>Décidemment, votre boulot vous passionne&#8230; Bon désolé, c&#8217;est pas possible. La plupart des jeux en réseaux fonctionnent en mode non connecté (UDP) et c&#8217;est pas possible de relayer de l&#8217;UDP avec cette solution. Si vous voulez quand même, cherchez des infos sur un soft qui s&#8217;appelle ZeBeDee, j&#8217;avais pas eu le temps de creuser à l&#8217;époque.</p>
<p><strong>(MAJ 2009)</strong> Sinon, pensez VPN, hamachi&#8230;</p>
<h3>4.1.3. Remarques sur la messagerie</h3>
<p>A propos du mapping vers des serveurs de messagerie, notez que les fournisseurs bloquent en général l&#8217;accès à leur propre SMTP si l&#8217;IP émettrice n&#8217;est pas sur une plage appartenant à l&#8217;opérateur. Pour éviter le spam d&#8217;inconnus. Donc évitez de passer par le SSH d&#8217;un copain ayant son accès web chez un autre fournisseur pour atteindre votre SMTP, ça risque de ne pas fonctionner. Exemple : vous voulez utiliser le SMTP de wanadoo en passant par une passerelle SSH chez Nerim.</p>
<p>Dans le même ordre d&#8217;idées, il faut en général faire du POP avant de pouvoir envoyer un mail, ça s&#8217;appelle pop before smtp me semble-t-il et c&#8217;est aussi fait pour s&#8217;assurer à peu près que l&#8217;adresse IP de l&#8217;émetteur du mail n&#8217;est pas un inconnu car il s&#8217;est authentifié par un login/password pour accéder au POP.</p>
<h2>4.2. « Légalité » de la chose</h2>
<p>Si vous avez peur qu&#8217;un gros baraqué de l&#8217;équipe réseaux débarque dans votre bureau en disant « qui c&#8217;est l&#8217;abruti qui fait du SSH ? », n&#8217;ayez pas peur.<br />
Premièrement, la connexion au serveur SSH ne se traduit que par une ligne dans les logs du proxy, une ligne du style « CONNECT votrenom.dyndns.org:443 », exactement comme si vous vous connectiez au site https de votre banque. C&#8217;est même mieux vu qu&#8217;il n&#8217;y aura qu&#8217;une ligne alors que pour un vrai site web en http(s), il y a aura une ligne par ressource (image, page web etc).<br />
Deuxièmement, au niveau volumétrie de données échangées, étudions l&#8217;exemple de la lecture de vos mails : on utilise grâce au tunnel SSH un protocole dédié à la lecture de mail et l&#8217;envoi (POP/SMTP). Ca consommera laaaaaaaargement moins de bande passante que de lire les même mails par l&#8217;interface web (bourrée de pubs par exempe). De plus, comme ça ramera moins que le chargement complet de pages web, vous mettrez moins de temps à lire vos mails.<br />
Rassuré ?<br />
Une nuance tout de même, si un psychopathe réalise qu&#8217;il s&#8217;agit de SSH sur port 443 et non de HTTPS, il devrait se poser des questions tout de même. Je n&#8217;ai pas encore rencontré de tels psychopathes.</p>
<p>Enfin, rappelez vous quand même la charte informatique que vous avez signée en rentrant dans votre entreprise.</p>
<h2>4.3. Partage de tunnels ?</h2>
<p>Si vous souhaitez faire profiter de votre tunnel un collègue qui tient absolument à suivre aussi le match de football bloqué par le proxy, regardez les options de putty/ssh pour permettr l&#8217;accès aux ports mappés depuis autre part que votre poste local. Exemple : votre collègue entrerait l&#8217;adresse ip de votre machine et un port mappé pour accéder à un site web particulier&#8230;</p>
<h2>4.4. Bug dans putty</h2>
<p>Je ne sais pas si ce bug est toujours d&#8217;actualité, mais à un moment donné, il fallait absolument mettre le tunnel dynamique en dernier dans la liste des tunnels, sinon il ne fonctionnait pas.</p>
<h2>4.5. Transfert de fichier ?</h2>
<p>Installez filezilla, il permet de faire du SFTP. Vous n&#8217;aurez pas besoin de tunnels SSH mais je tenais à signaler cet outil, libre, gratuit etc etc.<br />
Il vous suffit de déclarer le proxy de l&#8217;entreprise dans les préférences puis de créer une connexion de type SFTP (changez le port en 443) et le tour est joué.</p>
<p>Sinon, sous Windows, le produit commercial « Total Commander » permet d&#8217;utiliser votre tunnel dynamique (SOCKS 4).</p>
<h2>4.6. Méthodes alternatives</h2>
<p>Si SSH ne vous plait pas (pauvre fou), vous pouvez toujours vous renseigner sur les outils suivants : httport, httptunnel (linux only je crois). Ils font un peu le même genre de choses, mais en laaaaaaaargement moins bien.<br />
Les deux encapsulent votre trafic réseau dans des trames HTTP, c&#8217;est lourd, c&#8217;est lent etc. Le seul avantage de httport est que les éditeurs vous fournissent des serveurs (htthost) publics, donc pas besoin d&#8217;avoir un serveur relai chez vous ou chez un ami, mais ils rament, sauf si vous payez <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Quitte à mettre en place un outil pour faire relai, optez pour SSH !<br />
<strong>(MAJ 2009)</strong><br />
A noter stunnel pour faire du tunnel SSL pur (si votre admin réseau a grillé votre communication SSH sur un port SSL&#8230;<br />
<strong>(MAJ 2009)</strong><br />
Quelques liens récemment donnés par Toinator et que je n&#8217;ai pas creusé. Lui oui, c&#8217;est du lourd apparement.<br />
Un bon gros guide :<br />
<a href="http://dag.wieers.com/howto/ssh-http-tunneling/">http://dag.wieers.com/howto/ssh-http-tunneling/</a><br />
sslh : en PERL (fixme : retrouver l&#8217;url)<br />
<a href="http://www.rutschle.net/tech/sslh.shtml">sshl</a> : le même recodé en C pour raisons d&#8217;optimisations<br />
<h1>5. Remerciements</h1>
<ul>
<li>Toinator pour la relecture et quelques précisions, l&#8217;initiation à ce genre d&#8217;outils et le chapitre à venir sur le VPN over SSH, si on peut dire.
</li>
<li>Mandraxe</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/02/23/tunnels-tcp-via-ssh-putty-etc/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Falling back to PORT instead of PASV mode</title>
		<link>http://michauko.org/blog/2008/10/14/falling-back-to-port-instead-of-pasv-mode/</link>
		<comments>http://michauko.org/blog/2008/10/14/falling-back-to-port-instead-of-pasv-mode/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 13:30:08 +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[Ubuntu]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[masquerading]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[netfilter]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=162</guid>
		<description><![CDATA[Raaah, je me trainais ce truc là depuis longtemps ; pourtant je sais parfaitement que le FTP est un de ces protocoles un peu pourris vis-à-vis des firewalls (et proxies), mais j&#8217;avais jamais rien fait pour m&#8217;arranger la situation. Bref, l&#8217;occasion de faire un rappel &#8211; je passe la théorie car je donnerais dans l&#8217;à [...]]]></description>
			<content:encoded><![CDATA[<p>Raaah, je me trainais ce truc là depuis longtemps ; pourtant je sais parfaitement que le FTP est un de ces protocoles un peu pourris vis-à-vis des firewalls (et proxies), mais j&#8217;avais jamais rien fait pour m&#8217;arranger la situation.<br />
Bref, l&#8217;occasion de faire un rappel &#8211; je passe la théorie car je donnerais dans l&#8217;à peu près, mais j&#8217;explique l&#8217;aspect pratique pour régler le problème titre de cet article.</p>
<p>Lorsque vous avez des problèmes de mode passif, actif etc en FTP, pensez à ceci.<br />
<em>Si quelqu&#8217;un veut poster en commentaire la théorie expliquant le problème, n&#8217;hésitez pas. Il me semble me rappeler des histoires de trames FTP contenant les IP émettrices et donc nécessité d&#8217;avoir des modules de masquerading particulier pour bien gérer le FTP&#8230; un vague résidu de cours de réseau <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<h1>La configuration</h1>
<p>J&#8217;ai un serveur avec :</p>
<li>un FTP &#8211; restreints à certaines IP, rappelez-vous que FTP n&#8217;est pas du tout sûr (mot de passe en clair) et qu&#8217;il vaut mieux privilégier SFTP (du FTP par dessus SSH), </li>
<li>un shorewall ouvrant les ports 20 et 21</li>
<p>Bref que du bonheur en apparence.</p>
<h1>Le problème</h1>
<p>Malgré ça, je galère toujours d&#8217;un client FTP à l&#8217;autre. Le dernier en date : ncftp pour des échanges depuis un LAN vers ce serveur public. Ca se traduit par un cafouilli général dans les modes passifs etc.<br />
Et un message d&#8217;erreur que pour une fois, j&#8217;ai relu lentement et me suis rappelé le coup du NAT spécifique FTP :</p>
<pre>Falling back to PORT instead of PASV mode</pre>
<p>En soit, je me foutais de savoir comment le client FTP établissait sa connexion, car dans tous les cas ça marchait, ça restait sécurisé dans la limite de ce que je demandais, mais c&#8217;était surtout que la complétion de nom, style <code>cd rep TAB-TAB-TAB</code> mettait 20 secondes à répondre le temps de passer en mode &laquo;&nbsp;PORT&nbsp;&raquo; justement. Soit environ 19,8 secondes de trop.</p>
<h1>Comment on le règle ?</h1>
<p>On pense à activer le NAT spécifique au protocole FTP, dans netfilter. Pour ce faire, par exemple via l&#8217;outil <code>modconf</code> (ou <code>sudo modconf</code> chez Ubuntu) afin d&#8217;activer ces 2 modules :<br />
./kernel/net/netfilter/nf_conntrack_ftp.ko<br />
./kernel/net/ipv4/netfilter/nf_nat_ftp.ko</p>
<p>Point besoin de rebooter, rien.<br />
Voilà, un protocole FTP mieux géré par firewall netfilter sur votre serveur.</p>
<p><em>Excusez-moi pour l&nbsp;&raquo;à peu près technique concernant cet article. FTP ça me gave, c&#8217;est un sac d&#8217;ennuis ce truc. Mais c&#8217;est pratique.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/10/14/falling-back-to-port-instead-of-pasv-mode/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Orange Business Everywhere : pour les costards-cravates avant tout&#8230;</title>
		<link>http://michauko.org/blog/2008/08/06/orange-business-everywhere-pour-les-costards-cravates-avant-tout/</link>
		<comments>http://michauko.org/blog/2008/08/06/orange-business-everywhere-pour-les-costards-cravates-avant-tout/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 17:16:13 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de gueule]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[orange business everywhere]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=143</guid>
		<description><![CDATA[La loose&#8230;. pour dépanner à distance pendant mes congés (sympa le mec non ?), j&#8217;ai installé cet accès 3G-edge-++-gprs-truc-machin de chez Orange. Génial, je teste avant de quitter le bureau, c&#8217;est mieux. Lancement d&#8217;une connexion SSH&#8230;.. timeout&#8230; Deux/trois tests plus tard, je vois le plan : ok pour les ports standards de bureautik-man à la [...]]]></description>
			<content:encoded><![CDATA[<p>La loose&#8230;. pour dépanner à distance pendant mes congés (sympa le mec non ?), j&#8217;ai installé cet accès 3G-edge-++-gprs-truc-machin de chez Orange. Génial, je teste avant de quitter le bureau, c&#8217;est mieux. Lancement d&#8217;une connexion SSH&#8230;.. timeout&#8230;<span id="more-143"></span></p>
<p>Deux/trois tests plus tard, je vois le plan : ok pour les ports standards de bureautik-man à la plage (lire ses mails, naviguer sur Internet) mais le reste&#8230;.. zob.<br />
En gros, j&#8217;ai pu voir vite fait que ça passait pour les ports 80, 443, 465, 993 et 1194. Le reste j&#8217;ai pas cherché. A tous les coups, le 25, 143, 110 doivent passer aussi. Sans compter la miriade de saloperies de ports réseaux d&#8217;un Exchange / Active Dir. Ca doit marcher aussi, sinon comment faire pour vite vite reprendre sa propale depuis son transat ?</p>
<p>Alors bon, le VPN passe, donc c&#8217;est bon me direz-vous. Justement pas. S&#8217;il s&#8217;agit de dépanner le VPN ou si vous avez mis des restrictions sur le VPN (histoire que le VPN ne soit pas nécessairement une énorme porte ouverte dans l&#8217;entreprise), ça vous fait une belle jambe que le VPN fonctionne.</p>
<p>Conclusions :<br />
1) Obligé de se taper des SSH sur port 443, des tunnels à gogo lorsque le VPN est trop restrictif&#8230;<br />
2) Tu parles d&#8217;un accès web, tu peux même pas faire ce que tu veux. Pourtant, dès lors que le port 25 est ouvert, si la motivation principale est comme d&#8217;hab d&#8217;endiguer le spam des zombies etc, franchement, le mal est fait. Ca sert à rien de bloquer le reste.<br />
3) Ou alors j&#8217;ai raté une conf quelque part pour ouvrir le port 22 ? je doute</p>
<p>C&#8217;est mes yeux ou c&#8217;est vraiment de l&#8217;accès restreint ce genre de connexion ?</p>
<p>Enfin, bientôt en vacances, c&#8217;est déjà ça&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/08/06/orange-business-everywhere-pour-les-costards-cravates-avant-tout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installer et déployer OCSInventory-NG</title>
		<link>http://michauko.org/blog/2008/06/10/installer-et-deployer-ocsinventory-ng/</link>
		<comments>http://michauko.org/blog/2008/06/10/installer-et-deployer-ocsinventory-ng/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 09:10:40 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[bureautique]]></category>
		<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[glpi]]></category>
		<category><![CDATA[ocs]]></category>
		<category><![CDATA[ocsagent]]></category>
		<category><![CDATA[ocsinventory]]></category>
		<category><![CDATA[ocsinventory-ng]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=126</guid>
		<description><![CDATA[OCSInventory-NG est un outil d&#8217;inventaire de parc informatique. On l&#8217;associe souvent à GLPI (Gestion Libre de Parc Info), mais c&#8217;est uniquement car GLPI sait aller chercher les infos de OCS. OCSInventory-NG suffit à lui seul &#8211; lorsqu&#8217;il s&#8217;agit d&#8217;inventaire. L&#8217;objectif de cet outil est de remonter automatiquement toutes les informations des ordinateurs (PC Windows, Linux, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ocsinventory-ng.org/">OCSInventory-NG</a> est un outil d&#8217;inventaire de parc informatique. On l&#8217;associe souvent à <a href="http://glpi-project.org/">GLPI</a> (Gestion Libre de Parc Info), mais c&#8217;est uniquement car GLPI sait aller chercher les infos de OCS. OCSInventory-NG suffit à lui seul &#8211; lorsqu&#8217;il s&#8217;agit d&#8217;inventaire.<br />
L&#8217;objectif de cet outil est de remonter automatiquement toutes les informations des ordinateurs (PC Windows, Linux, Mac) connectés à votre réseau ; <strong>notamment la liste des logiciels installés</strong>.<br />
Pour ceux qui ne sont pas connectés au réseau, il est possible de faire tourner localement l&#8217;agent (l&#8217;outil qui remonte les infos) puis de récupérer un fichier et l&#8217;incorporer. Ce n&#8217;est pas très dynamique mais parfois nécessaire.</p>
<p>Dans cet article, je vais montrer comment installer le serveur sous Debian, le paramétrer un minimum et enfin comment déployer l&#8217;agent (il existe plusieurs méthodes et la doc n&#8217;est pas forcément limpide &#8211; pardon aux auteurs, j&#8217;ai dû relire plusieurs fois et m&#8217;y reprendre à plusieurs fois).<br />
Mon contexte d&#8217;utilisation de l&#8217;agent est essentiellement du poste Windows où tout le monde n&#8217;a pas nécessairement le droit d&#8217;admin. Enfin, j&#8217;ai un domaine Samba, pratique pour exécuter des choses au login. Si c&#8217;est votre cas ou si vous avez un domaine AD de Bigrosoft, ça facilitera le déploiement.</p>
<p>Je ne vous expliquerai pas tout non plus, pour ne pas plagier la doc officielle. Je vous donne des pistes pour aller le plus vite possible en comprenant au mieux les grands principes.<span id="more-126"></span></p>
<h1>Installation sous Debian</h1>
<p>En considérant que vous avez déjà une base MySQL en état de marche et que vous souhaitez installer OCSInventory-NG sur la même machine, ça se résume à un classique :</p>
<pre>aptitude install ocsinventory-reports ocsinventory-server</pre>
<p>Un 3è paquet appelé ocsinventory-agent est l&#8217;agent pour Linux. Probablement inutile sur votre serveur. Le paquet ocsinventory-reports est l&#8217;outil de reporting web. A priori pas à dissocier de l&#8217;installation sauf si la base de données est sur un autre serveur.<br />
Pensez à survoler les <a href="http://wiki.ocsinventory-ng.org/index.php?title=OCS_Inventory_NG:Documentation#Under_Linux_Operating_System" class="broken_link">pré-requis d&#8217;installation tout de même</a>. Il fallait à priori que j&#8217;installe le paquet <code>libphp-pclzip</code>, ce que j&#8217;ai fait sans trop y croire (il ne figurait pas dans les dépendances Debian il me semble).</p>
<p>La configuration du paquet vous demande si vous voulez gérer à la main le côté base de données ou laisser l&#8217;outil Debian de conf automatique de base de données :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2008/06/20080521_093351.png'><img src="http://michauko.org/blog/wp-content/uploads/2008/06/20080521_093351.png" alt="Conf auto de la base de données ?" title="dbconfig auto ?" width="499" height="86" class="alignnone size-full wp-image-127" /></a><br />
Si vous le faites à la main, la documentation (fichier <code>/usr/share/doc/ocsinventory-server/README.Debian<br />
</code>) explique qu&#8217;il faut forcer le nom de votre schéma de base de données à <code>ocsweb</code> car le nom est actuellement hardcodé un peu partout.</p>
<p>J&#8217;ai opté pour le mode automatique. Ca vous demande le compte root pour créer le schéma <code>ocsweb</code> et un utilisateur admin associé (appelé &laquo;&nbsp;ocs&nbsp;&raquo;). A la fin ça donne ça :</p>
<pre>Setting up ocsinventory-server (1.01-4) ...
dbconfig-common: writing config to /etc/dbconfig-common/ocsinventory-server.conf

Creating config file /etc/dbconfig-common/ocsinventory-server.conf with new version

Creating config file /etc/ocsinventory/ocsinventory.conf with new version
granting access to database ocsweb for ocs@localhost: success.
verifying access for ocs@localhost: success.
creating database ocsweb: success.
verifying database ocsweb exists: success.
dbconfig-common: flushing administrative password
Reloading web server config...6692</pre>
<h1>Configuration par le web</h1>
<p>Comme toute application LAMP qui se respecte, la suite se passe par une interface web de configuration. Celle-ci est de base inaccessible dans le packaging Debian. Il faut donc aller créer un mot de passe <a href="http://httpd.apache.org/docs/2.0/programs/htpasswd.html">dans un fichier htpasswd</a>. Le fichier est là : <code>/etc/ocsinventory/htpasswd.setup</code> et pour créer un contenu intéressant, il convient de l&#8217;effacer et de le créer comme vous voulez :</p>
<pre>cd /etc/ocsinventory
rm htpasswd.setup
htpasswd -c htpasswd.setup admin
chown root:www-data htpasswd.setup
chmod 640 htpasswd.setup</pre>
<p>Attention aux permissions :</p>
<pre>-rw-r----- 1 root www-data   20 2008-05-21 11:14 htpasswd.setup</pre>
<p>Enfin on lance l&#8217;installation via l&#8217;adresse <a href="http://votre_serveur/ocsreports/install.php">http://votre_serveur/ocsreports/install.php</a><br />
Vous vous identifierez donc 2 fois : une fois pour passer le stade du HTAccess d&#8217;Apache (le compte admin avec password qui va bien dans <code>/etc/ocsinventory/htpasswd.setup</code>) puis le compte admin de la base de données (login ocs et password choisi à l&#8217;installation).<br />
Faites défiler les écrans, il n&#8217;y en a pas beaucoup et ce n&#8217;est pas bien méchant. Lisez tout. Il peut y avoir quelques &laquo;&nbsp;warnings&nbsp;&raquo; :</p>
<pre>WARNING: You will not be able to build any auto deployment package with size greater than 8m.
You must raise both post_max_size and upload_max_filesize in your php.ini to correct this.

WARNING: The user you typed does not seem to be root
If you encounter any problem with files insertion, try setting the global max_allowed_packet mysql value to at least 2M in your server config file.

WARNING: files/ocsagent.exe missing, if you do not reinstall the DEPLOY feature won't be available
</pre>
<p>Rien d&#8217;inquiétant. <u>A garder à l&#8217;esprit tout de même pour plus tard.</u></p>
<h1>L&#8217;interface de reporting</h1>
<p>Enfin, vous vous connectez à l&#8217;interface de reporting avec le login/pass standard et vous changez le mot de passe tout de suite !!! <a href="http://votre_serveur_de_reporting/ocsreports/">http://votre_serveur_de_reporting/ocsreports/</a>, login admin, password admin.</p>
<h1>Deux paramètres cruciaux</h1>
<p>Il y a un détail de configuration qui est un peu long à comprendre (ou alors je suis lent), c&#8217;est le rythme auquel les PC vont faire des remontées. Que vous installiez l&#8217;agent en mode &laquo;&nbsp;service Windows&nbsp;&raquo; ou non, la problématique est la même : ne pas forcer un inventaire toutes les 5 minutes ni nécessairement à chaque login sur un poste. Il s&#8217;agit des paramètres PROLOG_FREQ et FREQUENCY que vous trouverez sans mal dans le menu de paramétrage qui va bien de l&#8217;interface ocsreports.<br />
- FREQUENCY définit en nombre d&#8217;heure la période max entre 2 inventaires pour un agent donné. &laquo;&nbsp;période max&nbsp;&raquo; car pour éviter les surcharges si tout le monde remontait son inventaire en même temps ; l&#8217;agent choisit donc un timing aléatoirement entre &laquo;&nbsp;tout de suite&nbsp;&raquo; et cette période max.<br />
<strong>Cette période précise donc à l&#8217;agent l&#8217;intervalle de temps avant d&#8217;aller <u>demander au serveur</u> quoi faire &#8211; pas nécessairement remonter l&#8217;inventaire</strong>.<br />
- PROLOG_FREQ définit la fréquence de remontée d&#8217;inventaire cette fois-ci. C&#8217;est différent du paramètre précédent qui indiquait tous les combiens de temps on se pose la question. En bon français de base.<br />
Exemples :<br />
<code>PROLOG_FREQ = always &#038; FREQUENCY = 6</code> => toutes les 6 heures au max, je force une rémontée (qui sera faite à chaque fois)<br />
<code>PROLOG_FREQ = 2 &#038; FREQUENCY = 6</code> => toutes les 6 heures au max, je pose la question au serveur, celui-ci demandera un inventaire si l&#8217;inventaire actuel a plus de 2 jours pour ce PC. Ca peut être utile pour des postes qui se déconnectent souvent du réseau : ainsi, toutes les 6 heures, on vérifiera si ce n&#8217;est pas le moment de se secouer.<br />
Pigé ? non, ben testez alors. Notez qu&#8217;en mode &laquo;&nbsp;service Windows&nbsp;&raquo;, l&#8217;agent stocke son compteur de temps dans un fichier de conf du répertoire à il est installé. Ca peut aider pour comprendre vos tests.</p>
<h1>Déploiement</h1>
<p>Le but est de savoir comment vous allez faire pour faire exécuter à distance, sur les PC de votre parc, l&#8217;outil de reporting (ocsagent.exe) sans avoir à lever les fesses de votre chaise et passer sur tous les PC un par un et sans craindre qu&#8217;un gros malin court-circuite le processus à son lancement (histoire que vous ne voyiez pas ses jeux de poker, logiciels de peer-to-peer et EXE de lancement de groslolo.xxx &#8211; c&#8217;est du vécu sauf groslolo).<br />
Il existe plusieurs méthodes, toutes décrites sur le <a href="http://wiki.ocsinventory-ng.org/index.php?title=OCS_Inventory_NG:Documentation" class="broken_link">wiki officiel</a><br />
Mon retour d&#8217;expérience est le suivant : la fabrication d&#8217;un package installable à distance, <strong>sans droit d&#8217;admin</strong>, installant un service Windows, n&#8217;a pas fonctionné. Malgré plusieurs tentatives et de l&#8217;aide demandée sur le forum. <a href="http://wiki.ocsinventory-ng.org/index.php?title=OCS_Inventory_NG:Packager">La doc du packager est là.</a></p>
<p>J&#8217;ai donc opté pour une méthode ne nécessitant pas la présence d&#8217;un service Windows. Pour la simple raison qu&#8217;un gros malin ayant les droits nécessaires pourra aller désactiver l&#8217;agent. La méthode par service Windows est pourtant celle recommandée par les auteurs. Mouais.<br />
C&#8217;est donc la méthode où l&#8217;utilisateur téléchargera malgré lui l&#8217;agent à chaque logon au domaine et ira remonter un inventaire (PROLOG_FREQ = ALWAYS, voir plus haut). Attention l&#8217;agent fait 1,5 Mo en gros. Pas négligeable si le parc est énorme.<br />
Pour ce faire, vous forcez un appel au script ocslogon.exe depuis votre script de connexion Samba situé dans <code>/etc/samba/scripts</code>.<br />
Quelques remarques :<br />
- Le plus simple est de renommer votre script en adresse_ip_du_serveur.exe (exemple 10.0.0.1.exe), ainsi, l&#8217;agent saura à aller chercher le serveur pour remonter ses données. Il passe par un répertoire particulier du serveur web (/ocsinventory). J&#8217;oubliais : il faut du HTTPS sur le serveur, me semble-t-il.<br />
- Votre .BAT de logon au domaine ira chercher l&#8217;agent sur un répertoire partagé public déjà &laquo;&nbsp;monté&nbsp;&raquo; et vous l&#8217;appellerez avec les paramètres suivants : <code>X:\blabla\10.0.0.1.exe /NP</code> où NP signifie &laquo;&nbsp;No Proxy&nbsp;&raquo;, ça évite qu&#8217;il aille voir la conf proxy de IE et fasse potentiellement n&#8217;importe quoi pour taper en interne. Pigé ?</p>
<p>N&#8217;hésitez pas à lire dans la doc officielle tout ce qui concerne le renommage de ocslogon.exe en adresse_ip.exe ou nom_serveur.exe.</p>
<p>Voilà, vous devriez très vite voir se peupler la base de données et avec lui l&#8217;outil de reporting.</p>
<h1>Détail : j&#8217;ai pété le nombre de connx à Mysql</h1>
<p>Mine de rien, le nombre de connexion simultanées à votre MySQL va en prendre pour son grade. Si vous avez une limitation assez basse, vous allez bientôt avoir des soucis de connexion à la base. Un petit </p>
<pre>SHOW PROCESSLIST</pre>
<p> dans MySQL vous montrera le nombre de connx actives.<br />
Et le paramètre <code>set-variable=max_connections=255</code> (ou plus) dans la section <code>[mysqld]</code> de votre fichier <code>/etc/mysql/my.cnf</code> + redémarrage de la base vous fera le plus grand bien.</p>
<p>Voilà, fliquez bien &#8211; en 2/3 minutes, vous devriez pouvoir faire des requêtes assez sympa dans la base, en tapant sur les tables SOFTWARES et HARDWARE : compter le nombre d&#8217;occurrence de tel logiciel, remonter tous les logiciels de l&#8217;éditeur trucmuche etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/06/10/installer-et-deployer-ocsinventory-ng/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Proxy PAC locaux (et IE)</title>
		<link>http://michauko.org/blog/2008/06/10/proxy-pac-locaux-et-ie/</link>
		<comments>http://michauko.org/blog/2008/06/10/proxy-pac-locaux-et-ie/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 08:46:46 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[bugs]]></category>
		<category><![CDATA[reseau et sécu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[auto]]></category>
		<category><![CDATA[documents and settings]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[pac]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=128</guid>
		<description><![CDATA[Les fichiers PAC (Proxy Auto Configuration) sont des mini-javascript limités (en terme de fonctions) utilisés pour indiquer à un navigateur quel est le proxy de la société pour sortir sur le web. Par extension, on peut l&#8217;utiliser pour faire une sorte de load-balancing, de répartition suivant l&#8217;IP, court-circuiter le proxy pour tel ou tel site [...]]]></description>
			<content:encoded><![CDATA[<p>Les fichiers PAC (Proxy Auto Configuration) sont des mini-javascript limités (en terme de fonctions) utilisés pour indiquer à un navigateur quel est le proxy de la société pour sortir sur le web.<br />
Par extension, on peut l&#8217;utiliser pour faire une sorte de load-balancing, de répartition suivant l&#8217;IP, court-circuiter le proxy pour tel ou tel site etc. Bref, peu de fonctions, mais pas mal d&#8217;utilisation détournées. Google vous expliquera ça mieux que moi.<br />
Ce format de fichier vient de chez Netscape, il y a une 12aine d&#8217;années, on n&#8217;a pas encore fait mieux. <a href="http://findproxyforurl.com/">Sa syntaxe complète est décrite ici</a>.</p>
<p>Il y a un truc bien merdique (sous IE :O) avec les fichiers PAC. Je vous en fais part car pour le coup, j&#8217;ai trouvé beaucoup de monde sur google se posant une question et personne n&#8217;y répondant correctement.<span id="more-128"></span></p>
<p>Une fois votre &laquo;&nbsp;proxy.pac&nbsp;&raquo; créé, il s&#8217;agit de le mettre à dispo des utilisateurs. Deux solutions :<br />
- le publier sur un serveur web (interne)<br />
- le copier d&#8217;une manière ou d&#8217;une autre sur le PC des utilisateurs, localement</p>
<p>La première méthode est bien pour une utilisation interne (serveur web interne toujours accessible), mais pour les personnes mobiles, c&#8217;est naze : quel que soit le serveur web utilisé, il faudra pouvoir l&#8217;atteindre, ce qui n&#8217;est pas nécessairement possible depuis un site quelconque de connexion à Internet.</p>
<p>La deuxième méthode est bonne pour tout le monde, du moment que vous avez moyen d&#8217;injecter le fichier sur le PC des utilisateurs.<br />
Ensuite, dans ce cas, vous indiquez dans votre navigateur un chemin du genre <code>c:\mon repertoire\monproxy.pac</code><br />
Et c&#8217;est là le début des ennuis.<br />
- Firefox va convertir l&#8217;adresse en <code>file:///c:/mon%20repertoire/monproxy.pac</code><br />
- IE ne convertit rien et ne trouve pas le fichier. Bref, ça-marche-pas (c) MS</p>
<p>Comment faire ? j&#8217;ai vu plein de fois la question sur le web, jamais la réponse.<br />
Pour que ça marche sous IE, il faudra donc :<br />
- commencer par <code>file://c:/</code><br />
- ne pas mettre d&#8217;espace ni de %20. Comment faire ? nommer les répertoires à l&#8217;ancienne, façon Windows 95. C&#8217;est pas beau ça ? c&#8217;est pas un navigateur génial IE ? Exemple : <code>file://c:/docume~1/mon_id/mon_proxy.pac</code></p>
<p>Et voilà. La clef, c&#8217;est le &laquo;&nbsp;~1&#8243; des familles.</p>
<p>J&#8217;entends dans le fond de la salle une question : &laquo;&nbsp;pourquoi ne pas mettre le fichier sur C:\ ou C:\Windows directement ?&nbsp;&raquo;. Parce-que j&#8217;ai des utilisateurs non admin de leur poste et le script de logon au domaine n&#8217;a pas les droits d&#8217;écrire là-dedans. Par contre dans %USERPROFILE% (ie, C:\Documents and settings/mon_id/) c&#8217;est bon.</p>
<p>Simple, mais de quoi perdre des heures.<br />
Merci Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/06/10/proxy-pac-locaux-et-ie/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>A propos de la fameuse faille OpenSSL sur Debian et dérivés</title>
		<link>http://michauko.org/blog/2008/05/15/a-propos-de-la-fameuse-faille-openssl-sur-debian-et-derives/</link>
		<comments>http://michauko.org/blog/2008/05/15/a-propos-de-la-fameuse-faille-openssl-sur-debian-et-derives/#comments</comments>
		<pubDate>Thu, 15 May 2008 21:09:42 +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[Ubuntu]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[openssl]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=124</guid>
		<description><![CDATA[L&#8217;histoire en quelques mots Bon, je poste un peu après tout le monde sur le sujet. Mais c&#8217;est histoire de faire part de 2/3 remarques. A voir les news postées un peu partout, j&#8217;ai l&#8217;impression de revivre la naissance de &#171;&#160;Blaster&#160;&#187; sous Windows : grande ampleur alors que la correction existait et beaucoup découvrent/découvraient ça [...]]]></description>
			<content:encoded><![CDATA[<h1>L&#8217;histoire en quelques mots</h1>
<p>Bon, je poste un peu après tout le monde sur le sujet. Mais c&#8217;est histoire de faire part de 2/3 remarques. A voir les news postées un peu partout, j&#8217;ai l&#8217;impression de revivre la naissance de &laquo;&nbsp;Blaster&nbsp;&raquo; sous Windows : grande ampleur alors que la correction existait et beaucoup découvrent/découvraient ça tardivement sans trop savoir quoi faire.<br />
Bon ici, il ne s&#8217;agit que de rectifier avant qu&#8217;une faille soit exploitable. Mais c&#8217;est extrêmement préoccupant.<br />
Et le pire, c&#8217;est que contrairement à beaucoup de failles, <strong>le problème réside dans les &laquo;&nbsp;clefs de cryptage&nbsp;&raquo; que vous utilisez (qui vous sont propres), pas dans l&#8217;outil en lui-même. Donc appliquer les patchs constitue seulement 1% de la solution.</strong> (dans le cas où vos clefs ont été générées, disons, entre hier et y&#8217;a 2 ans&#8230; c&#8217;est large)</p>
<h1>Point de départ de l&#8217;information</h1>
<p>Si vous découvrez seulement maintenant le sujet et que vous gérez des Debian ou Ubuntu ou dérivés, c&#8217;est grave, lisez vite les &laquo;&nbsp;security advisory&nbsp;&raquo; de <a href="http://lists.debian.org/debian-security-announce/2008/msg00152.html">openssl</a> et de <a href="http://lists.debian.org/debian-security-announce/2008/msg00153.html">openssh</a> publié le lendemain. Ce sont les seules sources fiables, comme point de départ.<br />
Si ça vous gonfle car c&#8217;est en anglais, parce-que personne n&#8217;en voudrait à votre pseudo-serveur etc, alors arrêtez tout de suite de &laquo;&nbsp;gérer&nbsp;&raquo; un serveur&#8230;<br />
Le <a href="http://wiki.debian.org/SSLkeys">wiki de Debian</a> résume bien tous les services qui peuvent être impactés et donnent les opérations à faire. A commencer par OpenSSH (tout le monde l&#8217;a celui-là)</p>
<p>Donc, pour cette fois, et pour les suivantes, faites ceci :</p>
<h1>Pour bien réagir la prochaine fois :</h1>
<h2>Inscrivez-vous sur la mailing-list de securité Debian</h2>
<p>Inscrivez-vous soit par <a href="http://www.debian.org/MailingLists/subscribe">l&#8217;interface web</a>, soit en envoyant un mail à debian-security-announce-REQUEST@lists.debian.org avec sujet subscribe et en confirmant une fois le 1er de retour reçu).<br />
Optez pour celle appelée &laquo;&nbsp;debian-security-announce&nbsp;&raquo;, pas nécessairement &laquo;&nbsp;debian-security&nbsp;&raquo; qui est plutôt une chat-room non modérée <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
=> Ainsi, vous serez au courant au bon moment avec les bonnes infos, plutôt que des &laquo;&nbsp;on dit&nbsp;&raquo; incomplets sur des forums.<br />
Si vous n&#8217;êtes pas en Debian, ça vaut quand même. Il doit y avoir l&#8217;équivalent sur Ubuntu et autres dérivés.</p>
<h2>Lisez les alertes à tête reposée et faites ce qui est demandé</h2>
<p>Par exemple, dans celle d&#8217;OpenSSL dit notamment une toute petite phrase : &laquo;&nbsp;We recommend that you upgrade your openssl package and subsequently <strong>regenerate any cryptographic material</strong>, as outlined above.&nbsp;&raquo;<br />
=> Cette toute petite phrase veut simplement dire qu&#8217;il <strong>faut regénérer TOUT ce qui a trait à la crypto. Donc tous vos certificats pour vos protocoles sécurisés, notamment SSH, HTTPS, POP3S, IMAPS, SSMTP etc. Sans parler des known_hosts et authorized_keys. En gros, si vous gérez un paquet de serveurs, ça va juste vous pourrir un bon paquet d&#8217;heures. Mais c&#8217;est obligatoire.</strong></p>
<h1>Le mot de la fin</h1>
<p>Voilou, c&#8217;était histoire de clarifier la situation vu ce qu&#8217;on peut lire comme info incomplète sur cette faille. Le classique <code>"apt-get update ; apt-get upgrade"</code> du matin ne suffit pas !<br />
J&#8217;ai eu envie de faire cet article quand je pense aux hébergeurs qui proposent des serveurs à pas cher, avec environ 97% d&#8217;admin archi-débutant-pas-sérieux. Je me ferais du souci à leur place. Surtout si un exploit est révélé !<br />
Faites que le mien ne bloque pas le trafic SSH en cas d&#8217;exploit révélé (si si, mon hébergeur l&#8217;a proposé, arg !)&#8230;. ce serait un bordel sans nom.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/05/15/a-propos-de-la-fameuse-faille-openssl-sur-debian-et-derives/feed/</wfw:commentRss>
		<slash:comments>0</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>Proxy POP[s]/IMAP[s] : pourquoi ? comment ?</title>
		<link>http://michauko.org/blog/2007/12/05/proxy-popsimaps-pourquoi-comment/</link>
		<comments>http://michauko.org/blog/2007/12/05/proxy-popsimaps-pourquoi-comment/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 14:04:33 +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[imap]]></category>
		<category><![CDATA[perdition]]></category>
		<category><![CDATA[pop]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/2007/12/05/proxy-popsimaps-pourquoi-comment/</guid>
		<description><![CDATA[Un proxy POP/IMAP est, comme son nom l&#8217;indique, un relai pour les 4 protocoles POP et IMAP, sécurisés ou non. Ca sert à placer un relai entre les clients mail et votre vrai serveur POP3 et/ou IMAP4 et/ou POP3s et/ou IMAP4s. Pourquoi donc ? par exemple pour ne rendre visible dans une DMZ que les [...]]]></description>
			<content:encoded><![CDATA[<p>Un proxy POP/IMAP est, comme son nom l&#8217;indique, un relai pour les 4 protocoles POP et IMAP, sécurisés ou non. Ca sert à placer un relai entre les clients mail et votre vrai serveur POP3 et/ou IMAP4 et/ou POP3s et/ou IMAP4s.</p>
<p>Pourquoi donc ? par exemple pour ne rendre visible dans une DMZ que les relais et non pas les serveurs POP/IMAP directement. Ca peut permettre aussi (dans le cas du logiciel <a href="http://www.vergenet.net/linux/perdition/">PERDITION</a> que je vais montrer ci-dessous) de faire une répartition par utilisateur (donc par exemple par origine) entre différents serveurs POP ou IMAP de votre infrastructure, pour de la répartition de charge ou toute autre raison qui vous semble intéressante.</p>
<p>Bon là, si ça ne vous parle pas, l&#8217;article ne vous servira à rien, revenez plus tard. Sinon, let&#8217;s go pour une introduction par un exemple de mise en place du logiciel <a href="http://www.vergenet.net/linux/perdition/">PERDITION</a>.<span id="more-89"></span></p>
<p>En deux mots, le principe d&#8217;un relai comme ça est de prendre les demandes d&#8217;authentification, de les relayer au vrai serveur de mail et suivant le résultat, de faire ou non un &laquo;&nbsp;pipe&nbsp;&raquo; vers le vrai serveur de mail (selon le protocole voulu).</p>
<p>Commencez donc par installer l&#8217;application. Sous Debian : <code>apt-get install perdition</code> par exemple.</p>
<p>Ensuite, allez dans <code>/etc/perdition/</code> et dupliquez votre fichier <code>perdition.conf</code> en <code>perdition.imap.conf</code> suivant vos besoins. Le manuel préconise en fait de créer un fichier par protocole utilisé. A la limite, le fichier d&#8217;origine <code>perdition.conf</code> ne sert plus à rien à la fin. Vous pouvez le conserver néanmoins si vous n&#8217;utiliserez dans votre proxy qu&#8217;un seul des 4 protocoles.</p>
<p>Il faut maintenant éditer ce(s) fichier(s) pour chaque protocole. Tous les paramètres sont par défaut en commentaire. A vous de choisir ce qu&#8217;il faut. Le minimum vital pour de l&#8217;IMAP4s par exemple est, (dans le fichier <code>/etc/perdition/perdition.imap4s.conf</code> du coup <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  :</p>
<pre>protocol IMAP4S
outgoing_port 993
outgoing_server imap.mondomaine.com # votre vrai serveur IMAP
ssl_mode ssl_listen # ou ssl_all, voyez la doc
ssl_ca_file /etc/ssl/certs/masociete.crt
ssl_cert_file /etc/ssl/certs/mon_imap.cert
ssl_key_file /etc/ssl/certs/mon_imap.key</pre>
<p>Quelques remarques :<br />
1) Vous n&#8217;êtes pas obligé d&#8217;utiliser une &laquo;&nbsp;Certification Authority&nbsp;&raquo;, donc dans ce cas, pas besoin de <code>"ssl_ca_file"</code>.<br />
2) Les chemins et noms de fichiers des certificats/clefs sont arbitraires.<br />
3) Pour de l&#8217;IMAP non sécurisé, vous n&#8217;auriez qu&#8217;à modifier les 3 premières lignes et laisser en commentaire celles commençant par <code>"ssl"</code>.<br />
4) Pour du POP ou POP3s, c&#8217;est le même principe.<br />
5) Enfin, le fichier de config <code>/etc/perdition/perdition*conf</code> contient pas mal d&#8217;aide sur chaque paramètre, et le <code>man perdition</code> aussi.</p>
<p>Enfin, dernière brique, préciser quels protocoles on prend en charge et vérifier que perdition est bien lancé par le système. Ca se passe dans le fichier <code>/etc/default/perdition</code> où vous irez contrôler ça :</p>
<pre>RUN_PERDITION=yes
POP3=no #ou yes
POP3S=no #ou yes
IMAP4=no #ou yes
IMAP4S=yes #ou no</pre>
<p>Pour chaque protocole que vous utilisez, vous aurez donc créé le <code>/etc/perdition/perdition.<em>protocole</em>.conf</code> qui va bien. Relancez le service via <code>"/etc/init.d/perdition restart"</code> et vérifiez que les processus <code>"perdition.<em>protocole</em>"</code> qui vous intéressent tournent.</p>
<p>Evidemment, vous vérifierez enfin que toute votre configuration firewall ressemble à quelque chose et permet notamment l&#8217;accès aux ports qui vont bien de votre proxy POP/IMAP.</p>
<p>J&#8217;oubliais, pour faire de la répartition par utilisateur (tel utilisateur sur tel serveur), il faut éditer le fichier <code>"/etc/perdition/popmap"</code>. Quelques exemples sont donnés, genre :</p>
<pre>horms:mailserver1
tymm:mailserver2
</pre>
<p>Puis créer une &laquo;&nbsp;base de données&nbsp;&raquo; (un fichier .db) via un <code>"make"</code> basé sur le Makefile disponible dans <code>/etc/perdition/Makefile</code>.<br />
(C&#8217;est un peu le même principe, en plus glauque, que le fichier /etc/aliases et sa version base de données générée par la commande postalias).<br />
Personnellement, je n&#8217;ai pas mis en place ce système de répartition, mais ça ne doit pas être bien plus compliqué que ça.</p>
<p>Voilou.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2007/12/05/proxy-popsimaps-pourquoi-comment/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>

