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.
-
Ayant un Raspberry Pi 1 qui trainait, j’ai
-décidé d’installer OpenELEC 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.
-
J’ai donc acquis un NUC D34010WYK
-(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un
-adaptateur HDMI-CEC pour celui-ci, et un
-SSD mSATA, en me disant que je
-pourrais sans trop de problème faire tourner Kodi 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).
-
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]assez médiocre. J’ai donc
-cherché plusieurs heures, avant de trouver [DE]ce
-post
-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.
-
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 :
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.
-
Dual-USB
- ┌─┬─┬─┬─┬─┐
- │b│B│v│n│·│
- ├─┼─┼─┼─┼─┤
- │·│·│·│·│ │
- └─┴─┴─┴─┴─┘
-
- b ➔ fiche bleue
- B ➔ fiche Blanche
- v ➔ fiche verte
- n ➔ fiche noire
- · ➔ pin inutilisé
- ➔ espace vide (sans pin)
-
-
-
-
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 désactivé. Ceci permettant a la connection HDMI-CEC de
-démarrer et le NUC.
-
Ne reste plus ensuite qu’a installer un système digne de ce nom dessus!
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.
-
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.
-
L’autre approche qui a été utilisée est une approche d’upgrade. 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 handshake 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.
-
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 STARTTLS, qui upgrade les connexions si nécessaire.
-La réponse est que STARTTLS 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.
-Bref, mettez en place du STARTTLS, et pas du SSL. C’est mieux pour la sécurité
-de tout le monde.
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.
-
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 l’adaptateur GC pour Wii
-U
-a votre console.
-
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.
-
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.
-
Nous allons ici voir deux modèles, un de chacune des boites en question
-: PDP et Hori.
-
Toutes les photos présentes dans cet article sont disponibles en plus grande
-taille en cliquant dessus
-
Commençons par le modèle de chez Hori :
-
-
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.
-
-
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
-
-
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.
-
-
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.
-
-
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…
-
-
-
Passons maintenant a la manette PDP.
-
-
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).
-
-
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.
-
-
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 péremptoire perpendiculaire…
-
-
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.
-
Quelques photos des gâchettes en question :
-
-
-
-
-
-
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 esttotalement identique a celle des manettes Gamecube, cependant, la version
-Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.
Vous avez peut être déjà entendu parler de Docker. 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 Jails,
-mais n’est devenu possible sous linux que récemment grâce aux cgroups,
-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.
-
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 Docker Hub permet aussi de récupérer
-rapidement et facilement un grand nombre d’images déjà configurées.
-
Maintenant que nous avons expliqué rapidement ce qu’était Docker, voyons le
-rapport avec les ebooks et Twitter.
-
Les comptes dits “ebooks” (le nom vient a l’origine de horse_ebooks,
-voir ici pourquoi) sont des bots
-twitter utilisant des Chaines de Markov,
-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.
-
C’est, comme disent certaines personnes, “fun”.
-
Il existe de nombreuses librairies écrites pour créer ce genre de bots,
-cependant dans ce cas nous nous concentrerons sur
-celle-ci, qui est une lib ruby créée
-par @m1sp, qui gère pour nous a la fois l’API
-twitter et la génération des messages.
-
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éé un
-repo github qui contient toutes les
-pièces nécessaires pour mettre cela en place : le bot en lui même, les deux
-Dockerfiles, etc.
-
Le fonctionnement du bot est
-simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de
-l’utilisateur source avec ebooks archive <username> <filename> (c’est du json)
-, puis vous convertissez le json en fichier utilisable par le bot : ebooks
-consume <filename>. Cela fait, démarrer le bot revient a lancer le container :
-docker run -d <container name> Pour plus d’informations, allez voir la
-documentation Docker
-
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 :
Les 5 minutes entre chaque commande sont laissées pour empécher que deux
-commandes ne s’executent en même temps.
-
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 des
-applications “usuelles”
-dedans,
-puisque l’overhead de Docker est minimal, et beaucoup d’autres applications
-existent.
J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.
-
Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. OpenSMTPd est un
-projet originaire d’OpenBSD qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).
-
Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.
-
Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).
-
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 Dovecot qui fait office de serveur IMAP et
-amavis/spamassassin
-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
-
╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-
-
-
-
Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout aamavis, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.
-
Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.
-
Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.
-
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,
-/var/run/dovecot/lmtp).
-
Ainsi, pour reprendre le schéma présenté plus haut :
Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même
-
(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir ce
-post)
-
Tout d’abord, commençons par installer les programmes nécessaires :
Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :
-
/etc/smtpd.conf
-
# This is the smtpd server system-wide configuration file.
-# See smtpd.conf(5) for more information.
-
-## Certs
-pki exem.pl certificate "/etc/certs/exem.pl.crt"
-pki exem.pl key "/etc/certs/exem.pl.key"
-
-## Ports to listen on, and how to listen on them
-listen on eth0 port 25 tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port 465 tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port 587 tls-require pki exem.pl hostname exem.pl auth mask-source
-
-## Aliases
-table aliases file:/etc/aliases
-
-# coming from amavisd, checked for spam/malware
-listen on lo port 10025 tag Filtered
-# coming from amavisd, signed with DKIM
-listen on lo port 10027 tag Signed
-
-## Receiving
-# if the (incoming) mail has been through amavisd, then we can deliver it
-accept tagged Filtered for any alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp"
-# we directly tranfer incoming mail to amavisd to be checked
-accept from any for domain "exem.pl" relay via "smtp://localhost:10024"
-# we have to put these lines in this order to avoid infinite loops
-
-## Sending
-# if the (outgoint) mail has been through amavisd, then we can deliver it
-accept tagged Signed for any relay
-# we tranfer the outgoing mail to amavisd to be signed
-accept for any relay via "smtp://localhost:10026"
-# same, we have to put these lines in this order or infinite loops...
-
-
-
-
Expliquons un peu ce fichier de configuration :
-
-
Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.
-
Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire
-
Les alias sont définis juste après
-
Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”
-
Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis
-
Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.
-
-
Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket /var/run/dovecot/lmtp et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.
Ici aussi, voyons comment ce fichier est structuré :
-
-
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.
-
Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)
-
Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).
-
Nous configurons le SSL
-
Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise
-
Nous configurons maintenant les protocoles, pour faire fonctionner Sieve
-
enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.
-
-
Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis/usr/local/share/examples/amavisd-new/amavisd.conf et ajoutez les
-modifications nécessaires a la fin du fichier.
A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la RFC 4871
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la RFC
- 4871. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!
-
Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.
-
Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (un
-tutorial)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :
-
#rewrite_header Subject *****SPAM*****
-# report_safe 1
-required_score2.0
-# use_bayes 1
-# bayes_auto_learn 1
-# bayes_ignore_header X-Bogosity
-# bayes_ignore_header X-Spam-Flag
-# bayes_ignore_header X-Spam-Status
-ifpluginMail::SpamAssassin::Plugin::Shortcircuit
-# shortcircuit USER_IN_WHITELIST on
-# shortcircuit USER_IN_DEF_WHITELIST on
-# shortcircuit USER_IN_ALL_SPAM_TO on
-# shortcircuit SUBJECT_IN_WHITELIST on
-# shortcircuit USER_IN_BLACKLIST on
-# shortcircuit USER_IN_BLACKLIST_TO on
-# shortcircuit SUBJECT_IN_BLACKLIST on
-shortcircuitALL_TRUSTEDoff
-# shortcircuit BAYES_99 spam
-# shortcircuit BAYES_00 ham
-
-endif# Mail::SpamAssassin::Plugin::Shortcircuit
-
-
-
-
Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.
-
Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement
J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester bhyve)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon serveur auto-hebergé ni sur ce serveur ci,
-j’ai commencé a chercher comment le faire sur ce serveur.
-
Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que ce post sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier.
-
J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers mfsbsd, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.
-
Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.
-
Utilisez donc ce script ainsi :
-
# tout d'abord, wipons le MBR :
-dd < /dev/zero > /dev/da0 count=1
-# maintenant, installons le système
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-
-
-
-
Avec -g da0 votre disque dur principal, -s 2G la quantité de swap désirée,
--p root le nom du zpool, et -c pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un zfsinstall -h si mon setup ne vous
-convient pas.
-
Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :
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!
-
Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)
Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: More Tricks for Defeating SSL,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-A Critique of Lavabit,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)
-
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é.
-
Cela fait suite aux évènements évoqués dans le Disclaimer, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris enfin les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.
-
Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour wxcafe.net, un pour
-paste.wxcafe.net, un pour mail.wxcafe.net, etc… Bref, un certificat
-différent pour chaque sous-domaine.
-
Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour *.wxcafe.net hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de wxcafe.net; et un certificat pour wxcafe.net, qui ne matche
-pas *.wxcafe.net, et qui sera donc utilisé… bah pour wxcafe.net.
-
Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.
-
De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.
-
Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation :
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes:
-
sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de 4096 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, "Common Name" 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'une durée de vie de 3 ans
-
-
-
-
Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-*.example.com comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :
Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.
-
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 SSL and the future
-of Authenticity qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.
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 http://173.194.45.66, ou a
-http://199.16.156.70. Voire même a
-http://5.39.76.46).
-
Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.
-
Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est /, celle de DNS est ., et là ou il convient d’écrire, par exemple,/usr/ et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-. n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) com, et le domaine
-google.com appartient a com, on écrit donc google.com sans écrire le point
-a la fin de façon courante.
-
Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, dans le sens contraire a l’ordre
-habituel, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire dig PTR
-76.46.39.5.in-addr.arpa. La réponse sera, évidemment, wxcafe.net
-
Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est dig. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. dig se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, dig NS
-wxcafe.net devrait vous renvoyer
Comme vous pouvez le voir, les serveurs DNS principaux pour
-wxcafe.net sont ns.wxcafe.net et ns.home.wxcafe.net,
-qui sont respectivement des alias pour wxcafe.net et home.wxcafe.net. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.
-
La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : named.conf,
-named.conf.default-zones, named.conf.local et named.conf.options.
-named.conf contient les options par défaut de bind, named.conf.default-zones
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-named.conf.local contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.
-
Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi).
-
Examinons tout d’abord les fichiers de configuration de named.named.conf.local contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones wxcafe.net et 76.46.39.5.in-addr.arpa sont gérées
-en master, et les zones home.wxcafe.net et 103.177.67.80.in-addr.arpa sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier named.conf.local sur wxcafe.net contient donc
Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans /etc/bind/master/, et les slaves un fichier dans
-/etc/bind/slave/, 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.
-
Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-/etc/bind/master/wxcafe.net :
Alors. Expliquons ligne par ligne.
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone.
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net.
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :
- - Le nameserver autoritaire pour le nom de domaine en question,
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @,
-
puis entre parenthèses :
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN)
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire,
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible,
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable.
-
Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons :
-
NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine.
-
MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.
-
Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)
-
Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.
-
Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).
-
Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le RFC
-1034 et le
-RFC 1035. Dans un autre style (bien plus
-avancé) le blog de Stéphane Bortzmeyer est interessant
-aussi.
Plan 9 from Outer Space est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.
-
Plan 9 from Bell Labs est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix.
-
Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.
-
En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).
-
Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées.
-
Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.
-
Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 via son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…
sed est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.
-Or sed a bien plus de possibilités que ça, comme nous allons le voir.
-
Tout d’abord, rappelons les bases : sed est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de ed, l’éditeur original.ed est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des téléscripteurs, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. sed est donc une évolution de ed, le
-s signifiant stream, sed est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir Flux standards) pour éditer plus d’une ligne a la fois.
-En pratique, sed est principalement utilisé sur des fichiers.
-
sed a quelques options pratique, notamment -s qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien -i (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.
-
ed, et donc sed, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans sed est
-
/[regex]/
-
-
-
-
qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.)
-
-La commande sed la plus utilisée est bien entendu le s, qui s’utilise de
-la façon suivante :
-
s/[oldtext]/[newtext]/[options]
-
-
-
-
qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant g,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, sed utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.
-
Par exemple, la commande
-
sed 's/\(hello world\) world/\1/'
-
-
-
-
sur le texte “hello world world” renverrait comme résultat
-
hello world
-
-
-
-
De la même façon, le symbole & dans le texte de remplacement représente le
-texte original. Ainsi, la commande
-
sed 's/hello world/& world/'
-
-
-
-
sur le texte “hello world” renverrait comme résultat
-
hello world world
-
-
-
-
-
Une autre commande utile est p, qui sert a afficher le texte présent dans
-l’espace courant :
-
/[regex]/p
-
-
-
-
sed stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commandep affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le p affiche donc ce dernier.
-
Un autre exemple de commande sont c, i et a, qui s’utilisent ainsi :
-
c \
-[text]
-
-
-
-
De la même façon, pour le i :
-
i \
-[text]
-
-
-
-
Et de même pour a.
-
Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. i sert a insérer du texte avant le pattern space. a
-sert a insérer du texte après le pattern space, et enfin c sert a
-remplacer tout le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.
-
Enfin, dernière commande ne fonctionnant que ligne par ligne, d :
- /[regex]/d
-d (delete) supprime les contenus du pattern space.
-
sed est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.
Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier en
-clair a un fichier chiffré dit cyphertext. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux dm_crypt et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre clé GPG)
-
dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur LUKS, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de mapper des block devices. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans/dev/, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)
-
Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.
-
D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot doit s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.
-
La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du vrai boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau beaucoup plus difficile qu’elle ne le serait sans.
-
Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, cryptsetup. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation userspace de dm-crypt, qui pour sa
-part est entièrement kernel-space. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root.
-
Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire :
Maintenant que notre image est créée, nous pouvons la chiffrer :
-
sudo cryptsetup luksFormat image.img
-
-
-
-
cryptsetup va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.
-Une fois cela fait, nous allons mapper cette image :
-
sudo cryptsetup luksOpen image.img crypto
-
-
-
-
cryptsetup nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser.
-
sudo mkfs.ext4 /dev/mapper/crypto
-
-
-
-
Maintenant que notre disque est formaté, il peut être monté :
-
sudo mount /dev/mapper/crypto /mnt
-
-
-
-
Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un mount | grep crypto devrait vous donner le résultat
-suivant :
-
/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-
-
-
-
Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité.
-
Pour résumer :
-
-
-
Pour monter vos partitions :
-
sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-
Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur github.
-
Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un dd if=votre_image of=/dev/votre_partition
-pour ce faire.
Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.
-
Du coup, expliquons. J’ai récemment monté serverporn, et ai par la même
-occasion découvert pelican. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html.
Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles {{ article.content }},
-par exemple. La syntaxe complète est très bien documentée dans la doc de
-pelican.
-
L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un make html pour mettre a jour le blog.
-
De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.
-
En ce qui concerne les points négatifs :
-
-
-
Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos ici quand a
- mon avis sur ce sujet.
-
-
-
Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.
-
-
-
Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?
-
-
-
Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.
-
-
-
Voila, c’est mon retour d’expérience sur pelican. A plus.
Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.
-
Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :
-
Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de cet article, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.
-
Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.
-
Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.
-
Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.
-
Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.
-
Donc, nous allons lancer deux processus en même temps :
-
-
-
Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :
Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :
-
adb restore exploit.ab
-
-
-
-
Ces commandes vont fonctionner de concert pour nous donner un accès root :
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.
-
-
-
And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).
-
Il nous reste a rebooter, depuis l’ordinateur host :
-
adb reboot
-
-
-
-
Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :
Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :
-
adb shell "chmod 6755 /system/xbin/su"
-
-
-
-
Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :
-
adb shell "rm /data/local.prop"
-
-
-
-
Enfin, nous redemarrons a nouveau :
-
adb reboot
-
-
-
-
Et voila, une paire de google glass rootée!
-
Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.
-
Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.
Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données.
-
Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).
-
La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.
-
Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.
-
Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un passwd, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine.
-
Cette entrée doit donc pour l’instant ressembler a ca :
-
<votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-
-
-
-
Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.
-
root est un utilisateur assez répandu, et il est assez simple de
-bruteforcer le mot de passe. (Relativement assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.
-
Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)
-
Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste adduser <username>, soit utiliser le mode non-interactif
-en faisant un adduser --group <username>
-
Avec useradd, vous devrez utiliser la commande suivante : useradd -m
--N -g <username>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).
-
Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: usermod <username> -a -G www-data postfix
-users staff sudo wheel, puis de changer son mot de passe
-passwd. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers
-Enfin, changeons d’utilisateur : su. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.
-
Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque
-utilisateur.
-
Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande ssh-keygen -t rsa (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec unscp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/ , ou
-en la copiant a la main, si ça vous amuse.
-
Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (mkdir .ssh), puis
-de déplacer ce fichier a la bonne place (mv ~/id_rsa.pub ~/.ssh/authorized_keys).
-Testez si ça fonctionne : ouvez un autre terminal, et
-connectez vous a votre serveur (ssh <username>@<votre nom de
-domaine>), et il ne devrait pas vous demander de mot de passe.Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.
-
Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer:
(faisons large, on aura besoin de l’excédent plus tard…), puis activons les
-mods apache en faisant a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest, et faisons en sorte que ces activations
-soient prises en compte par apache via un sudo service apache2
-restart
-
Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer.
-
Pour cela, nous allons faire un simple ln -s /etc/apache2/sites-{available,enabled}/default, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant AllowOverride none en AllowOverride All,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un sudo service apache2 restart
-
Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)
This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text here
-
Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.
-
Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas vraiment eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :
-
-
Ce qui est petit est beau
-
Faites en sorte que chaque programme fasse une chose, bien.
-
Faites un prototype aussi vite que possible
-
Choisissez la portabilité plutôt que l’efficacité
-
Stockez les données dans des fichiers textes.
-
Utilisez ce qui existe déjà a votre avantage. [1]
-
Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.
-
Évitez les UI qui “capturent” l’utilisateur.
-
Faites de chaque programme un filtre.
-
-
Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la philosophie UNIX. Et
-celle-ci n’a pas fait son temps, elle a fait ses preuves. La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatiquesérieusement (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).
-
Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’estbeaucoup moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote légèrement plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.
-
Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.
-
Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.
-
OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la page d’accueil du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)
-
Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)
-
Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*
Bon.
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, astucieusement nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité.
-
De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas simplement possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve.
-
Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple et
-bonne raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)
-
Il y a énormément d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc…
-
Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’estvisiblement pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non.
-
Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie.
Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!
Les clients mails ont une particularité en commun : ils sont tous
-très mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation a la UNIX
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu Outlook Express 2003 Mutt!
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, “just sucks less”. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.
-
La configuration de mutt se fait dans le fichier .muttrc ou dans
-/etc/Muttrc, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans~/.offlineimaprc ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et ce script fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.
-Ensuite, voyons pour la partie configuration :
-Ma configuration d’offlineimap :
-
## Config file for offlineimap
-## Originally located in ~/.offlineimaprc
-## This should not be edited without creating a copy before
-## Created by Wxcafe (Clément Hertling)
-## Published under CC-BY-SA
-
-[general]
-# List of accounts to be synced, separated by a comma.
-accounts=main
-
-[Accountmain]
-# Identifier for the local repository; e.g. the maildir to be synced via IMAP.
-localrepository=main-local
-# Identifier for the remote repository; i.e. the actual IMAP, usually non-local.
-remoterepository=main-remote
-# Status cache. Default is plain, which eventually becomes huge and slow.
-status_backend=sqlite#letypedecache.(plainousqlite)
-
-[Repositorymain-local]
-# Currently, offlineimap only supports maildir and IMAP for local repositories.
-type=Maildir#letypedestockage(MaildirouIMAP)
-# Where should the mail be placed?
-localfolders=~/Emails/#ledossierdanslequelvous
- # voulez que vos emails apparaissent
-
-[Repositorymain-remote]
-# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.
-type=IMAP
-remotehost=//placeholderhost// # le serveur de votre messagerie
-remoteuser=//placeholderusername// # votre nom d'utilisateur
-remotepass=//placeholderpassword// # votre mot de passe
-cert_fingerprint=//placeholdercert// # le certificat du serveur (IMAPS only)
-
-
-
-
Ça devrait être assez simple a lire, j’ai tout bien commenté :3
-Puis ma config mutt :
-
## Mutt MUA configuration file
-## This file should not be edited without creating a copy
-## File Created and edited by Wxcafe (Clément Hertling)
-## Published under CC-BY-SA
-
-# General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-# type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-# dossier root mailbox/imap
-
-set spoolfile = +INBOX
-# dossier d'inbox
-
-set mbox = +'All Mail'
-# dossier ou archiver les emails
-
-set copy = yes
-# yes pour copier les messages dans les differents dossier, no pour...
-# enfin voila quoi.
-
-set header_cache = /.hcache/
-# dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-# dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-# dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-# liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-# General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-# votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-# l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-# UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-# vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-# il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-# comme ca.
-
-set ssl_verify_host = no
-# mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-# mettez l'adresse de votre serveur ici
-
-# Misc settings
-
-auto_view text/html
-# la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-# format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-# format de l'index (la présentation de l'interface)
-# voir http://www.mutt.org/doc/manual/manual-6.html#index_format
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "$HOME/.mutt/aliases"
-# liste des alias noms/email. a créer et remplir vous même.
-# format : "alias short_name long_email_adress"
-source $alias_file
-
-set beep = no
-# ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-# ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-# parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "$HOME/.mutt/cacert"
-# parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-# vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-# Macros
-
-# le titre dit tout. index veut dire que la macro est active dans les menus,
-# pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-# deux
-# \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-# Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-# Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-# Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-# d supprime le message en cours
-
-bind pager previous-line
-# permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-# permet de descendre d'une ligne avec la touche down, au lieu de changer de
-# message
-
-bind pager j next-line
-bind pager k previous-line
-# raccourcis vim
-
-# PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-# remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-# si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-# PGP signing options
-
-# Palette for use with the Linux console. Black background.
-
-# Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-# défaut noir et blanc.
-# d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-
-
-
-
Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ http://www.mutt.org/doc/manual/
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-BingGoogleYahoo Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!
Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.
-
Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :
-
Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de cet article, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.
-
Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.
-
Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.
-
Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.
-
Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.
-
Donc, nous allons lancer deux processus en même temps :
-
-
-
Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :
Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :
-
adb restore exploit.ab
-
-
-
-
Ces commandes vont fonctionner de concert pour nous donner un accès root :
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.
-
-
-
And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).
-
Il nous reste a rebooter, depuis l’ordinateur host :
-
adb reboot
-
-
-
-
Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :
Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :
-
adb shell "chmod 6755 /system/xbin/su"
-
-
-
-
Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :
-
adb shell "rm /data/local.prop"
-
-
-
-
Enfin, nous redemarrons a nouveau :
-
adb reboot
-
-
-
-
Et voila, une paire de google glass rootée!
-
Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.
-
Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.
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.
-
Ayant un Raspberry Pi 1 qui trainait, j’ai
-décidé d’installer OpenELEC 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.
-
J’ai donc acquis un NUC D34010WYK
-(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un
-adaptateur HDMI-CEC pour celui-ci, et un
-SSD mSATA, en me disant que je
-pourrais sans trop de problème faire tourner Kodi 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).
-
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]assez médiocre. J’ai donc
-cherché plusieurs heures, avant de trouver [DE]ce
-post
-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.
-
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 :
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.
-
Dual-USB
- ┌─┬─┬─┬─┬─┐
- │b│B│v│n│·│
- ├─┼─┼─┼─┼─┤
- │·│·│·│·│ │
- └─┴─┴─┴─┴─┘
-
- b ➔ fiche bleue
- B ➔ fiche Blanche
- v ➔ fiche verte
- n ➔ fiche noire
- · ➔ pin inutilisé
- ➔ espace vide (sans pin)
-
-
-
-
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 désactivé. Ceci permettant a la connection HDMI-CEC de
-démarrer et le NUC.
-
Ne reste plus ensuite qu’a installer un système digne de ce nom dessus!
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.
-
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.
-
L’autre approche qui a été utilisée est une approche d’upgrade. 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 handshake 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.
-
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 STARTTLS, qui upgrade les connexions si nécessaire.
-La réponse est que STARTTLS 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.
-Bref, mettez en place du STARTTLS, et pas du SSL. C’est mieux pour la sécurité
-de tout le monde.
Vous avez peut être déjà entendu parler de Docker. 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 Jails,
-mais n’est devenu possible sous linux que récemment grâce aux cgroups,
-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.
-
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 Docker Hub permet aussi de récupérer
-rapidement et facilement un grand nombre d’images déjà configurées.
-
Maintenant que nous avons expliqué rapidement ce qu’était Docker, voyons le
-rapport avec les ebooks et Twitter.
-
Les comptes dits “ebooks” (le nom vient a l’origine de horse_ebooks,
-voir ici pourquoi) sont des bots
-twitter utilisant des Chaines de Markov,
-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.
-
C’est, comme disent certaines personnes, “fun”.
-
Il existe de nombreuses librairies écrites pour créer ce genre de bots,
-cependant dans ce cas nous nous concentrerons sur
-celle-ci, qui est une lib ruby créée
-par @m1sp, qui gère pour nous a la fois l’API
-twitter et la génération des messages.
-
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éé un
-repo github qui contient toutes les
-pièces nécessaires pour mettre cela en place : le bot en lui même, les deux
-Dockerfiles, etc.
-
Le fonctionnement du bot est
-simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de
-l’utilisateur source avec ebooks archive <username> <filename> (c’est du json)
-, puis vous convertissez le json en fichier utilisable par le bot : ebooks
-consume <filename>. Cela fait, démarrer le bot revient a lancer le container :
-docker run -d <container name> Pour plus d’informations, allez voir la
-documentation Docker
-
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 :
Les 5 minutes entre chaque commande sont laissées pour empécher que deux
-commandes ne s’executent en même temps.
-
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 des
-applications “usuelles”
-dedans,
-puisque l’overhead de Docker est minimal, et beaucoup d’autres applications
-existent.
Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: More Tricks for Defeating SSL,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-A Critique of Lavabit,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)
-
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é.
-
Cela fait suite aux évènements évoqués dans le Disclaimer, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris enfin les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.
-
Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour wxcafe.net, un pour
-paste.wxcafe.net, un pour mail.wxcafe.net, etc… Bref, un certificat
-différent pour chaque sous-domaine.
-
Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour *.wxcafe.net hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de wxcafe.net; et un certificat pour wxcafe.net, qui ne matche
-pas *.wxcafe.net, et qui sera donc utilisé… bah pour wxcafe.net.
-
Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.
-
De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.
-
Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation :
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes:
-
sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de 4096 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, "Common Name" 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'une durée de vie de 3 ans
-
-
-
-
Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-*.example.com comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :
Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.
-
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 SSL and the future
-of Authenticity qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.
Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.
-
Du coup, expliquons. J’ai récemment monté serverporn, et ai par la même
-occasion découvert pelican. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html.
Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles {{ article.content }},
-par exemple. La syntaxe complète est très bien documentée dans la doc de
-pelican.
-
L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un make html pour mettre a jour le blog.
-
De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.
-
En ce qui concerne les points négatifs :
-
-
-
Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos ici quand a
- mon avis sur ce sujet.
-
-
-
Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.
-
-
-
Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?
-
-
-
Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.
-
-
-
Voila, c’est mon retour d’expérience sur pelican. A plus.
Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!
Plan 9 from Outer Space est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.
-
Plan 9 from Bell Labs est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix.
-
Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.
-
En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).
-
Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées.
-
Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.
-
Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 via son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…
This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text here
-
Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.
-
Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas vraiment eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :
-
-
Ce qui est petit est beau
-
Faites en sorte que chaque programme fasse une chose, bien.
-
Faites un prototype aussi vite que possible
-
Choisissez la portabilité plutôt que l’efficacité
-
Stockez les données dans des fichiers textes.
-
Utilisez ce qui existe déjà a votre avantage. [1]
-
Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.
-
Évitez les UI qui “capturent” l’utilisateur.
-
Faites de chaque programme un filtre.
-
-
Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la philosophie UNIX. Et
-celle-ci n’a pas fait son temps, elle a fait ses preuves. La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatiquesérieusement (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).
-
Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’estbeaucoup moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote légèrement plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.
-
Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.
-
Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.
-
OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la page d’accueil du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)
-
Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)
-
Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*
Bon.
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, astucieusement nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité.
-
De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas simplement possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve.
-
Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple et
-bonne raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)
-
Il y a énormément d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc…
-
Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’estvisiblement pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non.
-
Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie.
J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.
-
Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. OpenSMTPd est un
-projet originaire d’OpenBSD qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).
-
Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.
-
Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).
-
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 Dovecot qui fait office de serveur IMAP et
-amavis/spamassassin
-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
-
╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-
-
-
-
Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout aamavis, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.
-
Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.
-
Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.
-
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,
-/var/run/dovecot/lmtp).
-
Ainsi, pour reprendre le schéma présenté plus haut :
Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même
-
(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir ce
-post)
-
Tout d’abord, commençons par installer les programmes nécessaires :
Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :
-
/etc/smtpd.conf
-
# This is the smtpd server system-wide configuration file.
-# See smtpd.conf(5) for more information.
-
-## Certs
-pki exem.pl certificate "/etc/certs/exem.pl.crt"
-pki exem.pl key "/etc/certs/exem.pl.key"
-
-## Ports to listen on, and how to listen on them
-listen on eth0 port 25 tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port 465 tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port 587 tls-require pki exem.pl hostname exem.pl auth mask-source
-
-## Aliases
-table aliases file:/etc/aliases
-
-# coming from amavisd, checked for spam/malware
-listen on lo port 10025 tag Filtered
-# coming from amavisd, signed with DKIM
-listen on lo port 10027 tag Signed
-
-## Receiving
-# if the (incoming) mail has been through amavisd, then we can deliver it
-accept tagged Filtered for any alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp"
-# we directly tranfer incoming mail to amavisd to be checked
-accept from any for domain "exem.pl" relay via "smtp://localhost:10024"
-# we have to put these lines in this order to avoid infinite loops
-
-## Sending
-# if the (outgoint) mail has been through amavisd, then we can deliver it
-accept tagged Signed for any relay
-# we tranfer the outgoing mail to amavisd to be signed
-accept for any relay via "smtp://localhost:10026"
-# same, we have to put these lines in this order or infinite loops...
-
-
-
-
Expliquons un peu ce fichier de configuration :
-
-
Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.
-
Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire
-
Les alias sont définis juste après
-
Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”
-
Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis
-
Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.
-
-
Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket /var/run/dovecot/lmtp et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.
Ici aussi, voyons comment ce fichier est structuré :
-
-
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.
-
Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)
-
Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).
-
Nous configurons le SSL
-
Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise
-
Nous configurons maintenant les protocoles, pour faire fonctionner Sieve
-
enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.
-
-
Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis/usr/local/share/examples/amavisd-new/amavisd.conf et ajoutez les
-modifications nécessaires a la fin du fichier.
A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la RFC 4871
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la RFC
- 4871. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!
-
Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.
-
Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (un
-tutorial)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :
-
#rewrite_header Subject *****SPAM*****
-# report_safe 1
-required_score2.0
-# use_bayes 1
-# bayes_auto_learn 1
-# bayes_ignore_header X-Bogosity
-# bayes_ignore_header X-Spam-Flag
-# bayes_ignore_header X-Spam-Status
-ifpluginMail::SpamAssassin::Plugin::Shortcircuit
-# shortcircuit USER_IN_WHITELIST on
-# shortcircuit USER_IN_DEF_WHITELIST on
-# shortcircuit USER_IN_ALL_SPAM_TO on
-# shortcircuit SUBJECT_IN_WHITELIST on
-# shortcircuit USER_IN_BLACKLIST on
-# shortcircuit USER_IN_BLACKLIST_TO on
-# shortcircuit SUBJECT_IN_BLACKLIST on
-shortcircuitALL_TRUSTEDoff
-# shortcircuit BAYES_99 spam
-# shortcircuit BAYES_00 ham
-
-endif# Mail::SpamAssassin::Plugin::Shortcircuit
-
-
-
-
Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.
-
Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement
J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester bhyve)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon serveur auto-hebergé ni sur ce serveur ci,
-j’ai commencé a chercher comment le faire sur ce serveur.
-
Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que ce post sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier.
-
J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers mfsbsd, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.
-
Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.
-
Utilisez donc ce script ainsi :
-
# tout d'abord, wipons le MBR :
-dd < /dev/zero > /dev/da0 count=1
-# maintenant, installons le système
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-
-
-
-
Avec -g da0 votre disque dur principal, -s 2G la quantité de swap désirée,
--p root le nom du zpool, et -c pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un zfsinstall -h si mon setup ne vous
-convient pas.
-
Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :
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!
-
Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)
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 http://173.194.45.66, ou a
-http://199.16.156.70. Voire même a
-http://5.39.76.46).
-
Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.
-
Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est /, celle de DNS est ., et là ou il convient d’écrire, par exemple,/usr/ et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-. n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) com, et le domaine
-google.com appartient a com, on écrit donc google.com sans écrire le point
-a la fin de façon courante.
-
Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, dans le sens contraire a l’ordre
-habituel, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire dig PTR
-76.46.39.5.in-addr.arpa. La réponse sera, évidemment, wxcafe.net
-
Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est dig. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. dig se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, dig NS
-wxcafe.net devrait vous renvoyer
Comme vous pouvez le voir, les serveurs DNS principaux pour
-wxcafe.net sont ns.wxcafe.net et ns.home.wxcafe.net,
-qui sont respectivement des alias pour wxcafe.net et home.wxcafe.net. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.
-
La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : named.conf,
-named.conf.default-zones, named.conf.local et named.conf.options.
-named.conf contient les options par défaut de bind, named.conf.default-zones
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-named.conf.local contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.
-
Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi).
-
Examinons tout d’abord les fichiers de configuration de named.named.conf.local contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones wxcafe.net et 76.46.39.5.in-addr.arpa sont gérées
-en master, et les zones home.wxcafe.net et 103.177.67.80.in-addr.arpa sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier named.conf.local sur wxcafe.net contient donc
Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans /etc/bind/master/, et les slaves un fichier dans
-/etc/bind/slave/, 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.
-
Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-/etc/bind/master/wxcafe.net :
Alors. Expliquons ligne par ligne.
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone.
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net.
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :
- - Le nameserver autoritaire pour le nom de domaine en question,
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @,
-
puis entre parenthèses :
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN)
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire,
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible,
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable.
-
Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons :
-
NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine.
-
MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.
-
Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)
-
Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.
-
Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).
-
Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le RFC
-1034 et le
-RFC 1035. Dans un autre style (bien plus
-avancé) le blog de Stéphane Bortzmeyer est interessant
-aussi.
sed est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.
-Or sed a bien plus de possibilités que ça, comme nous allons le voir.
-
Tout d’abord, rappelons les bases : sed est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de ed, l’éditeur original.ed est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des téléscripteurs, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. sed est donc une évolution de ed, le
-s signifiant stream, sed est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir Flux standards) pour éditer plus d’une ligne a la fois.
-En pratique, sed est principalement utilisé sur des fichiers.
-
sed a quelques options pratique, notamment -s qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien -i (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.
-
ed, et donc sed, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans sed est
-
/[regex]/
-
-
-
-
qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.)
-
-La commande sed la plus utilisée est bien entendu le s, qui s’utilise de
-la façon suivante :
-
s/[oldtext]/[newtext]/[options]
-
-
-
-
qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant g,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, sed utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.
-
Par exemple, la commande
-
sed 's/\(hello world\) world/\1/'
-
-
-
-
sur le texte “hello world world” renverrait comme résultat
-
hello world
-
-
-
-
De la même façon, le symbole & dans le texte de remplacement représente le
-texte original. Ainsi, la commande
-
sed 's/hello world/& world/'
-
-
-
-
sur le texte “hello world” renverrait comme résultat
-
hello world world
-
-
-
-
-
Une autre commande utile est p, qui sert a afficher le texte présent dans
-l’espace courant :
-
/[regex]/p
-
-
-
-
sed stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commandep affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le p affiche donc ce dernier.
-
Un autre exemple de commande sont c, i et a, qui s’utilisent ainsi :
-
c \
-[text]
-
-
-
-
De la même façon, pour le i :
-
i \
-[text]
-
-
-
-
Et de même pour a.
-
Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. i sert a insérer du texte avant le pattern space. a
-sert a insérer du texte après le pattern space, et enfin c sert a
-remplacer tout le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.
-
Enfin, dernière commande ne fonctionnant que ligne par ligne, d :
- /[regex]/d
-d (delete) supprime les contenus du pattern space.
-
sed est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.
Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier en
-clair a un fichier chiffré dit cyphertext. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux dm_crypt et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre clé GPG)
-
dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur LUKS, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de mapper des block devices. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans/dev/, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)
-
Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.
-
D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot doit s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.
-
La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du vrai boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau beaucoup plus difficile qu’elle ne le serait sans.
-
Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, cryptsetup. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation userspace de dm-crypt, qui pour sa
-part est entièrement kernel-space. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root.
-
Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire :
Maintenant que notre image est créée, nous pouvons la chiffrer :
-
sudo cryptsetup luksFormat image.img
-
-
-
-
cryptsetup va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.
-Une fois cela fait, nous allons mapper cette image :
-
sudo cryptsetup luksOpen image.img crypto
-
-
-
-
cryptsetup nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser.
-
sudo mkfs.ext4 /dev/mapper/crypto
-
-
-
-
Maintenant que notre disque est formaté, il peut être monté :
-
sudo mount /dev/mapper/crypto /mnt
-
-
-
-
Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un mount | grep crypto devrait vous donner le résultat
-suivant :
-
/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-
-
-
-
Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité.
-
Pour résumer :
-
-
-
Pour monter vos partitions :
-
sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-
Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur github.
-
Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un dd if=votre_image of=/dev/votre_partition
-pour ce faire.
Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données.
-
Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).
-
La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.
-
Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.
-
Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un passwd, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine.
-
Cette entrée doit donc pour l’instant ressembler a ca :
-
<votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-
-
-
-
Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.
-
root est un utilisateur assez répandu, et il est assez simple de
-bruteforcer le mot de passe. (Relativement assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.
-
Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)
-
Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste adduser <username>, soit utiliser le mode non-interactif
-en faisant un adduser --group <username>
-
Avec useradd, vous devrez utiliser la commande suivante : useradd -m
--N -g <username>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).
-
Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: usermod <username> -a -G www-data postfix
-users staff sudo wheel, puis de changer son mot de passe
-passwd. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers
-Enfin, changeons d’utilisateur : su. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.
-
Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque
-utilisateur.
-
Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande ssh-keygen -t rsa (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec unscp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/ , ou
-en la copiant a la main, si ça vous amuse.
-
Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (mkdir .ssh), puis
-de déplacer ce fichier a la bonne place (mv ~/id_rsa.pub ~/.ssh/authorized_keys).
-Testez si ça fonctionne : ouvez un autre terminal, et
-connectez vous a votre serveur (ssh <username>@<votre nom de
-domaine>), et il ne devrait pas vous demander de mot de passe.Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.
-
Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer:
(faisons large, on aura besoin de l’excédent plus tard…), puis activons les
-mods apache en faisant a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest, et faisons en sorte que ces activations
-soient prises en compte par apache via un sudo service apache2
-restart
-
Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer.
-
Pour cela, nous allons faire un simple ln -s /etc/apache2/sites-{available,enabled}/default, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant AllowOverride none en AllowOverride All,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un sudo service apache2 restart
-
Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)
Les clients mails ont une particularité en commun : ils sont tous
-très mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation a la UNIX
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu Outlook Express 2003 Mutt!
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, “just sucks less”. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.
-
La configuration de mutt se fait dans le fichier .muttrc ou dans
-/etc/Muttrc, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans~/.offlineimaprc ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et ce script fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.
-Ensuite, voyons pour la partie configuration :
-Ma configuration d’offlineimap :
-
## Config file for offlineimap
-## Originally located in ~/.offlineimaprc
-## This should not be edited without creating a copy before
-## Created by Wxcafe (Clément Hertling)
-## Published under CC-BY-SA
-
-[general]
-# List of accounts to be synced, separated by a comma.
-accounts=main
-
-[Accountmain]
-# Identifier for the local repository; e.g. the maildir to be synced via IMAP.
-localrepository=main-local
-# Identifier for the remote repository; i.e. the actual IMAP, usually non-local.
-remoterepository=main-remote
-# Status cache. Default is plain, which eventually becomes huge and slow.
-status_backend=sqlite#letypedecache.(plainousqlite)
-
-[Repositorymain-local]
-# Currently, offlineimap only supports maildir and IMAP for local repositories.
-type=Maildir#letypedestockage(MaildirouIMAP)
-# Where should the mail be placed?
-localfolders=~/Emails/#ledossierdanslequelvous
- # voulez que vos emails apparaissent
-
-[Repositorymain-remote]
-# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.
-type=IMAP
-remotehost=//placeholderhost// # le serveur de votre messagerie
-remoteuser=//placeholderusername// # votre nom d'utilisateur
-remotepass=//placeholderpassword// # votre mot de passe
-cert_fingerprint=//placeholdercert// # le certificat du serveur (IMAPS only)
-
-
-
-
Ça devrait être assez simple a lire, j’ai tout bien commenté :3
-Puis ma config mutt :
-
## Mutt MUA configuration file
-## This file should not be edited without creating a copy
-## File Created and edited by Wxcafe (Clément Hertling)
-## Published under CC-BY-SA
-
-# General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-# type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-# dossier root mailbox/imap
-
-set spoolfile = +INBOX
-# dossier d'inbox
-
-set mbox = +'All Mail'
-# dossier ou archiver les emails
-
-set copy = yes
-# yes pour copier les messages dans les differents dossier, no pour...
-# enfin voila quoi.
-
-set header_cache = /.hcache/
-# dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-# dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-# dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-# liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-# General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-# votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-# l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-# UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-# vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-# il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-# comme ca.
-
-set ssl_verify_host = no
-# mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-# mettez l'adresse de votre serveur ici
-
-# Misc settings
-
-auto_view text/html
-# la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-# format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-# format de l'index (la présentation de l'interface)
-# voir http://www.mutt.org/doc/manual/manual-6.html#index_format
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "$HOME/.mutt/aliases"
-# liste des alias noms/email. a créer et remplir vous même.
-# format : "alias short_name long_email_adress"
-source $alias_file
-
-set beep = no
-# ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-# ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-# parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "$HOME/.mutt/cacert"
-# parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-# vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-# Macros
-
-# le titre dit tout. index veut dire que la macro est active dans les menus,
-# pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-# deux
-# \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-# Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-# Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-# Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-# d supprime le message en cours
-
-bind pager previous-line
-# permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-# permet de descendre d'une ligne avec la touche down, au lieu de changer de
-# message
-
-bind pager j next-line
-bind pager k previous-line
-# raccourcis vim
-
-# PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-# remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-# si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-# PGP signing options
-
-# Palette for use with the Linux console. Black background.
-
-# Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-# défaut noir et blanc.
-# d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-
-
-
-
Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ http://www.mutt.org/doc/manual/
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-BingGoogleYahoo Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!
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.
-
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 l’adaptateur GC pour Wii
-U
-a votre console.
-
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.
-
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.
-
Nous allons ici voir deux modèles, un de chacune des boites en question
-: PDP et Hori.
-
Toutes les photos présentes dans cet article sont disponibles en plus grande
-taille en cliquant dessus
-
Commençons par le modèle de chez Hori :
-
-
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.
-
-
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
-
-
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.
-
-
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.
-
-
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…
-
-
-
Passons maintenant a la manette PDP.
-
-
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).
-
-
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.
-
-
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 péremptoire perpendiculaire…
-
-
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.
-
Quelques photos des gâchettes en question :
-
-
-
-
-
-
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 esttotalement identique a celle des manettes Gamecube, cependant, la version
-Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.
-
-
\ No newline at end of file
diff --git a/output/feeds/all-fr.atom.xml b/output/feeds/all-fr.atom.xml
deleted file mode 100644
index 98d314c..0000000
--- a/output/feeds/all-fr.atom.xml
+++ /dev/null
@@ -1,2196 +0,0 @@
-
-Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<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>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<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>Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<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>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<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>OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.</p>
-<p>Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
-projet originaire d’<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).</p>
-<p>Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.</p>
-<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).</p>
-<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
-des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
-ça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
-<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
-pour filtrer les mails entrants et sortants.
-Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-</pre></div>
-
-
-<p>Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.</p>
-<p>Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.</p>
-<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.</p>
-<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
-Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
-<code>/var/run/dovecot/lmtp</code>).</p>
-<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
- │╭─────────────>│──> SMTP (10026) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
- │ │ │ ╰───────────╯
- SMTP out │ │ │
-25 <────────│<───────────╯ │
- ╰───────────────╯
-</pre></div>
-
-
-<p>Pour les mails sortants; et</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
- │╭─────────────>│──> SMTP (10024) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
- │ │ │ ╰────────────╯
- │ │ │ ╭────────────╮
- │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰───────────────╯ ╰────────────╯
-</pre></div>
-
-
-<p>Pour les mails entrants.</p>
-<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même</p>
-<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
-post</a>)</p>
-<p>Tout d’abord, commençons par installer les programmes nécessaires :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
-sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
-</pre></div>
-
-
-<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
-<p><code>/etc/smtpd.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
-<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
-
-<span style="color: #75715e">## Certs</span>
-pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
-pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
-
-<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
-listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-
-<span style="color: #75715e">## Aliases</span>
-table aliases file:/etc/aliases
-
-<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
-listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
-<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
-listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
-
-<span style="color: #75715e">## Receiving</span>
-<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
-accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</span>
-<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
-accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
-<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
-
-<span style="color: #75715e">## Sending</span>
-<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
-accept tagged Signed <span style="color: #66d9ef">for</span> any relay
-<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
-accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">"smtp://localhost:10026"</span>
-<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
-</pre></div>
-
-
-<p>Expliquons un peu ce fichier de configuration :</p>
-<ul>
-<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.</li>
-<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
-<li>Les alias sont définis juste après</li>
-<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”</li>
-<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis</li>
-<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.</li>
-</ul>
-<p>Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.</p>
-<p><code>/etc/dovecot/dovecot.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
-
-<span style="color: #75715e"># basic config</span>
-<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
-<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
-<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"%Y-%m-%d %H:%M:%S "</span>
-<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
-
-<span style="color: #75715e"># authentication</span>
-passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-userdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e"># the protocols we use</span>
-<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
-
-<span style="color: #75715e"># ssl config</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
-
-<span style="color: #75715e">## configuring services </span>
-<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
-service imap-login <span style="color: #f92672">{</span>
- inet_listener imap <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-service lmtp <span style="color: #f92672">{</span>
- unix_listener lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e">## configuring protocols</span>
-<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
-protocol lda <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-protocol lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-plugin <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
- <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>par</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>pour identifier les utilisateurs système</strong></p>
-<p>Ici aussi, voyons comment ce fichier est structuré :</p>
-<ul>
-<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
- leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
-<li>Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)</li>
-<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
-<li>Nous configurons le SSL</li>
-<li>Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise</li>
-<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
-<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.</li>
-</ul>
-<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
-modifications nécessaires a la fin du fichier.</p>
-<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
-<code>/etc/amavis.conf</code> (OpenBSD)</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
-
-<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">'.'</span> <span style="color: #f92672">=></span>
- <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
- <span style="color: #f8f8f2">}</span>
-<span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'MYNETS'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
-
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
-<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
-</pre></div>
-
-
-<p>A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
- 4871</a>. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!</p>
-<p>Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.</p>
-<p>Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
-tutorial</a>)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
-<span style="color: #75715e"># report_safe 1</span>
-<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
-<span style="color: #75715e"># use_bayes 1</span>
-<span style="color: #75715e"># bayes_auto_learn 1</span>
-<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
-<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
-<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
-<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
-<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
-<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
-
-<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.</p>
-<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement</p>
-<p>Bon courage pour votre hosting de mail ensuite…</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
-j’ai commencé a chercher comment le faire sur ce serveur.</p>
-<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
-<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.</p>
-<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.</p>
-<p>Utilisez donc ce script ainsi : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
-dd < /dev/zero > /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
-<span style="color: #75715e"># maintenant, installons le système</span>
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-</pre></div>
-
-
-<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
-<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
-convient pas.</p>
-<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES"</span>
-<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
-<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
-<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
-</pre></div>
-
-
-<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
-physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
-maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
-utiliser!</p>
-<p>Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)</p>
-<p>Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
-<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
-<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
-<a href="https://twitter.com/zengisse">zengisse</a>,
-et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
-code</a>, qui vient de
-<a href="https://twitter.com/m1sp">@m1sp</a>
-(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
-<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
-<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
-connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
-remarqué quelque chose récemment : il se trouve que le certificat qui permet de
-desservir ce site a changé.</p>
-<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.</p>
-<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
-<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
-différent pour chaque sous-domaine.</p>
-<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
-pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
-<p>Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.</p>
-<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.</p>
-<p>Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation : <br />
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
-sudo openssl req -new -key example.key -out example.csr
-# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
-sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
-# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
-</pre></div>
-
-
-<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-<code>*.example.com</code> comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :</p>
-<h3>apache :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
-<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
- EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
- EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>nginx :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>prosody (jabber) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
-<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">}</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
-</pre></div>
-
-
-<h3>postfix (email) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
-<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
-<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
-<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
-<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
-<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
-<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
-<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
-<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>dovecot (imap) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-</pre></div>
-
-
-<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.</p>
-<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
-disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
-of Authenticity</a> qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
-domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
-DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
-est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
-simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
-de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
-<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
-<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
-<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.</p>
-<p>Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-<code>.</code> n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
-<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
-a la fin de façon courante.</p>
-<p>Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’ordre
-habituel</em></strong>, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
-76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
-<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
-wxcafe.net</code> devrait vous renvoyer</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">->>HEADER<<-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
-<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
-qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.</p>
-<p>La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : <code>named.conf</code>,
-<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
-<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-<code>named.conf.local</code> contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.</p>
-<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi). </p>
-<p>Examinons tout d’abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
-en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-</pre></div>
-
-
-<p>Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
-<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
-tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
-assez parlant.</p>
-<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-<code>/etc/bind/master/wxcafe.net</code> : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
- <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
- <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
- <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
- <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
- <span style="color: #f8f8f2">)</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">"v=spf1 ip4:5.39.76.46 a -all"</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
-<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
-<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
-<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
-</pre></div>
-
-
-<p>Alors. Expliquons ligne par ligne.<br />
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone. <br />
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net. <br />
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :<br />
- - Le nameserver autoritaire pour le nom de domaine en question,<br />
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @, </p>
-<p>puis entre parenthèses :<br />
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN) <br />
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire, <br />
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible, <br />
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin <br />
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable. </p>
-<p>Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons : </p>
-<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine. </p>
-<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.</p>
-<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)</p>
-<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.</p>
-<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).</p>
-<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
-1034</a> et le
-<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
-avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
-aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br />
-It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
-<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
-<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
-<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.</p>
-<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
-<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées. </p>
-<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.</p>
-<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.<br />
-Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
-<p>Tout d’abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de <code>ed</code>, l’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
-s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d’une ligne a la fois.
-En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
-<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.</p>
-<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans <code>sed</code> est </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
-</pre></div>
-
-
-<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.) </p>
-<p><br/>
-La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s’utilise de
-la façon suivante : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
-</pre></div>
-
-
-<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.<br />
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.</p>
-<p>Par exemple, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/\(hello world\) world/\1/'
-</pre></div>
-
-
-<p>sur le texte “hello world world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
-</pre></div>
-
-
-<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
-texte original. Ainsi, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/hello world/& world/'
-</pre></div>
-
-
-<p>sur le texte “hello world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
-</pre></div>
-
-
-<p><br/></p>
-<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
-l’espace courant :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
-</pre></div>
-
-
-<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
-<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s’utilisent ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
-[text]
-</pre></div>
-
-
-<p>De la même façon, pour le i : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
-[text]
-</pre></div>
-
-
-<p>Et de même pour a. </p>
-<p>Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
-sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
-remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.</p>
-<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
- /[regex]/d
-<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
-<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier <em>en
-clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
-<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)</p>
-<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.</p>
-<p>D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot <strong><em>doit</em></strong> s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.</p>
-<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.<br />
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau <em>beaucoup</em> plus difficile qu’elle ne le serait sans.</p>
-<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation <em>userspace</em> de dm-crypt, qui pour sa
-part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root. </p>
-<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
-</pre></div>
-
-
-<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
-</pre></div>
-
-
-<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.<br />
-Une fois cela fait, nous allons mapper cette image : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
-</pre></div>
-
-
-<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser. </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
-</pre></div>
-
-
-<p>Maintenant que notre disque est formaté, il peut être monté : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
-</pre></div>
-
-
-<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
-suivant : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-</pre></div>
-
-
-<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité. </p>
-<p>Pour résumer :</p>
-<ul>
-<li>
-<p>Pour monter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-</pre></div>
-
-
-</li>
-<li>
-<p>Pour démonter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
-sudo cryptsetup luksClose <nom de disque virtuel>
-</pre></div>
-
-
-</li>
-</ul>
-<p>Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
-<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
-pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
-<p>Du coup, expliquons. J’ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même
-occasion découvert <a href="http://getpelican.com">pelican</a>. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html. </p>
-<p>Globalement, un thème est constitué ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
-<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
- <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span>
-</pre></div>
-
-
-<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles <code>{{ article.content }}</code>,
-par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de
-pelican.</p>
-<p>L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.<br />
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p>
-<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.</p>
-<p>En ce qui concerne les points négatifs : </p>
-<ul>
-<li>
-<p>Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a
- mon avis sur ce sujet.</p>
-</li>
-<li>
-<p>Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.</p>
-</li>
-<li>
-<p>Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?</p>
-</li>
-<li>
-<p>Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.</p>
-</li>
-</ul>
-<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.</p>
-<p>Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :</p>
-<p><em>Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.</em></p>
-<p>Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.</p>
-<p>Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.</p>
-<p>Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.</p>
-<p>Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.</p>
-<p>Donc, nous allons lancer deux processus en même temps : </p>
-<ul>
-<li>
-<p>Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null
-do :
-done
-</pre></div>
-
-
-</li>
-<li>
-<p>Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab
-</pre></div>
-
-
-<p>Ces commandes vont fonctionner de concert pour nous donner un accès root :<br />
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.<br />
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.<br />
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.</p>
-</li>
-</ul>
-<p>And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).</p>
-<p>Il nous reste a rebooter, depuis l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "mount -o remount,rw /system"
-</pre></div>
-
-
-<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’appareil :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin
-</pre></div>
-
-
-<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "chmod 6755 /system/xbin/su"
-</pre></div>
-
-
-<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "rm /data/local.prop"
-</pre></div>
-
-
-<p>Enfin, nous redemarrons a nouveau :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Et voila, une paire de google glass rootée!</p>
-<p>Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.</p>
-<p>Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
-<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données. </p>
-<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)<br />
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).</p>
-<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.</p>
-<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.</p>
-<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine. </p>
-<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-</pre></div>
-
-
-<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.</p>
-<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
-bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.<br />
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.</p>
-<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)</p>
-<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste <code>adduser <username></code>, soit utiliser le mode non-interactif
-en faisant un <code>adduser --group <username></code></p>
-<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
--N -g <username></code>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).</p>
-<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: <code>usermod <username> -a -G www-data postfix
-users staff sudo wheel</code>, puis de changer son mot de passe
-<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
-Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.</p>
-<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.<br />
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque<br />
-utilisateur.</p>
-<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
-en la copiant a la main, si ça vous amuse. </p>
-<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
-de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
-Testez si ça fonctionne : ouvez un autre terminal, et<br />
-connectez vous a votre serveur (<code>ssh <username>@<votre nom de
-domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.</strong></p>
-<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
-apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
-apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
-php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
-apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
-php5-imagick imagemagick libapache2-mod-suphp libruby \
-libapache2-mod-ruby
-</pre></div>
-
-
-<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
-mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
-soient prises en compte par apache via un <code>sudo service apache2
-restart</code> </p>
-<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer. </p>
-<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un <code>sudo service apache2 restart</code> </p>
-<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p>
-<p>Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.</p>
-<p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :</p>
-<ol>
-<li>Ce qui est petit est beau</li>
-<li>Faites en sorte que chaque programme fasse une chose, bien.</li>
-<li>Faites un prototype aussi vite que possible</li>
-<li>Choisissez la portabilité plutôt que l’efficacité</li>
-<li>Stockez les données dans des fichiers textes.</li>
-<li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li>
-<li>Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.</li>
-<li>Évitez les UI qui “capturent” l’utilisateur.</li>
-<li>Faites de chaque programme un filtre.</li>
-</ol>
-<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
-celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).</p>
-<p>Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br />
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.</p>
-<p>Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.</p>
-<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.</p>
-<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
-<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)</p>
-<p>Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.<br />
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br />
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.<br />
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité. </p>
-<p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas <strong>simplement</strong> possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve. </p>
-<p>Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple <del>et
-bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)</p>
-<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc… </p>
-<p>Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
-<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie. </p>
-<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous
-<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation <strong>a la</strong> UNIX<br />
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, <a href="http://www.mutt.org">“just sucks less”</a>. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.</p>
-<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
-<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)<br />
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.<br />
-Ensuite, voyons pour la partie configuration :<br />
-Ma configuration d’offlineimap :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
-<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
-<span style="color: #75715e">## This should not be edited without creating a copy before</span>
-<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #f8f8f2">[general]</span>
-<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
-<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
-
-<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
-<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
-<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
-<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
-<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
-<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
-<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
-<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
-<span style="color: #75715e"># Where should the mail be placed?</span>
-<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
- <span style="color: #75715e"># voulez que vos emails apparaissent</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
-<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
-<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
-<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d'utilisateur</span>
-<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
-<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
-</pre></div>
-
-
-<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
-Puis ma config mutt :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
-<span style="color: #75715e">## This file should not be edited without creating a copy</span>
-<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
-
-set spoolfile = +INBOX
-<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
-
-set mbox = +'All Mail'
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
-
-set copy = yes
-<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
-<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
-
-set header_cache = /.hcache/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
-
-set ssl_verify_host = no
-<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
-
-<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
-
-auto_view text/html
-<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'interface)
-<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
-<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
-<span style="color: #960050; background-color: #1e0010">#</span> format : "alias short_name long_email_adress"
-source <span style="color: #f8f8f2">$alias_file</span>
-
-set beep = no
-<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-<span style="color: #960050; background-color: #1e0010">#</span> ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
-<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Macros
-
-<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
-<span style="color: #960050; background-color: #1e0010">#</span> pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-<span style="color: #960050; background-color: #1e0010">#</span> deux
-<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
-
-bind pager previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
-<span style="color: #960050; background-color: #1e0010">#</span> message
-
-bind pager j next-line
-bind pager k previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
-
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
-
-<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
-<span style="color: #960050; background-color: #1e0010">#</span> d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-</pre></div>
-
-
-<p>Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!</p>
\ No newline at end of file
diff --git a/output/feeds/feed.atom.all.xml b/output/feeds/feed.atom.all.xml
deleted file mode 100644
index fd69f54..0000000
--- a/output/feeds/feed.atom.all.xml
+++ /dev/null
@@ -1,2196 +0,0 @@
-
-Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<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>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<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>Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<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>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<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>OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.</p>
-<p>Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
-projet originaire d’<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).</p>
-<p>Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.</p>
-<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).</p>
-<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
-des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
-ça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
-<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
-pour filtrer les mails entrants et sortants.
-Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-</pre></div>
-
-
-<p>Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.</p>
-<p>Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.</p>
-<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.</p>
-<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
-Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
-<code>/var/run/dovecot/lmtp</code>).</p>
-<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
- │╭─────────────>│──> SMTP (10026) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
- │ │ │ ╰───────────╯
- SMTP out │ │ │
-25 <────────│<───────────╯ │
- ╰───────────────╯
-</pre></div>
-
-
-<p>Pour les mails sortants; et</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
- │╭─────────────>│──> SMTP (10024) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
- │ │ │ ╰────────────╯
- │ │ │ ╭────────────╮
- │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰───────────────╯ ╰────────────╯
-</pre></div>
-
-
-<p>Pour les mails entrants.</p>
-<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même</p>
-<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
-post</a>)</p>
-<p>Tout d’abord, commençons par installer les programmes nécessaires :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
-sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
-</pre></div>
-
-
-<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
-<p><code>/etc/smtpd.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
-<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
-
-<span style="color: #75715e">## Certs</span>
-pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
-pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
-
-<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
-listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-
-<span style="color: #75715e">## Aliases</span>
-table aliases file:/etc/aliases
-
-<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
-listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
-<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
-listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
-
-<span style="color: #75715e">## Receiving</span>
-<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
-accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</span>
-<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
-accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
-<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
-
-<span style="color: #75715e">## Sending</span>
-<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
-accept tagged Signed <span style="color: #66d9ef">for</span> any relay
-<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
-accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">"smtp://localhost:10026"</span>
-<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
-</pre></div>
-
-
-<p>Expliquons un peu ce fichier de configuration :</p>
-<ul>
-<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.</li>
-<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
-<li>Les alias sont définis juste après</li>
-<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”</li>
-<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis</li>
-<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.</li>
-</ul>
-<p>Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.</p>
-<p><code>/etc/dovecot/dovecot.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
-
-<span style="color: #75715e"># basic config</span>
-<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
-<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
-<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"%Y-%m-%d %H:%M:%S "</span>
-<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
-
-<span style="color: #75715e"># authentication</span>
-passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-userdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e"># the protocols we use</span>
-<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
-
-<span style="color: #75715e"># ssl config</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
-
-<span style="color: #75715e">## configuring services </span>
-<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
-service imap-login <span style="color: #f92672">{</span>
- inet_listener imap <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-service lmtp <span style="color: #f92672">{</span>
- unix_listener lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e">## configuring protocols</span>
-<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
-protocol lda <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-protocol lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-plugin <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
- <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>par</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>pour identifier les utilisateurs système</strong></p>
-<p>Ici aussi, voyons comment ce fichier est structuré :</p>
-<ul>
-<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
- leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
-<li>Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)</li>
-<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
-<li>Nous configurons le SSL</li>
-<li>Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise</li>
-<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
-<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.</li>
-</ul>
-<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
-modifications nécessaires a la fin du fichier.</p>
-<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
-<code>/etc/amavis.conf</code> (OpenBSD)</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
-
-<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">'.'</span> <span style="color: #f92672">=></span>
- <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
- <span style="color: #f8f8f2">}</span>
-<span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'MYNETS'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
-
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
-<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
-</pre></div>
-
-
-<p>A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
- 4871</a>. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!</p>
-<p>Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.</p>
-<p>Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
-tutorial</a>)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
-<span style="color: #75715e"># report_safe 1</span>
-<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
-<span style="color: #75715e"># use_bayes 1</span>
-<span style="color: #75715e"># bayes_auto_learn 1</span>
-<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
-<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
-<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
-<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
-<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
-<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
-
-<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.</p>
-<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement</p>
-<p>Bon courage pour votre hosting de mail ensuite…</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
-j’ai commencé a chercher comment le faire sur ce serveur.</p>
-<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
-<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.</p>
-<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.</p>
-<p>Utilisez donc ce script ainsi : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
-dd < /dev/zero > /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
-<span style="color: #75715e"># maintenant, installons le système</span>
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-</pre></div>
-
-
-<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
-<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
-convient pas.</p>
-<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES"</span>
-<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
-<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
-<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
-</pre></div>
-
-
-<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
-physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
-maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
-utiliser!</p>
-<p>Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)</p>
-<p>Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
-<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
-<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
-<a href="https://twitter.com/zengisse">zengisse</a>,
-et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
-code</a>, qui vient de
-<a href="https://twitter.com/m1sp">@m1sp</a>
-(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
-<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
-<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
-connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
-remarqué quelque chose récemment : il se trouve que le certificat qui permet de
-desservir ce site a changé.</p>
-<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.</p>
-<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
-<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
-différent pour chaque sous-domaine.</p>
-<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
-pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
-<p>Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.</p>
-<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.</p>
-<p>Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation : <br />
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
-sudo openssl req -new -key example.key -out example.csr
-# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
-sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
-# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
-</pre></div>
-
-
-<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-<code>*.example.com</code> comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :</p>
-<h3>apache :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
-<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
- EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
- EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>nginx :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>prosody (jabber) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
-<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">}</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
-</pre></div>
-
-
-<h3>postfix (email) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
-<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
-<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
-<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
-<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
-<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
-<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
-<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
-<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>dovecot (imap) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-</pre></div>
-
-
-<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.</p>
-<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
-disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
-of Authenticity</a> qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
-domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
-DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
-est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
-simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
-de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
-<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
-<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
-<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.</p>
-<p>Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-<code>.</code> n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
-<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
-a la fin de façon courante.</p>
-<p>Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’ordre
-habituel</em></strong>, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
-76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
-<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
-wxcafe.net</code> devrait vous renvoyer</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">->>HEADER<<-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
-<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
-qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.</p>
-<p>La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : <code>named.conf</code>,
-<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
-<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-<code>named.conf.local</code> contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.</p>
-<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi). </p>
-<p>Examinons tout d’abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
-en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-</pre></div>
-
-
-<p>Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
-<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
-tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
-assez parlant.</p>
-<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-<code>/etc/bind/master/wxcafe.net</code> : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
- <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
- <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
- <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
- <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
- <span style="color: #f8f8f2">)</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">"v=spf1 ip4:5.39.76.46 a -all"</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
-<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
-<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
-<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
-</pre></div>
-
-
-<p>Alors. Expliquons ligne par ligne.<br />
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone. <br />
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net. <br />
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :<br />
- - Le nameserver autoritaire pour le nom de domaine en question,<br />
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @, </p>
-<p>puis entre parenthèses :<br />
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN) <br />
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire, <br />
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible, <br />
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin <br />
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable. </p>
-<p>Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons : </p>
-<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine. </p>
-<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.</p>
-<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)</p>
-<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.</p>
-<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).</p>
-<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
-1034</a> et le
-<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
-avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
-aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br />
-It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
-<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
-<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
-<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.</p>
-<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
-<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées. </p>
-<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.</p>
-<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.<br />
-Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
-<p>Tout d’abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de <code>ed</code>, l’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
-s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d’une ligne a la fois.
-En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
-<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.</p>
-<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans <code>sed</code> est </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
-</pre></div>
-
-
-<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.) </p>
-<p><br/>
-La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s’utilise de
-la façon suivante : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
-</pre></div>
-
-
-<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.<br />
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.</p>
-<p>Par exemple, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/\(hello world\) world/\1/'
-</pre></div>
-
-
-<p>sur le texte “hello world world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
-</pre></div>
-
-
-<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
-texte original. Ainsi, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/hello world/& world/'
-</pre></div>
-
-
-<p>sur le texte “hello world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
-</pre></div>
-
-
-<p><br/></p>
-<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
-l’espace courant :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
-</pre></div>
-
-
-<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
-<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s’utilisent ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
-[text]
-</pre></div>
-
-
-<p>De la même façon, pour le i : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
-[text]
-</pre></div>
-
-
-<p>Et de même pour a. </p>
-<p>Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
-sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
-remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.</p>
-<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
- /[regex]/d
-<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
-<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier <em>en
-clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
-<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)</p>
-<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.</p>
-<p>D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot <strong><em>doit</em></strong> s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.</p>
-<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.<br />
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau <em>beaucoup</em> plus difficile qu’elle ne le serait sans.</p>
-<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation <em>userspace</em> de dm-crypt, qui pour sa
-part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root. </p>
-<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
-</pre></div>
-
-
-<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
-</pre></div>
-
-
-<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.<br />
-Une fois cela fait, nous allons mapper cette image : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
-</pre></div>
-
-
-<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser. </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
-</pre></div>
-
-
-<p>Maintenant que notre disque est formaté, il peut être monté : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
-</pre></div>
-
-
-<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
-suivant : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-</pre></div>
-
-
-<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité. </p>
-<p>Pour résumer :</p>
-<ul>
-<li>
-<p>Pour monter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-</pre></div>
-
-
-</li>
-<li>
-<p>Pour démonter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
-sudo cryptsetup luksClose <nom de disque virtuel>
-</pre></div>
-
-
-</li>
-</ul>
-<p>Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
-<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
-pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
-<p>Du coup, expliquons. J’ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même
-occasion découvert <a href="http://getpelican.com">pelican</a>. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html. </p>
-<p>Globalement, un thème est constitué ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
-<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
- <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span>
-</pre></div>
-
-
-<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles <code>{{ article.content }}</code>,
-par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de
-pelican.</p>
-<p>L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.<br />
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p>
-<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.</p>
-<p>En ce qui concerne les points négatifs : </p>
-<ul>
-<li>
-<p>Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a
- mon avis sur ce sujet.</p>
-</li>
-<li>
-<p>Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.</p>
-</li>
-<li>
-<p>Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?</p>
-</li>
-<li>
-<p>Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.</p>
-</li>
-</ul>
-<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.</p>
-<p>Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :</p>
-<p><em>Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.</em></p>
-<p>Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.</p>
-<p>Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.</p>
-<p>Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.</p>
-<p>Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.</p>
-<p>Donc, nous allons lancer deux processus en même temps : </p>
-<ul>
-<li>
-<p>Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null
-do :
-done
-</pre></div>
-
-
-</li>
-<li>
-<p>Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab
-</pre></div>
-
-
-<p>Ces commandes vont fonctionner de concert pour nous donner un accès root :<br />
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.<br />
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.<br />
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.</p>
-</li>
-</ul>
-<p>And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).</p>
-<p>Il nous reste a rebooter, depuis l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "mount -o remount,rw /system"
-</pre></div>
-
-
-<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’appareil :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin
-</pre></div>
-
-
-<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "chmod 6755 /system/xbin/su"
-</pre></div>
-
-
-<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "rm /data/local.prop"
-</pre></div>
-
-
-<p>Enfin, nous redemarrons a nouveau :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Et voila, une paire de google glass rootée!</p>
-<p>Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.</p>
-<p>Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
-<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données. </p>
-<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)<br />
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).</p>
-<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.</p>
-<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.</p>
-<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine. </p>
-<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-</pre></div>
-
-
-<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.</p>
-<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
-bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.<br />
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.</p>
-<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)</p>
-<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste <code>adduser <username></code>, soit utiliser le mode non-interactif
-en faisant un <code>adduser --group <username></code></p>
-<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
--N -g <username></code>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).</p>
-<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: <code>usermod <username> -a -G www-data postfix
-users staff sudo wheel</code>, puis de changer son mot de passe
-<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
-Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.</p>
-<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.<br />
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque<br />
-utilisateur.</p>
-<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
-en la copiant a la main, si ça vous amuse. </p>
-<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
-de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
-Testez si ça fonctionne : ouvez un autre terminal, et<br />
-connectez vous a votre serveur (<code>ssh <username>@<votre nom de
-domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.</strong></p>
-<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
-apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
-apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
-php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
-apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
-php5-imagick imagemagick libapache2-mod-suphp libruby \
-libapache2-mod-ruby
-</pre></div>
-
-
-<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
-mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
-soient prises en compte par apache via un <code>sudo service apache2
-restart</code> </p>
-<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer. </p>
-<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un <code>sudo service apache2 restart</code> </p>
-<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p>
-<p>Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.</p>
-<p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :</p>
-<ol>
-<li>Ce qui est petit est beau</li>
-<li>Faites en sorte que chaque programme fasse une chose, bien.</li>
-<li>Faites un prototype aussi vite que possible</li>
-<li>Choisissez la portabilité plutôt que l’efficacité</li>
-<li>Stockez les données dans des fichiers textes.</li>
-<li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li>
-<li>Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.</li>
-<li>Évitez les UI qui “capturent” l’utilisateur.</li>
-<li>Faites de chaque programme un filtre.</li>
-</ol>
-<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
-celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).</p>
-<p>Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br />
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.</p>
-<p>Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.</p>
-<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.</p>
-<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
-<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)</p>
-<p>Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.<br />
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br />
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.<br />
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité. </p>
-<p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas <strong>simplement</strong> possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve. </p>
-<p>Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple <del>et
-bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)</p>
-<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc… </p>
-<p>Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
-<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie. </p>
-<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous
-<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation <strong>a la</strong> UNIX<br />
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, <a href="http://www.mutt.org">“just sucks less”</a>. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.</p>
-<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
-<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)<br />
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.<br />
-Ensuite, voyons pour la partie configuration :<br />
-Ma configuration d’offlineimap :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
-<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
-<span style="color: #75715e">## This should not be edited without creating a copy before</span>
-<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #f8f8f2">[general]</span>
-<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
-<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
-
-<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
-<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
-<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
-<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
-<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
-<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
-<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
-<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
-<span style="color: #75715e"># Where should the mail be placed?</span>
-<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
- <span style="color: #75715e"># voulez que vos emails apparaissent</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
-<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
-<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
-<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d'utilisateur</span>
-<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
-<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
-</pre></div>
-
-
-<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
-Puis ma config mutt :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
-<span style="color: #75715e">## This file should not be edited without creating a copy</span>
-<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
-
-set spoolfile = +INBOX
-<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
-
-set mbox = +'All Mail'
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
-
-set copy = yes
-<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
-<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
-
-set header_cache = /.hcache/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
-
-set ssl_verify_host = no
-<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
-
-<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
-
-auto_view text/html
-<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'interface)
-<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
-<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
-<span style="color: #960050; background-color: #1e0010">#</span> format : "alias short_name long_email_adress"
-source <span style="color: #f8f8f2">$alias_file</span>
-
-set beep = no
-<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-<span style="color: #960050; background-color: #1e0010">#</span> ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
-<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Macros
-
-<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
-<span style="color: #960050; background-color: #1e0010">#</span> pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-<span style="color: #960050; background-color: #1e0010">#</span> deux
-<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
-
-bind pager previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
-<span style="color: #960050; background-color: #1e0010">#</span> message
-
-bind pager j next-line
-bind pager k previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
-
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
-
-<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
-<span style="color: #960050; background-color: #1e0010">#</span> d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-</pre></div>
-
-
-<p>Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!</p>
\ No newline at end of file
diff --git a/output/feeds/feed.atom.xml b/output/feeds/feed.atom.xml
deleted file mode 100644
index ecf6fd9..0000000
--- a/output/feeds/feed.atom.xml
+++ /dev/null
@@ -1,2196 +0,0 @@
-
-Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<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>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<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>Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<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>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<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>OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.</p>
-<p>Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
-projet originaire d’<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).</p>
-<p>Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.</p>
-<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).</p>
-<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
-des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
-ça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
-<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
-pour filtrer les mails entrants et sortants.
-Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-</pre></div>
-
-
-<p>Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.</p>
-<p>Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.</p>
-<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.</p>
-<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
-Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
-<code>/var/run/dovecot/lmtp</code>).</p>
-<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
- │╭─────────────>│──> SMTP (10026) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
- │ │ │ ╰───────────╯
- SMTP out │ │ │
-25 <────────│<───────────╯ │
- ╰───────────────╯
-</pre></div>
-
-
-<p>Pour les mails sortants; et</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
- │╭─────────────>│──> SMTP (10024) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
- │ │ │ ╰────────────╯
- │ │ │ ╭────────────╮
- │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰───────────────╯ ╰────────────╯
-</pre></div>
-
-
-<p>Pour les mails entrants.</p>
-<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même</p>
-<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
-post</a>)</p>
-<p>Tout d’abord, commençons par installer les programmes nécessaires :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
-sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
-</pre></div>
-
-
-<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
-<p><code>/etc/smtpd.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
-<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
-
-<span style="color: #75715e">## Certs</span>
-pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
-pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
-
-<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
-listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-
-<span style="color: #75715e">## Aliases</span>
-table aliases file:/etc/aliases
-
-<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
-listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
-<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
-listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
-
-<span style="color: #75715e">## Receiving</span>
-<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
-accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</span>
-<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
-accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
-<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
-
-<span style="color: #75715e">## Sending</span>
-<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
-accept tagged Signed <span style="color: #66d9ef">for</span> any relay
-<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
-accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">"smtp://localhost:10026"</span>
-<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
-</pre></div>
-
-
-<p>Expliquons un peu ce fichier de configuration :</p>
-<ul>
-<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.</li>
-<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
-<li>Les alias sont définis juste après</li>
-<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”</li>
-<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis</li>
-<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.</li>
-</ul>
-<p>Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.</p>
-<p><code>/etc/dovecot/dovecot.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
-
-<span style="color: #75715e"># basic config</span>
-<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
-<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
-<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"%Y-%m-%d %H:%M:%S "</span>
-<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
-
-<span style="color: #75715e"># authentication</span>
-passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-userdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e"># the protocols we use</span>
-<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
-
-<span style="color: #75715e"># ssl config</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
-
-<span style="color: #75715e">## configuring services </span>
-<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
-service imap-login <span style="color: #f92672">{</span>
- inet_listener imap <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-service lmtp <span style="color: #f92672">{</span>
- unix_listener lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e">## configuring protocols</span>
-<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
-protocol lda <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-protocol lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-plugin <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
- <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>par</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>pour identifier les utilisateurs système</strong></p>
-<p>Ici aussi, voyons comment ce fichier est structuré :</p>
-<ul>
-<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
- leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
-<li>Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)</li>
-<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
-<li>Nous configurons le SSL</li>
-<li>Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise</li>
-<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
-<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.</li>
-</ul>
-<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
-modifications nécessaires a la fin du fichier.</p>
-<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
-<code>/etc/amavis.conf</code> (OpenBSD)</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
-
-<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">'.'</span> <span style="color: #f92672">=></span>
- <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
- <span style="color: #f8f8f2">}</span>
-<span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'MYNETS'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
-
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
-<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
-</pre></div>
-
-
-<p>A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
- 4871</a>. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!</p>
-<p>Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.</p>
-<p>Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
-tutorial</a>)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
-<span style="color: #75715e"># report_safe 1</span>
-<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
-<span style="color: #75715e"># use_bayes 1</span>
-<span style="color: #75715e"># bayes_auto_learn 1</span>
-<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
-<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
-<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
-<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
-<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
-<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
-
-<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.</p>
-<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement</p>
-<p>Bon courage pour votre hosting de mail ensuite…</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
-j’ai commencé a chercher comment le faire sur ce serveur.</p>
-<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
-<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.</p>
-<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.</p>
-<p>Utilisez donc ce script ainsi : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
-dd < /dev/zero > /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
-<span style="color: #75715e"># maintenant, installons le système</span>
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-</pre></div>
-
-
-<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
-<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
-convient pas.</p>
-<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES"</span>
-<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
-<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
-<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
-</pre></div>
-
-
-<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
-physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
-maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
-utiliser!</p>
-<p>Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)</p>
-<p>Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
-<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
-<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
-<a href="https://twitter.com/zengisse">zengisse</a>,
-et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
-code</a>, qui vient de
-<a href="https://twitter.com/m1sp">@m1sp</a>
-(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
-<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
-<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
-connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
-remarqué quelque chose récemment : il se trouve que le certificat qui permet de
-desservir ce site a changé.</p>
-<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.</p>
-<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
-<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
-différent pour chaque sous-domaine.</p>
-<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
-pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
-<p>Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.</p>
-<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.</p>
-<p>Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation : <br />
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
-sudo openssl req -new -key example.key -out example.csr
-# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
-sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
-# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
-</pre></div>
-
-
-<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-<code>*.example.com</code> comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :</p>
-<h3>apache :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
-<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
- EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
- EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>nginx :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>prosody (jabber) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
-<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">}</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
-</pre></div>
-
-
-<h3>postfix (email) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
-<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
-<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
-<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
-<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
-<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
-<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
-<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
-<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>dovecot (imap) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-</pre></div>
-
-
-<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.</p>
-<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
-disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
-of Authenticity</a> qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
-domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
-DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
-est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
-simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
-de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
-<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
-<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
-<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.</p>
-<p>Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-<code>.</code> n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
-<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
-a la fin de façon courante.</p>
-<p>Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’ordre
-habituel</em></strong>, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
-76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
-<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
-wxcafe.net</code> devrait vous renvoyer</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">->>HEADER<<-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
-<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
-qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.</p>
-<p>La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : <code>named.conf</code>,
-<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
-<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-<code>named.conf.local</code> contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.</p>
-<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi). </p>
-<p>Examinons tout d’abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
-en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-</pre></div>
-
-
-<p>Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
-<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
-tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
-assez parlant.</p>
-<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-<code>/etc/bind/master/wxcafe.net</code> : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
- <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
- <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
- <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
- <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
- <span style="color: #f8f8f2">)</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">"v=spf1 ip4:5.39.76.46 a -all"</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
-<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
-<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
-<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
-</pre></div>
-
-
-<p>Alors. Expliquons ligne par ligne.<br />
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone. <br />
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net. <br />
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :<br />
- - Le nameserver autoritaire pour le nom de domaine en question,<br />
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @, </p>
-<p>puis entre parenthèses :<br />
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN) <br />
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire, <br />
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible, <br />
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin <br />
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable. </p>
-<p>Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons : </p>
-<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine. </p>
-<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.</p>
-<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)</p>
-<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.</p>
-<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).</p>
-<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
-1034</a> et le
-<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
-avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
-aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br />
-It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
-<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
-<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
-<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.</p>
-<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
-<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées. </p>
-<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.</p>
-<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.<br />
-Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
-<p>Tout d’abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de <code>ed</code>, l’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
-s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d’une ligne a la fois.
-En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
-<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.</p>
-<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans <code>sed</code> est </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
-</pre></div>
-
-
-<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.) </p>
-<p><br/>
-La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s’utilise de
-la façon suivante : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
-</pre></div>
-
-
-<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.<br />
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.</p>
-<p>Par exemple, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/\(hello world\) world/\1/'
-</pre></div>
-
-
-<p>sur le texte “hello world world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
-</pre></div>
-
-
-<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
-texte original. Ainsi, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/hello world/& world/'
-</pre></div>
-
-
-<p>sur le texte “hello world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
-</pre></div>
-
-
-<p><br/></p>
-<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
-l’espace courant :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
-</pre></div>
-
-
-<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
-<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s’utilisent ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
-[text]
-</pre></div>
-
-
-<p>De la même façon, pour le i : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
-[text]
-</pre></div>
-
-
-<p>Et de même pour a. </p>
-<p>Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
-sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
-remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.</p>
-<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
- /[regex]/d
-<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
-<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier <em>en
-clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
-<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)</p>
-<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.</p>
-<p>D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot <strong><em>doit</em></strong> s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.</p>
-<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.<br />
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau <em>beaucoup</em> plus difficile qu’elle ne le serait sans.</p>
-<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation <em>userspace</em> de dm-crypt, qui pour sa
-part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root. </p>
-<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
-</pre></div>
-
-
-<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
-</pre></div>
-
-
-<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.<br />
-Une fois cela fait, nous allons mapper cette image : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
-</pre></div>
-
-
-<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser. </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
-</pre></div>
-
-
-<p>Maintenant que notre disque est formaté, il peut être monté : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
-</pre></div>
-
-
-<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
-suivant : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-</pre></div>
-
-
-<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité. </p>
-<p>Pour résumer :</p>
-<ul>
-<li>
-<p>Pour monter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-</pre></div>
-
-
-</li>
-<li>
-<p>Pour démonter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
-sudo cryptsetup luksClose <nom de disque virtuel>
-</pre></div>
-
-
-</li>
-</ul>
-<p>Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
-<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
-pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
-<p>Du coup, expliquons. J’ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même
-occasion découvert <a href="http://getpelican.com">pelican</a>. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html. </p>
-<p>Globalement, un thème est constitué ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
-<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
- <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span>
-</pre></div>
-
-
-<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles <code>{{ article.content }}</code>,
-par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de
-pelican.</p>
-<p>L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.<br />
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p>
-<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.</p>
-<p>En ce qui concerne les points négatifs : </p>
-<ul>
-<li>
-<p>Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a
- mon avis sur ce sujet.</p>
-</li>
-<li>
-<p>Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.</p>
-</li>
-<li>
-<p>Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?</p>
-</li>
-<li>
-<p>Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.</p>
-</li>
-</ul>
-<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.</p>
-<p>Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :</p>
-<p><em>Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.</em></p>
-<p>Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.</p>
-<p>Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.</p>
-<p>Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.</p>
-<p>Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.</p>
-<p>Donc, nous allons lancer deux processus en même temps : </p>
-<ul>
-<li>
-<p>Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null
-do :
-done
-</pre></div>
-
-
-</li>
-<li>
-<p>Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab
-</pre></div>
-
-
-<p>Ces commandes vont fonctionner de concert pour nous donner un accès root :<br />
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.<br />
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.<br />
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.</p>
-</li>
-</ul>
-<p>And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).</p>
-<p>Il nous reste a rebooter, depuis l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "mount -o remount,rw /system"
-</pre></div>
-
-
-<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’appareil :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin
-</pre></div>
-
-
-<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "chmod 6755 /system/xbin/su"
-</pre></div>
-
-
-<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "rm /data/local.prop"
-</pre></div>
-
-
-<p>Enfin, nous redemarrons a nouveau :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Et voila, une paire de google glass rootée!</p>
-<p>Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.</p>
-<p>Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
-<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données. </p>
-<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)<br />
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).</p>
-<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.</p>
-<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.</p>
-<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine. </p>
-<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-</pre></div>
-
-
-<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.</p>
-<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
-bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.<br />
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.</p>
-<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)</p>
-<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste <code>adduser <username></code>, soit utiliser le mode non-interactif
-en faisant un <code>adduser --group <username></code></p>
-<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
--N -g <username></code>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).</p>
-<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: <code>usermod <username> -a -G www-data postfix
-users staff sudo wheel</code>, puis de changer son mot de passe
-<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
-Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.</p>
-<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.<br />
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque<br />
-utilisateur.</p>
-<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
-en la copiant a la main, si ça vous amuse. </p>
-<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
-de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
-Testez si ça fonctionne : ouvez un autre terminal, et<br />
-connectez vous a votre serveur (<code>ssh <username>@<votre nom de
-domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.</strong></p>
-<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
-apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
-apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
-php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
-apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
-php5-imagick imagemagick libapache2-mod-suphp libruby \
-libapache2-mod-ruby
-</pre></div>
-
-
-<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
-mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
-soient prises en compte par apache via un <code>sudo service apache2
-restart</code> </p>
-<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer. </p>
-<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un <code>sudo service apache2 restart</code> </p>
-<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p>
-<p>Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.</p>
-<p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :</p>
-<ol>
-<li>Ce qui est petit est beau</li>
-<li>Faites en sorte que chaque programme fasse une chose, bien.</li>
-<li>Faites un prototype aussi vite que possible</li>
-<li>Choisissez la portabilité plutôt que l’efficacité</li>
-<li>Stockez les données dans des fichiers textes.</li>
-<li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li>
-<li>Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.</li>
-<li>Évitez les UI qui “capturent” l’utilisateur.</li>
-<li>Faites de chaque programme un filtre.</li>
-</ol>
-<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
-celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).</p>
-<p>Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br />
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.</p>
-<p>Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.</p>
-<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.</p>
-<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
-<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)</p>
-<p>Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.<br />
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br />
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.<br />
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité. </p>
-<p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas <strong>simplement</strong> possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve. </p>
-<p>Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple <del>et
-bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)</p>
-<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc… </p>
-<p>Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
-<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie. </p>
-<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous
-<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation <strong>a la</strong> UNIX<br />
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, <a href="http://www.mutt.org">“just sucks less”</a>. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.</p>
-<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
-<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)<br />
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.<br />
-Ensuite, voyons pour la partie configuration :<br />
-Ma configuration d’offlineimap :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
-<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
-<span style="color: #75715e">## This should not be edited without creating a copy before</span>
-<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #f8f8f2">[general]</span>
-<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
-<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
-
-<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
-<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
-<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
-<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
-<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
-<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
-<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
-<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
-<span style="color: #75715e"># Where should the mail be placed?</span>
-<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
- <span style="color: #75715e"># voulez que vos emails apparaissent</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
-<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
-<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
-<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d'utilisateur</span>
-<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
-<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
-</pre></div>
-
-
-<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
-Puis ma config mutt :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
-<span style="color: #75715e">## This file should not be edited without creating a copy</span>
-<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
-
-set spoolfile = +INBOX
-<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
-
-set mbox = +'All Mail'
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
-
-set copy = yes
-<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
-<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
-
-set header_cache = /.hcache/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
-
-set ssl_verify_host = no
-<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
-
-<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
-
-auto_view text/html
-<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'interface)
-<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
-<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
-<span style="color: #960050; background-color: #1e0010">#</span> format : "alias short_name long_email_adress"
-source <span style="color: #f8f8f2">$alias_file</span>
-
-set beep = no
-<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-<span style="color: #960050; background-color: #1e0010">#</span> ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
-<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Macros
-
-<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
-<span style="color: #960050; background-color: #1e0010">#</span> pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-<span style="color: #960050; background-color: #1e0010">#</span> deux
-<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
-
-bind pager previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
-<span style="color: #960050; background-color: #1e0010">#</span> message
-
-bind pager j next-line
-bind pager k previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
-
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
-
-<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
-<span style="color: #960050; background-color: #1e0010">#</span> d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-</pre></div>
-
-
-<p>Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!</p>
\ No newline at end of file
diff --git a/output/feeds/feed.hacking.xml b/output/feeds/feed.hacking.xml
deleted file mode 100644
index 5801cb5..0000000
--- a/output/feeds/feed.hacking.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-
-Wxcafé//wxcafe.net/2013-05-06T06:24:00+02:00Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.</p>
-<p>Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :</p>
-<p><em>Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.</em></p>
-<p>Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.</p>
-<p>Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.</p>
-<p>Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.</p>
-<p>Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.</p>
-<p>Donc, nous allons lancer deux processus en même temps : </p>
-<ul>
-<li>
-<p>Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null
-do :
-done
-</pre></div>
-
-
-</li>
-<li>
-<p>Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab
-</pre></div>
-
-
-<p>Ces commandes vont fonctionner de concert pour nous donner un accès root :<br />
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.<br />
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.<br />
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.</p>
-</li>
-</ul>
-<p>And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).</p>
-<p>Il nous reste a rebooter, depuis l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "mount -o remount,rw /system"
-</pre></div>
-
-
-<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’appareil :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin
-</pre></div>
-
-
-<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "chmod 6755 /system/xbin/su"
-</pre></div>
-
-
-<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "rm /data/local.prop"
-</pre></div>
-
-
-<p>Enfin, nous redemarrons a nouveau :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Et voila, une paire de google glass rootée!</p>
-<p>Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.</p>
-<p>Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
-<p>A bientôt!</p>
\ No newline at end of file
diff --git a/output/feeds/feed.note.xml b/output/feeds/feed.note.xml
deleted file mode 100644
index 479a811..0000000
--- a/output/feeds/feed.note.xml
+++ /dev/null
@@ -1,409 +0,0 @@
-
-Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<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>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<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>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<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>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
-<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
-connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
-remarqué quelque chose récemment : il se trouve que le certificat qui permet de
-desservir ce site a changé.</p>
-<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.</p>
-<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
-<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
-différent pour chaque sous-domaine.</p>
-<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
-pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
-<p>Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.</p>
-<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.</p>
-<p>Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation : <br />
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
-sudo openssl req -new -key example.key -out example.csr
-# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
-sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
-# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
-</pre></div>
-
-
-<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-<code>*.example.com</code> comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :</p>
-<h3>apache :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
-<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
- EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
- EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>nginx :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>prosody (jabber) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
-<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">}</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
-</pre></div>
-
-
-<h3>postfix (email) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
-<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
-<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
-<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
-<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
-<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
-<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
-<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
-<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>dovecot (imap) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-</pre></div>
-
-
-<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.</p>
-<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
-disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
-of Authenticity</a> qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
-<p>Du coup, expliquons. J’ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même
-occasion découvert <a href="http://getpelican.com">pelican</a>. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html. </p>
-<p>Globalement, un thème est constitué ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
-<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
- <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span>
-</pre></div>
-
-
-<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles <code>{{ article.content }}</code>,
-par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de
-pelican.</p>
-<p>L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.<br />
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p>
-<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.</p>
-<p>En ce qui concerne les points négatifs : </p>
-<ul>
-<li>
-<p>Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a
- mon avis sur ce sujet.</p>
-</li>
-<li>
-<p>Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.</p>
-</li>
-<li>
-<p>Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?</p>
-</li>
-<li>
-<p>Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.</p>
-</li>
-</ul>
-<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!</p>
\ No newline at end of file
diff --git a/output/feeds/feed.oses.xml b/output/feeds/feed.oses.xml
deleted file mode 100644
index 79e0295..0000000
--- a/output/feeds/feed.oses.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-Wxcafé//wxcafe.net/2013-09-09T11:17:00+02:00Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
-<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
-<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.</p>
-<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
-<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées. </p>
-<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.</p>
-<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…</p>
\ No newline at end of file
diff --git a/output/feeds/feed.ranting.xml b/output/feeds/feed.ranting.xml
deleted file mode 100644
index 073f370..0000000
--- a/output/feeds/feed.ranting.xml
+++ /dev/null
@@ -1,215 +0,0 @@
-
-Wxcafé//wxcafe.net/2014-02-17T05:02:00+01:00NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br />
-It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
-<p>Bon, sinon, prochain article serieux vite, bisous.</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p>
-<p>Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.</p>
-<p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :</p>
-<ol>
-<li>Ce qui est petit est beau</li>
-<li>Faites en sorte que chaque programme fasse une chose, bien.</li>
-<li>Faites un prototype aussi vite que possible</li>
-<li>Choisissez la portabilité plutôt que l’efficacité</li>
-<li>Stockez les données dans des fichiers textes.</li>
-<li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li>
-<li>Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.</li>
-<li>Évitez les UI qui “capturent” l’utilisateur.</li>
-<li>Faites de chaque programme un filtre.</li>
-</ol>
-<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
-celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).</p>
-<p>Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br />
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.</p>
-<p>Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.</p>
-<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.</p>
-<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
-<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)</p>
-<p>Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.<br />
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br />
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.<br />
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité. </p>
-<p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas <strong>simplement</strong> possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve. </p>
-<p>Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple <del>et
-bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)</p>
-<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc… </p>
-<p>Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
-<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie. </p>
-<p>Dommage.</p>
\ No newline at end of file
diff --git a/output/feeds/feed.rss.all.xml b/output/feeds/feed.rss.all.xml
deleted file mode 100644
index e513e85..0000000
--- a/output/feeds/feed.rss.all.xml
+++ /dev/null
@@ -1,2196 +0,0 @@
-
-Wxcafé//wxcafe.net/Sat, 22 Aug 2015 02:43:00 +0200les NUCs et le HDMI-CEC//wxcafe.net/posts/nuc-hdmi-cec/<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>WxcafeSat, 22 Aug 2015 02:43:00 +0200tag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/SSL - STARTTLS//wxcafe.net/posts/ssl-starttls/<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>WxcafeSat, 16 May 2015 02:00:00 +0200tag:wxcafe.net,2015-05-16:posts/ssl-starttls/Manettes : Hori vs. PDP//wxcafe.net/posts/hori-vs-pdp/<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>WxcafeSun, 19 Apr 2015 21:59:00 +0200tag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/Docker et les ebooks sur Twitter//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/<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>WxcafeSat, 28 Feb 2015 14:11:00 +0100tag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/opensmtpd-debian/<p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.</p>
-<p>Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
-projet originaire d’<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).</p>
-<p>Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.</p>
-<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).</p>
-<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
-des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
-ça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
-<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
-pour filtrer les mails entrants et sortants.
-Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-</pre></div>
-
-
-<p>Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.</p>
-<p>Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.</p>
-<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.</p>
-<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
-Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
-<code>/var/run/dovecot/lmtp</code>).</p>
-<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
- │╭─────────────>│──> SMTP (10026) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
- │ │ │ ╰───────────╯
- SMTP out │ │ │
-25 <────────│<───────────╯ │
- ╰───────────────╯
-</pre></div>
-
-
-<p>Pour les mails sortants; et</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
- │╭─────────────>│──> SMTP (10024) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
- │ │ │ ╰────────────╯
- │ │ │ ╭────────────╮
- │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰───────────────╯ ╰────────────╯
-</pre></div>
-
-
-<p>Pour les mails entrants.</p>
-<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même</p>
-<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
-post</a>)</p>
-<p>Tout d’abord, commençons par installer les programmes nécessaires :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
-sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
-</pre></div>
-
-
-<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
-<p><code>/etc/smtpd.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
-<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
-
-<span style="color: #75715e">## Certs</span>
-pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
-pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
-
-<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
-listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-
-<span style="color: #75715e">## Aliases</span>
-table aliases file:/etc/aliases
-
-<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
-listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
-<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
-listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
-
-<span style="color: #75715e">## Receiving</span>
-<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
-accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</span>
-<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
-accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
-<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
-
-<span style="color: #75715e">## Sending</span>
-<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
-accept tagged Signed <span style="color: #66d9ef">for</span> any relay
-<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
-accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">"smtp://localhost:10026"</span>
-<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
-</pre></div>
-
-
-<p>Expliquons un peu ce fichier de configuration :</p>
-<ul>
-<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.</li>
-<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
-<li>Les alias sont définis juste après</li>
-<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”</li>
-<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis</li>
-<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.</li>
-</ul>
-<p>Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.</p>
-<p><code>/etc/dovecot/dovecot.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
-
-<span style="color: #75715e"># basic config</span>
-<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
-<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
-<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"%Y-%m-%d %H:%M:%S "</span>
-<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
-
-<span style="color: #75715e"># authentication</span>
-passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-userdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e"># the protocols we use</span>
-<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
-
-<span style="color: #75715e"># ssl config</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
-
-<span style="color: #75715e">## configuring services </span>
-<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
-service imap-login <span style="color: #f92672">{</span>
- inet_listener imap <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-service lmtp <span style="color: #f92672">{</span>
- unix_listener lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e">## configuring protocols</span>
-<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
-protocol lda <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-protocol lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-plugin <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
- <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>par</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>pour identifier les utilisateurs système</strong></p>
-<p>Ici aussi, voyons comment ce fichier est structuré :</p>
-<ul>
-<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
- leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
-<li>Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)</li>
-<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
-<li>Nous configurons le SSL</li>
-<li>Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise</li>
-<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
-<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.</li>
-</ul>
-<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
-modifications nécessaires a la fin du fichier.</p>
-<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
-<code>/etc/amavis.conf</code> (OpenBSD)</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
-
-<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">'.'</span> <span style="color: #f92672">=></span>
- <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
- <span style="color: #f8f8f2">}</span>
-<span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'MYNETS'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
-
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
-<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
-</pre></div>
-
-
-<p>A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
- 4871</a>. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!</p>
-<p>Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.</p>
-<p>Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
-tutorial</a>)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
-<span style="color: #75715e"># report_safe 1</span>
-<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
-<span style="color: #75715e"># use_bayes 1</span>
-<span style="color: #75715e"># bayes_auto_learn 1</span>
-<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
-<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
-<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
-<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
-<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
-<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
-
-<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.</p>
-<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement</p>
-<p>Bon courage pour votre hosting de mail ensuite…</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/freebsd-online-mfsbsd/<p>J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
-j’ai commencé a chercher comment le faire sur ce serveur.</p>
-<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
-<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.</p>
-<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.</p>
-<p>Utilisez donc ce script ainsi : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
-dd < /dev/zero > /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
-<span style="color: #75715e"># maintenant, installons le système</span>
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-</pre></div>
-
-
-<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
-<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
-convient pas.</p>
-<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES"</span>
-<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
-<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
-<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
-</pre></div>
-
-
-<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
-physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
-maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
-utiliser!</p>
-<p>Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)</p>
-<p>Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
-<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
-<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
-<a href="https://twitter.com/zengisse">zengisse</a>,
-et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
-code</a>, qui vient de
-<a href="https://twitter.com/m1sp">@m1sp</a>
-(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
-<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/SSL ou la sécurité sur l'internet//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
-<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
-connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
-remarqué quelque chose récemment : il se trouve que le certificat qui permet de
-desservir ce site a changé.</p>
-<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.</p>
-<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
-<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
-différent pour chaque sous-domaine.</p>
-<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
-pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
-<p>Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.</p>
-<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.</p>
-<p>Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation : <br />
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
-sudo openssl req -new -key example.key -out example.csr
-# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
-sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
-# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
-</pre></div>
-
-
-<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-<code>*.example.com</code> comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :</p>
-<h3>apache :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
-<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
- EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
- EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>nginx :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>prosody (jabber) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
-<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">}</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
-</pre></div>
-
-
-<h3>postfix (email) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
-<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
-<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
-<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
-<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
-<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
-<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
-<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
-<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>dovecot (imap) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-</pre></div>
-
-
-<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.</p>
-<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
-disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
-of Authenticity</a> qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/Mise en place d'un serveur DNS//wxcafe.net/posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
-domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
-DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
-est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
-simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
-de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
-<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
-<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
-<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.</p>
-<p>Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-<code>.</code> n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
-<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
-a la fin de façon courante.</p>
-<p>Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’ordre
-habituel</em></strong>, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
-76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
-<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
-wxcafe.net</code> devrait vous renvoyer</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">->>HEADER<<-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
-<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
-qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.</p>
-<p>La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : <code>named.conf</code>,
-<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
-<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-<code>named.conf.local</code> contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.</p>
-<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi). </p>
-<p>Examinons tout d’abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
-en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-</pre></div>
-
-
-<p>Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
-<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
-tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
-assez parlant.</p>
-<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-<code>/etc/bind/master/wxcafe.net</code> : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
- <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
- <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
- <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
- <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
- <span style="color: #f8f8f2">)</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">"v=spf1 ip4:5.39.76.46 a -all"</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
-<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
-<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
-<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
-</pre></div>
-
-
-<p>Alors. Expliquons ligne par ligne.<br />
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone. <br />
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net. <br />
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :<br />
- - Le nameserver autoritaire pour le nom de domaine en question,<br />
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @, </p>
-<p>puis entre parenthèses :<br />
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN) <br />
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire, <br />
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible, <br />
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin <br />
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable. </p>
-<p>Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons : </p>
-<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine. </p>
-<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.</p>
-<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)</p>
-<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.</p>
-<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).</p>
-<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
-1034</a> et le
-<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
-avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
-aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/NAT//wxcafe.net/posts/nat/<p>NAT (Network Address Translation) in a word?<br />
-It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
-<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/nat/Plan9 from whichever space//wxcafe.net/posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
-<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
-<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.</p>
-<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
-<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées. </p>
-<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.</p>
-<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/Sed Basics//wxcafe.net/posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.<br />
-Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
-<p>Tout d’abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de <code>ed</code>, l’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
-s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d’une ligne a la fois.
-En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
-<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.</p>
-<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans <code>sed</code> est </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
-</pre></div>
-
-
-<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.) </p>
-<p><br/>
-La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s’utilise de
-la façon suivante : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
-</pre></div>
-
-
-<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.<br />
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.</p>
-<p>Par exemple, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/\(hello world\) world/\1/'
-</pre></div>
-
-
-<p>sur le texte “hello world world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
-</pre></div>
-
-
-<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
-texte original. Ainsi, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/hello world/& world/'
-</pre></div>
-
-
-<p>sur le texte “hello world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
-</pre></div>
-
-
-<p><br/></p>
-<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
-l’espace courant :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
-</pre></div>
-
-
-<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
-<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s’utilisent ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
-[text]
-</pre></div>
-
-
-<p>De la même façon, pour le i : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
-[text]
-</pre></div>
-
-
-<p>Et de même pour a. </p>
-<p>Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
-sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
-remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.</p>
-<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
- /[regex]/d
-<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
-<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier <em>en
-clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
-<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)</p>
-<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.</p>
-<p>D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot <strong><em>doit</em></strong> s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.</p>
-<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.<br />
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau <em>beaucoup</em> plus difficile qu’elle ne le serait sans.</p>
-<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation <em>userspace</em> de dm-crypt, qui pour sa
-part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root. </p>
-<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
-</pre></div>
-
-
-<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
-</pre></div>
-
-
-<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.<br />
-Une fois cela fait, nous allons mapper cette image : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
-</pre></div>
-
-
-<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser. </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
-</pre></div>
-
-
-<p>Maintenant que notre disque est formaté, il peut être monté : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
-</pre></div>
-
-
-<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
-suivant : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-</pre></div>
-
-
-<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité. </p>
-<p>Pour résumer :</p>
-<ul>
-<li>
-<p>Pour monter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-</pre></div>
-
-
-</li>
-<li>
-<p>Pour démonter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
-sudo cryptsetup luksClose <nom de disque virtuel>
-</pre></div>
-
-
-</li>
-</ul>
-<p>Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
-<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
-pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Redesign du blog, etc//wxcafe.net/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
-<p>Du coup, expliquons. J’ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même
-occasion découvert <a href="http://getpelican.com">pelican</a>. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html. </p>
-<p>Globalement, un thème est constitué ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
-<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
- <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span>
-</pre></div>
-
-
-<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles <code>{{ article.content }}</code>,
-par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de
-pelican.</p>
-<p>L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.<br />
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p>
-<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.</p>
-<p>En ce qui concerne les points négatifs : </p>
-<ul>
-<li>
-<p>Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a
- mon avis sur ce sujet.</p>
-</li>
-<li>
-<p>Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.</p>
-</li>
-<li>
-<p>Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?</p>
-</li>
-<li>
-<p>Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.</p>
-</li>
-</ul>
-<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/redesign-du-blog/Comment Saurik a rooté les Google Glass//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.</p>
-<p>Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :</p>
-<p><em>Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.</em></p>
-<p>Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.</p>
-<p>Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.</p>
-<p>Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.</p>
-<p>Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.</p>
-<p>Donc, nous allons lancer deux processus en même temps : </p>
-<ul>
-<li>
-<p>Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null
-do :
-done
-</pre></div>
-
-
-</li>
-<li>
-<p>Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab
-</pre></div>
-
-
-<p>Ces commandes vont fonctionner de concert pour nous donner un accès root :<br />
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.<br />
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.<br />
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.</p>
-</li>
-</ul>
-<p>And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).</p>
-<p>Il nous reste a rebooter, depuis l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "mount -o remount,rw /system"
-</pre></div>
-
-
-<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’appareil :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin
-</pre></div>
-
-
-<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "chmod 6755 /system/xbin/su"
-</pre></div>
-
-
-<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "rm /data/local.prop"
-</pre></div>
-
-
-<p>Enfin, nous redemarrons a nouveau :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Et voila, une paire de google glass rootée!</p>
-<p>Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.</p>
-<p>Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
-<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données. </p>
-<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)<br />
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).</p>
-<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.</p>
-<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.</p>
-<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine. </p>
-<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-</pre></div>
-
-
-<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.</p>
-<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
-bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.<br />
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.</p>
-<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)</p>
-<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste <code>adduser <username></code>, soit utiliser le mode non-interactif
-en faisant un <code>adduser --group <username></code></p>
-<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
--N -g <username></code>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).</p>
-<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: <code>usermod <username> -a -G www-data postfix
-users staff sudo wheel</code>, puis de changer son mot de passe
-<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
-Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.</p>
-<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.<br />
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque<br />
-utilisateur.</p>
-<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
-en la copiant a la main, si ça vous amuse. </p>
-<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
-de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
-Testez si ça fonctionne : ouvez un autre terminal, et<br />
-connectez vous a votre serveur (<code>ssh <username>@<votre nom de
-domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.</strong></p>
-<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
-apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
-apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
-php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
-apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
-php5-imagick imagemagick libapache2-mod-suphp libruby \
-libapache2-mod-ruby
-</pre></div>
-
-
-<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
-mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
-soient prises en compte par apache via un <code>sudo service apache2
-restart</code> </p>
-<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer. </p>
-<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un <code>sudo service apache2 restart</code> </p>
-<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p>
-<p>Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.</p>
-<p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :</p>
-<ol>
-<li>Ce qui est petit est beau</li>
-<li>Faites en sorte que chaque programme fasse une chose, bien.</li>
-<li>Faites un prototype aussi vite que possible</li>
-<li>Choisissez la portabilité plutôt que l’efficacité</li>
-<li>Stockez les données dans des fichiers textes.</li>
-<li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li>
-<li>Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.</li>
-<li>Évitez les UI qui “capturent” l’utilisateur.</li>
-<li>Faites de chaque programme un filtre.</li>
-</ol>
-<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
-celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).</p>
-<p>Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br />
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.</p>
-<p>Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.</p>
-<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.</p>
-<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
-<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)</p>
-<p>Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.<br />
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br />
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.<br />
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité. </p>
-<p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas <strong>simplement</strong> possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve. </p>
-<p>Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple <del>et
-bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)</p>
-<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc… </p>
-<p>Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
-<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie. </p>
-<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/Update//wxcafe.net/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/update/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous
-<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation <strong>a la</strong> UNIX<br />
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, <a href="http://www.mutt.org">“just sucks less”</a>. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.</p>
-<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
-<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)<br />
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.<br />
-Ensuite, voyons pour la partie configuration :<br />
-Ma configuration d’offlineimap :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
-<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
-<span style="color: #75715e">## This should not be edited without creating a copy before</span>
-<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #f8f8f2">[general]</span>
-<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
-<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
-
-<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
-<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
-<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
-<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
-<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
-<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
-<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
-<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
-<span style="color: #75715e"># Where should the mail be placed?</span>
-<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
- <span style="color: #75715e"># voulez que vos emails apparaissent</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
-<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
-<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
-<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d'utilisateur</span>
-<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
-<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
-</pre></div>
-
-
-<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
-Puis ma config mutt :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
-<span style="color: #75715e">## This file should not be edited without creating a copy</span>
-<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
-
-set spoolfile = +INBOX
-<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
-
-set mbox = +'All Mail'
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
-
-set copy = yes
-<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
-<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
-
-set header_cache = /.hcache/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
-
-set ssl_verify_host = no
-<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
-
-<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
-
-auto_view text/html
-<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'interface)
-<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
-<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
-<span style="color: #960050; background-color: #1e0010">#</span> format : "alias short_name long_email_adress"
-source <span style="color: #f8f8f2">$alias_file</span>
-
-set beep = no
-<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-<span style="color: #960050; background-color: #1e0010">#</span> ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
-<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Macros
-
-<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
-<span style="color: #960050; background-color: #1e0010">#</span> pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-<span style="color: #960050; background-color: #1e0010">#</span> deux
-<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
-
-bind pager previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
-<span style="color: #960050; background-color: #1e0010">#</span> message
-
-bind pager j next-line
-bind pager k previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
-
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
-
-<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
-<span style="color: #960050; background-color: #1e0010">#</span> d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-</pre></div>
-
-
-<p>Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/
\ No newline at end of file
diff --git a/output/feeds/feed.rss.hacking.xml b/output/feeds/feed.rss.hacking.xml
deleted file mode 100644
index 70d1b44..0000000
--- a/output/feeds/feed.rss.hacking.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-
-Wxcafé//wxcafe.net/Mon, 06 May 2013 06:24:00 +0200Comment Saurik a rooté les Google Glass//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.</p>
-<p>Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :</p>
-<p><em>Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.</em></p>
-<p>Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.</p>
-<p>Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.</p>
-<p>Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.</p>
-<p>Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.</p>
-<p>Donc, nous allons lancer deux processus en même temps : </p>
-<ul>
-<li>
-<p>Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null
-do :
-done
-</pre></div>
-
-
-</li>
-<li>
-<p>Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab
-</pre></div>
-
-
-<p>Ces commandes vont fonctionner de concert pour nous donner un accès root :<br />
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.<br />
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.<br />
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.</p>
-</li>
-</ul>
-<p>And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).</p>
-<p>Il nous reste a rebooter, depuis l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "mount -o remount,rw /system"
-</pre></div>
-
-
-<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’appareil :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin
-</pre></div>
-
-
-<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "chmod 6755 /system/xbin/su"
-</pre></div>
-
-
-<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "rm /data/local.prop"
-</pre></div>
-
-
-<p>Enfin, nous redemarrons a nouveau :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Et voila, une paire de google glass rootée!</p>
-<p>Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.</p>
-<p>Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
-<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/
\ No newline at end of file
diff --git a/output/feeds/feed.rss.note.xml b/output/feeds/feed.rss.note.xml
deleted file mode 100644
index 93df5ce..0000000
--- a/output/feeds/feed.rss.note.xml
+++ /dev/null
@@ -1,409 +0,0 @@
-
-Wxcafé//wxcafe.net/Sat, 22 Aug 2015 02:43:00 +0200les NUCs et le HDMI-CEC//wxcafe.net/posts/nuc-hdmi-cec/<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>WxcafeSat, 22 Aug 2015 02:43:00 +0200tag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/SSL - STARTTLS//wxcafe.net/posts/ssl-starttls/<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>WxcafeSat, 16 May 2015 02:00:00 +0200tag:wxcafe.net,2015-05-16:posts/ssl-starttls/Docker et les ebooks sur Twitter//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/<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>WxcafeSat, 28 Feb 2015 14:11:00 +0100tag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/SSL ou la sécurité sur l'internet//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
-<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
-connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
-remarqué quelque chose récemment : il se trouve que le certificat qui permet de
-desservir ce site a changé.</p>
-<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.</p>
-<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
-<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
-différent pour chaque sous-domaine.</p>
-<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
-pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
-<p>Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.</p>
-<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.</p>
-<p>Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation : <br />
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
-sudo openssl req -new -key example.key -out example.csr
-# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
-sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
-# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
-</pre></div>
-
-
-<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-<code>*.example.com</code> comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :</p>
-<h3>apache :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
-<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
- EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
- EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>nginx :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>prosody (jabber) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
-<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">}</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
-</pre></div>
-
-
-<h3>postfix (email) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
-<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
-<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
-<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
-<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
-<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
-<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
-<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
-<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>dovecot (imap) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-</pre></div>
-
-
-<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.</p>
-<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
-disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
-of Authenticity</a> qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/Redesign du blog, etc//wxcafe.net/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
-<p>Du coup, expliquons. J’ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même
-occasion découvert <a href="http://getpelican.com">pelican</a>. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html. </p>
-<p>Globalement, un thème est constitué ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
-<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
- <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span>
-</pre></div>
-
-
-<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles <code>{{ article.content }}</code>,
-par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de
-pelican.</p>
-<p>L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.<br />
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p>
-<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.</p>
-<p>En ce qui concerne les points négatifs : </p>
-<ul>
-<li>
-<p>Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a
- mon avis sur ce sujet.</p>
-</li>
-<li>
-<p>Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.</p>
-</li>
-<li>
-<p>Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?</p>
-</li>
-<li>
-<p>Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.</p>
-</li>
-</ul>
-<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/redesign-du-blog/Update//wxcafe.net/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/update/
\ No newline at end of file
diff --git a/output/feeds/feed.rss.oses.xml b/output/feeds/feed.rss.oses.xml
deleted file mode 100644
index 764eab1..0000000
--- a/output/feeds/feed.rss.oses.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-Wxcafé//wxcafe.net/Mon, 09 Sep 2013 11:17:00 +0200Plan9 from whichever space//wxcafe.net/posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
-<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
-<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.</p>
-<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
-<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées. </p>
-<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.</p>
-<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/
\ No newline at end of file
diff --git a/output/feeds/feed.rss.ranting.xml b/output/feeds/feed.rss.ranting.xml
deleted file mode 100644
index 53da18e..0000000
--- a/output/feeds/feed.rss.ranting.xml
+++ /dev/null
@@ -1,215 +0,0 @@
-
-Wxcafé//wxcafe.net/Mon, 17 Feb 2014 05:02:00 +0100NAT//wxcafe.net/posts/nat/<p>NAT (Network Address Translation) in a word?<br />
-It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
-<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/nat/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p>
-<p>Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.</p>
-<p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :</p>
-<ol>
-<li>Ce qui est petit est beau</li>
-<li>Faites en sorte que chaque programme fasse une chose, bien.</li>
-<li>Faites un prototype aussi vite que possible</li>
-<li>Choisissez la portabilité plutôt que l’efficacité</li>
-<li>Stockez les données dans des fichiers textes.</li>
-<li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li>
-<li>Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.</li>
-<li>Évitez les UI qui “capturent” l’utilisateur.</li>
-<li>Faites de chaque programme un filtre.</li>
-</ol>
-<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
-celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).</p>
-<p>Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br />
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.</p>
-<p>Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.</p>
-<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.</p>
-<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
-<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)</p>
-<p>Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.<br />
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br />
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.<br />
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité. </p>
-<p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas <strong>simplement</strong> possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve. </p>
-<p>Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple <del>et
-bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)</p>
-<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc… </p>
-<p>Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
-<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie. </p>
-<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/
\ No newline at end of file
diff --git a/output/feeds/feed.rss.tutoriel.xml b/output/feeds/feed.rss.tutoriel.xml
deleted file mode 100644
index 785b556..0000000
--- a/output/feeds/feed.rss.tutoriel.xml
+++ /dev/null
@@ -1,1297 +0,0 @@
-
-Wxcafé//wxcafe.net/Fri, 07 Nov 2014 13:04:00 +0100OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/opensmtpd-debian/<p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.</p>
-<p>Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
-projet originaire d’<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).</p>
-<p>Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.</p>
-<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).</p>
-<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
-des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
-ça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
-<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
-pour filtrer les mails entrants et sortants.
-Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-</pre></div>
-
-
-<p>Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.</p>
-<p>Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.</p>
-<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.</p>
-<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
-Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
-<code>/var/run/dovecot/lmtp</code>).</p>
-<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
- │╭─────────────>│──> SMTP (10026) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
- │ │ │ ╰───────────╯
- SMTP out │ │ │
-25 <────────│<───────────╯ │
- ╰───────────────╯
-</pre></div>
-
-
-<p>Pour les mails sortants; et</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
- │╭─────────────>│──> SMTP (10024) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
- │ │ │ ╰────────────╯
- │ │ │ ╭────────────╮
- │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰───────────────╯ ╰────────────╯
-</pre></div>
-
-
-<p>Pour les mails entrants.</p>
-<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même</p>
-<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
-post</a>)</p>
-<p>Tout d’abord, commençons par installer les programmes nécessaires :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
-sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
-</pre></div>
-
-
-<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
-<p><code>/etc/smtpd.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
-<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
-
-<span style="color: #75715e">## Certs</span>
-pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
-pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
-
-<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
-listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-
-<span style="color: #75715e">## Aliases</span>
-table aliases file:/etc/aliases
-
-<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
-listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
-<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
-listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
-
-<span style="color: #75715e">## Receiving</span>
-<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
-accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</span>
-<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
-accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
-<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
-
-<span style="color: #75715e">## Sending</span>
-<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
-accept tagged Signed <span style="color: #66d9ef">for</span> any relay
-<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
-accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">"smtp://localhost:10026"</span>
-<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
-</pre></div>
-
-
-<p>Expliquons un peu ce fichier de configuration :</p>
-<ul>
-<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.</li>
-<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
-<li>Les alias sont définis juste après</li>
-<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”</li>
-<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis</li>
-<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.</li>
-</ul>
-<p>Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.</p>
-<p><code>/etc/dovecot/dovecot.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
-
-<span style="color: #75715e"># basic config</span>
-<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
-<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
-<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"%Y-%m-%d %H:%M:%S "</span>
-<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
-
-<span style="color: #75715e"># authentication</span>
-passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-userdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e"># the protocols we use</span>
-<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
-
-<span style="color: #75715e"># ssl config</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
-
-<span style="color: #75715e">## configuring services </span>
-<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
-service imap-login <span style="color: #f92672">{</span>
- inet_listener imap <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-service lmtp <span style="color: #f92672">{</span>
- unix_listener lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e">## configuring protocols</span>
-<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
-protocol lda <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-protocol lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-plugin <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
- <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>par</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>pour identifier les utilisateurs système</strong></p>
-<p>Ici aussi, voyons comment ce fichier est structuré :</p>
-<ul>
-<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
- leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
-<li>Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)</li>
-<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
-<li>Nous configurons le SSL</li>
-<li>Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise</li>
-<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
-<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.</li>
-</ul>
-<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
-modifications nécessaires a la fin du fichier.</p>
-<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
-<code>/etc/amavis.conf</code> (OpenBSD)</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
-
-<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">'.'</span> <span style="color: #f92672">=></span>
- <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
- <span style="color: #f8f8f2">}</span>
-<span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'MYNETS'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
-
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
-<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
-</pre></div>
-
-
-<p>A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
- 4871</a>. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!</p>
-<p>Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.</p>
-<p>Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
-tutorial</a>)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
-<span style="color: #75715e"># report_safe 1</span>
-<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
-<span style="color: #75715e"># use_bayes 1</span>
-<span style="color: #75715e"># bayes_auto_learn 1</span>
-<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
-<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
-<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
-<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
-<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
-<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
-
-<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.</p>
-<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement</p>
-<p>Bon courage pour votre hosting de mail ensuite…</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/freebsd-online-mfsbsd/<p>J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
-j’ai commencé a chercher comment le faire sur ce serveur.</p>
-<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
-<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.</p>
-<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.</p>
-<p>Utilisez donc ce script ainsi : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
-dd < /dev/zero > /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
-<span style="color: #75715e"># maintenant, installons le système</span>
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-</pre></div>
-
-
-<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
-<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
-convient pas.</p>
-<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES"</span>
-<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
-<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
-<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
-</pre></div>
-
-
-<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
-physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
-maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
-utiliser!</p>
-<p>Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)</p>
-<p>Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
-<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
-<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
-<a href="https://twitter.com/zengisse">zengisse</a>,
-et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
-code</a>, qui vient de
-<a href="https://twitter.com/m1sp">@m1sp</a>
-(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
-<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/Mise en place d'un serveur DNS//wxcafe.net/posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
-domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
-DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
-est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
-simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
-de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
-<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
-<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
-<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.</p>
-<p>Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-<code>.</code> n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
-<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
-a la fin de façon courante.</p>
-<p>Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’ordre
-habituel</em></strong>, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
-76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
-<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
-wxcafe.net</code> devrait vous renvoyer</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">->>HEADER<<-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
-<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
-qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.</p>
-<p>La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : <code>named.conf</code>,
-<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
-<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-<code>named.conf.local</code> contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.</p>
-<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi). </p>
-<p>Examinons tout d’abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
-en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-</pre></div>
-
-
-<p>Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
-<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
-tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
-assez parlant.</p>
-<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-<code>/etc/bind/master/wxcafe.net</code> : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
- <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
- <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
- <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
- <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
- <span style="color: #f8f8f2">)</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">"v=spf1 ip4:5.39.76.46 a -all"</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
-<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
-<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
-<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
-</pre></div>
-
-
-<p>Alors. Expliquons ligne par ligne.<br />
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone. <br />
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net. <br />
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :<br />
- - Le nameserver autoritaire pour le nom de domaine en question,<br />
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @, </p>
-<p>puis entre parenthèses :<br />
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN) <br />
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire, <br />
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible, <br />
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin <br />
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable. </p>
-<p>Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons : </p>
-<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine. </p>
-<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.</p>
-<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)</p>
-<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.</p>
-<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).</p>
-<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
-1034</a> et le
-<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
-avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
-aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/Sed Basics//wxcafe.net/posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.<br />
-Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
-<p>Tout d’abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de <code>ed</code>, l’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
-s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d’une ligne a la fois.
-En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
-<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.</p>
-<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans <code>sed</code> est </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
-</pre></div>
-
-
-<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.) </p>
-<p><br/>
-La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s’utilise de
-la façon suivante : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
-</pre></div>
-
-
-<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.<br />
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.</p>
-<p>Par exemple, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/\(hello world\) world/\1/'
-</pre></div>
-
-
-<p>sur le texte “hello world world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
-</pre></div>
-
-
-<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
-texte original. Ainsi, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/hello world/& world/'
-</pre></div>
-
-
-<p>sur le texte “hello world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
-</pre></div>
-
-
-<p><br/></p>
-<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
-l’espace courant :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
-</pre></div>
-
-
-<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
-<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s’utilisent ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
-[text]
-</pre></div>
-
-
-<p>De la même façon, pour le i : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
-[text]
-</pre></div>
-
-
-<p>Et de même pour a. </p>
-<p>Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
-sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
-remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.</p>
-<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
- /[regex]/d
-<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
-<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier <em>en
-clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
-<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)</p>
-<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.</p>
-<p>D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot <strong><em>doit</em></strong> s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.</p>
-<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.<br />
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau <em>beaucoup</em> plus difficile qu’elle ne le serait sans.</p>
-<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation <em>userspace</em> de dm-crypt, qui pour sa
-part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root. </p>
-<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
-</pre></div>
-
-
-<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
-</pre></div>
-
-
-<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.<br />
-Une fois cela fait, nous allons mapper cette image : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
-</pre></div>
-
-
-<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser. </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
-</pre></div>
-
-
-<p>Maintenant que notre disque est formaté, il peut être monté : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
-</pre></div>
-
-
-<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
-suivant : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-</pre></div>
-
-
-<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité. </p>
-<p>Pour résumer :</p>
-<ul>
-<li>
-<p>Pour monter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-</pre></div>
-
-
-</li>
-<li>
-<p>Pour démonter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
-sudo cryptsetup luksClose <nom de disque virtuel>
-</pre></div>
-
-
-</li>
-</ul>
-<p>Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
-<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
-pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données. </p>
-<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)<br />
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).</p>
-<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.</p>
-<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.</p>
-<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine. </p>
-<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-</pre></div>
-
-
-<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.</p>
-<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
-bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.<br />
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.</p>
-<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)</p>
-<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste <code>adduser <username></code>, soit utiliser le mode non-interactif
-en faisant un <code>adduser --group <username></code></p>
-<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
--N -g <username></code>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).</p>
-<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: <code>usermod <username> -a -G www-data postfix
-users staff sudo wheel</code>, puis de changer son mot de passe
-<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
-Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.</p>
-<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.<br />
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque<br />
-utilisateur.</p>
-<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
-en la copiant a la main, si ça vous amuse. </p>
-<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
-de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
-Testez si ça fonctionne : ouvez un autre terminal, et<br />
-connectez vous a votre serveur (<code>ssh <username>@<votre nom de
-domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.</strong></p>
-<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
-apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
-apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
-php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
-apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
-php5-imagick imagemagick libapache2-mod-suphp libruby \
-libapache2-mod-ruby
-</pre></div>
-
-
-<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
-mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
-soient prises en compte par apache via un <code>sudo service apache2
-restart</code> </p>
-<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer. </p>
-<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un <code>sudo service apache2 restart</code> </p>
-<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous
-<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation <strong>a la</strong> UNIX<br />
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, <a href="http://www.mutt.org">“just sucks less”</a>. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.</p>
-<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
-<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)<br />
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.<br />
-Ensuite, voyons pour la partie configuration :<br />
-Ma configuration d’offlineimap :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
-<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
-<span style="color: #75715e">## This should not be edited without creating a copy before</span>
-<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #f8f8f2">[general]</span>
-<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
-<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
-
-<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
-<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
-<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
-<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
-<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
-<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
-<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
-<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
-<span style="color: #75715e"># Where should the mail be placed?</span>
-<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
- <span style="color: #75715e"># voulez que vos emails apparaissent</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
-<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
-<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
-<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d'utilisateur</span>
-<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
-<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
-</pre></div>
-
-
-<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
-Puis ma config mutt :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
-<span style="color: #75715e">## This file should not be edited without creating a copy</span>
-<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
-
-set spoolfile = +INBOX
-<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
-
-set mbox = +'All Mail'
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
-
-set copy = yes
-<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
-<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
-
-set header_cache = /.hcache/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
-
-set ssl_verify_host = no
-<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
-
-<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
-
-auto_view text/html
-<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'interface)
-<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
-<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
-<span style="color: #960050; background-color: #1e0010">#</span> format : "alias short_name long_email_adress"
-source <span style="color: #f8f8f2">$alias_file</span>
-
-set beep = no
-<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-<span style="color: #960050; background-color: #1e0010">#</span> ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
-<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Macros
-
-<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
-<span style="color: #960050; background-color: #1e0010">#</span> pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-<span style="color: #960050; background-color: #1e0010">#</span> deux
-<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
-
-bind pager previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
-<span style="color: #960050; background-color: #1e0010">#</span> message
-
-bind pager j next-line
-bind pager k previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
-
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
-
-<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
-<span style="color: #960050; background-color: #1e0010">#</span> d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-</pre></div>
-
-
-<p>Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/
\ No newline at end of file
diff --git a/output/feeds/feed.rss.vidya-games.xml b/output/feeds/feed.rss.vidya-games.xml
deleted file mode 100644
index c801507..0000000
--- a/output/feeds/feed.rss.vidya-games.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-
-Wxcafé//wxcafe.net/Sun, 19 Apr 2015 21:59:00 +0200Manettes : Hori vs. PDP//wxcafe.net/posts/hori-vs-pdp/<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>WxcafeSun, 19 Apr 2015 21:59:00 +0200tag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/
\ No newline at end of file
diff --git a/output/feeds/feed.rss.xml b/output/feeds/feed.rss.xml
deleted file mode 100644
index a3c1487..0000000
--- a/output/feeds/feed.rss.xml
+++ /dev/null
@@ -1,2196 +0,0 @@
-
-Wxcafé//wxcafe.net/Sat, 22 Aug 2015 02:43:00 +0200les NUCs et le HDMI-CEC//wxcafe.net/posts/nuc-hdmi-cec/<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>WxcafeSat, 22 Aug 2015 02:43:00 +0200tag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/SSL - STARTTLS//wxcafe.net/posts/ssl-starttls/<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>WxcafeSat, 16 May 2015 02:00:00 +0200tag:wxcafe.net,2015-05-16:posts/ssl-starttls/Manettes : Hori vs. PDP//wxcafe.net/posts/hori-vs-pdp/<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>WxcafeSun, 19 Apr 2015 21:59:00 +0200tag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/Docker et les ebooks sur Twitter//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/<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>WxcafeSat, 28 Feb 2015 14:11:00 +0100tag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/opensmtpd-debian/<p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.</p>
-<p>Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
-projet originaire d’<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).</p>
-<p>Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.</p>
-<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).</p>
-<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
-des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
-ça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
-<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
-pour filtrer les mails entrants et sortants.
-Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-</pre></div>
-
-
-<p>Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.</p>
-<p>Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.</p>
-<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.</p>
-<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
-Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
-<code>/var/run/dovecot/lmtp</code>).</p>
-<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
- │╭─────────────>│──> SMTP (10026) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
- │ │ │ ╰───────────╯
- SMTP out │ │ │
-25 <────────│<───────────╯ │
- ╰───────────────╯
-</pre></div>
-
-
-<p>Pour les mails sortants; et</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
- │╭─────────────>│──> SMTP (10024) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
- │ │ │ ╰────────────╯
- │ │ │ ╭────────────╮
- │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰───────────────╯ ╰────────────╯
-</pre></div>
-
-
-<p>Pour les mails entrants.</p>
-<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même</p>
-<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
-post</a>)</p>
-<p>Tout d’abord, commençons par installer les programmes nécessaires :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
-sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
-</pre></div>
-
-
-<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
-<p><code>/etc/smtpd.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
-<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
-
-<span style="color: #75715e">## Certs</span>
-pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
-pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
-
-<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
-listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-
-<span style="color: #75715e">## Aliases</span>
-table aliases file:/etc/aliases
-
-<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
-listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
-<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
-listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
-
-<span style="color: #75715e">## Receiving</span>
-<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
-accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</span>
-<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
-accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
-<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
-
-<span style="color: #75715e">## Sending</span>
-<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
-accept tagged Signed <span style="color: #66d9ef">for</span> any relay
-<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
-accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">"smtp://localhost:10026"</span>
-<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
-</pre></div>
-
-
-<p>Expliquons un peu ce fichier de configuration :</p>
-<ul>
-<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.</li>
-<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
-<li>Les alias sont définis juste après</li>
-<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”</li>
-<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis</li>
-<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.</li>
-</ul>
-<p>Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.</p>
-<p><code>/etc/dovecot/dovecot.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
-
-<span style="color: #75715e"># basic config</span>
-<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
-<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
-<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"%Y-%m-%d %H:%M:%S "</span>
-<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
-
-<span style="color: #75715e"># authentication</span>
-passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-userdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e"># the protocols we use</span>
-<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
-
-<span style="color: #75715e"># ssl config</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
-
-<span style="color: #75715e">## configuring services </span>
-<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
-service imap-login <span style="color: #f92672">{</span>
- inet_listener imap <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-service lmtp <span style="color: #f92672">{</span>
- unix_listener lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e">## configuring protocols</span>
-<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
-protocol lda <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-protocol lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-plugin <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
- <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>par</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>pour identifier les utilisateurs système</strong></p>
-<p>Ici aussi, voyons comment ce fichier est structuré :</p>
-<ul>
-<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
- leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
-<li>Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)</li>
-<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
-<li>Nous configurons le SSL</li>
-<li>Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise</li>
-<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
-<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.</li>
-</ul>
-<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
-modifications nécessaires a la fin du fichier.</p>
-<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
-<code>/etc/amavis.conf</code> (OpenBSD)</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
-
-<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">'.'</span> <span style="color: #f92672">=></span>
- <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
- <span style="color: #f8f8f2">}</span>
-<span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'MYNETS'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
-
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
-<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
-</pre></div>
-
-
-<p>A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
- 4871</a>. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!</p>
-<p>Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.</p>
-<p>Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
-tutorial</a>)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
-<span style="color: #75715e"># report_safe 1</span>
-<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
-<span style="color: #75715e"># use_bayes 1</span>
-<span style="color: #75715e"># bayes_auto_learn 1</span>
-<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
-<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
-<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
-<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
-<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
-<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
-
-<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.</p>
-<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement</p>
-<p>Bon courage pour votre hosting de mail ensuite…</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/freebsd-online-mfsbsd/<p>J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
-j’ai commencé a chercher comment le faire sur ce serveur.</p>
-<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
-<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.</p>
-<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.</p>
-<p>Utilisez donc ce script ainsi : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
-dd < /dev/zero > /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
-<span style="color: #75715e"># maintenant, installons le système</span>
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-</pre></div>
-
-
-<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
-<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
-convient pas.</p>
-<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES"</span>
-<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
-<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
-<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
-</pre></div>
-
-
-<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
-physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
-maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
-utiliser!</p>
-<p>Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)</p>
-<p>Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
-<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
-<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
-<a href="https://twitter.com/zengisse">zengisse</a>,
-et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
-code</a>, qui vient de
-<a href="https://twitter.com/m1sp">@m1sp</a>
-(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
-<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/SSL ou la sécurité sur l'internet//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
-<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
-connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
-remarqué quelque chose récemment : il se trouve que le certificat qui permet de
-desservir ce site a changé.</p>
-<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.</p>
-<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
-<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
-différent pour chaque sous-domaine.</p>
-<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
-pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
-<p>Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.</p>
-<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.</p>
-<p>Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation : <br />
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
-sudo openssl req -new -key example.key -out example.csr
-# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
-sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
-# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
-</pre></div>
-
-
-<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-<code>*.example.com</code> comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :</p>
-<h3>apache :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
-<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
- EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
- EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>nginx :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>prosody (jabber) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
-<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">}</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
-</pre></div>
-
-
-<h3>postfix (email) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
-<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
-<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
-<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
-<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
-<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
-<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
-<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
-<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>dovecot (imap) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-</pre></div>
-
-
-<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.</p>
-<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
-disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
-of Authenticity</a> qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/Mise en place d'un serveur DNS//wxcafe.net/posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
-domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
-DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
-est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
-simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
-de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
-<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
-<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
-<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.</p>
-<p>Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-<code>.</code> n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
-<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
-a la fin de façon courante.</p>
-<p>Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’ordre
-habituel</em></strong>, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
-76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
-<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
-wxcafe.net</code> devrait vous renvoyer</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">->>HEADER<<-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
-<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
-qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.</p>
-<p>La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : <code>named.conf</code>,
-<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
-<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-<code>named.conf.local</code> contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.</p>
-<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi). </p>
-<p>Examinons tout d’abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
-en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-</pre></div>
-
-
-<p>Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
-<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
-tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
-assez parlant.</p>
-<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-<code>/etc/bind/master/wxcafe.net</code> : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
- <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
- <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
- <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
- <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
- <span style="color: #f8f8f2">)</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">"v=spf1 ip4:5.39.76.46 a -all"</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
-<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
-<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
-<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
-</pre></div>
-
-
-<p>Alors. Expliquons ligne par ligne.<br />
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone. <br />
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net. <br />
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :<br />
- - Le nameserver autoritaire pour le nom de domaine en question,<br />
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @, </p>
-<p>puis entre parenthèses :<br />
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN) <br />
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire, <br />
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible, <br />
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin <br />
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable. </p>
-<p>Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons : </p>
-<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine. </p>
-<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.</p>
-<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)</p>
-<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.</p>
-<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).</p>
-<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
-1034</a> et le
-<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
-avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
-aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/NAT//wxcafe.net/posts/nat/<p>NAT (Network Address Translation) in a word?<br />
-It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
-<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/nat/Plan9 from whichever space//wxcafe.net/posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
-<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
-<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.</p>
-<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
-<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées. </p>
-<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.</p>
-<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/Sed Basics//wxcafe.net/posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.<br />
-Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
-<p>Tout d’abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de <code>ed</code>, l’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
-s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d’une ligne a la fois.
-En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
-<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.</p>
-<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans <code>sed</code> est </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
-</pre></div>
-
-
-<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.) </p>
-<p><br/>
-La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s’utilise de
-la façon suivante : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
-</pre></div>
-
-
-<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.<br />
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.</p>
-<p>Par exemple, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/\(hello world\) world/\1/'
-</pre></div>
-
-
-<p>sur le texte “hello world world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
-</pre></div>
-
-
-<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
-texte original. Ainsi, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/hello world/& world/'
-</pre></div>
-
-
-<p>sur le texte “hello world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
-</pre></div>
-
-
-<p><br/></p>
-<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
-l’espace courant :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
-</pre></div>
-
-
-<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
-<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s’utilisent ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
-[text]
-</pre></div>
-
-
-<p>De la même façon, pour le i : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
-[text]
-</pre></div>
-
-
-<p>Et de même pour a. </p>
-<p>Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
-sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
-remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.</p>
-<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
- /[regex]/d
-<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
-<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier <em>en
-clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
-<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)</p>
-<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.</p>
-<p>D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot <strong><em>doit</em></strong> s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.</p>
-<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.<br />
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau <em>beaucoup</em> plus difficile qu’elle ne le serait sans.</p>
-<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation <em>userspace</em> de dm-crypt, qui pour sa
-part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root. </p>
-<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
-</pre></div>
-
-
-<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
-</pre></div>
-
-
-<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.<br />
-Une fois cela fait, nous allons mapper cette image : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
-</pre></div>
-
-
-<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser. </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
-</pre></div>
-
-
-<p>Maintenant que notre disque est formaté, il peut être monté : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
-</pre></div>
-
-
-<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
-suivant : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-</pre></div>
-
-
-<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité. </p>
-<p>Pour résumer :</p>
-<ul>
-<li>
-<p>Pour monter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-</pre></div>
-
-
-</li>
-<li>
-<p>Pour démonter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
-sudo cryptsetup luksClose <nom de disque virtuel>
-</pre></div>
-
-
-</li>
-</ul>
-<p>Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
-<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
-pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Redesign du blog, etc//wxcafe.net/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
-<p>Du coup, expliquons. J’ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même
-occasion découvert <a href="http://getpelican.com">pelican</a>. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html. </p>
-<p>Globalement, un thème est constitué ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
-<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
- <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span>
-</pre></div>
-
-
-<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles <code>{{ article.content }}</code>,
-par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de
-pelican.</p>
-<p>L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.<br />
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p>
-<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.</p>
-<p>En ce qui concerne les points négatifs : </p>
-<ul>
-<li>
-<p>Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a
- mon avis sur ce sujet.</p>
-</li>
-<li>
-<p>Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.</p>
-</li>
-<li>
-<p>Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?</p>
-</li>
-<li>
-<p>Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.</p>
-</li>
-</ul>
-<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/redesign-du-blog/Comment Saurik a rooté les Google Glass//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.</p>
-<p>Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :</p>
-<p><em>Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.</em></p>
-<p>Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.</p>
-<p>Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.</p>
-<p>Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.</p>
-<p>Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.</p>
-<p>Donc, nous allons lancer deux processus en même temps : </p>
-<ul>
-<li>
-<p>Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null
-do :
-done
-</pre></div>
-
-
-</li>
-<li>
-<p>Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab
-</pre></div>
-
-
-<p>Ces commandes vont fonctionner de concert pour nous donner un accès root :<br />
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.<br />
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.<br />
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.</p>
-</li>
-</ul>
-<p>And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).</p>
-<p>Il nous reste a rebooter, depuis l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "mount -o remount,rw /system"
-</pre></div>
-
-
-<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’appareil :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin
-</pre></div>
-
-
-<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "chmod 6755 /system/xbin/su"
-</pre></div>
-
-
-<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "rm /data/local.prop"
-</pre></div>
-
-
-<p>Enfin, nous redemarrons a nouveau :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Et voila, une paire de google glass rootée!</p>
-<p>Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.</p>
-<p>Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
-<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données. </p>
-<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)<br />
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).</p>
-<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.</p>
-<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.</p>
-<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine. </p>
-<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-</pre></div>
-
-
-<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.</p>
-<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
-bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.<br />
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.</p>
-<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)</p>
-<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste <code>adduser <username></code>, soit utiliser le mode non-interactif
-en faisant un <code>adduser --group <username></code></p>
-<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
--N -g <username></code>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).</p>
-<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: <code>usermod <username> -a -G www-data postfix
-users staff sudo wheel</code>, puis de changer son mot de passe
-<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
-Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.</p>
-<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.<br />
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque<br />
-utilisateur.</p>
-<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
-en la copiant a la main, si ça vous amuse. </p>
-<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
-de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
-Testez si ça fonctionne : ouvez un autre terminal, et<br />
-connectez vous a votre serveur (<code>ssh <username>@<votre nom de
-domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.</strong></p>
-<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
-apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
-apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
-php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
-apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
-php5-imagick imagemagick libapache2-mod-suphp libruby \
-libapache2-mod-ruby
-</pre></div>
-
-
-<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
-mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
-soient prises en compte par apache via un <code>sudo service apache2
-restart</code> </p>
-<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer. </p>
-<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un <code>sudo service apache2 restart</code> </p>
-<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p>
-<p>Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.</p>
-<p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :</p>
-<ol>
-<li>Ce qui est petit est beau</li>
-<li>Faites en sorte que chaque programme fasse une chose, bien.</li>
-<li>Faites un prototype aussi vite que possible</li>
-<li>Choisissez la portabilité plutôt que l’efficacité</li>
-<li>Stockez les données dans des fichiers textes.</li>
-<li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li>
-<li>Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.</li>
-<li>Évitez les UI qui “capturent” l’utilisateur.</li>
-<li>Faites de chaque programme un filtre.</li>
-</ol>
-<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
-celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).</p>
-<p>Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br />
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.</p>
-<p>Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.</p>
-<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.</p>
-<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
-<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)</p>
-<p>Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.<br />
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br />
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.<br />
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité. </p>
-<p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas <strong>simplement</strong> possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve. </p>
-<p>Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple <del>et
-bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)</p>
-<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc… </p>
-<p>Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
-<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie. </p>
-<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/Update//wxcafe.net/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/update/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous
-<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation <strong>a la</strong> UNIX<br />
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, <a href="http://www.mutt.org">“just sucks less”</a>. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.</p>
-<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
-<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)<br />
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.<br />
-Ensuite, voyons pour la partie configuration :<br />
-Ma configuration d’offlineimap :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
-<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
-<span style="color: #75715e">## This should not be edited without creating a copy before</span>
-<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #f8f8f2">[general]</span>
-<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
-<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
-
-<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
-<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
-<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
-<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
-<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
-<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
-<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
-<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
-<span style="color: #75715e"># Where should the mail be placed?</span>
-<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
- <span style="color: #75715e"># voulez que vos emails apparaissent</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
-<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
-<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
-<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d'utilisateur</span>
-<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
-<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
-</pre></div>
-
-
-<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
-Puis ma config mutt :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
-<span style="color: #75715e">## This file should not be edited without creating a copy</span>
-<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
-
-set spoolfile = +INBOX
-<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
-
-set mbox = +'All Mail'
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
-
-set copy = yes
-<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
-<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
-
-set header_cache = /.hcache/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
-
-set ssl_verify_host = no
-<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
-
-<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
-
-auto_view text/html
-<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'interface)
-<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
-<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
-<span style="color: #960050; background-color: #1e0010">#</span> format : "alias short_name long_email_adress"
-source <span style="color: #f8f8f2">$alias_file</span>
-
-set beep = no
-<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-<span style="color: #960050; background-color: #1e0010">#</span> ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
-<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Macros
-
-<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
-<span style="color: #960050; background-color: #1e0010">#</span> pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-<span style="color: #960050; background-color: #1e0010">#</span> deux
-<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
-
-bind pager previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
-<span style="color: #960050; background-color: #1e0010">#</span> message
-
-bind pager j next-line
-bind pager k previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
-
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
-
-<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
-<span style="color: #960050; background-color: #1e0010">#</span> d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-</pre></div>
-
-
-<p>Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/
\ No newline at end of file
diff --git a/output/feeds/feed.tutoriel.xml b/output/feeds/feed.tutoriel.xml
deleted file mode 100644
index 2423210..0000000
--- a/output/feeds/feed.tutoriel.xml
+++ /dev/null
@@ -1,1297 +0,0 @@
-
-Wxcafé//wxcafe.net/2014-11-07T13:04:00+01:00OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.</p>
-<p>Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
-projet originaire d’<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).</p>
-<p>Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.</p>
-<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).</p>
-<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
-des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
-ça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
-<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
-pour filtrer les mails entrants et sortants.
-Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-</pre></div>
-
-
-<p>Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.</p>
-<p>Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.</p>
-<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.</p>
-<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
-Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
-<code>/var/run/dovecot/lmtp</code>).</p>
-<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
- │╭─────────────>│──> SMTP (10026) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
- │ │ │ ╰───────────╯
- SMTP out │ │ │
-25 <────────│<───────────╯ │
- ╰───────────────╯
-</pre></div>
-
-
-<p>Pour les mails sortants; et</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
- │╭─────────────>│──> SMTP (10024) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
- │ │ │ ╰────────────╯
- │ │ │ ╭────────────╮
- │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰───────────────╯ ╰────────────╯
-</pre></div>
-
-
-<p>Pour les mails entrants.</p>
-<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même</p>
-<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
-post</a>)</p>
-<p>Tout d’abord, commençons par installer les programmes nécessaires :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
-sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
-</pre></div>
-
-
-<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
-<p><code>/etc/smtpd.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
-<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
-
-<span style="color: #75715e">## Certs</span>
-pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
-pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
-
-<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
-listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-
-<span style="color: #75715e">## Aliases</span>
-table aliases file:/etc/aliases
-
-<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
-listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
-<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
-listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
-
-<span style="color: #75715e">## Receiving</span>
-<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
-accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</span>
-<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
-accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
-<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
-
-<span style="color: #75715e">## Sending</span>
-<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
-accept tagged Signed <span style="color: #66d9ef">for</span> any relay
-<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
-accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">"smtp://localhost:10026"</span>
-<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
-</pre></div>
-
-
-<p>Expliquons un peu ce fichier de configuration :</p>
-<ul>
-<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.</li>
-<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
-<li>Les alias sont définis juste après</li>
-<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”</li>
-<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis</li>
-<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.</li>
-</ul>
-<p>Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.</p>
-<p><code>/etc/dovecot/dovecot.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
-
-<span style="color: #75715e"># basic config</span>
-<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
-<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
-<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"%Y-%m-%d %H:%M:%S "</span>
-<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
-
-<span style="color: #75715e"># authentication</span>
-passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-userdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e"># the protocols we use</span>
-<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
-
-<span style="color: #75715e"># ssl config</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
-
-<span style="color: #75715e">## configuring services </span>
-<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
-service imap-login <span style="color: #f92672">{</span>
- inet_listener imap <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-service lmtp <span style="color: #f92672">{</span>
- unix_listener lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e">## configuring protocols</span>
-<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
-protocol lda <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-protocol lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-plugin <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
- <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>par</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>pour identifier les utilisateurs système</strong></p>
-<p>Ici aussi, voyons comment ce fichier est structuré :</p>
-<ul>
-<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
- leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
-<li>Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)</li>
-<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
-<li>Nous configurons le SSL</li>
-<li>Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise</li>
-<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
-<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.</li>
-</ul>
-<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
-modifications nécessaires a la fin du fichier.</p>
-<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
-<code>/etc/amavis.conf</code> (OpenBSD)</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
-
-<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">'.'</span> <span style="color: #f92672">=></span>
- <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
- <span style="color: #f8f8f2">}</span>
-<span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'MYNETS'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
-
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
-<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
-</pre></div>
-
-
-<p>A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
- 4871</a>. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!</p>
-<p>Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.</p>
-<p>Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
-tutorial</a>)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
-<span style="color: #75715e"># report_safe 1</span>
-<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
-<span style="color: #75715e"># use_bayes 1</span>
-<span style="color: #75715e"># bayes_auto_learn 1</span>
-<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
-<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
-<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
-<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
-<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
-<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
-
-<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.</p>
-<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement</p>
-<p>Bon courage pour votre hosting de mail ensuite…</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
-j’ai commencé a chercher comment le faire sur ce serveur.</p>
-<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
-<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.</p>
-<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.</p>
-<p>Utilisez donc ce script ainsi : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
-dd < /dev/zero > /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
-<span style="color: #75715e"># maintenant, installons le système</span>
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-</pre></div>
-
-
-<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
-<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
-convient pas.</p>
-<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES"</span>
-<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
-<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
-<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
-</pre></div>
-
-
-<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
-physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
-maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
-utiliser!</p>
-<p>Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)</p>
-<p>Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
-<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
-<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
-<a href="https://twitter.com/zengisse">zengisse</a>,
-et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
-code</a>, qui vient de
-<a href="https://twitter.com/m1sp">@m1sp</a>
-(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
-<p>A plus</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
-domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
-DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
-est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
-simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
-de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
-<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
-<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
-<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.</p>
-<p>Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-<code>.</code> n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
-<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
-a la fin de façon courante.</p>
-<p>Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’ordre
-habituel</em></strong>, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
-76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
-<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
-wxcafe.net</code> devrait vous renvoyer</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">->>HEADER<<-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
-<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
-qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.</p>
-<p>La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : <code>named.conf</code>,
-<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
-<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-<code>named.conf.local</code> contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.</p>
-<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi). </p>
-<p>Examinons tout d’abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
-en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-</pre></div>
-
-
-<p>Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
-<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
-tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
-assez parlant.</p>
-<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-<code>/etc/bind/master/wxcafe.net</code> : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
- <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
- <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
- <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
- <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
- <span style="color: #f8f8f2">)</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">"v=spf1 ip4:5.39.76.46 a -all"</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
-<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
-<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
-<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
-</pre></div>
-
-
-<p>Alors. Expliquons ligne par ligne.<br />
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone. <br />
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net. <br />
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :<br />
- - Le nameserver autoritaire pour le nom de domaine en question,<br />
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @, </p>
-<p>puis entre parenthèses :<br />
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN) <br />
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire, <br />
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible, <br />
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin <br />
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable. </p>
-<p>Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons : </p>
-<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine. </p>
-<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.</p>
-<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)</p>
-<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.</p>
-<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).</p>
-<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
-1034</a> et le
-<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
-avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
-aussi.</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.<br />
-Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
-<p>Tout d’abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de <code>ed</code>, l’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
-s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d’une ligne a la fois.
-En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
-<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.</p>
-<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans <code>sed</code> est </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
-</pre></div>
-
-
-<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.) </p>
-<p><br/>
-La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s’utilise de
-la façon suivante : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
-</pre></div>
-
-
-<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.<br />
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.</p>
-<p>Par exemple, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/\(hello world\) world/\1/'
-</pre></div>
-
-
-<p>sur le texte “hello world world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
-</pre></div>
-
-
-<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
-texte original. Ainsi, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/hello world/& world/'
-</pre></div>
-
-
-<p>sur le texte “hello world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
-</pre></div>
-
-
-<p><br/></p>
-<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
-l’espace courant :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
-</pre></div>
-
-
-<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
-<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s’utilisent ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
-[text]
-</pre></div>
-
-
-<p>De la même façon, pour le i : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
-[text]
-</pre></div>
-
-
-<p>Et de même pour a. </p>
-<p>Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
-sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
-remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.</p>
-<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
- /[regex]/d
-<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
-<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier <em>en
-clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
-<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)</p>
-<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.</p>
-<p>D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot <strong><em>doit</em></strong> s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.</p>
-<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.<br />
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau <em>beaucoup</em> plus difficile qu’elle ne le serait sans.</p>
-<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation <em>userspace</em> de dm-crypt, qui pour sa
-part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root. </p>
-<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
-</pre></div>
-
-
-<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
-</pre></div>
-
-
-<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.<br />
-Une fois cela fait, nous allons mapper cette image : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
-</pre></div>
-
-
-<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser. </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
-</pre></div>
-
-
-<p>Maintenant que notre disque est formaté, il peut être monté : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
-</pre></div>
-
-
-<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
-suivant : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-</pre></div>
-
-
-<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité. </p>
-<p>Pour résumer :</p>
-<ul>
-<li>
-<p>Pour monter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-</pre></div>
-
-
-</li>
-<li>
-<p>Pour démonter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
-sudo cryptsetup luksClose <nom de disque virtuel>
-</pre></div>
-
-
-</li>
-</ul>
-<p>Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
-<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
-pour ce faire.</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données. </p>
-<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)<br />
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).</p>
-<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.</p>
-<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.</p>
-<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine. </p>
-<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-</pre></div>
-
-
-<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.</p>
-<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
-bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.<br />
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.</p>
-<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)</p>
-<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste <code>adduser <username></code>, soit utiliser le mode non-interactif
-en faisant un <code>adduser --group <username></code></p>
-<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
--N -g <username></code>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).</p>
-<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: <code>usermod <username> -a -G www-data postfix
-users staff sudo wheel</code>, puis de changer son mot de passe
-<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
-Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.</p>
-<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.<br />
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque<br />
-utilisateur.</p>
-<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
-en la copiant a la main, si ça vous amuse. </p>
-<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
-de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
-Testez si ça fonctionne : ouvez un autre terminal, et<br />
-connectez vous a votre serveur (<code>ssh <username>@<votre nom de
-domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.</strong></p>
-<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
-apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
-apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
-php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
-apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
-php5-imagick imagemagick libapache2-mod-suphp libruby \
-libapache2-mod-ruby
-</pre></div>
-
-
-<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
-mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
-soient prises en compte par apache via un <code>sudo service apache2
-restart</code> </p>
-<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer. </p>
-<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un <code>sudo service apache2 restart</code> </p>
-<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous
-<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation <strong>a la</strong> UNIX<br />
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, <a href="http://www.mutt.org">“just sucks less”</a>. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.</p>
-<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
-<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)<br />
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.<br />
-Ensuite, voyons pour la partie configuration :<br />
-Ma configuration d’offlineimap :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
-<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
-<span style="color: #75715e">## This should not be edited without creating a copy before</span>
-<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #f8f8f2">[general]</span>
-<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
-<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
-
-<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
-<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
-<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
-<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
-<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
-<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
-<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
-<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
-<span style="color: #75715e"># Where should the mail be placed?</span>
-<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
- <span style="color: #75715e"># voulez que vos emails apparaissent</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
-<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
-<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
-<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d'utilisateur</span>
-<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
-<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
-</pre></div>
-
-
-<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
-Puis ma config mutt :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
-<span style="color: #75715e">## This file should not be edited without creating a copy</span>
-<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
-
-set spoolfile = +INBOX
-<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
-
-set mbox = +'All Mail'
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
-
-set copy = yes
-<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
-<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
-
-set header_cache = /.hcache/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
-
-set ssl_verify_host = no
-<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
-
-<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
-
-auto_view text/html
-<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'interface)
-<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
-<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
-<span style="color: #960050; background-color: #1e0010">#</span> format : "alias short_name long_email_adress"
-source <span style="color: #f8f8f2">$alias_file</span>
-
-set beep = no
-<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-<span style="color: #960050; background-color: #1e0010">#</span> ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
-<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Macros
-
-<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
-<span style="color: #960050; background-color: #1e0010">#</span> pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-<span style="color: #960050; background-color: #1e0010">#</span> deux
-<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
-
-bind pager previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
-<span style="color: #960050; background-color: #1e0010">#</span> message
-
-bind pager j next-line
-bind pager k previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
-
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
-
-<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
-<span style="color: #960050; background-color: #1e0010">#</span> d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-</pre></div>
-
-
-<p>Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!</p>
\ No newline at end of file
diff --git a/output/feeds/feed.vidya-games.xml b/output/feeds/feed.vidya-games.xml
deleted file mode 100644
index 743a9ad..0000000
--- a/output/feeds/feed.vidya-games.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-
-Wxcafé//wxcafe.net/2015-04-19T21:59:00+02:00Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<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>
\ No newline at end of file
diff --git a/output/feeds/wxcafe.atom.xml b/output/feeds/wxcafe.atom.xml
deleted file mode 100644
index f212a7f..0000000
--- a/output/feeds/wxcafe.atom.xml
+++ /dev/null
@@ -1,2196 +0,0 @@
-
-Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<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>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<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>Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<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>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<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>OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.</p>
-<p>Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
-projet originaire d’<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).</p>
-<p>Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.</p>
-<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).</p>
-<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
-des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
-ça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
-<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
-pour filtrer les mails entrants et sortants.
-Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-</pre></div>
-
-
-<p>Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.</p>
-<p>Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.</p>
-<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.</p>
-<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
-Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
-<code>/var/run/dovecot/lmtp</code>).</p>
-<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
- │╭─────────────>│──> SMTP (10026) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
- │ │ │ ╰───────────╯
- SMTP out │ │ │
-25 <────────│<───────────╯ │
- ╰───────────────╯
-</pre></div>
-
-
-<p>Pour les mails sortants; et</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
- │╭─────────────>│──> SMTP (10024) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
- │ │ │ ╰────────────╯
- │ │ │ ╭────────────╮
- │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰───────────────╯ ╰────────────╯
-</pre></div>
-
-
-<p>Pour les mails entrants.</p>
-<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même</p>
-<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
-post</a>)</p>
-<p>Tout d’abord, commençons par installer les programmes nécessaires :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
-sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
-</pre></div>
-
-
-<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
-<p><code>/etc/smtpd.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
-<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
-
-<span style="color: #75715e">## Certs</span>
-pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
-pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
-
-<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
-listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-
-<span style="color: #75715e">## Aliases</span>
-table aliases file:/etc/aliases
-
-<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
-listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
-<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
-listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
-
-<span style="color: #75715e">## Receiving</span>
-<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
-accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</span>
-<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
-accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
-<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
-
-<span style="color: #75715e">## Sending</span>
-<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
-accept tagged Signed <span style="color: #66d9ef">for</span> any relay
-<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
-accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">"smtp://localhost:10026"</span>
-<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
-</pre></div>
-
-
-<p>Expliquons un peu ce fichier de configuration :</p>
-<ul>
-<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.</li>
-<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
-<li>Les alias sont définis juste après</li>
-<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”</li>
-<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis</li>
-<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.</li>
-</ul>
-<p>Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.</p>
-<p><code>/etc/dovecot/dovecot.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
-
-<span style="color: #75715e"># basic config</span>
-<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
-<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
-<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"%Y-%m-%d %H:%M:%S "</span>
-<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
-
-<span style="color: #75715e"># authentication</span>
-passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-userdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e"># the protocols we use</span>
-<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
-
-<span style="color: #75715e"># ssl config</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
-
-<span style="color: #75715e">## configuring services </span>
-<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
-service imap-login <span style="color: #f92672">{</span>
- inet_listener imap <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-service lmtp <span style="color: #f92672">{</span>
- unix_listener lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e">## configuring protocols</span>
-<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
-protocol lda <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-protocol lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-plugin <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
- <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>par</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>pour identifier les utilisateurs système</strong></p>
-<p>Ici aussi, voyons comment ce fichier est structuré :</p>
-<ul>
-<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
- leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
-<li>Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)</li>
-<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
-<li>Nous configurons le SSL</li>
-<li>Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise</li>
-<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
-<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.</li>
-</ul>
-<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
-modifications nécessaires a la fin du fichier.</p>
-<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
-<code>/etc/amavis.conf</code> (OpenBSD)</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
-
-<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">'.'</span> <span style="color: #f92672">=></span>
- <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
- <span style="color: #f8f8f2">}</span>
-<span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'MYNETS'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
-
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
-<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
-</pre></div>
-
-
-<p>A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
- 4871</a>. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!</p>
-<p>Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.</p>
-<p>Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
-tutorial</a>)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
-<span style="color: #75715e"># report_safe 1</span>
-<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
-<span style="color: #75715e"># use_bayes 1</span>
-<span style="color: #75715e"># bayes_auto_learn 1</span>
-<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
-<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
-<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
-<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
-<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
-<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
-
-<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.</p>
-<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement</p>
-<p>Bon courage pour votre hosting de mail ensuite…</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
-j’ai commencé a chercher comment le faire sur ce serveur.</p>
-<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
-<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.</p>
-<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.</p>
-<p>Utilisez donc ce script ainsi : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
-dd < /dev/zero > /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
-<span style="color: #75715e"># maintenant, installons le système</span>
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-</pre></div>
-
-
-<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
-<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
-convient pas.</p>
-<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES"</span>
-<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
-<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
-<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
-</pre></div>
-
-
-<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
-physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
-maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
-utiliser!</p>
-<p>Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)</p>
-<p>Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
-<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
-<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
-<a href="https://twitter.com/zengisse">zengisse</a>,
-et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
-code</a>, qui vient de
-<a href="https://twitter.com/m1sp">@m1sp</a>
-(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
-<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
-<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
-connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
-remarqué quelque chose récemment : il se trouve que le certificat qui permet de
-desservir ce site a changé.</p>
-<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.</p>
-<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
-<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
-différent pour chaque sous-domaine.</p>
-<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
-pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
-<p>Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.</p>
-<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.</p>
-<p>Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation : <br />
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
-sudo openssl req -new -key example.key -out example.csr
-# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
-sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
-# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
-</pre></div>
-
-
-<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-<code>*.example.com</code> comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :</p>
-<h3>apache :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
-<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
- EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
- EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>nginx :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>prosody (jabber) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
-<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">}</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
-</pre></div>
-
-
-<h3>postfix (email) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
-<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
-<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
-<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
-<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
-<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
-<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
-<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
-<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>dovecot (imap) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-</pre></div>
-
-
-<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.</p>
-<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
-disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
-of Authenticity</a> qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
-domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
-DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
-est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
-simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
-de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
-<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
-<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
-<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.</p>
-<p>Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-<code>.</code> n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
-<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
-a la fin de façon courante.</p>
-<p>Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’ordre
-habituel</em></strong>, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
-76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
-<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
-wxcafe.net</code> devrait vous renvoyer</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">->>HEADER<<-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
-<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
-qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.</p>
-<p>La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : <code>named.conf</code>,
-<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
-<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-<code>named.conf.local</code> contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.</p>
-<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi). </p>
-<p>Examinons tout d’abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
-en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-</pre></div>
-
-
-<p>Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
-<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
-tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
-assez parlant.</p>
-<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-<code>/etc/bind/master/wxcafe.net</code> : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
- <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
- <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
- <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
- <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
- <span style="color: #f8f8f2">)</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">"v=spf1 ip4:5.39.76.46 a -all"</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
-<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
-<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
-<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
-</pre></div>
-
-
-<p>Alors. Expliquons ligne par ligne.<br />
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone. <br />
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net. <br />
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :<br />
- - Le nameserver autoritaire pour le nom de domaine en question,<br />
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @, </p>
-<p>puis entre parenthèses :<br />
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN) <br />
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire, <br />
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible, <br />
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin <br />
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable. </p>
-<p>Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons : </p>
-<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine. </p>
-<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.</p>
-<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)</p>
-<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.</p>
-<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).</p>
-<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
-1034</a> et le
-<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
-avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
-aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br />
-It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
-<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
-<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
-<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.</p>
-<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
-<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées. </p>
-<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.</p>
-<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.<br />
-Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
-<p>Tout d’abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de <code>ed</code>, l’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
-s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d’une ligne a la fois.
-En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
-<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.</p>
-<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans <code>sed</code> est </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
-</pre></div>
-
-
-<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.) </p>
-<p><br/>
-La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s’utilise de
-la façon suivante : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
-</pre></div>
-
-
-<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.<br />
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.</p>
-<p>Par exemple, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/\(hello world\) world/\1/'
-</pre></div>
-
-
-<p>sur le texte “hello world world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
-</pre></div>
-
-
-<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
-texte original. Ainsi, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/hello world/& world/'
-</pre></div>
-
-
-<p>sur le texte “hello world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
-</pre></div>
-
-
-<p><br/></p>
-<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
-l’espace courant :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
-</pre></div>
-
-
-<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
-<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s’utilisent ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
-[text]
-</pre></div>
-
-
-<p>De la même façon, pour le i : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
-[text]
-</pre></div>
-
-
-<p>Et de même pour a. </p>
-<p>Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
-sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
-remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.</p>
-<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
- /[regex]/d
-<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
-<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier <em>en
-clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
-<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)</p>
-<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.</p>
-<p>D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot <strong><em>doit</em></strong> s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.</p>
-<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.<br />
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau <em>beaucoup</em> plus difficile qu’elle ne le serait sans.</p>
-<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation <em>userspace</em> de dm-crypt, qui pour sa
-part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root. </p>
-<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
-</pre></div>
-
-
-<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
-</pre></div>
-
-
-<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.<br />
-Une fois cela fait, nous allons mapper cette image : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
-</pre></div>
-
-
-<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser. </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
-</pre></div>
-
-
-<p>Maintenant que notre disque est formaté, il peut être monté : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
-</pre></div>
-
-
-<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
-suivant : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-</pre></div>
-
-
-<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité. </p>
-<p>Pour résumer :</p>
-<ul>
-<li>
-<p>Pour monter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-</pre></div>
-
-
-</li>
-<li>
-<p>Pour démonter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
-sudo cryptsetup luksClose <nom de disque virtuel>
-</pre></div>
-
-
-</li>
-</ul>
-<p>Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
-<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
-pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
-<p>Du coup, expliquons. J’ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même
-occasion découvert <a href="http://getpelican.com">pelican</a>. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html. </p>
-<p>Globalement, un thème est constitué ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
-<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
- <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span>
-</pre></div>
-
-
-<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles <code>{{ article.content }}</code>,
-par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de
-pelican.</p>
-<p>L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.<br />
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p>
-<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.</p>
-<p>En ce qui concerne les points négatifs : </p>
-<ul>
-<li>
-<p>Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a
- mon avis sur ce sujet.</p>
-</li>
-<li>
-<p>Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.</p>
-</li>
-<li>
-<p>Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?</p>
-</li>
-<li>
-<p>Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.</p>
-</li>
-</ul>
-<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.</p>
-<p>Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :</p>
-<p><em>Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.</em></p>
-<p>Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.</p>
-<p>Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.</p>
-<p>Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.</p>
-<p>Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.</p>
-<p>Donc, nous allons lancer deux processus en même temps : </p>
-<ul>
-<li>
-<p>Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null
-do :
-done
-</pre></div>
-
-
-</li>
-<li>
-<p>Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab
-</pre></div>
-
-
-<p>Ces commandes vont fonctionner de concert pour nous donner un accès root :<br />
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.<br />
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.<br />
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.</p>
-</li>
-</ul>
-<p>And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).</p>
-<p>Il nous reste a rebooter, depuis l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "mount -o remount,rw /system"
-</pre></div>
-
-
-<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’appareil :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin
-</pre></div>
-
-
-<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "chmod 6755 /system/xbin/su"
-</pre></div>
-
-
-<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "rm /data/local.prop"
-</pre></div>
-
-
-<p>Enfin, nous redemarrons a nouveau :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Et voila, une paire de google glass rootée!</p>
-<p>Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.</p>
-<p>Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
-<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données. </p>
-<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)<br />
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).</p>
-<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.</p>
-<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.</p>
-<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine. </p>
-<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-</pre></div>
-
-
-<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.</p>
-<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
-bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.<br />
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.</p>
-<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)</p>
-<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste <code>adduser <username></code>, soit utiliser le mode non-interactif
-en faisant un <code>adduser --group <username></code></p>
-<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
--N -g <username></code>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).</p>
-<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: <code>usermod <username> -a -G www-data postfix
-users staff sudo wheel</code>, puis de changer son mot de passe
-<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
-Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.</p>
-<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.<br />
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque<br />
-utilisateur.</p>
-<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
-en la copiant a la main, si ça vous amuse. </p>
-<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
-de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
-Testez si ça fonctionne : ouvez un autre terminal, et<br />
-connectez vous a votre serveur (<code>ssh <username>@<votre nom de
-domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.</strong></p>
-<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
-apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
-apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
-php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
-apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
-php5-imagick imagemagick libapache2-mod-suphp libruby \
-libapache2-mod-ruby
-</pre></div>
-
-
-<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
-mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
-soient prises en compte par apache via un <code>sudo service apache2
-restart</code> </p>
-<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer. </p>
-<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un <code>sudo service apache2 restart</code> </p>
-<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p>
-<p>Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.</p>
-<p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :</p>
-<ol>
-<li>Ce qui est petit est beau</li>
-<li>Faites en sorte que chaque programme fasse une chose, bien.</li>
-<li>Faites un prototype aussi vite que possible</li>
-<li>Choisissez la portabilité plutôt que l’efficacité</li>
-<li>Stockez les données dans des fichiers textes.</li>
-<li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li>
-<li>Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.</li>
-<li>Évitez les UI qui “capturent” l’utilisateur.</li>
-<li>Faites de chaque programme un filtre.</li>
-</ol>
-<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
-celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).</p>
-<p>Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br />
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.</p>
-<p>Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.</p>
-<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.</p>
-<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
-<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)</p>
-<p>Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.<br />
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br />
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.<br />
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité. </p>
-<p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas <strong>simplement</strong> possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve. </p>
-<p>Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple <del>et
-bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)</p>
-<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc… </p>
-<p>Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
-<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie. </p>
-<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous
-<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation <strong>a la</strong> UNIX<br />
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, <a href="http://www.mutt.org">“just sucks less”</a>. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.</p>
-<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
-<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)<br />
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.<br />
-Ensuite, voyons pour la partie configuration :<br />
-Ma configuration d’offlineimap :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
-<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
-<span style="color: #75715e">## This should not be edited without creating a copy before</span>
-<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #f8f8f2">[general]</span>
-<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
-<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
-
-<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
-<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
-<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
-<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
-<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
-<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
-<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
-<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
-<span style="color: #75715e"># Where should the mail be placed?</span>
-<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
- <span style="color: #75715e"># voulez que vos emails apparaissent</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
-<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
-<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
-<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d'utilisateur</span>
-<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
-<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
-</pre></div>
-
-
-<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
-Puis ma config mutt :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
-<span style="color: #75715e">## This file should not be edited without creating a copy</span>
-<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
-
-set spoolfile = +INBOX
-<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
-
-set mbox = +'All Mail'
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
-
-set copy = yes
-<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
-<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
-
-set header_cache = /.hcache/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
-
-set ssl_verify_host = no
-<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
-
-<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
-
-auto_view text/html
-<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'interface)
-<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
-<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
-<span style="color: #960050; background-color: #1e0010">#</span> format : "alias short_name long_email_adress"
-source <span style="color: #f8f8f2">$alias_file</span>
-
-set beep = no
-<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-<span style="color: #960050; background-color: #1e0010">#</span> ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
-<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Macros
-
-<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
-<span style="color: #960050; background-color: #1e0010">#</span> pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-<span style="color: #960050; background-color: #1e0010">#</span> deux
-<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
-
-bind pager previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
-<span style="color: #960050; background-color: #1e0010">#</span> message
-
-bind pager j next-line
-bind pager k previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
-
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
-
-<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
-<span style="color: #960050; background-color: #1e0010">#</span> d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-</pre></div>
-
-
-<p>Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!</p>
\ No newline at end of file
diff --git a/output/feeds/wxcafe.rss.xml b/output/feeds/wxcafe.rss.xml
deleted file mode 100644
index 42bbb33..0000000
--- a/output/feeds/wxcafe.rss.xml
+++ /dev/null
@@ -1,2196 +0,0 @@
-
-Wxcafé//wxcafe.net/Sat, 22 Aug 2015 02:43:00 +0200les NUCs et le HDMI-CEC//wxcafe.net/posts/nuc-hdmi-cec/<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>WxcafeSat, 22 Aug 2015 02:43:00 +0200tag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/SSL - STARTTLS//wxcafe.net/posts/ssl-starttls/<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>WxcafeSat, 16 May 2015 02:00:00 +0200tag:wxcafe.net,2015-05-16:posts/ssl-starttls/Manettes : Hori vs. PDP//wxcafe.net/posts/hori-vs-pdp/<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>WxcafeSun, 19 Apr 2015 21:59:00 +0200tag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/Docker et les ebooks sur Twitter//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/<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>WxcafeSat, 28 Feb 2015 14:11:00 +0100tag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/opensmtpd-debian/<p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.</p>
-<p>Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un
-projet originaire d’<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).</p>
-<p>Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.</p>
-<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).</p>
-<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
-des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
-ça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
-<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a>
-pour filtrer les mails entrants et sortants.
-Le schéma suivant explique la façon dont les mails sont gérés sur le système</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-</pre></div>
-
-
-<p>Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.</p>
-<p>Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.</p>
-<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.</p>
-<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
-Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
-<code>/var/run/dovecot/lmtp</code>).</p>
-<p>Ainsi, pour reprendre le schéma présenté plus haut :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
- │╭─────────────>│──> SMTP (10026) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
- │ │ │ ╰───────────╯
- SMTP out │ │ │
-25 <────────│<───────────╯ │
- ╰───────────────╯
-</pre></div>
-
-
-<p>Pour les mails sortants; et</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
- │╭─────────────>│──> SMTP (10024) ──>│─╮ │
- SMTP in ││ │ │ │ amavis │
-────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
- │ │ │ ╰────────────╯
- │ │ │ ╭────────────╮
- │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰───────────────╯ ╰────────────╯
-</pre></div>
-
-
-<p>Pour les mails entrants.</p>
-<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même</p>
-<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce
-post</a>)</p>
-<p>Tout d’abord, commençons par installer les programmes nécessaires :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
-sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
-</pre></div>
-
-
-<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p>
-<p><code>/etc/smtpd.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span>
-<span style="color: #75715e"># See smtpd.conf(5) for more information.</span>
-
-<span style="color: #75715e">## Certs</span>
-pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
-pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
-
-<span style="color: #75715e">## Ports to listen on, and how to listen on them</span>
-listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source
-
-<span style="color: #75715e">## Aliases</span>
-table aliases file:/etc/aliases
-
-<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span>
-listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered
-<span style="color: #75715e"># coming from amavisd, signed with DKIM</span>
-listen on lo port <span style="color: #ae81ff">10027</span> tag Signed
-
-<span style="color: #75715e">## Receiving</span>
-<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span>
-accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</span>
-<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span>
-accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
-<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
-
-<span style="color: #75715e">## Sending</span>
-<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span>
-accept tagged Signed <span style="color: #66d9ef">for</span> any relay
-<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span>
-accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">"smtp://localhost:10026"</span>
-<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span>
-</pre></div>
-
-
-<p>Expliquons un peu ce fichier de configuration :</p>
-<ul>
-<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.</li>
-<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li>
-<li>Les alias sont définis juste après</li>
-<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”</li>
-<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis</li>
-<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.</li>
-</ul>
-<p>Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.</p>
-<p><code>/etc/dovecot/dovecot.conf</code></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
-
-<span style="color: #75715e"># basic config</span>
-<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log
-<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log
-<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"%Y-%m-%d %H:%M:%S "</span>
-<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
-
-<span style="color: #75715e"># authentication</span>
-passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-userdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e"># the protocols we use</span>
-<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve
-
-<span style="color: #75715e"># ssl config</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes
-
-<span style="color: #75715e">## configuring services </span>
-<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span>
-service imap-login <span style="color: #f92672">{</span>
- inet_listener imap <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span>
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-service lmtp <span style="color: #f92672">{</span>
- unix_listener lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666
- <span style="color: #f92672">}</span>
-<span style="color: #f92672">}</span>
-
-<span style="color: #75715e">## configuring protocols</span>
-<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span>
-protocol lda <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-protocol lmtp <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl
- <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve
-<span style="color: #f92672">}</span>
-
-plugin <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve
- <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>par</strong></p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth
-<span style="color: #f92672">}</span>
-</pre></div>
-
-
-<p><strong>pour identifier les utilisateurs système</strong></p>
-<p>Ici aussi, voyons comment ce fichier est structuré :</p>
-<ul>
-<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
- leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
-<li>Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)</li>
-<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
-<li>Nous configurons le SSL</li>
-<li>Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise</li>
-<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li>
-<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.</li>
-</ul>
-<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les
-modifications nécessaires a la fin du fichier.</p>
-<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian)
-<code>/etc/amavis.conf</code> (OpenBSD)</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
-
-<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">'.'</span> <span style="color: #f92672">=></span>
- <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
- <span style="color: #f8f8f2">}</span>
-<span style="color: #f8f8f2">);</span>
-
-<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span>
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'MYNETS'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
-
-<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
- <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span>
- <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
-<span style="color: #f8f8f2">};</span>
-
-<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span>
-<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span>
-</pre></div>
-
-
-<p>A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a>
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC
- 4871</a>. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!</p>
-<p>Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.</p>
-<p>Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
-tutorial</a>)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span>
-<span style="color: #75715e"># report_safe 1</span>
-<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span>
-<span style="color: #75715e"># use_bayes 1</span>
-<span style="color: #75715e"># bayes_auto_learn 1</span>
-<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span>
-<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span>
-<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span>
-<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span>
-<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span>
-<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
-<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span>
-<span style="color: #75715e"># shortcircuit BAYES_99 spam</span>
-<span style="color: #75715e"># shortcircuit BAYES_00 ham</span>
-
-<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.</p>
-<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement</p>
-<p>Bon courage pour votre hosting de mail ensuite…</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/freebsd-online-mfsbsd/<p>J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>,
-j’ai commencé a chercher comment le faire sur ce serveur.</p>
-<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
-<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.</p>
-<p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.</p>
-<p>Utilisez donc ce script ainsi : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
-dd < /dev/zero > /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1
-<span style="color: #75715e"># maintenant, installons le système</span>
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-</pre></div>
-
-
-<p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée,
-<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous
-convient pas.</p>
-<p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES"</span>
-<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
-<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
-<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
-</pre></div>
-
-
-<p>Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
-physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
-maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
-utiliser!</p>
-<p>Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)</p>
-<p>Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
-<a href="https://twitter.com/petitefanfare">petitefanfare</a>,
-<a href="https://twitter.com/capet_ebooks">capet_ebooks</a>,
-<a href="https://twitter.com/zengisse">zengisse</a>,
-et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont tous basés sur <a href="https://github.com/wxcafe/ebooks_example">ce
-code</a>, qui vient de
-<a href="https://twitter.com/m1sp">@m1sp</a>
-(<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p>
-<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/SSL ou la sécurité sur l'internet//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p>
-<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
-connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
-remarqué quelque chose récemment : il se trouve que le certificat qui permet de
-desservir ce site a changé.</p>
-<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.</p>
-<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour
-<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
-différent pour chaque sous-domaine.</p>
-<p>Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche
-pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… bah pour <code>wxcafe.net</code>.</p>
-<p>Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.</p>
-<p>De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.</p>
-<p>Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation : <br />
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation
-sudo openssl req -new -key example.key -out example.csr
-# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">"Common Name"</span> devant contenir le FQDN
-sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
-# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">'</span>une durée de vie de <span style="color: #ae81ff">3</span> ans
-</pre></div>
-
-
-<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-<code>*.example.com</code> comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :</p>
-<h3>apache :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3
-<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">"</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
- EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
- EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">"</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span>
-<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>nginx :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">"EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span>
- <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span>
-<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span>
-<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span>
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>prosody (jabber) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">'abord, lancez la commande suivante :</span>
-<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span>
-<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span>
- <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
- <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f8f8f2">}</span>
-<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span>
-</pre></div>
-
-
-<h3>postfix (email) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt
-<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key
-<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes
-<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong
-<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high
-<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
-<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt
-<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3
-<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes
-<span style="color: #75715e"># [...]</span>
-</pre></div>
-
-
-<h3>dovecot (imap) :</h3>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span>
-<span style="color: #75715e"># [...]</span>
-<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/example.com.crt
-<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </etc/certs/example.com.key
-<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
-</pre></div>
-
-
-<p>Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.</p>
-<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
-disclaimer, et tant qu’a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
-of Authenticity</a> qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/Mise en place d'un serveur DNS//wxcafe.net/posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de
-domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
-DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
-est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
-simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
-de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a
-<a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a
-<a href="http://5.39.76.46">http://5.39.76.46</a>).</p>
-<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.</p>
-<p>Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-<code>.</code> n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine
-<code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point
-a la fin de façon courante.</p>
-<p>Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’ordre
-habituel</em></strong>, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR
-76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p>
-<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
-wxcafe.net</code> devrait vous renvoyer</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672"><<>></span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">->>HEADER<<-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span>
-<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span>
-<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span>
-</pre></div>
-
-
-<p>Comme vous pouvez le voir, les serveurs DNS principaux pour
-<a href="http://wxcafe.net">wxcafe.net</a> sont <code>ns.wxcafe.net</code> et <code>ns.home.wxcafe.net</code>,
-qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxcafe.net</code>. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.</p>
-<p>La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : <code>named.conf</code>,
-<code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>.
-<code>named.conf</code> contient les options par défaut de bind, <code>named.conf.default-zones</code>
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-<code>named.conf.local</code> contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.</p>
-<p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi). </p>
-<p>Examinons tout d’abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées
-en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- allow-transfer <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-
-zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
- <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
- file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span style="color: #f8f8f2">;</span>
- masters <span style="color: #f92672">{</span>
- 80.67.177.103<span style="color: #f8f8f2">;</span>
- <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span>
-</pre></div>
-
-
-<p>Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans <code>/etc/bind/master/</code>, et les slaves un fichier dans
-<code>/etc/bind/slave/</code>, les masters autorisent le transfert vers home.wxcafe.net
-tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
-assez parlant.</p>
-<p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-<code>/etc/bind/master/wxcafe.net</code> : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span>
- <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span>
- <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span>
- <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span>
- <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span>
- <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span>
- <span style="color: #f8f8f2">)</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">"v=spf1 ip4:5.39.76.46 a -all"</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span>
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span>
-<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span>
-<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-
-
-<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span>
-<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span>
-<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
- <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span>
-</pre></div>
-
-
-<p>Alors. Expliquons ligne par ligne.<br />
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone. <br />
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net. <br />
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :<br />
- - Le nameserver autoritaire pour le nom de domaine en question,<br />
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @, </p>
-<p>puis entre parenthèses :<br />
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN) <br />
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire, <br />
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible, <br />
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin <br />
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable. </p>
-<p>Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons : </p>
-<p>NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine. </p>
-<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.</p>
-<p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)</p>
-<p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.</p>
-<p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).</p>
-<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC
-1034</a> et le
-<a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus
-avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant
-aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/NAT//wxcafe.net/posts/nat/<p>NAT (Network Address Translation) in a word?<br />
-It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
-<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/nat/Plan9 from whichever space//wxcafe.net/posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p>
-<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
-<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.</p>
-<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p>
-<p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées. </p>
-<p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.</p>
-<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/Sed Basics//wxcafe.net/posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.<br />
-Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p>
-<p>Tout d’abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de <code>ed</code>, l’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le
-s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d’une ligne a la fois.
-En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p>
-<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.</p>
-<p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans <code>sed</code> est </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/
-</pre></div>
-
-
-<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.) </p>
-<p><br/>
-La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s’utilise de
-la façon suivante : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span>
-</pre></div>
-
-
-<p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant <code>g</code>,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.<br />
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.</p>
-<p>Par exemple, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/\(hello world\) world/\1/'
-</pre></div>
-
-
-<p>sur le texte “hello world world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world
-</pre></div>
-
-
-<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
-texte original. Ainsi, la commande </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed 's/hello world/& world/'
-</pre></div>
-
-
-<p>sur le texte “hello world” renverrait comme résultat</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world
-</pre></div>
-
-
-<p><br/></p>
-<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
-l’espace courant :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p
-</pre></div>
-
-
-<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p>
-<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s’utilisent ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \
-[text]
-</pre></div>
-
-
-<p>De la même façon, pour le i : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \
-[text]
-</pre></div>
-
-
-<p>Et de même pour a. </p>
-<p>Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong>
-sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a
-remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.</p>
-<p>Enfin, dernière commande ne fonctionnant que ligne par ligne, <strong>d</strong> :
- /[regex]/d
-<strong>d</strong> (delete) supprime les contenus du pattern space.</p>
-<p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier <em>en
-clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p>
-<p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)</p>
-<p>Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.</p>
-<p>D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot <strong><em>doit</em></strong> s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.</p>
-<p>La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.<br />
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau <em>beaucoup</em> plus difficile qu’elle ne le serait sans.</p>
-<p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation <em>userspace</em> de dm-crypt, qui pour sa
-part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root. </p>
-<p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br />
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img
-</pre></div>
-
-
-<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img
-</pre></div>
-
-
-<p><code>cryptsetup</code> va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.<br />
-Une fois cela fait, nous allons mapper cette image : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto
-</pre></div>
-
-
-<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser. </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto
-</pre></div>
-
-
-<p>Maintenant que notre disque est formaté, il peut être monté : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt
-</pre></div>
-
-
-<p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat
-suivant : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-</pre></div>
-
-
-<p>Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité. </p>
-<p>Pour résumer :</p>
-<ul>
-<li>
-<p>Pour monter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-</pre></div>
-
-
-</li>
-<li>
-<p>Pour démonter vos partitions : </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
-sudo cryptsetup luksClose <nom de disque virtuel>
-</pre></div>
-
-
-</li>
-</ul>
-<p>Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p>
-<p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code>
-pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Redesign du blog, etc//wxcafe.net/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
-<p>Du coup, expliquons. J’ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même
-occasion découvert <a href="http://getpelican.com">pelican</a>. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html. </p>
-<p>Globalement, un thème est constitué ainsi :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span>
-<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span>
-<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span>
-<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span>
- <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span>
- <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span>
-</pre></div>
-
-
-<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles <code>{{ article.content }}</code>,
-par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de
-pelican.</p>
-<p>L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.<br />
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p>
-<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.</p>
-<p>En ce qui concerne les points négatifs : </p>
-<ul>
-<li>
-<p>Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a
- mon avis sur ce sujet.</p>
-</li>
-<li>
-<p>Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.</p>
-</li>
-<li>
-<p>Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?</p>
-</li>
-<li>
-<p>Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.</p>
-</li>
-</ul>
-<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/redesign-du-blog/Comment Saurik a rooté les Google Glass//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.</p>
-<p>Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :</p>
-<p><em>Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.</em></p>
-<p>Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.</p>
-<p>Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.</p>
-<p>Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.</p>
-<p>Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.</p>
-<p>Donc, nous allons lancer deux processus en même temps : </p>
-<ul>
-<li>
-<p>Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null
-do :
-done
-</pre></div>
-
-
-</li>
-<li>
-<p>Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab
-</pre></div>
-
-
-<p>Ces commandes vont fonctionner de concert pour nous donner un accès root :<br />
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.<br />
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.<br />
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.</p>
-</li>
-</ul>
-<p>And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).</p>
-<p>Il nous reste a rebooter, depuis l’ordinateur host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "mount -o remount,rw /system"
-</pre></div>
-
-
-<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’appareil :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin
-</pre></div>
-
-
-<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "chmod 6755 /system/xbin/su"
-</pre></div>
-
-
-<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell "rm /data/local.prop"
-</pre></div>
-
-
-<p>Enfin, nous redemarrons a nouveau :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot
-</pre></div>
-
-
-<p>Et voila, une paire de google glass rootée!</p>
-<p>Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.</p>
-<p>Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
-<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données. </p>
-<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)<br />
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).</p>
-<p>La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.</p>
-<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.</p>
-<p>Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine. </p>
-<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-</pre></div>
-
-
-<p>Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.</p>
-<p>root est un utilisateur <strong>assez</strong> répandu, et il est assez simple de
-bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.<br />
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.</p>
-<p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)</p>
-<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste <code>adduser <username></code>, soit utiliser le mode non-interactif
-en faisant un <code>adduser --group <username></code></p>
-<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
--N -g <username></code>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).</p>
-<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: <code>usermod <username> -a -G www-data postfix
-users staff sudo wheel</code>, puis de changer son mot de passe
-<code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: <code>echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers</code><br />
-Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.</p>
-<p>Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.<br />
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque<br />
-utilisateur.</p>
-<p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br />
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
-en la copiant a la main, si ça vous amuse. </p>
-<p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (<code>mkdir .ssh</code>), puis
-de déplacer ce fichier a la bonne place (<code>mv ~/id_rsa.pub ~/.ssh/authorized_keys</code>).
-Testez si ça fonctionne : ouvez un autre terminal, et<br />
-connectez vous a votre serveur (<code>ssh <username>@<votre nom de
-domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.</strong></p>
-<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer: </p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \
-apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
-apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
-php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
-apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
-php5-imagick imagemagick libapache2-mod-suphp libruby \
-libapache2-mod-ruby
-</pre></div>
-
-
-<p>(faisons large, on aura besoin de l’excédent plus tard…), puis activons les<br />
-mods apache en faisant <code>a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest</code>, et faisons en sorte que ces activations
-soient prises en compte par apache via un <code>sudo service apache2
-restart</code> </p>
-<p>Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer. </p>
-<p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un <code>sudo service apache2 restart</code> </p>
-<p>Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p>
-<p>Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.</p>
-<p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :</p>
-<ol>
-<li>Ce qui est petit est beau</li>
-<li>Faites en sorte que chaque programme fasse une chose, bien.</li>
-<li>Faites un prototype aussi vite que possible</li>
-<li>Choisissez la portabilité plutôt que l’efficacité</li>
-<li>Stockez les données dans des fichiers textes.</li>
-<li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li>
-<li>Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.</li>
-<li>Évitez les UI qui “capturent” l’utilisateur.</li>
-<li>Faites de chaque programme un filtre.</li>
-</ol>
-<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
-celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).</p>
-<p>Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br />
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.</p>
-<p>Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.</p>
-<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.</p>
-<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
-<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)</p>
-<p>Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.<br />
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br />
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.<br />
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité. </p>
-<p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas <strong>simplement</strong> possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve. </p>
-<p>Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple <del>et
-bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)</p>
-<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc… </p>
-<p>Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
-<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie. </p>
-<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/Update//wxcafe.net/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/update/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous
-<del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation <strong>a la</strong> UNIX<br />
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br />
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, <a href="http://www.mutt.org">“just sucks less”</a>. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.</p>
-<p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans
-<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)<br />
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.<br />
-Ensuite, voyons pour la partie configuration :<br />
-Ma configuration d’offlineimap :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span>
-<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span>
-<span style="color: #75715e">## This should not be edited without creating a copy before</span>
-<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #f8f8f2">[general]</span>
-<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span>
-<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span>
-
-<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span>
-<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
-<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span>
-<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
-<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span>
-<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
-<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span>
-<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span>
-<span style="color: #75715e"># Where should the mail be placed?</span>
-<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span>
- <span style="color: #75715e"># voulez que vos emails apparaissent</span>
-
-<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span>
-<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
-<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span>
-<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span>
-<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d'utilisateur</span>
-<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span>
-<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span>
-</pre></div>
-
-
-<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
-Puis ma config mutt :</p>
-<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span>
-<span style="color: #75715e">## This file should not be edited without creating a copy</span>
-<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span>
-<span style="color: #75715e">## Published under CC-BY-SA</span>
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
-
-set spoolfile = +INBOX
-<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
-
-set mbox = +'All Mail'
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
-
-set copy = yes
-<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour...
-<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi.
-
-set header_cache = /.hcache/
-<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
-
-set ssl_verify_host = no
-<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
-
-<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
-
-auto_view text/html
-<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'interface)
-<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span>
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
-<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même.
-<span style="color: #960050; background-color: #1e0010">#</span> format : "alias short_name long_email_adress"
-source <span style="color: #f8f8f2">$alias_file</span>
-
-set beep = no
-<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-<span style="color: #960050; background-color: #1e0010">#</span> ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
-<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Macros
-
-<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus,
-<span style="color: #960050; background-color: #1e0010">#</span> pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-<span style="color: #960050; background-color: #1e0010">#</span> deux
-<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
-
-bind pager previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
-<span style="color: #960050; background-color: #1e0010">#</span> message
-
-bind pager j next-line
-bind pager k previous-line
-<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
-
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options
-
-<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background.
-
-<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc.
-<span style="color: #960050; background-color: #1e0010">#</span> d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-</pre></div>
-
-
-<p>Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br />
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-<del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/
\ No newline at end of file
diff --git a/output/index.html b/output/index.html
deleted file mode 100644
index 54c09c5..0000000
--- a/output/index.html
+++ /dev/null
@@ -1,1513 +0,0 @@
-
-
-
-
- Wxcafé
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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.
-
Ayant un Raspberry Pi 1 qui trainait, j’ai
-décidé d’installer OpenELEC 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.
-
J’ai donc acquis un NUC D34010WYK
-(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un
-adaptateur HDMI-CEC pour celui-ci, et un
-SSD mSATA, en me disant que je
-pourrais sans trop de problème faire tourner Kodi 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).
-
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]assez médiocre. J’ai donc
-cherché plusieurs heures, avant de trouver [DE]ce
-post
-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.
-
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 :
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.
-
Dual-USB
- ┌─┬─┬─┬─┬─┐
- │b│B│v│n│·│
- ├─┼─┼─┼─┼─┤
- │·│·│·│·│ │
- └─┴─┴─┴─┴─┘
-
- b ➔ fiche bleue
- B ➔ fiche Blanche
- v ➔ fiche verte
- n ➔ fiche noire
- · ➔ pin inutilisé
- ➔ espace vide (sans pin)
-
-
-
-
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 désactivé. Ceci permettant a la connection HDMI-CEC de
-démarrer et le NUC.
-
Ne reste plus ensuite qu’a installer un système digne de ce nom dessus!
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.
-
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.
-
L’autre approche qui a été utilisée est une approche d’upgrade. 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 handshake 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.
-
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 STARTTLS, qui upgrade les connexions si nécessaire.
-La réponse est que STARTTLS 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.
-Bref, mettez en place du STARTTLS, et pas du SSL. C’est mieux pour la sécurité
-de tout le monde.
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.
-
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 l’adaptateur GC pour Wii
-U
-a votre console.
-
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.
-
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.
-
Nous allons ici voir deux modèles, un de chacune des boites en question
-: PDP et Hori.
-
Toutes les photos présentes dans cet article sont disponibles en plus grande
-taille en cliquant dessus
-
Commençons par le modèle de chez Hori :
-
-
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.
-
-
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
-
-
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.
-
-
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.
-
-
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…
-
-
-
Passons maintenant a la manette PDP.
-
-
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).
-
-
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.
-
-
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 péremptoire perpendiculaire…
-
-
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.
-
Quelques photos des gâchettes en question :
-
-
-
-
-
-
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 esttotalement identique a celle des manettes Gamecube, cependant, la version
-Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.
Vous avez peut être déjà entendu parler de Docker. 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 Jails,
-mais n’est devenu possible sous linux que récemment grâce aux cgroups,
-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.
-
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 Docker Hub permet aussi de récupérer
-rapidement et facilement un grand nombre d’images déjà configurées.
-
Maintenant que nous avons expliqué rapidement ce qu’était Docker, voyons le
-rapport avec les ebooks et Twitter.
-
Les comptes dits “ebooks” (le nom vient a l’origine de horse_ebooks,
-voir ici pourquoi) sont des bots
-twitter utilisant des Chaines de Markov,
-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.
-
C’est, comme disent certaines personnes, “fun”.
-
Il existe de nombreuses librairies écrites pour créer ce genre de bots,
-cependant dans ce cas nous nous concentrerons sur
-celle-ci, qui est une lib ruby créée
-par @m1sp, qui gère pour nous a la fois l’API
-twitter et la génération des messages.
-
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éé un
-repo github qui contient toutes les
-pièces nécessaires pour mettre cela en place : le bot en lui même, les deux
-Dockerfiles, etc.
-
Le fonctionnement du bot est
-simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de
-l’utilisateur source avec ebooks archive <username> <filename> (c’est du json)
-, puis vous convertissez le json en fichier utilisable par le bot : ebooks
-consume <filename>. Cela fait, démarrer le bot revient a lancer le container :
-docker run -d <container name> Pour plus d’informations, allez voir la
-documentation Docker
-
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 :
Les 5 minutes entre chaque commande sont laissées pour empécher que deux
-commandes ne s’executent en même temps.
-
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 des
-applications “usuelles”
-dedans,
-puisque l’overhead de Docker est minimal, et beaucoup d’autres applications
-existent.
J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.
-
Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. OpenSMTPd est un
-projet originaire d’OpenBSD qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).
-
Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.
-
Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).
-
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 Dovecot qui fait office de serveur IMAP et
-amavis/spamassassin
-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
-
╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-
-
-
-
Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout aamavis, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.
-
Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.
-
Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.
-
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,
-/var/run/dovecot/lmtp).
-
Ainsi, pour reprendre le schéma présenté plus haut :
Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même
-
(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir ce
-post)
-
Tout d’abord, commençons par installer les programmes nécessaires :
Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :
-
/etc/smtpd.conf
-
# This is the smtpd server system-wide configuration file.
-# See smtpd.conf(5) for more information.
-
-## Certs
-pki exem.pl certificate "/etc/certs/exem.pl.crt"
-pki exem.pl key "/etc/certs/exem.pl.key"
-
-## Ports to listen on, and how to listen on them
-listen on eth0 port 25 tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port 465 tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port 587 tls-require pki exem.pl hostname exem.pl auth mask-source
-
-## Aliases
-table aliases file:/etc/aliases
-
-# coming from amavisd, checked for spam/malware
-listen on lo port 10025 tag Filtered
-# coming from amavisd, signed with DKIM
-listen on lo port 10027 tag Signed
-
-## Receiving
-# if the (incoming) mail has been through amavisd, then we can deliver it
-accept tagged Filtered for any alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp"
-# we directly tranfer incoming mail to amavisd to be checked
-accept from any for domain "exem.pl" relay via "smtp://localhost:10024"
-# we have to put these lines in this order to avoid infinite loops
-
-## Sending
-# if the (outgoint) mail has been through amavisd, then we can deliver it
-accept tagged Signed for any relay
-# we tranfer the outgoing mail to amavisd to be signed
-accept for any relay via "smtp://localhost:10026"
-# same, we have to put these lines in this order or infinite loops...
-
-
-
-
Expliquons un peu ce fichier de configuration :
-
-
Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.
-
Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire
-
Les alias sont définis juste après
-
Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”
-
Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis
-
Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.
-
-
Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket /var/run/dovecot/lmtp et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.
Ici aussi, voyons comment ce fichier est structuré :
-
-
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.
-
Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)
-
Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).
-
Nous configurons le SSL
-
Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise
-
Nous configurons maintenant les protocoles, pour faire fonctionner Sieve
-
enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.
-
-
Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis/usr/local/share/examples/amavisd-new/amavisd.conf et ajoutez les
-modifications nécessaires a la fin du fichier.
A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la RFC 4871
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la RFC
- 4871. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!
-
Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.
-
Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (un
-tutorial)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :
-
#rewrite_header Subject *****SPAM*****
-# report_safe 1
-required_score2.0
-# use_bayes 1
-# bayes_auto_learn 1
-# bayes_ignore_header X-Bogosity
-# bayes_ignore_header X-Spam-Flag
-# bayes_ignore_header X-Spam-Status
-ifpluginMail::SpamAssassin::Plugin::Shortcircuit
-# shortcircuit USER_IN_WHITELIST on
-# shortcircuit USER_IN_DEF_WHITELIST on
-# shortcircuit USER_IN_ALL_SPAM_TO on
-# shortcircuit SUBJECT_IN_WHITELIST on
-# shortcircuit USER_IN_BLACKLIST on
-# shortcircuit USER_IN_BLACKLIST_TO on
-# shortcircuit SUBJECT_IN_BLACKLIST on
-shortcircuitALL_TRUSTEDoff
-# shortcircuit BAYES_99 spam
-# shortcircuit BAYES_00 ham
-
-endif# Mail::SpamAssassin::Plugin::Shortcircuit
-
-
-
-
Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.
-
Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement
J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester bhyve)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon serveur auto-hebergé ni sur ce serveur ci,
-j’ai commencé a chercher comment le faire sur ce serveur.
-
Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que ce post sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier.
-
J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers mfsbsd, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.
-
Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.
-
Utilisez donc ce script ainsi :
-
# tout d'abord, wipons le MBR :
-dd < /dev/zero > /dev/da0 count=1
-# maintenant, installons le système
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-
-
-
-
Avec -g da0 votre disque dur principal, -s 2G la quantité de swap désirée,
--p root le nom du zpool, et -c pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un zfsinstall -h si mon setup ne vous
-convient pas.
-
Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :
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!
-
Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)
Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: More Tricks for Defeating SSL,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-A Critique of Lavabit,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)
-
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é.
-
Cela fait suite aux évènements évoqués dans le Disclaimer, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris enfin les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.
-
Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour wxcafe.net, un pour
-paste.wxcafe.net, un pour mail.wxcafe.net, etc… Bref, un certificat
-différent pour chaque sous-domaine.
-
Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour *.wxcafe.net hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de wxcafe.net; et un certificat pour wxcafe.net, qui ne matche
-pas *.wxcafe.net, et qui sera donc utilisé… bah pour wxcafe.net.
-
Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.
-
De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.
-
Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation :
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes:
-
sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de 4096 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, "Common Name" 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'une durée de vie de 3 ans
-
-
-
-
Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-*.example.com comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :
Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.
-
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 SSL and the future
-of Authenticity qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.
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 http://173.194.45.66, ou a
-http://199.16.156.70. Voire même a
-http://5.39.76.46).
-
Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.
-
Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est /, celle de DNS est ., et là ou il convient d’écrire, par exemple,/usr/ et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-. n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) com, et le domaine
-google.com appartient a com, on écrit donc google.com sans écrire le point
-a la fin de façon courante.
-
Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, dans le sens contraire a l’ordre
-habituel, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire dig PTR
-76.46.39.5.in-addr.arpa. La réponse sera, évidemment, wxcafe.net
-
Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est dig. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. dig se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, dig NS
-wxcafe.net devrait vous renvoyer
Comme vous pouvez le voir, les serveurs DNS principaux pour
-wxcafe.net sont ns.wxcafe.net et ns.home.wxcafe.net,
-qui sont respectivement des alias pour wxcafe.net et home.wxcafe.net. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.
-
La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : named.conf,
-named.conf.default-zones, named.conf.local et named.conf.options.
-named.conf contient les options par défaut de bind, named.conf.default-zones
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-named.conf.local contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.
-
Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi).
-
Examinons tout d’abord les fichiers de configuration de named.named.conf.local contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones wxcafe.net et 76.46.39.5.in-addr.arpa sont gérées
-en master, et les zones home.wxcafe.net et 103.177.67.80.in-addr.arpa sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier named.conf.local sur wxcafe.net contient donc
Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans /etc/bind/master/, et les slaves un fichier dans
-/etc/bind/slave/, 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.
-
Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-/etc/bind/master/wxcafe.net :
Alors. Expliquons ligne par ligne.
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone.
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net.
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :
- - Le nameserver autoritaire pour le nom de domaine en question,
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @,
-
puis entre parenthèses :
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN)
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire,
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible,
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable.
-
Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons :
-
NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine.
-
MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.
-
Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)
-
Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.
-
Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).
-
Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le RFC
-1034 et le
-RFC 1035. Dans un autre style (bien plus
-avancé) le blog de Stéphane Bortzmeyer est interessant
-aussi.
Plan 9 from Outer Space est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.
-
Plan 9 from Bell Labs est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix.
-
Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.
-
En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).
-
Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées.
-
Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.
-
Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 via son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…
sed est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.
-Or sed a bien plus de possibilités que ça, comme nous allons le voir.
-
Tout d’abord, rappelons les bases : sed est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de ed, l’éditeur original.ed est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des téléscripteurs, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. sed est donc une évolution de ed, le
-s signifiant stream, sed est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir Flux standards) pour éditer plus d’une ligne a la fois.
-En pratique, sed est principalement utilisé sur des fichiers.
-
sed a quelques options pratique, notamment -s qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien -i (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.
-
ed, et donc sed, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans sed est
-
/[regex]/
-
-
-
-
qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.)
-
-La commande sed la plus utilisée est bien entendu le s, qui s’utilise de
-la façon suivante :
-
s/[oldtext]/[newtext]/[options]
-
-
-
-
qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant g,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, sed utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.
-
Par exemple, la commande
-
sed 's/\(hello world\) world/\1/'
-
-
-
-
sur le texte “hello world world” renverrait comme résultat
-
hello world
-
-
-
-
De la même façon, le symbole & dans le texte de remplacement représente le
-texte original. Ainsi, la commande
-
sed 's/hello world/& world/'
-
-
-
-
sur le texte “hello world” renverrait comme résultat
-
hello world world
-
-
-
-
-
Une autre commande utile est p, qui sert a afficher le texte présent dans
-l’espace courant :
-
/[regex]/p
-
-
-
-
sed stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commandep affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le p affiche donc ce dernier.
-
Un autre exemple de commande sont c, i et a, qui s’utilisent ainsi :
-
c \
-[text]
-
-
-
-
De la même façon, pour le i :
-
i \
-[text]
-
-
-
-
Et de même pour a.
-
Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. i sert a insérer du texte avant le pattern space. a
-sert a insérer du texte après le pattern space, et enfin c sert a
-remplacer tout le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.
-
Enfin, dernière commande ne fonctionnant que ligne par ligne, d :
- /[regex]/d
-d (delete) supprime les contenus du pattern space.
-
sed est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.
Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier en
-clair a un fichier chiffré dit cyphertext. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux dm_crypt et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre clé GPG)
-
dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur LUKS, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de mapper des block devices. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans/dev/, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)
-
Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.
-
D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot doit s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.
-
La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du vrai boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau beaucoup plus difficile qu’elle ne le serait sans.
-
Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, cryptsetup. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation userspace de dm-crypt, qui pour sa
-part est entièrement kernel-space. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root.
-
Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire :
Maintenant que notre image est créée, nous pouvons la chiffrer :
-
sudo cryptsetup luksFormat image.img
-
-
-
-
cryptsetup va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.
-Une fois cela fait, nous allons mapper cette image :
-
sudo cryptsetup luksOpen image.img crypto
-
-
-
-
cryptsetup nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser.
-
sudo mkfs.ext4 /dev/mapper/crypto
-
-
-
-
Maintenant que notre disque est formaté, il peut être monté :
-
sudo mount /dev/mapper/crypto /mnt
-
-
-
-
Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un mount | grep crypto devrait vous donner le résultat
-suivant :
-
/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-
-
-
-
Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité.
-
Pour résumer :
-
-
-
Pour monter vos partitions :
-
sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-
Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur github.
-
Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un dd if=votre_image of=/dev/votre_partition
-pour ce faire.
Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.
-
Du coup, expliquons. J’ai récemment monté serverporn, et ai par la même
-occasion découvert pelican. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html.
Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles {{ article.content }},
-par exemple. La syntaxe complète est très bien documentée dans la doc de
-pelican.
-
L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un make html pour mettre a jour le blog.
-
De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.
-
En ce qui concerne les points négatifs :
-
-
-
Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos ici quand a
- mon avis sur ce sujet.
-
-
-
Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.
-
-
-
Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?
-
-
-
Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.
-
-
-
Voila, c’est mon retour d’expérience sur pelican. A plus.
Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.
-
Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :
-
Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de cet article, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.
-
Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.
-
Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.
-
Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.
-
Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.
-
Donc, nous allons lancer deux processus en même temps :
-
-
-
Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :
Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :
-
adb restore exploit.ab
-
-
-
-
Ces commandes vont fonctionner de concert pour nous donner un accès root :
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.
-
-
-
And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).
-
Il nous reste a rebooter, depuis l’ordinateur host :
-
adb reboot
-
-
-
-
Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :
Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :
-
adb shell "chmod 6755 /system/xbin/su"
-
-
-
-
Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :
-
adb shell "rm /data/local.prop"
-
-
-
-
Enfin, nous redemarrons a nouveau :
-
adb reboot
-
-
-
-
Et voila, une paire de google glass rootée!
-
Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.
-
Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.
Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données.
-
Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).
-
La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.
-
Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.
-
Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un passwd, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine.
-
Cette entrée doit donc pour l’instant ressembler a ca :
-
<votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-
-
-
-
Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.
-
root est un utilisateur assez répandu, et il est assez simple de
-bruteforcer le mot de passe. (Relativement assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.
-
Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)
-
Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste adduser <username>, soit utiliser le mode non-interactif
-en faisant un adduser --group <username>
-
Avec useradd, vous devrez utiliser la commande suivante : useradd -m
--N -g <username>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).
-
Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: usermod <username> -a -G www-data postfix
-users staff sudo wheel, puis de changer son mot de passe
-passwd. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers
-Enfin, changeons d’utilisateur : su. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.
-
Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque
-utilisateur.
-
Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande ssh-keygen -t rsa (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec unscp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/ , ou
-en la copiant a la main, si ça vous amuse.
-
Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (mkdir .ssh), puis
-de déplacer ce fichier a la bonne place (mv ~/id_rsa.pub ~/.ssh/authorized_keys).
-Testez si ça fonctionne : ouvez un autre terminal, et
-connectez vous a votre serveur (ssh <username>@<votre nom de
-domaine>), et il ne devrait pas vous demander de mot de passe.Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.
-
Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer:
(faisons large, on aura besoin de l’excédent plus tard…), puis activons les
-mods apache en faisant a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest, et faisons en sorte que ces activations
-soient prises en compte par apache via un sudo service apache2
-restart
-
Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer.
-
Pour cela, nous allons faire un simple ln -s /etc/apache2/sites-{available,enabled}/default, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant AllowOverride none en AllowOverride All,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un sudo service apache2 restart
-
Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)
This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text here
-
Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.
-
Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas vraiment eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :
-
-
Ce qui est petit est beau
-
Faites en sorte que chaque programme fasse une chose, bien.
-
Faites un prototype aussi vite que possible
-
Choisissez la portabilité plutôt que l’efficacité
-
Stockez les données dans des fichiers textes.
-
Utilisez ce qui existe déjà a votre avantage. [1]
-
Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.
-
Évitez les UI qui “capturent” l’utilisateur.
-
Faites de chaque programme un filtre.
-
-
Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la philosophie UNIX. Et
-celle-ci n’a pas fait son temps, elle a fait ses preuves. La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatiquesérieusement (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).
-
Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’estbeaucoup moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote légèrement plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.
-
Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.
-
Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.
-
OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la page d’accueil du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)
-
Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)
-
Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*
Bon.
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, astucieusement nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité.
-
De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas simplement possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve.
-
Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple et
-bonne raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)
-
Il y a énormément d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc…
-
Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’estvisiblement pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non.
-
Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie.
Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!
Les clients mails ont une particularité en commun : ils sont tous
-très mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation a la UNIX
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu Outlook Express 2003 Mutt!
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, “just sucks less”. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.
-
La configuration de mutt se fait dans le fichier .muttrc ou dans
-/etc/Muttrc, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans~/.offlineimaprc ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et ce script fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.
-Ensuite, voyons pour la partie configuration :
-Ma configuration d’offlineimap :
-
## Config file for offlineimap
-## Originally located in ~/.offlineimaprc
-## This should not be edited without creating a copy before
-## Created by Wxcafe (Clément Hertling)
-## Published under CC-BY-SA
-
-[general]
-# List of accounts to be synced, separated by a comma.
-accounts=main
-
-[Accountmain]
-# Identifier for the local repository; e.g. the maildir to be synced via IMAP.
-localrepository=main-local
-# Identifier for the remote repository; i.e. the actual IMAP, usually non-local.
-remoterepository=main-remote
-# Status cache. Default is plain, which eventually becomes huge and slow.
-status_backend=sqlite#letypedecache.(plainousqlite)
-
-[Repositorymain-local]
-# Currently, offlineimap only supports maildir and IMAP for local repositories.
-type=Maildir#letypedestockage(MaildirouIMAP)
-# Where should the mail be placed?
-localfolders=~/Emails/#ledossierdanslequelvous
- # voulez que vos emails apparaissent
-
-[Repositorymain-remote]
-# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.
-type=IMAP
-remotehost=//placeholderhost// # le serveur de votre messagerie
-remoteuser=//placeholderusername// # votre nom d'utilisateur
-remotepass=//placeholderpassword// # votre mot de passe
-cert_fingerprint=//placeholdercert// # le certificat du serveur (IMAPS only)
-
-
-
-
Ça devrait être assez simple a lire, j’ai tout bien commenté :3
-Puis ma config mutt :
-
## Mutt MUA configuration file
-## This file should not be edited without creating a copy
-## File Created and edited by Wxcafe (Clément Hertling)
-## Published under CC-BY-SA
-
-# General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-# type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-# dossier root mailbox/imap
-
-set spoolfile = +INBOX
-# dossier d'inbox
-
-set mbox = +'All Mail'
-# dossier ou archiver les emails
-
-set copy = yes
-# yes pour copier les messages dans les differents dossier, no pour...
-# enfin voila quoi.
-
-set header_cache = /.hcache/
-# dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-# dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-# dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-# liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-# General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-# votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-# l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-# UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-# vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-# il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-# comme ca.
-
-set ssl_verify_host = no
-# mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-# mettez l'adresse de votre serveur ici
-
-# Misc settings
-
-auto_view text/html
-# la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-# format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-# format de l'index (la présentation de l'interface)
-# voir http://www.mutt.org/doc/manual/manual-6.html#index_format
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "$HOME/.mutt/aliases"
-# liste des alias noms/email. a créer et remplir vous même.
-# format : "alias short_name long_email_adress"
-source $alias_file
-
-set beep = no
-# ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-# ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-# parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "$HOME/.mutt/cacert"
-# parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-# vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-# Macros
-
-# le titre dit tout. index veut dire que la macro est active dans les menus,
-# pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-# deux
-# \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-# Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-# Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-# Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-# d supprime le message en cours
-
-bind pager previous-line
-# permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-# permet de descendre d'une ligne avec la touche down, au lieu de changer de
-# message
-
-bind pager j next-line
-bind pager k previous-line
-# raccourcis vim
-
-# PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-# remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-# si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-# PGP signing options
-
-# Palette for use with the Linux console. Black background.
-
-# Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-# défaut noir et blanc.
-# d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-
-
-
-
Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ http://www.mutt.org/doc/manual/
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-BingGoogleYahoo Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!
Je m’appelle Clément Hertling, je suis né en 1995, et je suis étudiant en DUT aParis 12 (UPEC). Je vis actuellement a Villejuif, près de
-Paris, en France.
-
Je suis enthousiaste dès qu’il s’agit de jouer avec des ordinateurs, que ce soit
-avec des systèmes d’exploitations (et particulièrement les UNIX-like : Linux,
-*BSD, OS X, Plan 9, …), mais aussi avec le réseau et son administration
-(principalement couches 2 et 3, routage et commutation).
-Je suis aussi intéressé par le hardware, que ce soit de l’embarqué ou bien des
-serveurs, et dans une moindre mesure par l’électronique. Je fais un peu (et de
-plus en plus) de programmation, principalement en python et en Rust. Je
-m’intéresse beaucoup a la théorie de la programmation, toutefois, et notamment
-de plus en plus a la programmation fonctionnelle et a la théorie des types.
-On peut probablement en conclure que j’aime travailler avec la technologie.
-J’aime aussi écrire a propos de ce que je fais, et de mes pensées sur la
-technologie en général, et c’est ce que je fais (parfois) ici.
-
Vous pouvez aussi me lire sur Twitter. Les liens sont dans la
-barre a droite. Si vous voulez me rencontrer en vrai, vous pouvez m’envoyer un
-email.
-
Wxcafé, that’s me.
-
I’m Clément Hertling, I was born in 1995, and I’m a student in a technical
-formation at Paris 12 (UPEC). I live in Villejuif, near
-Paris, France.
-
I’m pretty enthusiastic when it’s about playing with computers, whether that
-means operating systems (and more specifically UNIX-like OSes : Linux, *BSD,
-OS X, Plan 9, …), or networks and their administration (generally speaking,
-layer 2 and 3, routing and switching).
-I’m also interested in hardware, be it embedded systems or servers, and to a
-smaller extent in electronics. I also do a bit of (but more and more)
-programming, mostly in python and Rust. I’m very interested in CS theory,
-though, and very much so in functionnal programming and type theory.
-You could conclude that I like tech, and working in this domain. I also enjoy
-writing about what I do and about my ideas on tech in general, and that’s what I
-(sometimes) do here.
-
You can also read my thoughts on twitter. The links are in the sidebar. If you
-want to meet me, you can send me an email.
Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
-Marlinspike suivante: More Tricks for Defeating SSL,
-présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
-A Critique of Lavabit,
-ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
-c’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
-a présent dire coucou aux différentes personnes qui écoutent votre connection)
-
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é.
-
Cela fait suite aux évènements évoqués dans le Disclaimer, mais aussi a des
-doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
-qui a pris enfin les 5 minutes nécessaires a la compréhension superficielle
-du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système
-fonctionnel utilisant cette compréhension récemment acquise.
-
Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
-être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très
-simple : il existait auparavant un certificat pour wxcafe.net, un pour
-paste.wxcafe.net, un pour mail.wxcafe.net, etc… Bref, un certificat
-différent pour chaque sous-domaine.
-
Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs
-doivent ajouter chaque certificat a leur navigateur séparément, chaque
-changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
-sécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat
-pour *.wxcafe.net hier, et il sera dorénavant utilisé pour tous les
-sous-domaine de wxcafe.net; et un certificat pour wxcafe.net, qui ne matche
-pas *.wxcafe.net, et qui sera donc utilisé… bah pour wxcafe.net.
-
Il serait préférable de faire des redirections automatiques des adresses http
-vers les adresses https, cependant, étant donné que le certificat est
-self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
-par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
-donc pas mises en place.
-
De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus
-haut, il semble intéressant (et assez important) de faire en sorte que le
-serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
-PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
-de ce même algorithme). Cela permet de faire en sorte que toutes les
-communications avec ce serveur soient future-proof, c’est a dire que, même si
-quelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
-communications passées.
-
Bon, maintenant que les explications basiques sont faites, voyons
-l’implémentation :
-Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
-suivantes:
-
sudo openssl genrsa -out example.key 4096
-# nous utilisons ici une clé de 4096 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, "Common Name" 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'une durée de vie de 3 ans
-
-
-
-
Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
-*.example.com comme common name.
-Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
-de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
-Je vais lister ici les methodes pour quelques services que j’utilise :
Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter
-au manuel approprié.
-
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 SSL and the future
-of Authenticity qui parle de son
-implémentation d’une technologie “remplaçant” le système de CAs qui existe
-actuellement.
Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
-pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
-après avoir reçu une paire de Google glass de la part de Google (de
-façon assez évidente…), a trouvé intéressant d’obtenir un accès root
-sur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la
-part de Google et de certains autres sites sont vite arrivés, disant que
-les lunettes possédaient un bootloader débloqué et que de fait, le root
-était facile a obtenir : il suffisait de débloquer le bootloader,
-d’extraire l’OS, de le rooter hors-fonctionnement, puis de le
-réinstaller, rooté, sur les lunettes.
-
Le fait est que de débloquer le bootloader laisse une trace permanente
-sur les lunettes, et que Saurik n’a pas utilisé cette technique pour
-rooter sa paire. Voyons comment il a fait :
-
Je tiens tout d’abord a préciser que toutes les informations qui vont
-suivre sont extraites de cet article, et plus précisément de la
-partie “How does this exploit work”. Je tente d’apporter ma maigre
-contribution a cette explication.
-
Donc, d’après les témoignages des quelques utilisateurs de Glass dans le
-monde, il semblerait que ces dernières fonctionnent avec un système
-d’exploitation Android, avec une nouvelle interface, mais avec les mêmes
-outils internes: un kernel Linux, des outils userland GNU et une machine
-virtuelle Java Dalvik pour les applications.
-
Saurik a donc cherché un exploit connu pour cette version d’android, et
-l’a appliqué a son problème. L’exploit en question est relativement
-simple. Depuis la version 4.0 d’android, le système permet la sauvegarde
-des données des différentes applications, une a une, via ADB (Android
-Debug Bridge, un protocole USB permettant l’accès a de nombreuses
-fonctions avancées des machines fonctionnant sous android, dont, entre
-autre, un shell, un accès au logs de debugging, etc… Cette
-fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
-il crée un fichier .tgz contenant le dossier de configuration de
-l’application. Lors de la restauration, le système supprime la
-configuration existante, puis la remplace par celle dans l’archive gzip.
-
Le problème de sécurité vient du fait que les applications android
-voient leurs données stockées dans /data/data/identifiant/, et que
-/data/ a pour permissions drwxrwx–x 27 system system, ce qui
-signifie que seul system et les membres du groupe system peuvent lire
-dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
-au démarrage, et notamment un qui permet au système de déterminer s’il
-fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
-une machine virtuelle, il donne les droits root a tout utilisateur se
-connectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le
-fait que /data/ appartienne a system veut dire que le programme de
-restauration doit être setuid pour accéder aux données a l’intérieur qui
-appartiennent a root (soit toutes les applications système d’android,
-dont l’application paramètres, et, dans ce cas précis, l’application de
-log système présente sur les google glass de test. Ainsi, nous avons un
-processus tournant en tant que root, qui va écrire sur une partition qui
-nous intéresse des données que nous possédons.
-
Cependant, un problème reste : le système de restauration d’Android
-vérifie les données avant de restaurer, et ne restaure pas les symlinks,
-ce qui nous empêche d’avoir accès directement a /data/local.prop, le
-fichier qu’on cherche a modifier. Cela dit, il nous reste une
-possiblité. Plaçons un dossier world-writable dans le fichier de backup,
-et nous pourrons écrire dedans pendant quelques secondes, le temps que
-la restauration se termine et que le système remette les permissions en
-place. Ainsi, nous pouvons créer le fichier
-/data/local/com.google.glass.logging/whatev/x, lien vers
-/data/local.prop, et nous avons un toujours un processus tournant en
-tant que root qui est en train d’écrire dans ce dossier.
-
Donc, nous allons lancer deux processus en même temps :
-
-
-
Le premier tentera en boucle de créer le symlink. Il sera consitué de
- la commande suivante, depuis un shell sur les lunettes :
Le deuxième sera le processus de restauration de notre exploit. Celui
- ci, pour une plus grande chance de réussite, devra être suffisamment
- lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
- pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive
- dans x après que le symlink soit effectif. La commande sera, depuis
- l’ordinateur host :
-
adb restore exploit.ab
-
-
-
-
Ces commandes vont fonctionner de concert pour nous donner un accès root :
-- Le processus de restauration va créer le dossier whatev, qui sera
- world-readable. Il va commencer a copier le fichier bigfile.
-- Le processus de symlink va créer le lien
- /data/data/com.google.glass.logging/whatev/x, pointant vers
- /data/local.prop, puis rendre l’âme proprement.
-- Le processus de restauration, ayant enfin fini de copier
- whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
- est lié a /data/local.prop. Comme le processus est setuid root, il ne se
- rendra compte de rien, et écrira tout dans /data/local.prop.
-
-
-
And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui
-nous permet de faire croire a android qu’il tourne dans une machine
-virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
-indique au noyau qu’il tourne dans qemu, un système de VM).
-
Il nous reste a rebooter, depuis l’ordinateur host :
-
adb reboot
-
-
-
-
Puis nous remontons la partitions système en lecture/écriture (r/w),
-depuis le host :
Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
-l’exécuter plus tard :
-
adb shell "chmod 6755 /system/xbin/su"
-
-
-
-
Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
-redémarrer normalement :
-
adb shell "rm /data/local.prop"
-
-
-
-
Enfin, nous redemarrons a nouveau :
-
adb reboot
-
-
-
-
Et voila, une paire de google glass rootée!
-
Il est bon de préciser que cette manipulation n’est possible que parce
-que les lunettes tournent sous une ancienne version d’android, et que ce
-bug a été fixé depuis.
-
Il serait aussi interessant de couvrir les problèmes de vie privée
-qu’engendrent les Google Glass, et ce sera fait dans un autre billet.
Vous avez peut être déjà entendu parler de Docker. 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 Jails,
-mais n’est devenu possible sous linux que récemment grâce aux cgroups,
-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.
-
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 Docker Hub permet aussi de récupérer
-rapidement et facilement un grand nombre d’images déjà configurées.
-
Maintenant que nous avons expliqué rapidement ce qu’était Docker, voyons le
-rapport avec les ebooks et Twitter.
-
Les comptes dits “ebooks” (le nom vient a l’origine de horse_ebooks,
-voir ici pourquoi) sont des bots
-twitter utilisant des Chaines de Markov,
-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.
-
C’est, comme disent certaines personnes, “fun”.
-
Il existe de nombreuses librairies écrites pour créer ce genre de bots,
-cependant dans ce cas nous nous concentrerons sur
-celle-ci, qui est une lib ruby créée
-par @m1sp, qui gère pour nous a la fois l’API
-twitter et la génération des messages.
-
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éé un
-repo github qui contient toutes les
-pièces nécessaires pour mettre cela en place : le bot en lui même, les deux
-Dockerfiles, etc.
-
Le fonctionnement du bot est
-simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de
-l’utilisateur source avec ebooks archive <username> <filename> (c’est du json)
-, puis vous convertissez le json en fichier utilisable par le bot : ebooks
-consume <filename>. Cela fait, démarrer le bot revient a lancer le container :
-docker run -d <container name> Pour plus d’informations, allez voir la
-documentation Docker
-
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 :
Les 5 minutes entre chaque commande sont laissées pour empécher que deux
-commandes ne s’executent en même temps.
-
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 des
-applications “usuelles”
-dedans,
-puisque l’overhead de Docker est minimal, et beaucoup d’autres applications
-existent.
J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)
-Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester bhyve)
-et n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon serveur auto-hebergé ni sur ce serveur ci,
-j’ai commencé a chercher comment le faire sur ce serveur.
-
Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu
-chercher un peu plus loin. Il se trouve que ce post sur les forums
-d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier.
-
J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
-ou l’on m’a dirigé vers mfsbsd, un projet d’installeur
-alternatif, minimaliste et simplifié pour FreeBSD.
-
Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
-console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
-panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
-mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
-choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
-sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
-a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
-mfsbsd contient un script d’installation root-on-zfs, nommé logiquement
-zfsinstall, qui va se charger de tout le travail pour nous.
-
Utilisez donc ce script ainsi :
-
# tout d'abord, wipons le MBR :
-dd < /dev/zero > /dev/da0 count=1
-# maintenant, installons le système
-zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
-
-
-
-
Avec -g da0 votre disque dur principal, -s 2G la quantité de swap désirée,
--p root le nom du zpool, et -c pour activer la compression. D’autres options
-sont disponibles, je vous invite a faire un zfsinstall -h si mon setup ne vous
-convient pas.
-
Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
-système) et éditez /etc/rc.conf :
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!
-
Voila, c’est la fin de ce tutoriel.
-(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
-crédible, disons)
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.
-
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 l’adaptateur GC pour Wii
-U
-a votre console.
-
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.
-
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.
-
Nous allons ici voir deux modèles, un de chacune des boites en question
-: PDP et Hori.
-
Toutes les photos présentes dans cet article sont disponibles en plus grande
-taille en cliquant dessus
-
Commençons par le modèle de chez Hori :
-
-
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.
-
-
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
-
-
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.
-
-
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.
-
-
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…
-
-
-
Passons maintenant a la manette PDP.
-
-
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).
-
-
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.
-
-
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 péremptoire perpendiculaire…
-
-
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.
-
Quelques photos des gâchettes en question :
-
-
-
-
-
-
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 esttotalement identique a celle des manettes Gamecube, cependant, la version
-Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.
Le chiffrement en tant que concept informatique est traditionnellement associé
-au chiffrement de fichiers, c’est a dire au fait de passer d’un fichier en
-clair a un fichier chiffré dit cyphertext. Cependant, il ne se limite pas a
-ça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou
-bien la confidentialité d’un support de stockage, par exemple. Nous allons ici
-voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
-n’a pas pour but de vous apprendre a mettre en place un système basé sur une
-procédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en
-jeu dans l’utilisation du sous-système du noyau Linux dm_crypt et de
-présenter un rapide tutoriel concernant la création d’un support chiffré sur
-lequel garder vos informations confidentielles (par exemple, votre clé GPG)
-
dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
-du noyau Linux, et s’appuie sur LUKS, un standard de chiffrement
-de disques. Comme son nom l’indique, device-mapper est un système qui a pour but
-de mapper des block devices. Pour être plus clair, le kernel considère
-comme “block device” tout fichier spécial (en gros, les fichiers disques dans/dev/, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
-cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
-fonctionnement est simple : a partir d’un “fichier de périphérique” (trad.
-Wikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes.
-Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
-/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
-apparaîtront donc dans /dev/mapper)
-
Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
-fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
-déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
-traduisant sur le système de fichier chiffré, le tout de manière tout a fait
-transparente pour les applications utilisant le disque en question. Cela induit
-bien entendu une baisse de performance relativement significative dans le cas
-d’un chiffrement du système de fichier root, mais quasiment insignifiante dans
-le cas de chiffrement de partitions de données.
-
D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
-si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
-boot doit s’appuyer sur une image initrd (l’initrd est un système de
-fichier minimal qui sert uniquement a initialiser le système. Les kernels de
-base de la plupart des distributions GNU/Linux en utilisent un dans tous les
-cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
-n’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
-en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
-charge l’initrd en RAM, celui-ci a son tour lance un script permettant de
-charger les modules nécessaires a la suite du boot (que ce soit pour un boot
-sans disque root local, ou bien comme ici avec un système chiffré), puis le
-système de fichier “cible” est remonté sur la racine, et l’initrd est démonté
-est la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend
-depuis le système de fichier maintenant monté sur la racine.
-
La méthode la plus évidente pour contourner le chiffrement du disque est alors
-de remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par
-un autre modifié, copiant par exemple la phrase de passe permettant de
-déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
-contre ce genre d’attaques : l’une des plus simple est de faire un checksum du
-fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du vrai boot
-que l’initrd présente toujours le même checksum. Cela dit, cette méthode a
-l’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès
-a un fichier initrd reconnu comme sûr.
-Une autre approche consisterait a placer le système de fichier /boot sur un
-périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
-carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
-protégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un
-attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
-confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
-l’initrd et du noyau beaucoup plus difficile qu’elle ne le serait sans.
-
Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
-programme dédié, cryptsetup. Ce dernier était en charge de cryptoloop,
-l’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
-maintenant responsable de l’utilisation userspace de dm-crypt, qui pour sa
-part est entièrement kernel-space. Cryptsetup permet ainsi le chiffrement, la
-manipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier
-LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
-utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
-obligatoirement être capables de le faire en tant que root.
-
Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :
-Tout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
-dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
-d’utiliser /dev/urandom comme source, pour éviter la détection du système de
-fichier chiffré sur le disque.
-Ici, par exemple, nous allons faire :
Maintenant que notre image est créée, nous pouvons la chiffrer :
-
sudo cryptsetup luksFormat image.img
-
-
-
-
cryptsetup va alors nous demander si nous sommes absolument surs de vouloir
-formater ce disque (nous allons donc valider en tapant YES), puis une
-passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
-puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
-donc a vos secrets.
-Une fois cela fait, nous allons mapper cette image :
-
sudo cryptsetup luksOpen image.img crypto
-
-
-
-
cryptsetup nous redemande la passphrase, charge pendant quelques secondes,
-puis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous
-voyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En
-effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
-systèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque
-qu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
-virtuel qui correspond a notre image. Il se comporte comme toute partition, et
-peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
-Il se comporte en effet comme une partition, et non comme un véritable disque.)
-Bon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de
-le faire, pour pouvoir l’utiliser.
-
sudo mkfs.ext4 /dev/mapper/crypto
-
-
-
-
Maintenant que notre disque est formaté, il peut être monté :
-
sudo mount /dev/mapper/crypto /mnt
-
-
-
-
Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
-voulez vérifier, un mount | grep crypto devrait vous donner le résultat
-suivant :
-
/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
-
-
-
-
Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
-sont (en fonction de votre passphrase) en sécurité.
-
Pour résumer :
-
-
-
Pour monter vos partitions :
-
sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>
-sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
-
Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de
-créer et de monter/démonter vos images/disques chiffré-e-s en une seule
-commande. Ils se trouvent sur github.
-
Par ailleurs, si vous comptez transferer votre image disque sur un véritable
-disque (ou clé usb, ou autre), il est préférable de créer une partition de
-taille appropriée et de faire un dd if=votre_image of=/dev/votre_partition
-pour ce faire.
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 http://173.194.45.66, ou a
-http://199.16.156.70. Voire même a
-http://5.39.76.46).
-
Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
-en termes d’expérience utilisateur n’étaient pas forcément aussi importantes que
-de nos jours. La configuration des serveurs DNS peut ainsi être assez
-contre intuitive.
-Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
-enregistrements est important.
-
Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même
-façon que le système de fichiers : en arborescence. Cependant, là ou la racine
-du FS est /, celle de DNS est ., et là ou il convient d’écrire, par exemple,/usr/ et ou la progression se fait de gauche a droite pour le FS, pour DNS le
-. n’est pas obligatoire et la progression se fait de droite a gauche. Par
-exemple, le tld(top level domain, domaine de haut niveau) com, et le domaine
-google.com appartient a com, on écrit donc google.com sans écrire le point
-a la fin de façon courante.
-
Le reverse DNS est une variante du DNS “classique” permettant de résoudre les
-adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
-Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
-quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
-sont donc constituées de l’adresse IP, dans le sens contraire a l’ordre
-habituel, et du faux domaine .in-addr.arpa
-Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire dig PTR
-76.46.39.5.in-addr.arpa. La réponse sera, évidemment, wxcafe.net
-
Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,
-quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
-utilisée pour faire des tests DNS est dig. Le DNS fonctionne avec des
-“enregistrements”, records en anglais. Par exemple, un record A indique une
-adresse IP, un record NS indique un Serveur de nom, etc. dig se base sur ces
-records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
-de domaine que vous donnez en argument, mais en précisant un autre type de
-record, vous pouvez obtenir n’importe quelle information : par exemple, dig NS
-wxcafe.net devrait vous renvoyer
Comme vous pouvez le voir, les serveurs DNS principaux pour
-wxcafe.net sont ns.wxcafe.net et ns.home.wxcafe.net,
-qui sont respectivement des alias pour wxcafe.net et home.wxcafe.net. Ainsi,
-chacun fait autorité pour lui même, et le problème évident est que le résolveur
-ne peut résoudre la query si il est renvoyé encore et encore vers le même
-serveur. Il convient donc de définir dans le même fichier de configuration
-l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
-loop, se rendra compte qu’il est en train de faire une boucle infinie et
-demandera l’adresse au serveur auquel il est connecté. La première indication de
-direction se fait grâce au serveur du TLD.
-
La configuration de bind est assez simple dans le principe, le plus complexe
-étant en fait d’écrire les fichiers de zone.
-La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
-existe 4 fichiers de configuration principaux : named.conf,
-named.conf.default-zones, named.conf.local et named.conf.options.
-named.conf contient les options par défaut de bind, named.conf.default-zones
-les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
-named.conf.local contient les déclarations de vos zones, et
-named.conf.options contient les options que vous rajoutez pour changer le
-comportement de bind.
-
Pour commencer, il convient de préciser que nous allons parler ici du cas dans
-lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,
-deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
-(notamment mon accès chez moi).
-
Examinons tout d’abord les fichiers de configuration de named.named.conf.local contient les définitions des zones forward et reverse.
-Sur wxcafe.net, les zones wxcafe.net et 76.46.39.5.in-addr.arpa sont gérées
-en master, et les zones home.wxcafe.net et 103.177.67.80.in-addr.arpa sont
-gérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce
-serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
-principale étant que l’un héberge en slave les masters de l’autre.
-Le fichier named.conf.local sur wxcafe.net contient donc
Cela devrait être relativement clair. Globalement, les zones master ont un
-fichier dans /etc/bind/master/, et les slaves un fichier dans
-/etc/bind/slave/, 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.
-
Voyons maintenant le fichier de zone concernant wxcafe.net, soit
-/etc/bind/master/wxcafe.net :
Alors. Expliquons ligne par ligne.
-Tout d’abord, le TTL (time to live) est un paramètre définissant le temps
-pendant lequel les serveurs récursif (qui font un cache des données) doivent
-cacher ce fichier de zone.
-Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
-wxcafe.net.
-Maintenant, nous arrivons a un record important : SOA (Start of Authority).
-Ce record prend de nombreux arguments, dans l’ordre :
- - Le nameserver autoritaire pour le nom de domaine en question,
- - L’adresse email du responsable de cette zone, avec le premier point
- remplacé par un @,
-
puis entre parenthèses :
- - Le numéro de série (“version” du fichier de zone, ici au format
- YYYYMMDDNN)
- - La période de refresh, période entre chaque mise a jour du nameserver
- authoritaire secondaire,
- - La période de retry, le temps entre chaque essai de mise a jour si le
- nameserveur authoritaire primaire est indisponible,
- - La période d’expire, le temps qu’attendra le serveur autoritaire
- secondaire avant de supprimer les informations de son cache si le primaire
- reste indisponible, et enfin
- - La période de TTL négatif, le temps qu’attendra le serveur secondaire
- avant de ne plus offrir les informations de cette zone si le serveur
- primaire est injoignable.
-
Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus
-important a lire (pour les humains en tout cas). Continuons :
-
NS (nameserver) permet de désigner les différents nameservers faisant autorité
-pour ce domaine.
-
MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
-SPF est un record d’authentification pour les emails.
-Les records A désignent l’association entre un nom de domaine et une adresse
-IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
-n’est pas encore en IPv6.
-
Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
-mettre en place des domaines exactement semblables a d’autre (ce qui permet par
-exemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)
-
Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
-de changer la valeur du @ et des noms de domaine non complets (qui ne se
-terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
-l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
-l’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
-cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
-trouvant sous home.wxcafe.net.
-
Les autres fichiers de zone sont sensiblement similaires, avec les quelques
-différences n’étant en fin de compte que des différences de valeurs (dues au
-fait que, eh bah, c’est pas les mêmes domaines…).
-
Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est
-pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
-wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
-aller vous renseigner directement a la source : le RFC
-1034 et le
-RFC 1035. Dans un autre style (bien plus
-avancé) le blog de Stéphane Bortzmeyer est interessant
-aussi.
Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
-s’agit de posséder son propre serveur, et donc, par extension, ses
-données.
-
Bien entendu, il n’est pas nécessaire pour cela de posséder
-physiquement son propre serveur (encore que ce soit possible, mais ce
-n’est pas le sujet abordé ici.)
-Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
-serveur utilisable, du moment ou vous arrivez sur le système fraichement
-installé, au moment ou vous possédez un serveur avec tous les paquets
-nécessaires a l’utilisation que l’on veut en faire ici d’installés.
-Cette partie va consister a paramétrer le système (ici un debian
-squeeze. Il est bien sur possible de faire la même chose avec a peu près
-toutes les distributions Linux disponibles, tout comme avec les BSD et
-tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
-squeeze, parce que c’est une distribution simple a utiliser comme
-serveur, stable, et facile a configurer (puisqu’une bonne partie de la
-configuration est déjà faite et incluse dans le paquet), donc adaptée au
-but de cet article, a savoir rendre l’installation simple et
-compréhensible).
-
La première chose a faire est bien entendu d’obtenir le serveur en lui
-même. Cette partie de la chose ne sera pas traitée dans cet article. Il
-existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
-louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
-participant a un système d’hébergement collaboratif (je vous laisse
-chercher), en achetant un serveur et en le faisant fonctionner de chez
-vous, en utilisant un vieux PC… Bref, les possibilités sont multiples.
-Dès lors que vous avez accès a un système debian serveur, peu importe sur
-quel matériel il fonctionne, et a priori peu importe aussi la manière
-dont vous y accédez, le résultat est le même (et la procédure aussi…).
-Dans cet article, nous parlerons de la configuration de base, du moment
-ou vous avez le serveur vierge dans les mains au moment ou vous
-installez le serveur http.
-
Dans cet article, lorsque est précisée le type d’IP a utiliser, il
-convient de mettre ce type précisément. Quand le type n’est pas
-précisée, libre a vous de choisir ipv4 ou ipv6.
-
Bref. Commençons au point ou vous avez un accès root a votre serveur,
-n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
-rien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez
-donc par faire un passwd, pour mettre au plus vite un mot de passe
-solide sur le compte root. Continuons en allant vite mettre en place le
-nom de domaine. Pour cela, votre registrar doit vous fournir une
-interface vous permettant d’éditer l’entrée DNS pour votre nom de
-domaine.
-
Cette entrée doit donc pour l’instant ressembler a ca :
-
<votre nom de domaine> NS 1
- IN MX 1
- IN A <IPv4 de votre serveur>
- IN AAAA <IPv6 de votre serveur>
-
-
-
-
Cela vous permet de rediriger tout le trafic se référant a votre nom de
-domaine vers votre ip (le fonctionnement exact du DNS est assez
-compliqué a expliquer, donc on va dire que c’est de la magie pour
-l’instant, ca sera peut être le sujet d’un autre article), et d’indiquer
-que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
-votre serveur, ce qui est un bon début. Faisons un petit point sécurité
-ici : pour accéder a votre serveur, il vous suffit actuellement de taper
-le mot de passe root.
-
root est un utilisateur assez répandu, et il est assez simple de
-bruteforcer le mot de passe. (Relativement assez simple, en fonction
-du nombre de caractères, ça prend plus ou moins de temps, et si vous
-avez suffisamment de caractères, ça peut prendre un temps assez
-conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
-arrêter d’utiliser root et nous allons commencer a utiliser des couples
-clés publiques/privées pour nous connecter au serveur.
-Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
-grâce auquel nous administrerons le serveur a l’avenir; puis configurer
-OpenSSH pour que celui ci n’accepte que les connections par clés et plus
-celles sur root.
-
Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
-fait avec adduser, qui est interactif (vous ne devriez pas avoir de
-problème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,
-et vous pose toutes les questions utiles pour vous aider.) sinon, vous
-devrez utiliser useradd, qui est (en plus d’être très chiant a
-distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
-un simple script permettant l’utilisation d’useradd plus facilement.)
-
Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
-juste adduser <username>, soit utiliser le mode non-interactif
-en faisant un adduser --group <username>
-
Avec useradd, vous devrez utiliser la commande suivante : useradd -m
--N -g <username>. Cette commande ajoutera un utilisateur, créera
-son dossier principal dans /home/, et l’ajoutera au groupe du même nom
-que lui (ce qui est en général nécessaire pour des questions de vie
-privée).
-
Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
-amené a administrer: usermod <username> -a -G www-data postfix
-users staff sudo wheel, puis de changer son mot de passe
-passwd. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
-sudo: echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers
-Enfin, changeons d’utilisateur : su. A ce point, vous avec un
-utilisateur complètement fonctionnel et utilisable pour toutes les
-taches d’administration. Si vous devez encore utiliser root, c’est que
-quelque chose ne va pas.
-
Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous
-allons maintenant passer a la phase 2 du plan : désactiver le login ssh
-root et le login ssh par mot de passe.
-Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un
-système assez semblable a celui vous permettant de chiffrer vos mail :
-vous avec une clé publique et une clé privée sur le client, et la clé
-publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
-vérifie que vous possédez la clé privée qui correspond a la clé publique
-stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
-également possible d’utiliser plusieurs clés publique pour chaque
-utilisateur.
-
Bref, maintenant que nous avons la théorie, passons a la pratique : tout
-d’abord, il nous faut générer un couple de clés publique/privée sur le
-client. Openssh fait ça via la commande ssh-keygen -t rsa (le -t
-rsa précise a ssh que nous voulons un chiffrement rsa, qui est
-suffisamment solide pour cette utilisation.) Entrez les informations que
-ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
-dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.
-known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
-une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
-intéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé
-privée, sauvegardez la sur une clé USB ou notez la sur un bout de
-papier, si vous la perdez, vous ne pourrez plus vous connecter au
-serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
-lui, contient votre clé publique. Copiez la sur le serveur, avec unscp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/ , ou
-en la copiant a la main, si ça vous amuse.
-
Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
-sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
-Il est donc nécessaire de créer le dossier .ssh (mkdir .ssh), puis
-de déplacer ce fichier a la bonne place (mv ~/id_rsa.pub ~/.ssh/authorized_keys).
-Testez si ça fonctionne : ouvez un autre terminal, et
-connectez vous a votre serveur (ssh <username>@<votre nom de
-domaine>), et il ne devrait pas vous demander de mot de passe.Si
-il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
-donc vérifiez que vous avez suivi correctement les instruction
-ci-dessus.
-
Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
-configurer:
(faisons large, on aura besoin de l’excédent plus tard…), puis activons les
-mods apache en faisant a2enmod suexec rewrite ssl actions include
-dav_fs dav auth_digest, et faisons en sorte que ces activations
-soient prises en compte par apache via un sudo service apache2
-restart
-
Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
-comment fonctionner sur notre nom de domaine et ou trouver les fichiers
-a envoyer.
-
Pour cela, nous allons faire un simple ln -s /etc/apache2/sites-{available,enabled}/default, car apache est assez
-sympa pour nous filer un fichier de configuration par défaut. Il nous
-faut encore l’éditer, en changeant l’adresse mail au début du document
-par la votre, et en changeant AllowOverride none en AllowOverride All,
-et enfin redémarrer apache pour qu’il prenne en compte les
-modifications, par un sudo service apache2 restart
-
Et maintenant, il vous reste a apprendre le html, parce que ca y est,
-votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
-verra l’installation du serveur mail (c’est suffisamment complexe pour
-prendre un article seul…)
Les clients mails ont une particularité en commun : ils sont tous
-très mauvais. Cela pour nombre de raisons, mais la principale reste
-que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
-utilisation a la UNIX
-Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est
-le relativement bien connu Outlook Express 2003 Mutt!
-Mutt est un client mail en ligne de commande, qui, comme le dit sa page
-d’accueil, “just sucks less”. Dans les faits, mutt est assez
-chiant a configurer mais particulièrement pratique a utiliser après.
-
La configuration de mutt se fait dans le fichier .muttrc ou dans
-/etc/Muttrc, et il est courant d’utiliser offlineimap en
-conjonction avec celui ci, de façon a accéder aux mails même sans accès
-internet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne
-crée pas de cache, ce qui empêche la consultation des emails sans
-connexion internet.) La configuration d’offlineimap se fait dans~/.offlineimaprc ou dans rien d’autre en fait, c’est une config
-par user. Offlineimap est un petit logiciel en python qui synchronise un
-dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
-justement mutt accepte les dossiers au format Maildir. (De plus, cela va
-tout a fait dans le sens de la libération des données en cela que vous
-possédez vos mails en local.)
-Bref, passons aux choses serieuses : le code. Déjà, installez
-offlineimap et ce script fait par moi, qui vous permet d’installer
-mutt avec le patch sidebar, qui crée un listing des dossiers sur la
-partie gauche.
-Ensuite, voyons pour la partie configuration :
-Ma configuration d’offlineimap :
-
## Config file for offlineimap
-## Originally located in ~/.offlineimaprc
-## This should not be edited without creating a copy before
-## Created by Wxcafe (Clément Hertling)
-## Published under CC-BY-SA
-
-[general]
-# List of accounts to be synced, separated by a comma.
-accounts=main
-
-[Accountmain]
-# Identifier for the local repository; e.g. the maildir to be synced via IMAP.
-localrepository=main-local
-# Identifier for the remote repository; i.e. the actual IMAP, usually non-local.
-remoterepository=main-remote
-# Status cache. Default is plain, which eventually becomes huge and slow.
-status_backend=sqlite#letypedecache.(plainousqlite)
-
-[Repositorymain-local]
-# Currently, offlineimap only supports maildir and IMAP for local repositories.
-type=Maildir#letypedestockage(MaildirouIMAP)
-# Where should the mail be placed?
-localfolders=~/Emails/#ledossierdanslequelvous
- # voulez que vos emails apparaissent
-
-[Repositorymain-remote]
-# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.
-type=IMAP
-remotehost=//placeholderhost// # le serveur de votre messagerie
-remoteuser=//placeholderusername// # votre nom d'utilisateur
-remotepass=//placeholderpassword// # votre mot de passe
-cert_fingerprint=//placeholdercert// # le certificat du serveur (IMAPS only)
-
-
-
-
Ça devrait être assez simple a lire, j’ai tout bien commenté :3
-Puis ma config mutt :
-
## Mutt MUA configuration file
-## This file should not be edited without creating a copy
-## File Created and edited by Wxcafe (Clément Hertling)
-## Published under CC-BY-SA
-
-# General config for reading (fetched via offlineimap)
-
-set mbox_type = Maildir
-# type de boite mail (voir dans offlineimap, mailbox par defaut)
-
-set folder = ~/Email/
-# dossier root mailbox/imap
-
-set spoolfile = +INBOX
-# dossier d'inbox
-
-set mbox = +'All Mail'
-# dossier ou archiver les emails
-
-set copy = yes
-# yes pour copier les messages dans les differents dossier, no pour...
-# enfin voila quoi.
-
-set header_cache = /.hcache/
-# dossier ou sont stockés les headers (pour le cache)
-
-set record = +Sent
-# dossier dans lequel sont stockés les messages envoyés
-
-set postponed = +Drafts
-# dossier dans lequel sont stockés les brouillons
-
-mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
-# liste des dossiers qui vont apparaitre dans la colonne de gauche
-
-# General config for sending (using Mutt's native support)
-
-set smtp_pass = 'password_placeholder'
-# votre mot de passe
-
-set smtp_url = "smtp://username@whatev.org:465/"
-# l'url ou envoyer les emails
-
-set send_charset = "utf-8"
-# UTF8, NE PAS CHANGER
-
-set signature = ".sign"
-# vous pouvez mettre votre signature dans .sign
-
-set sig_on_top = yes
-# il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
-# comme ca.
-
-set ssl_verify_host = no
-# mettez yes ici si votre serveur a un certificat configuré correctement
-
-set hostname = "wxcafe.net"
-# mettez l'adresse de votre serveur ici
-
-# Misc settings
-
-auto_view text/html
-# la façon de voir les emails par défaut.
-
-set date_format = "%y-%m-%d %T"
-# format de date d'envoi/de reception.
-
-set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
-# format de l'index (la présentation de l'interface)
-# voir http://www.mutt.org/doc/manual/manual-6.html#index_format
-
-set sort_alias = alias
-set reverse_alias = yes
-set alias_file = "$HOME/.mutt/aliases"
-# liste des alias noms/email. a créer et remplir vous même.
-# format : "alias short_name long_email_adress"
-source $alias_file
-
-set beep = no
-# ne pas biper. CE SON ME TUE T.T
-
-set tilde = yes
-set sleep_time = 0
-# ?
-
-set sidebar_visible = yes
-set sidebar_width = 15
-# parametres de la barre coté gauche
-
-set realname = "Clément Hertling (Wxcafé)"
-set from = "wxcafe@wxcafe.net"
-set use_from = yes
-set certificate_file = "$HOME/.mutt/cacert"
-# parametres d'envoi. mettez vos propres infos a la place des miennes...
-
-set edit_headers = yes
-# vous permet de vois les headers des mails. j'aime, donc je laisse.
-
-# Macros
-
-# le titre dit tout. index veut dire que la macro est active dans les menus,
-# pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les
-# deux
-# \C represente la touche Control
-
-bind index,pager \Cp sidebar-prev
-# Control+p -> remonter d'un dossier dans la sidebar
-
-bind index,pager \Cn sidebar-next
-# Control+n -> descendre d'un dossier dans la sidebar
-
-bind index,pager \Co sidebar-open
-# Control+o -> ouvrir le dossier selectionné dans la sidebar
-
-macro index,pager d "=Trash" "Trash"
-# d supprime le message en cours
-
-bind pager previous-line
-# permet de monter d'une ligne avec la touche up, au lieu de changer de message.
-
-bind pager next-line
-# permet de descendre d'une ligne avec la touche down, au lieu de changer de
-# message
-
-bind pager j next-line
-bind pager k previous-line
-# raccourcis vim
-
-# PGP signing commands
-
-set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
-set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
-set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
-set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
-set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"
-set pgp_import_command="gpg --no-verbose --import -v %f"
-set pgp_export_command="gpg --no-verbose --export --armor %r"
-set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
-set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
-set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
-set pgp_autosign=yes
-set pgp_sign_as=0x********
-# remplacez 0x******** par votre identifiant PGP!!!!!
-
-set pgp_replyencrypt=no
-set pgp_timeout=7200
-set pgp_good_sign="^gpg: Good signature from"
-
-# si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
-# PGP signing options
-
-# Palette for use with the Linux console. Black background.
-
-# Schéma de couleur Rouge et Noir. Commentez si vous voulez le
-# défaut noir et blanc.
-# d'autres schémas sont trouvables sur google et autre.
-
-color hdrdefault red black
-color quoted brightblack black
-color signature brightblack black
-color attachment red black
-color message brightwhite black
-color error brightred black
-color indicator black red
-color status white black
-color tree white black
-color normal white black
-color markers red black
-color search white black
-color tilde brightmagenta black
-color index red black ~F
-color index red black "~N|~O"
-
-
-
-
Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt
-@ http://www.mutt.org/doc/manual/
-J’espère que cette configuration “toute faite” vous aidera a commencer
-a utiliser mutt. Il est tout de fois important de se souvenir
-qu’utiliser une configuration toute faire n’aide pas a comprendre un
-programme ou un système, et que cette façon de faire devrait être
-réservée a l’introduction ou a des situations ou il est absolument
-nécessaire d’avoir rapidement une configuration fonctionnelle (c’est a
-dire, dans le cas d’un client email, euh… jamais?). Je vous invite
-donc a relire les annotations dont sont parsemés les fichiers de
-configuration en question, et surtout a lire le manuel, a chercher sur
-BingGoogleYahoo Seeks, et globalement
-a tenter de comprendre les configurations en question et a les améliorer!
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.
-
Ayant un Raspberry Pi 1 qui trainait, j’ai
-décidé d’installer OpenELEC 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.
-
J’ai donc acquis un NUC D34010WYK
-(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un
-adaptateur HDMI-CEC pour celui-ci, et un
-SSD mSATA, en me disant que je
-pourrais sans trop de problème faire tourner Kodi 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).
-
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]assez médiocre. J’ai donc
-cherché plusieurs heures, avant de trouver [DE]ce
-post
-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.
-
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 :
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.
-
Dual-USB
- ┌─┬─┬─┬─┬─┐
- │b│B│v│n│·│
- ├─┼─┼─┼─┼─┤
- │·│·│·│·│ │
- └─┴─┴─┴─┴─┘
-
- b ➔ fiche bleue
- B ➔ fiche Blanche
- v ➔ fiche verte
- n ➔ fiche noire
- · ➔ pin inutilisé
- ➔ espace vide (sans pin)
-
-
-
-
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 désactivé. Ceci permettant a la connection HDMI-CEC de
-démarrer et le NUC.
-
Ne reste plus ensuite qu’a installer un système digne de ce nom dessus!
J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
-comment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de
-changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
-aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
-gestion de mon système de mails.
-
Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
-effectuer depuis un certain temps. OpenSMTPd est un
-projet originaire d’OpenBSD qui a pour but de fournir un
-serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
-qu’a le projet OpenBSD, globalement).
-
Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA
-(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
-serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
-destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
-mail au destinataire.
-
Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
-ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
-sont remplies par d’autres services encore (IMAP/POP pour la récupération depuis
-le serveur, des yeux pour la lecture).
-
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 Dovecot qui fait office de serveur IMAP et
-amavis/spamassassin
-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
-
╭────────────────╮ ╭──────────╮
- │╭──────────────>│────> to filter ───>│─╮ │
- mail in ││ │ │ │ amavis │
-───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
- │ │ │ ╰──────────╯
- mail out │ │ │ ╭──────────╮
-<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
- │ │ │ dovecot │ mailbox
- ╰────────────────╯ ╰──────────╯
-
-
-
-
Normalement, ceci devrait être a peu près clair.
-Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
-aussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout aamavis, qui vérifie a la fois les spams et les malwares pour les mails
-venants de l’exterieur, et qui signe avec DKIM pour les mails venants de
-nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
-qui a ce moment-ci trie en fonction de la destination : les mails gérés
-par le domaine vont via dovecot dans les boites mail des destinataires
-locaux, les mails exterieurs vont directement vers le MTA du serveur
-distant.
-
Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon
-dont les différents services vont communiquer.
-
Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
-10024 et répondre sur le port 10025 quand il s’agit de filtrer et
-écouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de
-signer, nous allons profiter de cette configuration et donc lui parler en SMTP
-sur ces ports.
-
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,
-/var/run/dovecot/lmtp).
-
Ainsi, pour reprendre le schéma présenté plus haut :
Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
-ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
-d’autres plateformes, la configuration devrait être sensiblement la même
-
(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
-Si vous ne savez pas comment en créer, vous pouvez aller voir ce
-post)
-
Tout d’abord, commençons par installer les programmes nécessaires :
Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :
-
/etc/smtpd.conf
-
# This is the smtpd server system-wide configuration file.
-# See smtpd.conf(5) for more information.
-
-## Certs
-pki exem.pl certificate "/etc/certs/exem.pl.crt"
-pki exem.pl key "/etc/certs/exem.pl.key"
-
-## Ports to listen on, and how to listen on them
-listen on eth0 port 25 tls pki exem.pl hostname exem.pl auth-optional
-listen on eth0 port 465 tls-require pki exem.pl hostname exem.pl auth mask-source
-listen on eth0 port 587 tls-require pki exem.pl hostname exem.pl auth mask-source
-
-## Aliases
-table aliases file:/etc/aliases
-
-# coming from amavisd, checked for spam/malware
-listen on lo port 10025 tag Filtered
-# coming from amavisd, signed with DKIM
-listen on lo port 10027 tag Signed
-
-## Receiving
-# if the (incoming) mail has been through amavisd, then we can deliver it
-accept tagged Filtered for any alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp"
-# we directly tranfer incoming mail to amavisd to be checked
-accept from any for domain "exem.pl" relay via "smtp://localhost:10024"
-# we have to put these lines in this order to avoid infinite loops
-
-## Sending
-# if the (outgoint) mail has been through amavisd, then we can deliver it
-accept tagged Signed for any relay
-# we tranfer the outgoing mail to amavisd to be signed
-accept for any relay via "smtp://localhost:10026"
-# same, we have to put these lines in this order or infinite loops...
-
-
-
-
Expliquons un peu ce fichier de configuration :
-
-
Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
- d’emplacement des certificats SSL.
-
Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
- port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire
-
Les alias sont définis juste après
-
Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
- 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
- comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
- taggue les mails sortants comme “Signed”
-
Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
- traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
- peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore
- été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
- donc). Il est important de mettre les déclarations dans ce sens, car la
- première règle qui matche l’état du paquet est appliquée. Ici, la deuxième
- ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
- inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
- amavis
-
Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
- pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
- on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
- DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
- problème de l’ordre des lignes se pose encore, pour la même raison qu’au
- dessus.
-
-
Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit
-écouter en LMTP via la socket /var/run/dovecot/lmtp et transmettre les
-emails a la boite email de l’utilisateur. Il serait aussi interessant
-qu’il nous permette de récuperer les mails. Pour cette configuration, on ne
-mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
-POP3[s], différents guides sont trouvables facilement sur internet.
Ici aussi, voyons comment ce fichier est structuré :
-
-
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.
-
Nous configurons ensuite la gestion de l’authentification des utilisateurs.
- Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
- mots de passe avec PAM (ou BSDAuth)
-
Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
- l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).
-
Nous configurons le SSL
-
Le section suivante contient la configuration des services. Nous avons en
- premier lieu le service IMAP, dont la configuration sert uniquement a
- désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
- IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
- La configuration de lmtp sert a attribuer des permissions plus correctes au
- fifo qu’il utilise
-
Nous configurons maintenant les protocoles, pour faire fonctionner Sieve
-
enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
- quel dossier utiliser pour sa configuration.
-
-
Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
-a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
-doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
-filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
-SMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun
-risque a utiliser des protocoles non chiffrés.
-Pour OpenBSD, pensez a copier la configuration par défaut depuis/usr/local/share/examples/amavisd-new/amavisd.conf et ajoutez les
-modifications nécessaires a la fin du fichier.
A nouveau, expliquons ce fichier :
-- le premier paragraphe définit que nous voulons qu’amavis signe les emails
- sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se
- trouve la clé privée servant a signer les emails.
-- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
- Je vous invite a consulter la RFC 4871
-- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
- paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
- ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel
- ils viennent.
-- nous savons que les emails venants du port 10026 sont sortants, nous les
- traitons donc comme tel
-- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
- sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre
- serveur. Nous autorisons les disclaimers (voire encore une fois la RFC
- 4871. Nous déclarons l’adresse a
- prévenir en cas de spam/virus venants de notre système, et que nous voulons
- être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
- puis qu’il est nécessaire de convertir les emails au format 7 bits avant de
- les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
- les notifications de succès d’envoi. Et voila!
-
Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature
-des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
-fait inclus par défaut dans amavis.
-
Il nous reste cependant quelques opérations a faire, encore.
-Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
-différentes méthodes, j’ai personnellement utilisé opendkim (un
-tutorial)
-mais de nombreuses autre méthodes existent.
-Il nous reste encore a configurer spamassassin :
-
#rewrite_header Subject *****SPAM*****
-# report_safe 1
-required_score2.0
-# use_bayes 1
-# bayes_auto_learn 1
-# bayes_ignore_header X-Bogosity
-# bayes_ignore_header X-Spam-Flag
-# bayes_ignore_header X-Spam-Status
-ifpluginMail::SpamAssassin::Plugin::Shortcircuit
-# shortcircuit USER_IN_WHITELIST on
-# shortcircuit USER_IN_DEF_WHITELIST on
-# shortcircuit USER_IN_ALL_SPAM_TO on
-# shortcircuit SUBJECT_IN_WHITELIST on
-# shortcircuit USER_IN_BLACKLIST on
-# shortcircuit USER_IN_BLACKLIST_TO on
-# shortcircuit SUBJECT_IN_BLACKLIST on
-shortcircuitALL_TRUSTEDoff
-# shortcircuit BAYES_99 spam
-# shortcircuit BAYES_00 ham
-
-endif# Mail::SpamAssassin::Plugin::Shortcircuit
-
-
-
-
Comme vous pouvez le voir, les modifications se résument globalement a baisser
-le required_score pour ma part.
-
Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
-spamassassin, et tout devrait fonctionner parfaitement
Plan 9 from Outer Space est un film de série Z, produit en 1959 par Edward D.
-Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
-d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
-d’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.
-
Plan 9 from Bell Labs est un OS venant de Bell Labs (comme son nom l’indique),
-et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
-des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
-introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
-ressources appartenant a d’autres ordinateurs a distance, un support de
-l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
-a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
-défaut, et d’autres améliorations sur les thèmes de base que propose Unix.
-
Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
-d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
-quelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt
-grandissant pour le klaoude et la délocalisation a la fois du processing et des
-données, et bien que Plan9 ait été créé bien avant que le terme “cloud
-computing” n’apparaisse pour la première fois, il semble que ce système ait été
-conçu pour apporter cette délocalisation tant rêvée.
-
En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
-Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
-conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
-d’exploitation ultime en terme de partage de ressources et de données.
-Ainsi, le fait que 9P permette de considérer toutes les ressources d’un système
-distant comme n’étant qu’une poignée de fichiers permet de le monter comme
-n’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
-a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
-gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
-interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
-de machines différentes), permet d’utiliser les ressources d’une machine
-distante comme si elle était présente localement. Le mécanisme d’UnionFS permet
-de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
-même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
-de plusieurs machines a la fois (ce qui permet une délocalisation des données
-bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).
-
Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
-parler d’ordinateur lorsque le concept même du système est d’être composé de
-clusters eux mêmes composés de machines hétérogènes. Le système de fichier
-virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
-différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
-sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
-du réseau local. En montant le /net d’un ordinateur distant sur un ordinateur
-local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
-font en utilisant l’accès de l’ordinateur distant, et les connections entre les
-deux sont chiffrées.
-
Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
-partager leur “puissance” de calcul en userspace, des superordinateurs pour
-lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
-JoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait
-que des navigateurs web a peine améliorés et des services de stockage en ligne
-qui promettent un accès universel a toutes nos données alors qu’ils ne proposent
-que de les garder a disposition par le web, Plan9 promettait une technologie de
-partage des ressources système et de données, une intégration du réseau dans le
-système particulièrement poussée, un environnement graphique supporté par le
-basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
-améliorations sur Unix.
-
Malheureusement, il n’a jamais été adopté de façon véritablement significative,
-et ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de
-machines Unix déjà installées était suffisamment performant et fonctionnel pour
-que des solutions soient développées au dessus du système pour remplir les
-mêmes fonctions que remplit Plan9 via son kernel, tels le nouveau ProcFS de
-Linux, FUSE, etc…
This is subject to debate, and as most of the actors in this field are
-not French-speaker, there is an English version of this text here
-
Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain
-temps, maintenant, et depuis un certain temps je remarque des
-changements malvenus. Bien entendu, au début, je n’avais pas les
-connaissances nécessaires pour comprendre ne serait-ce que ces
-modifications existaient. Et puis certaines sont arrivées avant que je
-n’ai même idée que quelque chose dans mon système d’exploitation avait
-cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
-l’époque, je n’avais aucune idée de la façon dont les disques étaient
-montés sur mon système. Le premier système non-Windows que j’ai utilisé
-fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
-cherche a démonter le système pour comprendre comment il fonctionnait en
-profondeur. Cependant, avec le temps, les connaissances s’accumulant et
-mon niveau de compréhension du système s’améliorant, j’ai commencé a
-remarquer que certain bouts de l’OS ne collaient pas exactement avec les
-autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
-cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
-compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
-s’adaptant pas au reste du système se faisaient de plus en plus visible.
-Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
-choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
-système me convenait bien. Si je n’installais pas Gnome, ce que je ne
-comptais pas faire, il ne me forçait pas a installer un *kit
-quelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins
-envahissant de ceux la.
-
Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
-ni systemd, ni udev, ni même les kit, et surtout pas Archlinux. Les
-premiers sont probablement très efficaces dans leur domaine, et le
-second n’a pas vraiment eu le choix, rapport a la philosophie de la
-distribution d’avoir au plus vite les dernières versions de tout.
-Cependant, systemd, tout comme udev et les kits (bien que ce ne soient
-pas les seuls a faire ça…) ont un problème très précis, qui n’importe
-pas a tout le monde, mais qui est très gênant pour ceux a qui il
-importe, et ce problème est que ces systèmes ne respectent absolument
-pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
-ces 9 principes :
-
-
Ce qui est petit est beau
-
Faites en sorte que chaque programme fasse une chose, bien.
-
Faites un prototype aussi vite que possible
-
Choisissez la portabilité plutôt que l’efficacité
-
Stockez les données dans des fichiers textes.
-
Utilisez ce qui existe déjà a votre avantage. [1]
-
Utilisez des scripts shells pour faciliter la portabilité et la
- réutilisation.
-
Évitez les UI qui “capturent” l’utilisateur.
-
Faites de chaque programme un filtre.
-
-
Alors bien entendu, un système d’exploitation est fait pour évoluer, et
-on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
-exactement la façon dont l’informatique fonctionne. Effectivement, les
-standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
-- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
-pas d’UNIX que nous parlons ici. C’est de la philosophie UNIX. Et
-celle-ci n’a pas fait son temps, elle a fait ses preuves. La
-philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
-de tests derrière elle, et fonctionne aussi bien qu’au premier jour.
-La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
-et de simplicité pour les administrateurs systèmes, pour les
-développeurs, bref pour tous ceux qui font de l’informatiquesérieusement (je ne dis pas que les autres métiers de l’informatique
-ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
-sont ceux qui sont les plus proches du système).
-
Tous OS se doit d’avoir un système standardisé pour faire communiquer
-les programmes entre eux. UNIX a un système de pipes, des sortes de
-fichiers spéciaux permettant d’échanger des informations. C’est
-efficace, ça respecte le “tout est fichier”, c’est standard, c’est
-simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
-remplacer ça, avec une interface qui n’est explicitement pas faite pour
-être utilisée a la ligne de commande mais a l’aide d’APIs, et un
-programme monolithique qui effectue sa tache d’une façon complètement
-obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
-efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
-“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’estbeaucoup moins utilisable pour l’utilisateur final. C’est
-horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
-lire facilement les échanges entre programmes. C’est peu pratique, en
-fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.
-Systemd prend le même parti de créer une interface unifiée, accessible
-via des appels a des APIs uniquement, complètement obscure, extrêmement
-abstraite, bien entendu monolithique, et très peu ouverte a la
-modification par l’utilisateur final. Alors oui, il parait que ça
-augmente la vitesse de boot. Eh bien, au risque d’en choquer quelques
-uns, je préfère avoir un système qui boote légèrement plus lentement
-et que je puisse modifier facilement, et qui soit ouvert, compréhensible
-et distribué. C’est presque comme si les projets freedesktop.org avaient
-pour but de remplacer la base UNIX de linux en créant un système
-concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
-systèmes basiques d’UNIX.
-
Le problème est qu’il est facilement visible que la direction prise par
-la communauté Linux n’est pas celle du retour sur les systèmes UNIX ni
-celle du développement de solutions respectant la philosophie UNIX, mais
-remises au gout du jour (?), mais est bien d’accepter et de pousser les
-changements apportés par les projets freedesktop.org directement dans le
-cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
-partie de nombreux développeurs de ces projets), a déjà adopté tous ces
-changements (archlinux aussi, mais pour d’autres raisons…), et on peut
-compter sur le fait que les autres distributions l’adopteront un jour ou
-l’autre.
-
Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
-systèmes, tout du moins exprimé les raisons qui font qu’ils me
-déplaisent, on pourrait penser qu’il suffit de passer a une distribution
-n’incluant pas systemd, voire a une distribution n’incluant pas du tout
-de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
-archlinux. Cependant, avec un peu de réflexion, on voit que si des
-distributions comme archlinux et Fedora ont adopté systemd (et
-qu’OpenSUSE est en train de l’intégrer), il est probable que cela
-devienne un standard au fil des années, et que seuls survivent systemd
-et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
-probablement pas (je les vois mal revenir en arrière sur ce point.)
-Toujours est-il que l’init héritée du System V semble condamnée a mourir
-sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
-qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
-la recevra probablement que dans 2/3 ans. Cependant, cette période est
-toujours trop courte, et met sur mon système d’exploitation une date
-d’expiration, chose qui ne me plait que moyennement. Non, la solution
-est de passer sous un système autre, qui ait son propre système d’init
-(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
-principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
-vraiment un choix, vu le peu de programmes qu’il permet de faire
-fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
-n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
-n’est pas un choix non plus, puisque le but est de rester dans une
-optique UNIX.
-
OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
-en théorie aucun problème sur cet OS, sauf que certains choix de design
-ne correspondent pas du tout a l’idée que j’ai d’un OS. En effet,
-OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
-ses outils, avec des paquets modifiés pour les rendre plus simples a
-utiliser (fichiers de configuration fournis par défaut, par exemple, et
-autres patchs “release-only”), et une tendance a faire des scripts et
-des outils installés par défaut pour tout et n’importe quoi. Bref, cela
-n’est pas le sujet. Il convient aussi de voir qu’avec la récente
-acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
-n’ait pas de très beaux jours devant lui (la page d’accueil du
-projet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)
-
Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
-ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
-simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
-réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
-DFBSD ressemble aussi au système de l’assistance a l’user a outrance
-décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
-de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
-qu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a
-utiliser, plus le fait que le système de ports me convient bien (j’aime
-pouvoir configurer mes logiciels de façon assez profonde.)
-
Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien
-entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que
-les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
-n’apparaissent jamais chez certaines distributions, créant de ce fait un
-choix pour les utilisateurs.
-[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*
Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.
-
Du coup, expliquons. J’ai récemment monté serverporn, et ai par la même
-occasion découvert pelican. J’ai tout de suite accroché a ce générateur de
-site statique en python, du fait de son efficacité, de sa facilité d’utilisation
-et de sa grande customisation. En gros, pelican est un logiciel qui prend des
-fichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”
-constitué de templates pour les fichiers html et l’organisation du projet et
-d’une partie “statique” contenant le css, et les autres fichiers nécessaires au
-projet, et en fait des pages html.
Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
-django, et utilisent des variables particulières telles {{ article.content }},
-par exemple. La syntaxe complète est très bien documentée dans la doc de
-pelican.
-
L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a
-la mise a jour du blog.
-En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
-cibles de compilation, de régénérer le site entier, de ne générer que les
-fichiers modifiés depuis la dernière génération, de générer uniquement les
-fichiers n’existant pas la dernière fois, etc…
-La gestion du projet en devient donc très simple, puisque après avoir écrit un
-article, il suffit de faire un make html pour mettre a jour le blog.
-
De plus, le système de wordpress commençait a ne plus me convenir, du fait du
-manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
-pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi
-qui ait modifié les templates et le css), c’est lisible (puisque c’est du
-python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
-très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
-les articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus
-efficace.
-
En ce qui concerne les points négatifs :
-
-
-
Perte des commentaires:
- Je vous propose de vous référer a l’article de Gordontesos ici quand a
- mon avis sur ce sujet.
-
-
-
Perte du bouton flattr:
- Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu
- que toutes les pages passent par les mêmes templates, c’est assez facile a
- faire.
-
-
-
Perte du spam:
- Pourquoi c’est dans les points négatifs, ca?
-
-
-
Temps d’adaptation et d’appréhension du système:
- Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
- réguliers sur le blog, c’est parce que j’apprend a me servir de ce système
- et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
- les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
- dans la catëgorie positive.
-
-
-
Voila, c’est mon retour d’expérience sur pelican. A plus.
sed est un outil Unix très largement utilisé et très pratique pour manipuler
-le texte (ce qui se montre relativement indispensable dans un environnement
-Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
-connu en détail, et la plupart du temps une seule fonction est utilisée : le
-remplacement de texte.
-Or sed a bien plus de possibilités que ça, comme nous allons le voir.
-
Tout d’abord, rappelons les bases : sed est un programme Unix de base, mais
-aussi un langage de manipulation de texte dérivé de ed, l’éditeur original.ed est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
-personnels et étaient utilisés avec des téléscripteurs, c’est a dire des
-machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
-dits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un
-curseur et affichant plusieurs lignes. sed est donc une évolution de ed, le
-s signifiant stream, sed est un éditeur de flux, prenant donc avantage du
-concept Unixien de flux de données (voir Flux standards) pour éditer plus d’une ligne a la fois.
-En pratique, sed est principalement utilisé sur des fichiers.
-
sed a quelques options pratique, notamment -s qui permet d’empêcher
-l’affichage systématique des lignes traitées, ou bien -i (pour GNU sed) qui
-permet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique
-du programme est son langage de manipulation de texte.
-
ed, et donc sed, utilise un langage basé sur les séparations (en général des
-/). Ainsi, la commande de base dans sed est
-
/[regex]/
-
-
-
-
qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
-n’exécuter les commandes qui suivent que sur ces lignes.)
-
-La commande sed la plus utilisée est bien entendu le s, qui s’utilise de
-la façon suivante :
-
s/[oldtext]/[newtext]/[options]
-
-
-
-
qui se propose donc de remplacer (substitute) [old text] (qui peut être une
-regex) par [new text] (qui doit être un texte fixe, avec quelques
-exceptions), en appliquant [options], la plus connue des options étant g,
-qui permet d’appliquer la commande affectée a toutes les occurrences du texte
-matché sur la/les lignes concernée-s.
-Les exceptions a la “fixité” de [new text] sont particulièrement
-intéressantes. En effet, sed utilise un langage de regex plutôt standard,
-excepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par
-\( et \), et qui sont représentées dans le texte de remplacement par \1 à
-\9.
-
Par exemple, la commande
-
sed 's/\(hello world\) world/\1/'
-
-
-
-
sur le texte “hello world world” renverrait comme résultat
-
hello world
-
-
-
-
De la même façon, le symbole & dans le texte de remplacement représente le
-texte original. Ainsi, la commande
-
sed 's/hello world/& world/'
-
-
-
-
sur le texte “hello world” renverrait comme résultat
-
hello world world
-
-
-
-
-
Une autre commande utile est p, qui sert a afficher le texte présent dans
-l’espace courant :
-
/[regex]/p
-
-
-
-
sed stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
-dédié, que j’appelle l’espace courant (pattern space en anglais). La commandep affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
-le pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le p affiche donc ce dernier.
-
Un autre exemple de commande sont c, i et a, qui s’utilisent ainsi :
-
c \
-[text]
-
-
-
-
De la même façon, pour le i :
-
i \
-[text]
-
-
-
-
Et de même pour a.
-
Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles
-sont très proches. i sert a insérer du texte avant le pattern space. a
-sert a insérer du texte après le pattern space, et enfin c sert a
-remplacer tout le pattern space. Les trois utilisent [text] comme
-remplacement ou insert.
-Attention, les insertions se font sur la ligne précédant ou suivant le pattern
-space, et non sur la ligne en question.
-
Enfin, dernière commande ne fonctionnant que ligne par ligne, d :
- /[regex]/d
-d (delete) supprime les contenus du pattern space.
-
sed est un outil puissant, mais complexe. Dans un prochain article, je
-parlerai des commandes multilignes et des labels.
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.
-
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.
-
L’autre approche qui a été utilisée est une approche d’upgrade. 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 handshake 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.
-
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 STARTTLS, qui upgrade les connexions si nécessaire.
-La réponse est que STARTTLS 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.
-Bref, mettez en place du STARTTLS, et pas du SSL. C’est mieux pour la sécurité
-de tout le monde.
Bon.
-J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
-une Piratebox basée sur un Raspberry Pi, astucieusement nommée
-PiRatBox. Il se trouve qu’après de nombreux essais, un problème
-récurrent apparait: le Raspberry Pi n’est pas capable de fournir assez
-de courant par défaut pour faire fonctionner a la fois un disque dur et
-une antenne WiFi.
-Alors, autant il me semble évident qu’avec une
-alimentation provenant d’un port USB a 2A (max), je n’avais pas
-énormément de chances d’avoir 2A sur chacun des ports host du Raspi,
-autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
-petit peu exagéré en terme de rentabilité.
-
De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
-servant a rien) (vous savez, celui qui est monté en USB…), qui
-consomme énormément, est assez louche. Il devrait toujours être possible
-de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
-bien qu’il soit surement possible de la désactiver au niveau du kernel,
-il n’est pas simplement possible de la “débrancher”. Ce qui est bien
-chiant, étant donné le besoin évident de puissance électrique dans
-lequel on se retrouve.
-
Bon, je dois avouer n’avoir pas testé de lancer les différents services
-composant le système des piratebox sous arch, pour la simple et
-bonne raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
-systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
-parce que systemd est une horreur a utiliser avec les scripts init. Donc
-non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
-précis est que apt/dpkg a une gestion des dépendances dans un sens mais
-pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
-a dire dépendant de plusieurs autres packages, apt/dpkg se charge
-efficacement d’installer toutes les dépendances nécessaires, tandis que
-si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
-autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
-“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
-Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
-sera installé sur le système avant l’installation proprement dite
-(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd
-vers la SD qui sert de disque système.)
-
Il y a énormément d’autres critiques que l’ont pourrait faire
-concernant le Raspberry Pi. Son système de démarrage a s’arracher les
-cheveux, par exemple. En effet, plutôt que de faire comme tout pc
-normalement constitué ou la partie calcul démarre, lance le bootloader,
-cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
-etc…, a un système bâtard du au fait que la puce au centre de la carte
-est a la base une puce graphique a laquelle on a greffé un cœur de
-calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
-pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
-plus efficace qu’aient trouvé les personnes ayant implémenté cette
-atrocité de gérer le boot est donc de faire démarrer le cœur graphique
-en premier, ce dernier exécute un code propriétaire pour démarrer le
-cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
-etc…
-
Ce qui non seulement complique énormément le boot, non seulement ajoute
-du code propriétaire a un projet se disant libre, mais en plus n’estvisiblement pas fait pour être utilisé de cette manière. Le hack,
-oui, mais uniquement quand c’est bien réalisé, sinon je dis non.
-
Enfin, le projet que j’avais est toujours en cours de réalisation. Je
-le terminerai dès que j’aurai récupéré les outils nécessaires pour
-monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
-que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
-vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
-trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
-sa mission remplie.
Juste une petite note pour annoncer le prochain article, consacré a la
-fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
-sur le blog!