1513 lines
105 KiB
HTML
1513 lines
105 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Wxcafé</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="author" content="wxcafé">
|
|
<link rel="icon" type="image/png" href="//wxcafe.net/theme/img/favicon.ico">
|
|
<!-- Le styles -->
|
|
<link rel="stylesheet" href="//wxcafe.net/theme/css/extra.css" type="text/css" />
|
|
<link rel="stylesheet" href="//wxcafe.net/theme/css/bootstrap.css" type="text/css" />
|
|
<link href='http://fonts.googleapis.com/css?family=Oswald&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
|
<script type="text/javascript">
|
|
/* <![CDATA[ */
|
|
(function() {
|
|
var s = document.createElement('script');
|
|
var t = document.getElementsByTagName('script')[0];
|
|
|
|
s.type = 'text/javascript';
|
|
s.async = true;
|
|
s.src = '//api.flattr.com/js/0.6/load.js?'+
|
|
'mode=auto&uid=wxcafe&button=compact&popout=0';
|
|
t.parentNode.insertBefore(s, t);
|
|
})();
|
|
/* ]]> */
|
|
</script> <!-- flattr button loader -->
|
|
<style type="text/css">
|
|
body {
|
|
padding-top: 60px;
|
|
padding-bottom: 40px;
|
|
}
|
|
.sidebar-nav {
|
|
padding: 9px 0;
|
|
}
|
|
.tag-1 {
|
|
font-size: 13pt;
|
|
}
|
|
.tag-2 {
|
|
font-size: 10pt;
|
|
}
|
|
.tag-2 {
|
|
font-size: 8pt;
|
|
}
|
|
.tag-4 {
|
|
font-size: 6pt;
|
|
}
|
|
</style>
|
|
<link href="//wxcafe.net/theme/css/bootstrap-responsive.css" rel="stylesheet">
|
|
<link href="//wxcafe.net/theme/css/font-awesome.css" rel="stylesheet">
|
|
<link href="//wxcafe.net/theme/css/pygments.css" rel="stylesheet">
|
|
<!-- Le fav and touch icons -->
|
|
<link rel="shortcut icon" href="//wxcafe.net/theme/images/favicon.ico">
|
|
|
|
<link href="//wxcafe.net/feeds/feed.rss.xml" type="application/atom+xml" rel="alternate" title="Wxcafé RSS Feed" />
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div class="navbar navbar-fixed-top">
|
|
<div class="navbar-inner">
|
|
<div class="container-fluid">
|
|
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
</a>
|
|
<a class="brand" href="//wxcafe.net/index.html">Wxcafé </a>
|
|
<div class="nav-collapse">
|
|
<ul class="nav">
|
|
<li><a href="//wxcafe.net/archives.html"><i class="icon-th-list"></i> Archives</a></li>
|
|
<li><a href="//wxcafe.net/pages/about/">A propos</a></li>
|
|
<li class="divider-vertical"></li>
|
|
<ul class="nav pull-right">
|
|
</ul>
|
|
</ul>
|
|
</div><!--/.nav-collapse -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="span9" id="content">
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/nuc-hdmi-cec/">les NUCs et le HDMI-CEC</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2015-08-22T02:43:00+02:00">
|
|
<i class="icon-calendar"></i> Sat 22 August 2015
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><p>J’ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé,
|
|
passons rapidement sur ce qui y est lié : ne souhaitant pas “profiter” du
|
|
paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis
|
|
tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais
|
|
brancher sur ma télévision un système me permettant de regarder ces films et
|
|
séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix,
|
|
etc…) simplement.</p>
|
|
<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j’ai
|
|
décidé d’installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça
|
|
donnait. Le résultat n’étant pas satisfaisant (a cause des difficultés du RPi
|
|
a faire fonctionner tout ça), j’ai décidé d’upgrader le système.</p>
|
|
<p>J’ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a>
|
|
(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un
|
|
<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un
|
|
<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je
|
|
pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un
|
|
debian, avec en plus Steam pour faire du streaming depuis mon desktop. L’autre
|
|
avantage de tourner sur du Intel, c’est de pouvoir mater Netflix (puisque le
|
|
plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que
|
|
sur x86).</p>
|
|
<p>J’ai donc reçu après un certain temps le matériel sus cité, que j’ai avidement
|
|
monté, avant de me rendre compte que le manuel de l’adaptateur Pulse-Eight était
|
|
[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J’ai donc
|
|
cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce
|
|
post</a>
|
|
expliquant comment brancher l’adaptateur. Je vais donc résumer ici le processus,
|
|
ce qui devrait rendre la tache a la fois plus simple pour les autres personnes
|
|
cherchant l’information, et pour moi si je dois remonter ce système.</p>
|
|
<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit
|
|
“Front Panel”, et un appelé “Custom Solution Header”. Les trois sont utilisés
|
|
ici. La première chose a faire est de brancher les fiches grises et rouges sur
|
|
le Custom Solution Header: le branchement doit être fait ainsi :</p>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution
|
|
┌─┬─┬─┬─┬─┐
|
|
│g│ │·│r│·│
|
|
├─┼─┼─┼─┼─┤
|
|
│·│·│·│·│·│
|
|
└─┴─┴─┴─┴─┘
|
|
|
|
g ➔ fiche grise
|
|
r ➔ fiche rouge
|
|
· ➔ pin inutilisé
|
|
➔ espace vide (sans pin)
|
|
</pre></div>
|
|
|
|
|
|
<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c’est plus
|
|
facile, puisqu’il n’y a qu’une seule fiche a brancher ici : la orange.</p>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel
|
|
┌─┬─┬─┬─┬─┐
|
|
│·│·│·│·│·│
|
|
├─┼─┼─┼─┼─┤
|
|
│ │·│o│·│·│
|
|
└─┴─┴─┴─┴─┘
|
|
|
|
o ➔ fiche orange
|
|
· ➔ pin inutilisé
|
|
➔ espace vide (sans pin)
|
|
</pre></div>
|
|
|
|
|
|
<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB.
|
|
Étant donné que ce header contient deux fois les pins nécessaires a un
|
|
branchement USB, il est possible de brancher les cables de plusieurs façons. </p>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB
|
|
┌─┬─┬─┬─┬─┐
|
|
│b│B│v│n│·│
|
|
├─┼─┼─┼─┼─┤
|
|
│·│·│·│·│ │
|
|
└─┴─┴─┴─┴─┘
|
|
|
|
b ➔ fiche bleue
|
|
B ➔ fiche Blanche
|
|
v ➔ fiche verte
|
|
n ➔ fiche noire
|
|
· ➔ pin inutilisé
|
|
➔ espace vide (sans pin)
|
|
</pre></div>
|
|
|
|
|
|
<p>Tous les branchements étant effectués, il faut maintenant remonter la bête
|
|
(attention a ne pas déranger les branchements avec les antennes Wifi, par
|
|
exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer
|
|
un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut
|
|
que “Deep S4/S5” soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de
|
|
démarrer et le NUC.</p>
|
|
<p>Ne reste plus ensuite qu’a installer un système digne de ce nom dessus!</p></div>
|
|
</div>
|
|
<hr />
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/ssl-starttls/">SSL - STARTTLS</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2015-05-16T02:00:00+02:00">
|
|
<i class="icon-calendar"></i> Sat 16 May 2015
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><p>Le chiffrement SSL pour les services en ligne est un problème relativement
|
|
récent, par rapport a l’histoire d’Internet. Sa mise en place pose
|
|
problème : les protocoles existants ne s’accommodent qu’assez mal de recevoir
|
|
soudainement un flot de données chiffrées, mais développer de nouveaux
|
|
protocoles est complexe et n’apporte rien d’intéressant. Pour palier a ce
|
|
problème, deux solutions sont apparues.</p>
|
|
<p>Le première consiste à faire écouter les services sur un
|
|
autre port, dans un tunnel SSL. De cette façon, le service existant écoute
|
|
normalement, mais il ne répond pas directement aux requêtes. A la place, un
|
|
tunnel SSL est mis en place, et les requêtes et les réponses passent dans le
|
|
tunnel (ou elles apparaissent donc chiffrées pour l’extérieur). Cela permet de
|
|
proposer un service chiffré en modifiant de façon minimale le programme, au prix
|
|
de devoir aussi changer tous les clients, et de devoir les orienter sur un autre
|
|
port.</p>
|
|
<p>L’autre approche qui a été utilisée est une approche d’<em>upgrade</em>. La
|
|
communication commence en mode non chiffré, puis le client demande l’upgrade de
|
|
la connexion vers le mode chiffré s’il le supporte, les deux machines
|
|
machines font un <em>handshake</em> SSL et la communication continue a travers le
|
|
tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls
|
|
les clients capables de passer en SSL le feront, ce qui permet de faire la “mise
|
|
a jour” en douceur.</p>
|
|
<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un
|
|
service – laisser un port pour le SSL et un pour le trafic non chiffré, ou bien
|
|
un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br />
|
|
La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout
|
|
d’abord, il permet de n’utiliser qu’un seul port : ça permet de simplifier la
|
|
configuration du firewall. En plus de ça, il permet aux clients “anciens” (ceux
|
|
qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se
|
|
connecter, même si cela signifie que leurs informations seront transmises en
|
|
clair. Surtout, il permet d’éviter aux utilisateurs d’avoir a configurer leurs
|
|
clients. Si le client supporte le chiffrement, il l’activera de lui même s’il
|
|
voit qu’il est disponible.<br />
|
|
Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C’est mieux pour la sécurité
|
|
de tout le monde.</p></div>
|
|
</div>
|
|
<hr />
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/hori-vs-pdp/">Manettes : Hori vs. PDP</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2015-04-19T21:59:00+02:00">
|
|
<i class="icon-calendar"></i> Sun 19 April 2015
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/vidya-games/"><i class="icon-folder-open"></i>Vidya Games</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus
|
|
compte de quelques petits trucs : tout d’abord, Smash est bien plus drôle
|
|
a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de “choses”
|
|
: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro
|
|
Controllers pour Wii et Wii U, et d’autres. Vous aurez aussi remarqué que le
|
|
Gamepad n’est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes.
|
|
Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles
|
|
manettes Gamecube.</p>
|
|
<p>Cela étant, si comme moi vous avez, euh, “ouvert” le mode vWii de votre Wii U,
|
|
vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et
|
|
donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l’adaptateur GC pour Wii
|
|
U</a>
|
|
a votre console. </p>
|
|
<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d’habitude
|
|
avec Nintendo, c’est une solution a moitié satisfaisante…) : les classic
|
|
controller, mais en forme de manettes Gamecube.</p>
|
|
<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont
|
|
empressées de faire des manettes et de ramasser des brouettes d’argent, en
|
|
faisant des manettes Gamecube qui se connectent a des Wiimotes.</p>
|
|
<p>Nous allons ici voir deux modèles, un de chacune des boites en question
|
|
: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p>
|
|
<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande
|
|
taille en cliquant dessus</em></strong></p>
|
|
<p>Commençons par le modèle de chez Hori :</p>
|
|
<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p>
|
|
<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette
|
|
de Gamecube : a part le bouton Turbo et le bouton Home, le reste est
|
|
parfaitement identique a une véritable manette Gamecube. A noter que les boutons
|
|
centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en
|
|
plastique dur.</p>
|
|
<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p>
|
|
<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne
|
|
sont en réalité que des boutons : c’est logique puisque c’est comme ça que les
|
|
classic controller sont faits, mais c’est décevant tout de même</p>
|
|
<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p>
|
|
<p>On peut voir ici que la qualité de l’assemblage n’est pas extraordinaire, et on
|
|
remarque une soudure mal faite a l’emplacement du stick gauche.</p>
|
|
<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p>
|
|
<p>Le stick c n’est pas fixé au reste de la manette.
|
|
J’ai essayé de démonter plus avant les différentes parties de la manette, mais
|
|
les câbles n’avaient pas l’air de très bonne qualité, et j’ai préféré abandonner
|
|
l’idée plutôt que de casser la manette.</p>
|
|
<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p>
|
|
<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien
|
|
en réalité de simple boutons. Il y aurait presque la place de mettre la carte
|
|
mère d’une Wiimote entière la dedans…</p>
|
|
<hr>
|
|
|
|
<p>Passons maintenant a la manette PDP.</p>
|
|
<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p>
|
|
<p>Au premier coup d’œil, on remarque que la manette PDP ressemble beaucoup moins
|
|
a une manette gamecube. Cependant, la prise en main est exactement la même. On
|
|
regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube,
|
|
et les boutons transparents (mais c’est un problème de goût).</p>
|
|
<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p>
|
|
<p>Les gâchettes sont des vraies gâchettes! C’est impossible normalement, mais PDP
|
|
a été très intelligent sur le coup, comme on va le voir juste après.</p>
|
|
<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p>
|
|
<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien
|
|
moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien
|
|
attachées a la carte mère, et la structure en plastique est renforcée. Mais
|
|
surtout, on peut voir deux cartes filles qui sortent de façon étrange de la
|
|
carte mère, de façon <strike>péremptoire</strike> perpendiculaire…</p>
|
|
<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p>
|
|
<p>Vous l’avez deviné, ces deux “cartes filles” servent en réalité de connecteurs
|
|
aux boutons situés sur les gâchettes, qui sont de “vraies” gâchettes en cela
|
|
qu’elles sont faites de la même manière que les vraies (avec un ressort, etc)
|
|
mais qui sont en réalité des boutons (évidemment, puisque cette manette est en
|
|
fait un classic controller), par opposition aux véritables gâchettes
|
|
analogiques.</p>
|
|
<p>Quelques photos des gâchettes en question :</p>
|
|
<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p>
|
|
<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p>
|
|
<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p>
|
|
<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p>
|
|
<hr />
|
|
<p>Vous l’aurez compris, je préfère la version PDP de ces “Fight Pad”, la finition
|
|
semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont
|
|
pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le
|
|
reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version
|
|
Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p></div>
|
|
</div>
|
|
<hr />
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/">Docker et les ebooks sur Twitter</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2015-02-28T14:11:00+01:00">
|
|
<i class="icon-calendar"></i> Sat 28 February 2015
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si
|
|
ce n’est pas le cas, voila les bases : Docker est un système de containers. Les
|
|
containers sont une forme particulière de virtualisation, ou le kernel n’est pas
|
|
virtualisé, mais ou les processus du système hôte sont séparés de ceux des
|
|
systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>,
|
|
mais n’est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>,
|
|
qui permettent justement de séparer des groupes de processus. Le principe de
|
|
Docker est donc d’avoir une machine hôte sur laquelle s’exécutent plusieurs
|
|
conteneurs Dockers, chacun séparé des autres et de l’hôte, mais utilisant tous
|
|
le même kernel. Cela pose quelques questions en terme de sécurités, puisque la
|
|
séparation est bien plus fine qu’avec de la virtualisation classique. En effet,
|
|
ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la
|
|
capacité de remonter jusqu’à l’hôte, puisqu’il n’est pas vraiment séparé des
|
|
invités. </p>
|
|
<p>Quoi qu’il en soit, Docker permet donc de virtualiser a moindre coût des
|
|
systèmes GNU/Linux. “Mais pourquoi utiliser Docker, dans ce cas”, vous
|
|
demandez-vous peut être, “puisque Xen peut faire la même chose, et plus
|
|
(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?”. Et bien
|
|
c’est très simple : Docker apporte la simplicité de déploiement d’applications.
|
|
Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui
|
|
permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une
|
|
commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer
|
|
rapidement et facilement un grand nombre d’images déjà configurées. </p>
|
|
<p>Maintenant que nous avons expliqué rapidement ce qu’était Docker, voyons le
|
|
rapport avec les ebooks et Twitter.</p>
|
|
<p>Les comptes dits “ebooks” (le nom vient a l’origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>,
|
|
voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots
|
|
twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>,
|
|
avec les tweets d’un utilisateur “source” comme corpus, pour produire des tweets
|
|
ressemblant a ceux de l’utilisateur source. Nous allons voir maintenant comment
|
|
en installer un.</p>
|
|
<p>C’est, comme disent certaines personnes, “fun”.</p>
|
|
<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots,
|
|
cependant dans ce cas nous nous concentrerons sur
|
|
<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée
|
|
par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l’API
|
|
twitter et la génération des messages.</p>
|
|
<p>Cependant, cela n’explique toujours pas le lien avec Docker. Ce lien est très
|
|
simple : nous utilisons un container pour faire tourner les bots. Depuis la
|
|
version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une
|
|
seule instance. Cependant, il est toujours plus sûr d’isoler les bots, et les
|
|
containers dockers permettent de les déployer sur n’importe quelle machine
|
|
(celleux qui ont déjà tenté de mettre en place une application basée sur ruby
|
|
sauront le problème que cela pose habituellement). Pour ce faire, j’ai créé <a href="https://github.com/wxcafe/ebooks_example">un
|
|
repo github</a> qui contient toutes les
|
|
pièces nécessaires pour mettre cela en place : le bot en lui même, les deux
|
|
Dockerfiles, etc.</p>
|
|
<p>Le fonctionnement du bot est
|
|
simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de
|
|
l’utilisateur source avec <code>ebooks archive <username> <filename></code> (c’est du json)
|
|
, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks
|
|
consume <filename></code>. Cela fait, démarrer le bot revient a lancer le container :
|
|
<code>docker run -d <container name></code> Pour plus d’informations, allez voir <a href="https://docs.docker.com/articles/basics/">la
|
|
documentation Docker</a></p>
|
|
<p>Bien entendu, dans l’idéal il faudrait mettre a jour les corpus de chaque
|
|
utilisateur régulièrement. Cela est très simple a mettre en place avec un simple
|
|
script cron : </p>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json >> /var/log/ebooks/update.log 2>&1
|
|
00 05 * * * cd /usr/local/ebooks/main/ && /usr/local/bin/ebooks consume corpus/username.json >> /var/log/ebooks/update.log 2>&1
|
|
00 10 * * * docker rm -f bots >/dev/null 2>&1
|
|
00 15 * * * docker rmi bots > /dev/null 2>&1
|
|
00 20 * * * cd /usr/local/ebooks/main/ && docker build --rm -t bots . >> /var/log/ebooks/build.log 2>&1
|
|
00 25 * * * docker run -d --name bots bots >> /var/log/ebooks/run.log 2>&1
|
|
</pre></div>
|
|
|
|
|
|
<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux
|
|
commandes ne s’executent en même temps.</p>
|
|
<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby
|
|
toute sale, et votre système hôte reste propre. Bien sûr, ce n’est qu’un exemple
|
|
des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des
|
|
applications “usuelles”
|
|
dedans</a>,
|
|
puisque l’overhead de Docker est minimal, et beaucoup d’autres applications
|
|
existent.</p></div>
|
|
</div>
|
|
<hr />
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/opensmtpd-debian/">OpenSMTPd comme serveur mail sous debian</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2014-11-07T13:04:00+01:00">
|
|
<i class="icon-calendar"></i> Fri 07 November 2014
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafé</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/tutoriel/"><i class="icon-folder-open"></i>Tutoriel</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
|
|
comment gérer ses mails soi-même. Il se trouve que j’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’ai donc totalement changé d’infrastructure quand a la
|
|
gestion de mon système de mails.</p>
|
|
<p>Ainsi, j’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’<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’a le projet OpenBSD, globalement).</p>
|
|
<p>Pour rappel, le système d’emails fonctionne d’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’ai pas parlé de récupération
|
|
ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
|
|
sont remplies par d’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’est pas simplement d’envoyer et de recevoir
|
|
des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
|
|
ça que ce tutoriel ne parlera pas que d’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%"> ╭────────────────╮ ╭──────────╮
|
|
│╭──────────────>│────> to filter ───>│─╮ │
|
|
mail in ││ │ │ │ amavis │
|
|
───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
|
|
│ │ │ ╰──────────╯
|
|
mail out │ │ │ ╭──────────╮
|
|
<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user'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’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’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’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’agit de filtrer et
|
|
écouter sur le port 10026 et répondre sur le port 10027 quand il s’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%"> ╭───────────────╮ ╭───────────╮
|
|
│╭─────────────>│──> SMTP (10026) ──>│─╮ │
|
|
SMTP in ││ │ │ │ amavis │
|
|
────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
|
|
│ │ │ ╰───────────╯
|
|
SMTP out │ │ │
|
|
25 <────────│<───────────╯ │
|
|
╰───────────────╯
|
|
</pre></div>
|
|
|
|
|
|
<p>Pour les mails sortants; et</p>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
|
|
│╭─────────────>│──> SMTP (10024) ──>│─╮ │
|
|
SMTP in ││ │ │ │ amavis │
|
|
────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
|
|
│ │ │ ╰────────────╯
|
|
│ │ │ ╭────────────╮
|
|
│ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user'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’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’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">"/etc/certs/exem.pl.crt"</span>
|
|
pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</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> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</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">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</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">"smtp://localhost:10026"</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’abord, le paragraphe nommé “Certs” contient les déclaration
|
|
d’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 “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
|
|
taggue les mails sortants comme “Signed”</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’est qu’il n’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’é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’a pas encore été signé par
|
|
DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
|
|
problème de l’ordre des lignes se pose encore, pour la même raison qu’au
|
|
dessus.</li>
|
|
</ul>
|
|
<p>Nous allons maintenant configurer dovecot. Comme nous l’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’utilisateur. Il serait aussi interessant
|
|
qu’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">"%Y-%m-%d %H:%M:%S "</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> </etc/certs/exem.pl.cert
|
|
<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </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’abord, les configurations de base : ou iront les logs, comment formater
|
|
leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
|
|
<li>Nous configurons ensuite la gestion de l’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’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’activer IMAPS qu’en activant
|
|
IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
|
|
La configuration de lmtp sert a attribuer des permissions plus correctes au
|
|
fifo qu’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’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">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</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">'.'</span> <span style="color: #f92672">=></span>
|
|
<span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></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">=></span> <span style="color: #e6db74">'relaxed/simple'</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">'MYNETS'</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">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
|
<span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
|
|
<span style="color: #f8f8f2">};</span>
|
|
|
|
<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
|
|
|
|
<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</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">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
|
<span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
|
<span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
|
|
<span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
|
|
<span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
|
<span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
|
|
<span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
|
|
<span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></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">=></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’amavis signe les emails
|
|
sortants, vérifie la signature DKIM des emails rentrants, et l’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 “originating” et nous ne vérifierons pas l’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’abord, nous réaffirmons qu’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’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’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’envoi. Et voila!</p>
|
|
<p>Vous avez pu remarquer qu’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’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
|
|
différentes méthodes, j’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…</p></div>
|
|
</div>
|
|
<hr />
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/freebsd-online-mfsbsd/">Installer FreeBSD sur un serveur Online avec MfsBSD</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2014-08-28T12:16:00+02:00">
|
|
<i class="icon-calendar"></i> Thu 28 August 2014
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/tutoriel/"><i class="icon-folder-open"></i>Tutoriel</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><p>J’ai récemment eu l’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’ayant pour différentes raisons pas eu l’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’ai commencé a chercher comment le faire sur ce serveur.</p>
|
|
<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’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’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
|
|
<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
|
|
ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’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’image
|
|
mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
|
|
choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
|
|
sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
|
|
a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
|
|
mfsbsd contient un script d’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'abord, wipons le MBR :</span>
|
|
dd < /dev/zero > /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’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">"YES"</span>
|
|
<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
|
|
<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
|
|
<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</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’est la fin de ce tutoriel.
|
|
(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
|
|
crédible, disons)</p>
|
|
<p>Bon sinon sur d’autres sujets, j’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></div>
|
|
</div>
|
|
<hr />
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/">SSL ou la sécurité sur l'internet</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2014-05-30T08:25:00+02:00">
|
|
<i class="icon-calendar"></i> Fri 30 May 2014
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
|
|
Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
|
|
présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
|
|
<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
|
|
ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
|
|
c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
|
|
a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
|
|
<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
|
|
connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
|
|
remarqué quelque chose récemment : il se trouve que le certificat qui permet de
|
|
desservir ce site a changé.</p>
|
|
<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
|
|
doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
|
|
qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
|
|
du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
|
|
fonctionnel utilisant cette compréhension récemment acquise.</p>
|
|
<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
|
|
être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
|
|
simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
|
|
<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
|
|
différent pour chaque sous-domaine.</p>
|
|
<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
|
|
doivent ajouter chaque certificat a leur navigateur séparément, chaque
|
|
changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
|
|
sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
|
|
pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
|
|
sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
|
|
pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
|
|
<p>Il serait préférable de faire des redirections automatiques des adresses http
|
|
vers les adresses https, cependant, étant donné que le certificat est
|
|
self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
|
|
par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
|
|
donc pas mises en place.</p>
|
|
<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
|
|
haut, il semble intéressant (et assez important) de faire en sorte que le
|
|
serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
|
|
PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
|
|
de ce même algorithme). Cela permet de faire en sorte que toutes les
|
|
communications avec ce serveur soient future-proof, c’est a dire que, même si
|
|
quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
|
|
communications passées.</p>
|
|
<p>Bon, maintenant que les explications basiques sont faites, voyons
|
|
l’implémentation : <br />
|
|
Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
|
|
suivantes: </p>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
|
|
# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
|
|
sudo openssl req -new -key example.key -out example.csr
|
|
# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
|
|
sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
|
|
# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
|
|
</pre></div>
|
|
|
|
|
|
<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
|
|
<code>*.example.com</code> comme common name.
|
|
Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
|
|
de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
|
|
Je vais lister ici les methodes pour quelques services que j’utilise :</p>
|
|
<h3>apache :</h3>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
|
|
<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
|
|
<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
|
|
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
|
|
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
|
|
<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
|
|
<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3>nginx :</h3>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
|
|
<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
|
|
<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
|
|
<span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
|
|
<span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
|
|
<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
|
|
<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3>prosody (jabber) :</h3>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
|
|
<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
|
|
<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
|
|
<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
|
|
<span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
|
|
<span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
|
|
<span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
|
|
<span style="color: #f8f8f2">}</span>
|
|
<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3>postfix (email) :</h3>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
|
|
<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
|
|
<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
|
|
<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
|
|
<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
|
|
<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
|
|
<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
|
|
<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
|
|
<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
|
|
<span style="color: #75715e"># [...]</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3>dovecot (imap) :</h3>
|
|
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
|
|
<span style="color: #75715e"># [...]</span>
|
|
<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
|
|
<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
|
|
<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
|
|
</pre></div>
|
|
|
|
|
|
<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
|
|
au manuel approprié.</p>
|
|
<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
|
|
disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
|
|
of Authenticity</a> qui parle de son
|
|
implémentation d’une technologie “remplaçant” le système de CAs qui existe
|
|
actuellement.</p></div>
|
|
</div>
|
|
<hr />
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/mise-en-place-dun-serveur-dns/">Mise en place d'un serveur DNS</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2014-02-24T02:49:00+01:00">
|
|
<i class="icon-calendar"></i> Mon 24 February 2014
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/tutoriel/"><i class="icon-folder-open"></i>Tutoriel</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><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’époque
|
|
en termes d’expérience utilisateur n’é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’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’é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’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 “classique” 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’a, par définition, pas de TLD sur lequel se diriger
|
|
quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
|
|
sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’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’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
|
|
“enregistrements”, 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’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"><<>></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"><<>></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">->>HEADER<<-</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’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
|
|
loop, se rendra compte qu’il est en train de faire une boucle infinie et
|
|
demandera l’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’é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’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’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’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’un héberge en slave les masters de l’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">"wxcafe.net"</span> <span style="color: #f92672">{</span>
|
|
<span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
|
|
file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</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">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
|
|
<span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
|
|
file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</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">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
|
|
<span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
|
|
file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</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">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
|
|
<span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
|
|
file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</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">"v=spf1 ip4:5.39.76.46 a -all"</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’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’ordre :<br />
|
|
- Le nameserver autoritaire pour le nom de domaine en question,<br />
|
|
- L’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 (“version” 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’expire, le temps qu’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’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’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’indiquer ou il convient d’envoyer les emails pour ce domaine.
|
|
SPF est un record d’authentification pour les emails.
|
|
Les records A désignent l’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’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’autre (ce qui permet par
|
|
exemple de filtrer ensuite avec les Virtual Hosts d’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’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
|
|
l’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’étant en fin de compte que des différences de valeurs (dues au
|
|
fait que, eh bah, c’est pas les mêmes domaines…).</p>
|
|
<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’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></div>
|
|
</div>
|
|
<hr />
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/nat/">NAT</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2014-02-17T05:02:00+01:00">
|
|
<i class="icon-calendar"></i> Mon 17 February 2014
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>wxcafé</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/ranting/"><i class="icon-folder-open"></i>Ranting</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><p>NAT (Network Address Translation) in a word?<br />
|
|
It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
|
|
<p>Bon, sinon, prochain article serieux vite, bisous.</p></div>
|
|
</div>
|
|
<hr />
|
|
<div class="article">
|
|
<h1><a href="//wxcafe.net/posts/plan-9-from-whichever-space/">Plan9 from whichever space</a></h1>
|
|
<div class="well small"><footer class="post-info">
|
|
<span class="label">Date</span>
|
|
<span class="published" title="2013-09-09T11:17:00+02:00">
|
|
<i class="icon-calendar"></i> Mon 09 September 2013
|
|
</span>
|
|
<br />
|
|
<span class="label">By</span>
|
|
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
|
<br />
|
|
<span class="label">Category</span>
|
|
<a href="//wxcafe.net/category/oses/"><i class="icon-folder-open"></i>OSes</a>
|
|
<br />
|
|
|
|
|
|
|
|
|
|
</footer><!-- /.post-info --></div>
|
|
<div class="summary"><p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
|
|
Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
|
|
d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
|
|
d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
|
|
<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
|
|
et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
|
|
des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
|
|
introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
|
|
ressources appartenant a d’autres ordinateurs a distance, un support de
|
|
l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
|
|
a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
|
|
défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
|
|
<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
|
|
d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
|
|
quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
|
|
grandissant pour le klaoude et la délocalisation a la fois du processing et des
|
|
données, et bien que Plan9 ait été créé bien avant que le terme “cloud
|
|
computing” n’apparaisse pour la première fois, il semble que ce système ait été
|
|
conçu pour apporter cette délocalisation tant rêvée.</p>
|
|
<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
|
|
Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
|
|
conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
|
|
d’exploitation ultime en terme de partage de ressources et de données.
|
|
Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
|
|
distant comme n’étant qu’une poignée de fichiers permet de le monter comme
|
|
n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
|
|
a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
|
|
gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
|
|
interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
|
|
de machines différentes), permet d’utiliser les ressources d’une machine
|
|
distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
|
|
de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
|
|
même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
|
|
de plusieurs machines a la fois (ce qui permet une délocalisation des données
|
|
bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
|
|
<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
|
|
parler d’ordinateur lorsque le concept même du système est d’être composé de
|
|
clusters eux mêmes composés de machines hétérogènes. Le système de fichier
|
|
virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
|
|
différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
|
|
sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
|
|
du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
|
|
local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
|
|
font en utilisant l’accès de l’ordinateur distant, et les connections entre les
|
|
deux sont chiffrées. </p>
|
|
<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
|
|
partager leur “puissance” de calcul en userspace, des superordinateurs pour
|
|
lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
|
|
JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
|
|
que des navigateurs web a peine améliorés et des services de stockage en ligne
|
|
qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
|
|
que de les garder a disposition par le web, Plan9 promettait une technologie de
|
|
partage des ressources système et de données, une intégration du réseau dans le
|
|
système particulièrement poussée, un environnement graphique supporté par le
|
|
basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
|
|
améliorations sur Unix.</p>
|
|
<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
|
|
et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
|
|
machines Unix déjà installées était suffisamment performant et fonctionnel pour
|
|
que des solutions soient développées au dessus du système pour remplir les
|
|
mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
|
|
Linux, FUSE, etc…</p></div>
|
|
</div>
|
|
<hr />
|
|
<div class="pagination">
|
|
<ul>
|
|
<li class="prev disabled"><a href="#">← Previous</a></li>
|
|
<li class="active">
|
|
<a href="//wxcafe.net/index.html">1</a>
|
|
</li>
|
|
<li class="">
|
|
<a href="//wxcafe.net/index2.html">2</a>
|
|
</li>
|
|
<li class="next"><a href="//wxcafe.net/index2.html">Next →</a></li>
|
|
</ul>
|
|
</div>
|
|
</div><!--/span-->
|
|
<div class="span3 well sidebar-nav" id="sidebar">
|
|
<ul class="nav nav-list">
|
|
|
|
|
|
<!-- Categories links -->
|
|
<li class="nav-header"><h4><i class="icon-folder-close icon-large"></i> Categories</h4></li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/hacking/">
|
|
<i class="icon-folder-open icon-large"></i>Hacking
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/note/">
|
|
<i class="icon-folder-open icon-large"></i>Note
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/oses/">
|
|
<i class="icon-folder-open icon-large"></i>OSes
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/ranting/">
|
|
<i class="icon-folder-open icon-large"></i>Ranting
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/tutoriel/">
|
|
<i class="icon-folder-open icon-large"></i>Tutoriel
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="//wxcafe.net/category/vidya-games/">
|
|
<i class="icon-folder-open icon-large"></i>Vidya Games
|
|
</a>
|
|
</li>
|
|
<hr>
|
|
|
|
<!-- Social links -->
|
|
<li class="nav-header"><h4><i class="icon-exchange"></i> social</h4></li>
|
|
<a class="FlattrButton" style="display:none;"
|
|
title="//wxcafe.net"
|
|
style="padding-top: 10px;"
|
|
rel="flattr;
|
|
url://wxcafe.net;
|
|
title://wxcafe.net;
|
|
button:compact;
|
|
popout:0;
|
|
uid:wxcafe;
|
|
category:blog;"
|
|
href="//wxcafe.net">flattr</a>
|
|
<li><a href="https://twitter.com/wxcafe"><i class="icon-twitter icon-large"></i> Twitter</a></li>
|
|
<li><a href="https://github.com/wxcafe"><i class="icon-github icon-large"></i> Github</a></li>
|
|
<li><a href="mailto://wxcafe@wxcafe.net"><i class="icon-envelope icon-large"></i> Email</a></li>
|
|
<li><a href="https://pub.wxcafe.net/wxcafe.asc"><i class="icon-key icon-large"></i> Gpg</a></li>
|
|
<li><a href="https://www.openstreetmap.org/relation/105146"><i class="icon-map-marker icon-large"></i> IRL</a></li>
|
|
|
|
<hr>
|
|
|
|
<!-- Links -->
|
|
<li class="nav-header"><h4><i class="icon-external-link"></i> Links</h4></li>
|
|
<li><a href="https://github.com/wxcafe/blog-source"><i class="icon-code icon-large "></i> Source!</a></li>
|
|
<li><a href="http://git.wxcafe.net"><i class="icon-github-sign icon-large "></i> Public Git</a></li>
|
|
<hr>
|
|
|
|
<!--- RSS feed -->
|
|
<li class="nav-header"><h4><i class="icon-rss"></i> feeds</h4></li>
|
|
<li><a href="//wxcafe.net/feeds/feed.rss.xml" rel="alternate"><i class="icon-bookmark-empty icon-large"></i> RSS</a></li>
|
|
<li><a href="//wxcafe.net/feeds/feed.atom.xml" rel="alternate"><i class="icon-bookmark-empty icon-large"></i> Atom</a></li>
|
|
|
|
|
|
</ul> </div><!--/.well -->
|
|
</div><!--/row-->
|
|
<hr>
|
|
<footer>
|
|
<address id="about">
|
|
Proudly powered by <a href="http://pelican.notmyidea.org/">Pelican</a>,
|
|
which takes great advantage of <a href="http://python.org">Python</a>.<br />
|
|
Powered by <a href="https://github.com/getpelican/pelican-themes/tree/master/bootstrap2">bootstrap2</a> theme, thanks!
|
|
</address>
|
|
</footer>
|
|
</div><!--/.fluid-container-->
|
|
</body>
|
|
</html> |