2014-11-24 22:52:53 +01:00
<!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 -->
2015-09-03 19:58:32 +02:00
< link rel = "stylesheet" href = "//wxcafe.net/theme/css/extra.css" type = "text/css" / >
2014-11-24 22:52:53 +01:00
< link rel = "stylesheet" href = "//wxcafe.net/theme/css/bootstrap.css" type = "text/css" / >
2015-09-03 19:58:32 +02:00
< link href = 'http://fonts.googleapis.com/css?family=Oswald&subset=latin,latin-ext' rel = 'stylesheet' type = 'text/css' >
2014-11-24 22:52:53 +01:00
< 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 >
2015-09-03 19:58:32 +02:00
< span class = "icon-bar" > < / span >
2014-11-24 22:52:53 +01:00
< / 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" >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< 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 >
2015-09-03 19:58:32 +02:00
< a href = "//wxcafe.net/category/tutoriel/" > < i class = "icon-folder-open" > < / i > Tutoriel< / a >
2014-11-24 22:52:53 +01:00
< br / >
< / footer > <!-- /.post - info --> < / div >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
2015-09-03 19:58:32 +02:00
aussi mes emails. J’ ai donc totalement changé d’ infrastructure quand a la
2014-11-24 22:52:53 +01:00
gestion de mon système de mails.< / p >
2015-09-03 19:58:32 +02:00
< p > Ainsi, j’ ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
2014-11-24 22:52:53 +01:00
effectuer depuis un certain temps. < a href = "https://opensmtpd.org" > OpenSMTPd< / a > est un
2015-09-03 19:58:32 +02:00
projet originaire d’ < a href = "http://openbsd.org" > OpenBSD< / a > qui a pour but de fournir un
2014-11-24 22:52:53 +01:00
serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
(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 >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
le serveur, des yeux pour la lecture).< / p >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
< 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 >
2015-09-03 19:58:32 +02:00
< 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
╰────────────────╯ ╰──────────╯
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > Normalement, ceci devrait être a peu près clair.
Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< p > Voyons comment mettre cela en place. Tout d’ abord, il faut décider de la façon
2014-11-24 22:52:53 +01:00
dont les différents services vont communiquer.< / p >
< p > Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< div class = "codehilite" style = "background: #272822" > < pre style = "line-height: 125%" > ╭───────────────╮ ╭───────────╮
│╭─────────────> │──> SMTP (10026) ──> │─╮ │
SMTP in ││ │ │ │ amavis │
────────> 25│╯ OpenSMTPd ╭──│< ── SMTP (10027) < ──│< ╯ (sign) │
│ │ │ ╰───────────╯
SMTP out │ │ │
25 < ────────│< ───────────╯ │
╰───────────────╯
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > Pour les mails sortants; et< / p >
2015-09-03 19:58:32 +02:00
< 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
╰───────────────╯ ╰────────────╯
2014-11-24 22:52:53 +01:00
< / 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
2015-09-03 19:58:32 +02:00
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.
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :< / p >
< p > < code > /etc/smtpd.conf< / code > < / p >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > Expliquons un peu ce fichier de configuration :< / p >
< ul >
2015-09-03 19:58:32 +02:00
< li > Tout d’ abord, le paragraphe nommé “ Certs” contient les déclaration
d’ emplacement des certificats SSL.< / li >
2014-11-24 22:52:53 +01:00
< 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
2015-09-03 19:58:32 +02:00
comme “ Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
taggue les mails sortants comme “ Signed” < / li >
2014-11-24 22:52:53 +01:00
< 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
2015-09-03 19:58:32 +02:00
peut donc le transmettre au destinataire. Sinon, c’ est qu’ il n’ a pas encore
2014-11-24 22:52:53 +01:00
é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
2015-09-03 19:58:32 +02:00
première règle qui matche l’ état du paquet est appliquée. Ici, la deuxième
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
dessus.< / li >
< / ul >
2015-09-03 19:58:32 +02:00
< p > Nous allons maintenant configurer dovecot. Comme nous l’ avons vu, dovecot doit
2014-11-24 22:52:53 +01:00
écouter en LMTP via la socket < code > /var/run/dovecot/lmtp< / code > et transmettre les
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > < strong > ATTENTION: Sous OpenBSD, remplacez< / strong > < / p >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > < strong > par< / strong > < / p >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > < strong > pour identifier les utilisateurs système< / strong > < / p >
< p > Ici aussi, voyons comment ce fichier est structuré :< / p >
< ul >
2015-09-03 19:58:32 +02:00
< 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.
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
l’ IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).< / li >
2014-11-24 22:52:53 +01:00
< 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
2015-09-03 19:58:32 +02:00
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.
2014-11-24 22:52:53 +01:00
La configuration de lmtp sert a attribuer des permissions plus correctes au
2015-09-03 19:58:32 +02:00
fifo qu’ il utilise< / li >
2014-11-24 22:52:53 +01:00
< 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
2015-09-03 19:58:32 +02:00
SMTP. Comme toutes les transactions se font sur le loopback, il n’ y a aucun
2014-11-24 22:52:53 +01:00
risque a utiliser des protocoles non chiffrés.
2015-09-03 19:58:32 +02:00
Pour OpenBSD, pensez a copier la configuration par défaut depuis< code > /usr/local/share/examples/amavisd-new/amavisd.conf< / code > et ajoutez les
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > A nouveau, expliquons ce fichier :
2015-09-03 19:58:32 +02:00
- 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
2014-11-24 22:52:53 +01:00
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 :
2015-09-03 19:58:32 +02:00
ils seront traités comme “ originating” et nous ne vérifierons pas l’ OS duquel
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
sortants : tout d’ abord, nous réaffirmons qu’ ils viennent bien de notre
2014-11-24 22:52:53 +01:00
serveur. Nous autorisons les disclaimers (voire encore une fois la < a href = "https://tools.ietf.org/html/rfc4871" > RFC
2015-09-03 19:58:32 +02:00
4871< / a > . Nous déclarons l’ adresse a
2014-11-24 22:52:53 +01:00
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,
2015-09-03 19:58:32 +02:00
puis qu’ il est nécessaire de convertir les emails au format 7 bits avant de
2014-11-24 22:52:53 +01:00
les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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.
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
tutorial< / a > )
mais de nombreuses autre méthodes existent.
Il nous reste encore a configurer spamassassin :< / p >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / 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 >
2015-09-03 19:58:32 +02:00
< p > Bon courage pour votre hosting de mail ensuite… < / p > < / div >
2014-11-24 22:52:53 +01:00
< / div >
< hr / >
< div class = "article" >
2015-09-03 19:58:32 +02:00
< h1 > < a href = "//wxcafe.net/posts/freebsd-online-mfsbsd/" > Installer FreeBSD sur un serveur Online avec MfsBSD< / a > < / h1 >
2014-11-24 22:52:53 +01:00
< 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 >
2015-09-03 19:58:32 +02:00
< div class = "summary" > < p > J’ ai récemment eu l’ occasion de louer un serveur chez Online.net (filiale de Illiad)
2014-11-24 22:52:53 +01:00
Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester < a href = "http://bhyve.org/" > bhyve< / a > )
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
panel Online. Une fois cela fait, lancez une console, puis téléchargez l’ image
2014-11-24 22:52:53 +01:00
mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
2015-09-03 19:58:32 +02:00
mfsbsd contient un script d’ installation root-on-zfs, nommé logiquement
2014-11-24 22:52:53 +01:00
zfsinstall, qui va se charger de tout le travail pour nous.< / p >
< p > Utilisez donc ce script ainsi : < / p >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > Avec < code > -g da0< / code > votre disque dur principal, < code > -s 2G< / code > la quantité de swap désirée,
2015-09-03 19:58:32 +02:00
< code > -p root< / code > le nom du zpool, et < code > -c< / code > pour activer la compression. D’ autres options
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / 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 >
2015-09-03 19:58:32 +02:00
< p > Voila, c’ est la fin de ce tutoriel.
(Cela dit, bon courage pour tester bhyve, vu que l’ IPv6 chez online est… peu
2014-11-24 22:52:53 +01:00
crédible, disons)< / p >
2015-09-03 19:58:32 +02:00
< 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 > ,
2014-11-24 22:52:53 +01:00
< 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" >
2015-09-03 19:58:32 +02:00
< h1 > < a href = "//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/" > SSL ou la sécurité sur l'internet< / a > < / h1 >
2014-11-24 22:52:53 +01:00
< 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 >
2015-09-03 19:58:32 +02:00
< a href = "//wxcafe.net/category/note/" > < i class = "icon-folder-open" > < / i > Note< / a >
2014-11-24 22:52:53 +01:00
< 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 > ,
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
doigts sortis d’ un endroit particulier du corps de l’ admin/auteur de ce “ blog” ,
2014-11-24 22:52:53 +01:00
qui a pris < strong > enfin< / strong > les 5 minutes nécessaires a la compréhension superficielle
2015-09-03 19:58:32 +02:00
du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’ un système
2014-11-24 22:52:53 +01:00
fonctionnel utilisant cette compréhension récemment acquise.< / p >
< p > Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
2015-09-03 19:58:32 +02:00
être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’ est très
2014-11-24 22:52:53 +01:00
simple : il existait auparavant un certificat pour < code > wxcafe.net< / code > , un pour
2015-09-03 19:58:32 +02:00
< code > paste.wxcafe.net< / code > , un pour < code > mail.wxcafe.net< / code > , etc… Bref, un certificat
2014-11-24 22:52:53 +01:00
différent pour chaque sous-domaine.< / p >
2015-09-03 19:58:32 +02:00
< p > Il s’ avère que c’ est a la fois très peu pratique a utiliser (les utilisateurs
2014-11-24 22:52:53 +01:00
doivent ajouter chaque certificat a leur navigateur séparément, chaque
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
pas < code > *.wxcafe.net< / code > , et qui sera donc utilisé… bah pour < code > wxcafe.net< / code > .< / p >
2014-11-24 22:52:53 +01:00
< 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
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
donc pas mises en place.< / p >
2015-09-03 19:58:32 +02:00
< p > De plus, après la lecture de l’ article de blog sur Lavabit dont le lien est plus
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
communications passées.< / p >
< p > Bon, maintenant que les explications basiques sont faites, voyons
2015-09-03 19:58:32 +02:00
l’ implémentation : < br / >
Pour générer la clé, tout d’ abord, il convient d’ utiliser les commandes
2014-11-24 22:52:53 +01:00
suivantes: < / p >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
< code > *.example.com< / code > comme common name.
2015-09-03 19:58:32 +02:00
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 >
2014-11-24 22:52:53 +01:00
< h3 > apache :< / h3 >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< h3 > nginx :< / h3 >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< h3 > prosody (jabber) :< / h3 >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< h3 > postfix (email) :< / h3 >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< h3 > dovecot (imap) :< / h3 >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
< / pre > < / div >
2015-09-03 19:58:32 +02:00
< p > Voila. Pour d’ autres protocoles/services, je vous invite a RTFM^W vous reporter
2014-11-24 22:52:53 +01:00
au manuel approprié.< / p >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
of Authenticity< / a > qui parle de son
2015-09-03 19:58:32 +02:00
implémentation d’ une technologie “ remplaçant” le système de CAs qui existe
2014-11-24 22:52:53 +01:00
actuellement.< / p > < / div >
< / div >
< hr / >
< div class = "article" >
2015-09-03 19:58:32 +02:00
< h1 > < a href = "//wxcafe.net/posts/mise-en-place-dun-serveur-dns/" > Mise en place d'un serveur DNS< / a > < / h1 >
2014-11-24 22:52:53 +01:00
< 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 >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< p > Tout d’ abord, une petite explication théorique. Le DNS fonctionne de la même
2014-11-24 22:52:53 +01:00
façon que le système de fichiers : en arborescence. Cependant, là ou la racine
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< p > Le reverse DNS est une variante du DNS “ classique” permettant de résoudre les
2014-11-24 22:52:53 +01:00
adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< p > Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’ abord,
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
“ enregistrements” , records en anglais. Par exemple, un record A indique une
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
record, vous pouvez obtenir n’ importe quelle information : par exemple, < code > dig NS
2014-11-24 22:52:53 +01:00
wxcafe.net< / code > devrait vous renvoyer< / p >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / 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
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
direction se fait grâce au serveur du TLD.< / p >
< p > La configuration de bind est assez simple dans le principe, le plus complexe
2015-09-03 19:58:32 +02:00
étant en fait d’ écrire les fichiers de zone.
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’ autorité,
2014-11-24 22:52:53 +01:00
deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
(notamment mon accès chez moi). < / p >
2015-09-03 19:58:32 +02:00
< 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.
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
gérées en slave. Nous n’ examinerons ici que les déclarations de zones sur ce
2014-11-24 22:52:53 +01:00
serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
2015-09-03 19:58:32 +02:00
principale étant que l’ un héberge en slave les masters de l’ autre.
2014-11-24 22:52:53 +01:00
Le fichier < code > named.conf.local< / code > sur wxcafe.net contient donc < / p >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / 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 >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< / pre > < / div >
< p > Alors. Expliquons ligne par ligne.< br / >
2015-09-03 19:58:32 +02:00
Tout d’ abord, le TTL (time to live) est un paramètre définissant le temps
2014-11-24 22:52:53 +01:00
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).
2015-09-03 19:58:32 +02:00
Ce record prend de nombreux arguments, dans l’ ordre :< br / >
2014-11-24 22:52:53 +01:00
- Le nameserver autoritaire pour le nom de domaine en question,< br / >
2015-09-03 19:58:32 +02:00
- L’ adresse email du responsable de cette zone, avec le premier point
2014-11-24 22:52:53 +01:00
remplacé par un @, < / p >
< p > puis entre parenthèses :< br / >
2015-09-03 19:58:32 +02:00
- Le numéro de série (“ version” du fichier de zone, ici au format
2014-11-24 22:52:53 +01:00
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 / >
2015-09-03 19:58:32 +02:00
- La période d’ expire, le temps qu’ attendra le serveur autoritaire
2014-11-24 22:52:53 +01:00
secondaire avant de supprimer les informations de son cache si le primaire
reste indisponible, et enfin < br / >
2015-09-03 19:58:32 +02:00
- La période de TTL négatif, le temps qu’ attendra le serveur secondaire
2014-11-24 22:52:53 +01:00
avant de ne plus offrir les informations de cette zone si le serveur
primaire est injoignable. < / p >
2015-09-03 19:58:32 +02:00
< p > Bon, tout ceci est peut-être un peu confus, mais ce n’ est pas le record le plus
2014-11-24 22:52:53 +01:00
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 >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
2015-09-03 19:58:32 +02:00
n’ est pas encore en IPv6.< / p >
2014-11-24 22:52:53 +01:00
< p > Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
2015-09-03 19:58:32 +02:00
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 >
2014-11-24 22:52:53 +01:00
< 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
2015-09-03 19:58:32 +02:00
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,
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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" >
2015-09-03 19:58:32 +02:00
< h1 > < a href = "//wxcafe.net/posts/nat/" > NAT< / a > < / h1 >
2014-11-24 22:52:53 +01:00
< 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 / >
2015-09-03 19:58:32 +02:00
It’ s complicated. Very. Don’ t do it, you’ d damage your brain. < / p >
2014-11-24 22:52:53 +01:00
< p > Bon, sinon, prochain article serieux vite, bisous.< / p > < / div >
< / div >
< hr / >
< div class = "article" >
2015-09-03 19:58:32 +02:00
< h1 > < a href = "//wxcafe.net/posts/plan-9-from-whichever-space/" > Plan9 from whichever space< / a > < / h1 >
2014-11-24 22:52:53 +01:00
< 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.
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
grandissant pour le klaoude et la délocalisation a la fois du processing et des
2015-09-03 19:58:32 +02:00
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é
2014-11-24 22:52:53 +01:00
conçu pour apporter cette délocalisation tant rêvée.< / p >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
parler d’ ordinateur lorsque le concept même du système est d’ être composé de
2014-11-24 22:52:53 +01:00
clusters eux mêmes composés de machines hétérogènes. Le système de fichier
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
2015-09-03 19:58:32 +02:00
font en utilisant l’ accès de l’ ordinateur distant, et les connections entre les
2014-11-24 22:52:53 +01:00
deux sont chiffrées. < / p >
< p > Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
2015-09-03 19:58:32 +02:00
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
2014-11-24 22:52:53 +01:00
que des navigateurs web a peine améliorés et des services de stockage en ligne
2015-09-03 19:58:32 +02:00
qui promettent un accès universel a toutes nos données alors qu’ ils ne proposent
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
basesystem et non greffé par dessus comme l’ a été X11, et de nombreuses autres
2014-11-24 22:52:53 +01:00
améliorations sur Unix.< / p >
2015-09-03 19:58:32 +02:00
< 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
2014-11-24 22:52:53 +01:00
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
2015-09-03 19:58:32 +02:00
Linux, FUSE, etc… < / p > < / div >
2014-11-24 22:52:53 +01:00
< / 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 >
2015-09-03 19:58:32 +02:00
< a href = "//wxcafe.net/category/note/" >
< i class = "icon-folder-open icon-large" > < / i > Note
2014-11-24 22:52:53 +01:00
< / 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 >
2015-09-03 19:58:32 +02:00
< a href = "//wxcafe.net/category/tutoriel/" >
< i class = "icon-folder-open icon-large" > < / i > Tutoriel
2014-11-24 22:52:53 +01:00
< / a >
< / li >
< li >
2015-09-03 19:58:32 +02:00
< a href = "//wxcafe.net/category/vidya-games/" >
< i class = "icon-folder-open icon-large" > < / i > Vidya Games
2014-11-24 22:52:53 +01:00
< / 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 >
2015-09-03 19:58:32 +02:00
< 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 >
2014-11-24 22:52:53 +01:00
< 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 >