1297 lines
116 KiB
XML
1297 lines
116 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Wxcafé</title><link href="//wxcafe.net/" rel="alternate"></link><link href="//wxcafe.net/feeds/feed.tutoriel.xml" rel="self"></link><id>//wxcafe.net/</id><updated>2014-11-07T13:04:00+01:00</updated><entry><title>OpenSMTPd comme serveur mail sous debian</title><link href="//wxcafe.net/posts/opensmtpd-debian/" rel="alternate"></link><updated>2014-11-07T13:04:00+01:00</updated><author><name>Wxcafé</name></author><id>tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/</id><summary type="html"><p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant
|
||
comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de
|
||
changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
|
||
aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la
|
||
gestion de mon système de mails.</p>
|
||
<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
|
||
effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
|
||
projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
|
||
serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
|
||
qu&rsquo;a le projet OpenBSD, globalement).</p>
|
||
<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA
|
||
(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
|
||
serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
|
||
destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
|
||
mail au destinataire.</p>
|
||
<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération
|
||
ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches
|
||
sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis
|
||
le serveur, des yeux pour la lecture).</p>
|
||
<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir
|
||
des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour
|
||
ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
|
||
<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
|
||
pour filtrer les mails entrants et sortants.
|
||
Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
|
||
│╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │
|
||
mail in ││ │ │ │ amavis │
|
||
───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │
|
||
│ │ │ ╰──────────╯
|
||
mail out │ │ │ ╭──────────╮
|
||
&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s
|
||
│ │ │ dovecot │ mailbox
|
||
╰────────────────╯ ╰──────────╯
|
||
</pre></div>
|
||
|
||
|
||
<p>Normalement, ceci devrait être a peu près clair.
|
||
Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
|
||
aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
|
||
venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de
|
||
nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
|
||
qui a ce moment-ci trie en fonction de la destination : les mails gérés
|
||
par le domaine vont via dovecot dans les boites mail des destinataires
|
||
locaux, les mails exterieurs vont directement vers le MTA du serveur
|
||
distant.</p>
|
||
<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon
|
||
dont les différents services vont communiquer.</p>
|
||
<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
|
||
10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et
|
||
écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de
|
||
signer, nous allons profiter de cette configuration et donc lui parler en SMTP
|
||
sur ces ports.</p>
|
||
<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
|
||
Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
|
||
<code>/var/run/dovecot/lmtp</code>).</p>
|
||
<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
|
||
│╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │
|
||
SMTP in ││ │ │ │ amavis │
|
||
────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │
|
||
│ │ │ ╰───────────╯
|
||
SMTP out │ │ │
|
||
25 &lt;────────│&lt;───────────╯ │
|
||
╰───────────────╯
|
||
</pre></div>
|
||
|
||
|
||
<p>Pour les mails sortants; et</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
|
||
│╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │
|
||
SMTP in ││ │ │ │ amavis │
|
||
────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │
|
||
│ │ │ ╰────────────╯
|
||
│ │ │ ╭────────────╮
|
||
│ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s
|
||
│ │ │ dovecot │ mailbox
|
||
╰───────────────╯ ╰────────────╯
|
||
</pre></div>
|
||
|
||
|
||
<p>Pour les mails entrants.</p>
|
||
<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
|
||
ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
|
||
d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p>
|
||
<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
|
||
Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
|
||
post</a>)</p>
|
||
<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
|
||
sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
|
||
</pre></div>
|
||
|
||
|
||
<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
|
||
<p><code>/etc/smtpd.conf</code></p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
|
||
<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
|
||
|
||
<span style="color: #75715e">## Certs</span>
|
||
pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span>
|
||
pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span>
|
||
|
||
<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
|
||
listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
|
||
listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
|
||
listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
|
||
|
||
<span style="color: #75715e">## Aliases</span>
|
||
table aliases file:/etc/aliases
|
||
|
||
<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
|
||
listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
|
||
<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
|
||
listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
|
||
|
||
<span style="color: #75715e">## Receiving</span>
|
||
<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
|
||
accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span>
|
||
<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
|
||
accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span>
|
||
<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
|
||
|
||
<span style="color: #75715e">## Sending</span>
|
||
<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
|
||
accept tagged Signed <span style="color: #66d9ef">for</span> any relay
|
||
<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
|
||
accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span>
|
||
<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
|
||
</pre></div>
|
||
|
||
|
||
<p>Expliquons un peu ce fichier de configuration :</p>
|
||
<ul>
|
||
<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration
|
||
d&rsquo;emplacement des certificats SSL.</li>
|
||
<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
|
||
port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
|
||
<li>Les alias sont définis juste après</li>
|
||
<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
|
||
10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
|
||
comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on
|
||
taggue les mails sortants comme &ldquo;Signed&rdquo;</li>
|
||
<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
|
||
traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
|
||
peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore
|
||
été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
|
||
donc). Il est important de mettre les déclarations dans ce sens, car la
|
||
première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième
|
||
ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
|
||
inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
|
||
amavis</li>
|
||
<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
|
||
pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
|
||
on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par
|
||
DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le
|
||
problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au
|
||
dessus.</li>
|
||
</ul>
|
||
<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit
|
||
écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
|
||
emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant
|
||
qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne
|
||
mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
|
||
POP3[s], différents guides sont trouvables facilement sur internet.</p>
|
||
<p><code>/etc/dovecot/dovecot.conf</code></p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
|
||
|
||
<span style="color: #75715e"># basic config</span>
|
||
<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
|
||
<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
|
||
<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span>
|
||
<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
|
||
|
||
<span style="color: #75715e"># authentication</span>
|
||
passdb <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
|
||
<span style="color: #f92672">}</span>
|
||
userdb <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
|
||
<span style="color: #f92672">}</span>
|
||
|
||
<span style="color: #75715e"># the protocols we use</span>
|
||
<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
|
||
|
||
<span style="color: #75715e"># ssl config</span>
|
||
<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert
|
||
<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key
|
||
<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
|
||
<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
|
||
|
||
<span style="color: #75715e">## configuring services </span>
|
||
<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
|
||
service imap-login <span style="color: #f92672">{</span>
|
||
inet_listener imap <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
|
||
<span style="color: #f92672">}</span>
|
||
<span style="color: #f92672">}</span>
|
||
|
||
service lmtp <span style="color: #f92672">{</span>
|
||
unix_listener lmtp <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
|
||
<span style="color: #f92672">}</span>
|
||
<span style="color: #f92672">}</span>
|
||
|
||
<span style="color: #75715e">## configuring protocols</span>
|
||
<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
|
||
protocol lda <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
|
||
<span style="color: #f92672">}</span>
|
||
|
||
protocol lmtp <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
|
||
<span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
|
||
<span style="color: #f92672">}</span>
|
||
|
||
plugin <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
|
||
<span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
|
||
<span style="color: #f92672">}</span>
|
||
</pre></div>
|
||
|
||
|
||
<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
|
||
<span style="color: #f92672">}</span>
|
||
</pre></div>
|
||
|
||
|
||
<p><strong>par</strong></p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
|
||
<span style="color: #f92672">}</span>
|
||
</pre></div>
|
||
|
||
|
||
<p><strong>pour identifier les utilisateurs système</strong></p>
|
||
<p>Ici aussi, voyons comment ce fichier est structuré :</p>
|
||
<ul>
|
||
<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater
|
||
leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li>
|
||
<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs.
|
||
Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
|
||
mots de passe avec PAM (ou BSDAuth)</li>
|
||
<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
|
||
l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
|
||
<li>Nous configurons le SSL</li>
|
||
<li>Le section suivante contient la configuration des services. Nous avons en
|
||
premier lieu le service IMAP, dont la configuration sert uniquement a
|
||
désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant
|
||
IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons.
|
||
La configuration de lmtp sert a attribuer des permissions plus correctes au
|
||
fifo qu&rsquo;il utilise</li>
|
||
<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
|
||
<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
|
||
quel dossier utiliser pour sa configuration.</li>
|
||
</ul>
|
||
<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
|
||
a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
|
||
doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
|
||
filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
|
||
SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun
|
||
risque a utiliser des protocoles non chiffrés.
|
||
Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
|
||
modifications nécessaires a la fin du fichier.</p>
|
||
<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
|
||
<code>/etc/amavis.conf</code> (OpenBSD)</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
|
||
|
||
<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span>
|
||
|
||
<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
|
||
<span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span>
|
||
<span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span>
|
||
<span style="color: #f8f8f2">}</span>
|
||
<span style="color: #f8f8f2">);</span>
|
||
|
||
<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
|
||
<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
|
||
<span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
||
<span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span>
|
||
<span style="color: #f8f8f2">};</span>
|
||
|
||
<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span>
|
||
|
||
<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
|
||
<span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
||
<span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
||
<span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span>
|
||
<span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span>
|
||
<span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
||
<span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span>
|
||
<span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span>
|
||
<span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
|
||
<span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
|
||
<span style="color: #f8f8f2">};</span>
|
||
|
||
<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
|
||
<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
|
||
</pre></div>
|
||
|
||
|
||
<p>A nouveau, expliquons ce fichier :
|
||
- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails
|
||
sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se
|
||
trouve la clé privée servant a signer les emails.
|
||
- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
|
||
Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
|
||
- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
|
||
paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
|
||
ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel
|
||
ils viennent.
|
||
- nous savons que les emails venants du port 10026 sont sortants, nous les
|
||
traitons donc comme tel
|
||
- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
|
||
sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre
|
||
serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
|
||
4871</a>. Nous déclarons l&rsquo;adresse a
|
||
prévenir en cas de spam/virus venants de notre système, et que nous voulons
|
||
être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
|
||
puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de
|
||
les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
|
||
les notifications de succès d&rsquo;envoi. Et voila!</p>
|
||
<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature
|
||
des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
|
||
fait inclus par défaut dans amavis.</p>
|
||
<p>Il nous reste cependant quelques opérations a faire, encore.
|
||
Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe
|
||
différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
|
||
tutorial</a>)
|
||
mais de nombreuses autre méthodes existent.
|
||
Il nous reste encore a configurer spamassassin :</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
|
||
<span style="color: #75715e"># report_safe 1</span>
|
||
<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
|
||
<span style="color: #75715e"># use_bayes 1</span>
|
||
<span style="color: #75715e"># bayes_auto_learn 1</span>
|
||
<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
|
||
<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
|
||
<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
|
||
<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
|
||
<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
|
||
<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
|
||
<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
|
||
<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
|
||
<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
|
||
<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
|
||
<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
|
||
<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
|
||
<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
|
||
<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
|
||
|
||
<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
|
||
</pre></div>
|
||
|
||
|
||
<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
|
||
le required_score pour ma part.</p>
|
||
<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
|
||
spamassassin, et tout devrait fonctionner parfaitement</p>
|
||
<p>Bon courage pour votre hosting de mail ensuite&hellip;</p></summary></entry><entry><title>Installer FreeBSD sur un serveur Online avec MfsBSD</title><link href="//wxcafe.net/posts/freebsd-online-mfsbsd/" rel="alternate"></link><updated>2014-08-28T12:16:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/</id><summary type="html"><p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad)
|
||
Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
|
||
et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
|
||
j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p>
|
||
<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu
|
||
chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
|
||
d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
|
||
<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
|
||
ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur
|
||
alternatif, minimaliste et simplifié pour FreeBSD.</p>
|
||
<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
|
||
console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
|
||
panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image
|
||
mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
|
||
choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
|
||
sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout
|
||
a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
|
||
mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement
|
||
zfsinstall, qui va se charger de tout le travail pour nous.</p>
|
||
<p>Utilisez donc ce script ainsi : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span>
|
||
dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
|
||
<span style="color: #75715e"># maintenant, installons le système</span>
|
||
zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
|
||
</pre></div>
|
||
|
||
|
||
<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
|
||
<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options
|
||
sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
|
||
convient pas.</p>
|
||
<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
|
||
système) et éditez /etc/rc.conf :</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span>
|
||
<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span>
|
||
<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span>
|
||
<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span>
|
||
</pre></div>
|
||
|
||
|
||
<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
|
||
physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
|
||
maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
|
||
utiliser!</p>
|
||
<p>Voila, c&rsquo;est la fin de ce tutoriel.
|
||
(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu
|
||
crédible, disons)</p>
|
||
<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
|
||
<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
|
||
<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
|
||
<a href="https://twitter.com/zengisse">zengisse</a>,
|
||
et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
|
||
code</a>, qui vient de
|
||
<a href="https://twitter.com/m1sp">@m1sp</a>
|
||
(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
|
||
<p>A plus</p></summary></entry><entry><title>Mise en place d'un serveur DNS</title><link href="//wxcafe.net/posts/mise-en-place-dun-serveur-dns/" rel="alternate"></link><updated>2014-02-24T02:49:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/</id><summary type="html"><p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
|
||
domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
|
||
DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
|
||
est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
|
||
simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
|
||
de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
|
||
<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
|
||
<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
|
||
<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque
|
||
en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que
|
||
de nos jours. La configuration des serveurs DNS peut ainsi être assez
|
||
contre intuitive.
|
||
Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
|
||
enregistrements est important.</p>
|
||
<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même
|
||
façon que le système de fichiers : en arborescence. Cependant, là ou la racine
|
||
du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
|
||
<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par
|
||
exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
|
||
<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
|
||
a la fin de façon courante.</p>
|
||
<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les
|
||
adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
|
||
Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger
|
||
quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS
|
||
sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre
|
||
habituel</em></strong>, et du faux domaine .in-addr.arpa
|
||
Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
|
||
76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
|
||
<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord,
|
||
quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
|
||
utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
|
||
&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une
|
||
adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
|
||
records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
|
||
de domaine que vous donnez en argument, mais en précisant un autre type de
|
||
record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS
|
||
wxcafe.net</code> devrait vous renvoyer</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
|
||
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
|
||
<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
|
||
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
|
||
<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
|
||
<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
|
||
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
|
||
<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
|
||
</pre></div>
|
||
|
||
|
||
<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
|
||
<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
|
||
qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
|
||
chacun fait autorité pour lui même, et le problème évident est que le résolveur
|
||
ne peut résoudre la query si il est renvoyé encore et encore vers le même
|
||
serveur. Il convient donc de définir dans le même fichier de configuration
|
||
l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
|
||
loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et
|
||
demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de
|
||
direction se fait grâce au serveur du TLD.</p>
|
||
<p>La configuration de bind est assez simple dans le principe, le plus complexe
|
||
étant en fait d&rsquo;écrire les fichiers de zone.
|
||
La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
|
||
existe 4 fichiers de configuration principaux : <code>named.conf</code>,
|
||
<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
|
||
<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
|
||
les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
|
||
<code>named.conf.local</code> contient les déclarations de vos zones, et
|
||
named.conf.options contient les options que vous rajoutez pour changer le
|
||
comportement de bind.</p>
|
||
<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
|
||
lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité,
|
||
deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
|
||
(notamment mon accès chez moi). </p>
|
||
<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
|
||
Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
|
||
en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
|
||
gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce
|
||
serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
|
||
principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre.
|
||
Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
|
||
file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span>
|
||
allow-transfer <span style="color: #f92672">{</span>
|
||
80.67.177.103<span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
|
||
|
||
zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
|
||
file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span>
|
||
masters <span style="color: #f92672">{</span>
|
||
80.67.177.103<span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
|
||
|
||
zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
|
||
file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span>
|
||
allow-transfer <span style="color: #f92672">{</span>
|
||
80.67.177.103<span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
|
||
|
||
zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span>
|
||
<span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
|
||
file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span>
|
||
masters <span style="color: #f92672">{</span>
|
||
80.67.177.103<span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
|
||
<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
|
||
</pre></div>
|
||
|
||
|
||
<p>Cela devrait être relativement clair. Globalement, les zones master ont un
|
||
fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
|
||
<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
|
||
tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
|
||
assez parlant.</p>
|
||
<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
|
||
<code>/etc/bind/master/wxcafe.net</code> : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
|
||
<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
|
||
<span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
|
||
<span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
|
||
<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
|
||
<span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
|
||
<span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
|
||
<span style="color: #f8f8f2">)</span>
|
||
|
||
<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
|
||
<span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
|
||
<span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
|
||
|
||
<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
|
||
<span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
|
||
<span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span>
|
||
|
||
<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
|
||
<span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
|
||
<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
|
||
|
||
<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
|
||
<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
|
||
<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
|
||
<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
|
||
|
||
|
||
<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
|
||
<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
|
||
<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
|
||
<span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
|
||
<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
|
||
<span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
|
||
</pre></div>
|
||
|
||
|
||
<p>Alors. Expliquons ligne par ligne.<br />
|
||
Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps
|
||
pendant lequel les serveurs récursif (qui font un cache des données) doivent
|
||
cacher ce fichier de zone. <br />
|
||
Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
|
||
wxcafe.net. <br />
|
||
Maintenant, nous arrivons a un record important : SOA (Start of Authority).
|
||
Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br />
|
||
- Le nameserver autoritaire pour le nom de domaine en question,<br />
|
||
- L&rsquo;adresse email du responsable de cette zone, avec le premier point
|
||
remplacé par un @, </p>
|
||
<p>puis entre parenthèses :<br />
|
||
- Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format
|
||
YYYYMMDDNN) <br />
|
||
- La période de refresh, période entre chaque mise a jour du nameserver
|
||
authoritaire secondaire, <br />
|
||
- La période de retry, le temps entre chaque essai de mise a jour si le
|
||
nameserveur authoritaire primaire est indisponible, <br />
|
||
- La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire
|
||
secondaire avant de supprimer les informations de son cache si le primaire
|
||
reste indisponible, et enfin <br />
|
||
- La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire
|
||
avant de ne plus offrir les informations de cette zone si le serveur
|
||
primaire est injoignable. </p>
|
||
<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus
|
||
important a lire (pour les humains en tout cas). Continuons : </p>
|
||
<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
|
||
pour ce domaine. </p>
|
||
<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine.
|
||
SPF est un record d&rsquo;authentification pour les emails.
|
||
Les records A désignent l&rsquo;association entre un nom de domaine et une adresse
|
||
IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
|
||
n&rsquo;est pas encore en IPv6.</p>
|
||
<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
|
||
mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par
|
||
exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p>
|
||
<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
|
||
de changer la valeur du @ et des noms de domaine non complets (qui ne se
|
||
terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
|
||
l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
|
||
l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
|
||
cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
|
||
trouvant sous home.wxcafe.net.</p>
|
||
<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
|
||
différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au
|
||
fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p>
|
||
<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est
|
||
pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
|
||
wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
|
||
aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
|
||
1034</a> et le
|
||
<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
|
||
avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
|
||
aussi.</p></summary></entry><entry><title>Sed Basics</title><link href="//wxcafe.net/posts/sed-basics/" rel="alternate"></link><updated>2013-08-18T22:57:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-08-18:posts/sed-basics/</id><summary type="html"><p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
|
||
le texte (ce qui se montre relativement indispensable dans un environnement
|
||
Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
|
||
connu en détail, et la plupart du temps une seule fonction est utilisée : le
|
||
remplacement de texte.<br />
|
||
Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
|
||
<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
|
||
aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas
|
||
personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des
|
||
machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs
|
||
dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un
|
||
curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
|
||
s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
|
||
concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois.
|
||
En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
|
||
<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher
|
||
l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
|
||
permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique
|
||
du programme est son langage de manipulation de texte.</p>
|
||
<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
|
||
/). Ainsi, la commande de base dans <code>sed</code> est </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
|
||
</pre></div>
|
||
|
||
|
||
<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
|
||
n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p>
|
||
<p><br/>
|
||
La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de
|
||
la façon suivante : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
|
||
</pre></div>
|
||
|
||
|
||
<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
|
||
regex) par [new text] (qui doit être un texte fixe, avec quelques
|
||
exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
|
||
qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte
|
||
matché sur la/les lignes concernée-s.<br />
|
||
Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement
|
||
intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
|
||
excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par
|
||
\( et \), et qui sont représentées dans le texte de remplacement par \1 à
|
||
\9.</p>
|
||
<p>Par exemple, la commande </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39;
|
||
</pre></div>
|
||
|
||
|
||
<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
|
||
</pre></div>
|
||
|
||
|
||
<p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le
|
||
texte original. Ainsi, la commande </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39;
|
||
</pre></div>
|
||
|
||
|
||
<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
|
||
</pre></div>
|
||
|
||
|
||
<p><br/></p>
|
||
<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
|
||
l&rsquo;espace courant :</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
|
||
</pre></div>
|
||
|
||
|
||
<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
|
||
dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
|
||
le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
|
||
<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
|
||
[text]
|
||
</pre></div>
|
||
|
||
|
||
<p>De la même façon, pour le i : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
|
||
[text]
|
||
</pre></div>
|
||
|
||
|
||
<p>Et de même pour a. </p>
|
||
<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles
|
||
sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
|
||
sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
|
||
remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
|
||
remplacement ou insert.
|
||
Attention, les insertions se font sur la ligne précédant ou suivant le pattern
|
||
space, et non sur la ligne en question.</p>
|
||
<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
|
||
/[regex]/d
|
||
<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
|
||
<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
|
||
parlerai des commandes multilignes et des labels.</p></summary></entry><entry><title>Le chiffrement de partitions avec dm-crypt et device-mapper</title><link href="//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/" rel="alternate"></link><updated>2013-07-10T03:18:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/</id><summary type="html"><p>Le chiffrement en tant que concept informatique est traditionnellement associé
|
||
au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en
|
||
clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
|
||
ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou
|
||
bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici
|
||
voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
|
||
n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une
|
||
procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en
|
||
jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
|
||
présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur
|
||
lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
|
||
<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
|
||
du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
|
||
de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but
|
||
de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
|
||
comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
|
||
cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
|
||
fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad.
|
||
Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes.
|
||
Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
|
||
/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
|
||
apparaîtront donc dans /dev/mapper)</p>
|
||
<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
|
||
fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
|
||
déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
|
||
traduisant sur le système de fichier chiffré, le tout de manière tout a fait
|
||
transparente pour les applications utilisant le disque en question. Cela induit
|
||
bien entendu une baisse de performance relativement significative dans le cas
|
||
d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans
|
||
le cas de chiffrement de partitions de données.</p>
|
||
<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
|
||
si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
|
||
boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de
|
||
fichier minimal qui sert uniquement a initialiser le système. Les kernels de
|
||
base de la plupart des distributions GNU/Linux en utilisent un dans tous les
|
||
cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
|
||
n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge
|
||
en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
|
||
charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de
|
||
charger les modules nécessaires a la suite du boot (que ce soit pour un boot
|
||
sans disque root local, ou bien comme ici avec un système chiffré), puis le
|
||
système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté
|
||
est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend
|
||
depuis le système de fichier maintenant monté sur la racine.</p>
|
||
<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
|
||
de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par
|
||
un autre modifié, copiant par exemple la phrase de passe permettant de
|
||
déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
|
||
contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du
|
||
fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
|
||
que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a
|
||
l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès
|
||
a un fichier initrd reconnu comme sûr.<br />
|
||
Une autre approche consisterait a placer le système de fichier /boot sur un
|
||
périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
|
||
carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
|
||
protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un
|
||
attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de
|
||
confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
|
||
l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p>
|
||
<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
|
||
programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
|
||
l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
|
||
maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa
|
||
part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
|
||
manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier
|
||
LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
|
||
utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
|
||
obligatoirement être capables de le faire en tant que root. </p>
|
||
<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
|
||
Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela,
|
||
dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient
|
||
d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de
|
||
fichier chiffré sur le disque.
|
||
Ici, par exemple, nous allons faire : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
|
||
</pre></div>
|
||
|
||
|
||
<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
|
||
</pre></div>
|
||
|
||
|
||
<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
|
||
formater ce disque (nous allons donc valider en tapant YES), puis une
|
||
passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
|
||
puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
|
||
donc a vos secrets.<br />
|
||
Une fois cela fait, nous allons mapper cette image : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
|
||
</pre></div>
|
||
|
||
|
||
<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
|
||
puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous
|
||
voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En
|
||
effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
|
||
systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque
|
||
qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
|
||
virtuel qui correspond a notre image. Il se comporte comme toute partition, et
|
||
peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
|
||
Il se comporte en effet comme une partition, et non comme un véritable disque.)
|
||
Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de
|
||
le faire, pour pouvoir l&rsquo;utiliser. </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
|
||
</pre></div>
|
||
|
||
|
||
<p>Maintenant que notre disque est formaté, il peut être monté : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
|
||
</pre></div>
|
||
|
||
|
||
<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
|
||
voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
|
||
suivant : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
|
||
</pre></div>
|
||
|
||
|
||
<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
|
||
sont (en fonction de votre passphrase) en sécurité. </p>
|
||
<p>Pour résumer :</p>
|
||
<ul>
|
||
<li>
|
||
<p>Pour monter vos partitions : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt;
|
||
sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt;
|
||
</pre></div>
|
||
|
||
|
||
</li>
|
||
<li>
|
||
<p>Pour démonter vos partitions : </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt;
|
||
sudo cryptsetup luksClose &lt;nom de disque virtuel&gt;
|
||
</pre></div>
|
||
|
||
|
||
</li>
|
||
</ul>
|
||
<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de
|
||
créer et de monter/démonter vos images/disques chiffré-e-s en une seule
|
||
commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
|
||
<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
|
||
disque (ou clé usb, ou autre), il est préférable de créer une partition de
|
||
taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
|
||
pour ce faire.</p></summary></entry><entry><title>Monter son propre serveur, partie 1: le serveur et l'apache.</title><link href="//wxcafe.net/posts/monter-son-propre-serveur-partie-1/" rel="alternate"></link><updated>2013-03-18T09:51:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/</id><summary type="html"><p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il
|
||
s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses
|
||
données. </p>
|
||
<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder
|
||
physiquement son propre serveur (encore que ce soit possible, mais ce
|
||
n&rsquo;est pas le sujet abordé ici.)<br />
|
||
Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
|
||
serveur utilisable, du moment ou vous arrivez sur le système fraichement
|
||
installé, au moment ou vous possédez un serveur avec tous les paquets
|
||
nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés.
|
||
Cette partie va consister a paramétrer le système (ici un debian
|
||
squeeze. Il est bien sur possible de faire la même chose avec a peu près
|
||
toutes les distributions Linux disponibles, tout comme avec les BSD et
|
||
tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
|
||
squeeze, parce que c&rsquo;est une distribution simple a utiliser comme
|
||
serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la
|
||
configuration est déjà faite et incluse dans le paquet), donc adaptée au
|
||
but de cet article, a savoir rendre l&rsquo;installation simple et
|
||
compréhensible).</p>
|
||
<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui
|
||
même. Cette partie de la chose ne sera pas traitée dans cet article. Il
|
||
existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le
|
||
louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en
|
||
participant a un système d&rsquo;hébergement collaboratif (je vous laisse
|
||
chercher), en achetant un serveur et en le faisant fonctionner de chez
|
||
vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples.
|
||
Dès lors que vous avez accès a un système debian serveur, peu importe sur
|
||
quel matériel il fonctionne, et a priori peu importe aussi la manière
|
||
dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;).
|
||
Dans cet article, nous parlerons de la configuration de base, du moment
|
||
ou vous avez le serveur vierge dans les mains au moment ou vous
|
||
installez le serveur http.</p>
|
||
<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il
|
||
convient de mettre ce type précisément. Quand le type n&rsquo;est pas
|
||
précisée, libre a vous de choisir ipv4 ou ipv6.</p>
|
||
<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
|
||
n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou
|
||
rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez
|
||
donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
|
||
solide sur le compte root. Continuons en allant vite mettre en place le
|
||
nom de domaine. Pour cela, votre registrar doit vous fournir une
|
||
interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de
|
||
domaine. </p>
|
||
<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1
|
||
IN MX 1
|
||
IN A &lt;IPv4 de votre serveur&gt;
|
||
IN AAAA &lt;IPv6 de votre serveur&gt;
|
||
</pre></div>
|
||
|
||
|
||
<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
|
||
domaine vers votre ip (le fonctionnement exact du DNS est assez
|
||
compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour
|
||
l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer
|
||
que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
|
||
votre serveur, ce qui est un bon début. Faisons un petit point sécurité
|
||
ici : pour accéder a votre serveur, il vous suffit actuellement de taper
|
||
le mot de passe root.</p>
|
||
<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
|
||
bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
|
||
du nombre de caractères, ça prend plus ou moins de temps, et si vous
|
||
avez suffisamment de caractères, ça peut prendre un temps assez
|
||
conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons
|
||
arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples
|
||
clés publiques/privées pour nous connecter au serveur.<br />
|
||
Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur,
|
||
grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer
|
||
OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus
|
||
celles sur root.</p>
|
||
<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
|
||
fait avec adduser, qui est interactif (vous ne devriez pas avoir de
|
||
problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires,
|
||
et vous pose toutes les questions utiles pour vous aider.) sinon, vous
|
||
devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a
|
||
distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait
|
||
un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p>
|
||
<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
|
||
juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif
|
||
en faisant un <code>adduser --group &lt;username&gt;</code></p>
|
||
<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
|
||
-N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera
|
||
son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom
|
||
que lui (ce qui est en général nécessaire pour des questions de vie
|
||
privée).</p>
|
||
<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera
|
||
amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix
|
||
users staff sudo wheel</code>, puis de changer son mot de passe
|
||
<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
|
||
sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br />
|
||
Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un
|
||
utilisateur complètement fonctionnel et utilisable pour toutes les
|
||
taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que
|
||
quelque chose ne va pas.</p>
|
||
<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous
|
||
allons maintenant passer a la phase 2 du plan : désactiver le login ssh
|
||
root et le login ssh par mot de passe.<br />
|
||
Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un
|
||
système assez semblable a celui vous permettant de chiffrer vos mail :
|
||
vous avec une clé publique et une clé privée sur le client, et la clé
|
||
publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
|
||
vérifie que vous possédez la clé privée qui correspond a la clé publique
|
||
stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
|
||
également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br />
|
||
utilisateur.</p>
|
||
<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
|
||
d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le
|
||
client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
|
||
rsa précise a ssh que nous voulons un chiffrement rsa, qui est
|
||
suffisamment solide pour cette utilisation.) Entrez les informations que
|
||
ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
|
||
dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
|
||
known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
|
||
une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
|
||
intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé
|
||
privée, sauvegardez la sur une clé USB ou notez la sur un bout de
|
||
papier, si vous la perdez, vous ne pourrez plus vous connecter au
|
||
serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a
|
||
lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou
|
||
en la copiant a la main, si ça vous amuse. </p>
|
||
<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
|
||
sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
|
||
Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
|
||
de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
|
||
Testez si ça fonctionne : ouvez un autre terminal, et<br />
|
||
connectez vous a votre serveur (<code>ssh &lt;username&gt;@&lt;votre nom de
|
||
domaine&gt;</code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
|
||
il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
|
||
donc vérifiez que vous avez suivi correctement les instruction
|
||
ci-dessus.</strong></p>
|
||
<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le
|
||
configurer: </p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
|
||
apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
|
||
apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
|
||
php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
|
||
apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
|
||
php5-imagick imagemagick libapache2-mod-suphp libruby \
|
||
libapache2-mod-ruby
|
||
</pre></div>
|
||
|
||
|
||
<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br />
|
||
mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
|
||
dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
|
||
soient prises en compte par apache via un <code>sudo service apache2
|
||
restart</code> </p>
|
||
<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
|
||
comment fonctionner sur notre nom de domaine et ou trouver les fichiers
|
||
a envoyer. </p>
|
||
<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
|
||
sympa pour nous filer un fichier de configuration par défaut. Il nous
|
||
faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document
|
||
par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
|
||
et enfin redémarrer apache pour qu&rsquo;il prenne en compte les
|
||
modifications, par un <code>sudo service apache2 restart</code> </p>
|
||
<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
|
||
votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
|
||
verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour
|
||
prendre un article seul&hellip;)</p></summary></entry><entry><title>Mutt ou le client email le meilleur moins mauvais</title><link href="//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/" rel="alternate"></link><updated>2013-01-02T02:12:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/</id><summary type="html"><p>Les clients mails ont une particularité en commun : ils sont tous
|
||
<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
|
||
que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
|
||
utilisation <strong>a la</strong> UNIX<br />
|
||
Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est
|
||
le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
|
||
Mutt est un client mail en ligne de commande, qui, comme le dit sa page
|
||
d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez
|
||
chiant a configurer mais particulièrement pratique a utiliser après.</p>
|
||
<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
|
||
<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en
|
||
conjonction avec celui ci, de façon a accéder aux mails même sans accès
|
||
internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne
|
||
crée pas de cache, ce qui empêche la consultation des emails sans
|
||
connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config
|
||
par user. Offlineimap est un petit logiciel en python qui synchronise un
|
||
dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
|
||
justement mutt accepte les dossiers au format Maildir. (De plus, cela va
|
||
tout a fait dans le sens de la libération des données en cela que vous
|
||
possédez vos mails en local.)<br />
|
||
Bref, passons aux choses serieuses : le code. Déjà, installez
|
||
offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer
|
||
mutt avec le patch sidebar, qui crée un listing des dossiers sur la
|
||
partie gauche.<br />
|
||
Ensuite, voyons pour la partie configuration :<br />
|
||
Ma configuration d&rsquo;offlineimap :</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
|
||
<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
|
||
<span style="color: #75715e">## This should not be edited without creating a copy before</span>
|
||
<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
|
||
<span style="color: #75715e">## Published under CC-BY-SA</span>
|
||
|
||
<span style="color: #f8f8f2">[general]</span>
|
||
<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
|
||
<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
|
||
|
||
<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
|
||
<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
|
||
<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
|
||
<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
|
||
<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
|
||
<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
|
||
<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
|
||
|
||
<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
|
||
<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
|
||
<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
|
||
<span style="color: #75715e"># Where should the mail be placed?</span>
|
||
<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
|
||
<span style="color: #75715e"># voulez que vos emails apparaissent</span>
|
||
|
||
<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
|
||
<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
|
||
<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
|
||
<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
|
||
<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span>
|
||
<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
|
||
<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
|
||
</pre></div>
|
||
|
||
|
||
<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br />
|
||
Puis ma config mutt :</p>
|
||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
|
||
<span style="color: #75715e">## This file should not be edited without creating a copy</span>
|
||
<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
|
||
<span style="color: #75715e">## Published under CC-BY-SA</span>
|
||
|
||
<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
|
||
|
||
set mbox_type = Maildir
|
||
<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
|
||
|
||
set folder = ~/Email/
|
||
<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
|
||
|
||
set spoolfile = +INBOX
|
||
<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox
|
||
|
||
set mbox = +&#39;All Mail&#39;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
|
||
|
||
set copy = yes
|
||
<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
|
||
<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
|
||
|
||
set header_cache = /.hcache/
|
||
<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
|
||
|
||
set record = +Sent
|
||
<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
|
||
|
||
set postponed = +Drafts
|
||
<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
|
||
|
||
mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
|
||
<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
|
||
|
||
<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support)
|
||
|
||
set smtp_pass = &#39;password_placeholder&#39;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
|
||
|
||
set smtp_url = &quot;smtp://username@whatev.org:465/&quot;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails
|
||
|
||
set send_charset = &quot;utf-8&quot;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
|
||
|
||
set signature = &quot;.sign&quot;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
|
||
|
||
set sig_on_top = yes
|
||
<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible
|
||
<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
|
||
|
||
set ssl_verify_host = no
|
||
<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
|
||
|
||
set hostname = &quot;wxcafe.net&quot;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici
|
||
|
||
<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
|
||
|
||
auto_view text/html
|
||
<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
|
||
|
||
set date_format = &quot;%y-%m-%d %T&quot;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception.
|
||
|
||
set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface)
|
||
<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
|
||
|
||
set sort_alias = alias
|
||
set reverse_alias = yes
|
||
set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
|
||
<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot;
|
||
source <span style="color: #f8f8f2">$alias_file</span>
|
||
|
||
set beep = no
|
||
<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
|
||
|
||
set tilde = yes
|
||
set sleep_time = 0
|
||
<span style="color: #960050; background-color: #1e0010">#</span> ?
|
||
|
||
set sidebar_visible = yes
|
||
set sidebar_width = 15
|
||
<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
|
||
|
||
set realname = &quot;Clément Hertling (Wxcafé)&quot;
|
||
set from = &quot;wxcafe@wxcafe.net&quot;
|
||
set use_from = yes
|
||
set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes...
|
||
|
||
set edit_headers = yes
|
||
<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse.
|
||
|
||
<span style="color: #960050; background-color: #1e0010">#</span> Macros
|
||
|
||
<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
|
||
<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les
|
||
<span style="color: #960050; background-color: #1e0010">#</span> deux
|
||
<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
|
||
|
||
bind index,pager \Cp sidebar-prev
|
||
<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar
|
||
|
||
bind index,pager \Cn sidebar-next
|
||
<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar
|
||
|
||
bind index,pager \Co sidebar-open
|
||
<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar
|
||
|
||
macro index,pager d &quot;=Trash&quot; &quot;Trash&quot;
|
||
<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
|
||
|
||
bind pager previous-line
|
||
<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.
|
||
|
||
bind pager next-line
|
||
<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de
|
||
<span style="color: #960050; background-color: #1e0010">#</span> message
|
||
|
||
bind pager j next-line
|
||
bind pager k previous-line
|
||
<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
|
||
|
||
<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
|
||
|
||
set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;
|
||
set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;
|
||
set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;
|
||
set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;
|
||
set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;
|
||
set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;
|
||
set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;
|
||
set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot;
|
||
set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot;
|
||
set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;
|
||
set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;
|
||
set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;
|
||
set pgp_autosign=yes
|
||
set pgp_sign_as=0x********
|
||
<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
|
||
|
||
set pgp_replyencrypt=no
|
||
set pgp_timeout=7200
|
||
set pgp_good_sign=&quot;^gpg: Good signature from&quot;
|
||
|
||
<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
|
||
<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
|
||
|
||
<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
|
||
|
||
<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
|
||
<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
|
||
<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre.
|
||
|
||
color hdrdefault red black
|
||
color quoted brightblack black
|
||
color signature brightblack black
|
||
color attachment red black
|
||
color message brightwhite black
|
||
color error brightred black
|
||
color indicator black red
|
||
color status white black
|
||
color tree white black
|
||
color normal white black
|
||
color markers red black
|
||
color search white black
|
||
color tilde brightmagenta black
|
||
color index red black ~F
|
||
color index red black &quot;~N|~O&quot;
|
||
</pre></div>
|
||
|
||
|
||
<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt
|
||
@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
|
||
J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer
|
||
a utiliser mutt. Il est tout de fois important de se souvenir
|
||
qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un
|
||
programme ou un système, et que cette façon de faire devrait être
|
||
réservée a l&rsquo;introduction ou a des situations ou il est absolument
|
||
nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a
|
||
dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite
|
||
donc a relire les annotations dont sont parsemés les fichiers de
|
||
configuration en question, et surtout a lire le manuel, a chercher sur
|
||
<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
|
||
a tenter de comprendre les configurations en question et a les améliorer!</p></summary></entry></feed> |