Wxcafé//wxcafe.net/2014-11-07T13:04:00+01:00OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<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>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<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>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<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>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<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>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<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>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<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>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<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>