lalahop

En vrac

Table des matières

Le droit d'auteur à l'ère numérique

Je ne vais pas écrire sur le sujet car tout a déjà été dit. Je veux juste vous conseiller la lecture des éléments suivants :

Concernant la licence globale et le mécénat global, je ne vous ai donné que quelques pistes, à vous de creuser si vous êtes intéressé.

J’espère que cela vous donnera des idées pour rentrer en contact avec vos députés : 2012 approche et le temps des belles promesses est déjà arrivé ! Mais qui ne tente rien, n'a rien ! Les dérives totalitaires surviennent quand un peuple démocratique oublie d'exercer son pouvoir (adapté de V pour Vendetta, le film). Je dis ça, je ne dis rien, hein !

C'est pour votre bien !

Lors du dernier rendez-vous que j'ai eu avec la conseillère qui m'est affectée à ma banque, celle-ci m'informe qu'elle n'a toujours pas reçu les informations permettant de mettre à jour mon dossier. Elle me dit que les banques ont l'obligation de procéder à un contrôle régulier de l'identité, des ressources et du domicile de leurs clients depuis la fin 2010 et qu'une lettre m'informant de cette modification de la réglementation m'avait été adressée par courrier, lors de l'envoi mensuel d'un relevé.

De prime abord, rien ne me vient à l'esprit : je n'ai aucun souvenir d'un tel courrier. Elle me montre alors une copie de ce courrier. Je jette un œil et je sens ma colère monter. Mais oui, c'est bien ce même papier qui m'avait transformé en Hulk lors de sa réception avec mon relevé mensuel et qui avait fini à la poubelle sans autre forme de procès il y a plusieurs mois de cela !

Pour que vous voyiez de quoi je parle, je cite un extrait du courrier en question :

Dans le cadre du renforcement de la réglementation en matière de prévention de l'utilisation du système financier à des fins de blanchiment de capitaux et de financement du terrorisme, l'ensemble des banques a l'obligation de se conformer à des exigences vis-à-vis de leur clientèle. Cette réglementation a évolué ces derniers mois vers une amélioration de la connaissance par chaque établissement bancaire de ses clients et de la sécurisation de leurs opérations. À ce titre, votre banque est tenue de mettre régulièrement à jour les informations dont elle dispose vous concernant s'agissant de votre identité, votre domicile et vos ressources.

J'adore ce passage. On vous encule mais c'est pour votre bien ! Sérieusement, ça marche encore ce vieux truc de la sécurité ?! Et bientôt, qu'est-ce qu'on va imposer à ma banque de connaitre sur moi ? La taille de ma queue et/ou le poids moyen de mes excréments ? Sérieusement, les vrais criminels, ceux qui blanchissent des sommes énormes et financent le terrorisme, savent très bien frauder et se fabriquer des fausses déclarations de ressources qui permettent de masquer leurs opérations. De plus, le blanchissement doit avoir bien plus lieu dans les paradis fiscaux qu'en France ... Avec cette modification de la législation, on veut juste ficher et emmerder les honnêtes citoyens !

Et la conseillère ? Bah elle a eu le droit de recevoir ma gueulante en face ! J'ai dit que je fournirais les pièces justificatives aussi vite que possible pour l'endormir : en réalité, j'attends le dernier moment, quand je n'aurais plus le choix.

Si vous avez déjà fourni les documents en question ou si vous êtes forcé de le faire, n'oubliez pas d'envoyer une demande écrite à votre banque afin de demander à ce que les données fournies ne soient pas utilisées à des fins commerciales. C'est spécifier en bas du courrier :

Vous pouvez également sans frais vous opposer à ce que ces données fassent l'objet d'un traitement à des fins de prospection commerciale.

L'information hacking

Les petits gars de chez Reflets.info (encore des salopards de pédophiles-nazis-communistes-pirates qui ne veulent pas gober les informations diffusées par les canaux "classiques" ;)) expliquent le concept d'information hacking à la radio. C'est par ici que cela se passe : Reflets.info explique l’information hacking sur Radio Libertaire.

Pour les gens pressés : information hacking, pour résumer, est un terme marketing pour désigner le journalisme tel qu'il devrait être (recherche approfondie, indépendance, croisement des données, mise en valeur des données récoltées, ...) couplé aux nouvelles technologies et aux possibilités qu'elles donnent en terme d'investigation et de diffusion des données.

Je ne veux pas de la carte de fidélité de mon supermarché !

Bon, ce n'est pas nouveau mais quand c'est dit avec précision et clarté, je partage : Je ne veux pas de la carte de fidélité de mon supermarché ! chez le Hollandais Volant. Si vous êtes intéressé par le sujet, pensez à lire les commentaires, ils sont tout aussi intéressants que le billet.

Je n'ai rien à ajouter sur le sujet.

Quand les banques nous prennent pour des cons !

Je n'avais jamais remis en question les différents comptes d'épargne que j'ai ouverts sous les conseils de mes différents conseillers ... jusqu'à récemment où je me suis intéressé au sujet et me suis documenté.

Attention : Ce qui suit est fortement subjectif ! L'épargne dépend de vos choix, de votre situation financière et professionnelle et de vos projets ! Ainsi, mes conseils et mes conclusions ne s'appliquent pas à tout le monde ! Mais je pense néanmoins qu'ils peuvent servir à bon nombre d'entre vous.

Sous prétexte de diversifier votre épargne, vous vous retrouvez bien souvent avec des LEP (Livret d’Épargne Populaire), PEL (Plan d’Épargne Logement), CEL (Compte Épargne Logement), compte sur livret, LDD (Livret de Développement Durable), parts sociales ... Et il est difficile de faire le tri et de savoir ce qui vous apporte réellement un plus.

Commençons par ce qui fâche : les PEL et CEL sont des arnaques pures et simples : ils ne rapportent rien, les banques se font leur beurre avec ces produits financiers et les prétendus avantages (taux d’intérêt plus bas en cas de projet immobilier, entre autres), ne sont pas souvent vrais car ils dépendent du moment où vous souscrivez un prêt et il m'arrive de voir régulièrement autour de moi des gens qui, bien qu'ayant un CEL ou un PEL (ou les deux), se retrouvent avec un taux d’intérêt plus haut que le taux d’intérêt ayant cours au même moment pour les non-possesseurs de tels comptes. Enfin, même si vous avez un projet immobilier en tête, sachez qu'un bon placement de long terme vous permettra tout autant de mener à bien un tel projet qu'un CEL ou un PEL. L'arnaque et l’enrichissement des banques en moins.

Concernant les LDD, les comptes sur livret et les parts sociales, j'ai moins de griefs envers eux. Juste un seul, ils ne rapportent pas assez comparés à d'autres produits d'épargne.

De manière générale, je pense qu'une banque est faite pour financer des projets (on trouve rarement de gros prêts plus intéressants ailleurs) et pour stocker de l'argent immédiatement disponible. Ainsi, mon conseil du jour sera d'ouvrir un compte chèque, et un seul compte d'épargne à disponibilité immédiate. Ce dernier est à choisir en fonction de votre situation : si vous avez moins de 25 ans, il y a de fortes chances qu'un livret jeune soit le plus intéressant en terme de rémunération. Au-delà, il y a de fortes chances qu'un LEP soit plus avantageux. Si jamais vous ne remplissez pas les conditions d’accès (plafond de ressources, 2 LEP par foyer fiscal), vous pouvez vous tourner vers le classique Livret A (tiens, il est populaire mais rarement mis en avant par les banques. Pourquoi ? Car ils leur rapportent moins !).

Pour le reste de vos économies (= épargne de long terme), mon conseil sera de vous adresser à un gestionnaire de patrimoine. Ne vous laissez pas impressionner par le terme ! Ils ont des placements bien plus intéressants que les banques avec des frais de gestion moins importants. Si ce sont de vrais professionnels, ils seront vous trouver le placement qui correspond à vos attentes/besoins. Personnellement, je vous recommande une assurance vie. Les supports que vous mettrez dedans (sans risque, risqué, très risqué) dépendent de vous. Pour rappel : plus un placement présente une rémunération intéressante, plus il est risqué (= plus vous avez de chance de tout perdre du jour au lendemain en fonction des fluctuations financières).

Mais là encore, tout n'est pas rose : méfiez-vous des arnaqueurs ! Les professionnels qui tentent à tout prix de vous faire signer un contrat ne sont pas réglo ! Les professionnels qui ne savent pas expliquer clairement ce qu'ils vous proposent pour optimiser votre épargne sont à proscrire ! Les professionnels qui demandent à vous voir trop souvent sont à proscrire, il y a une arnaque dans l'air ! Les professionnels qui vous font ouvrir 36 contrats cherchent à vous embrouiller !

Je me permets un dernier conseil : si vous choisissez des supports à risque, je vous recommande de choisir un prélèvement échelonné qui permet de lisser le risque. En effet, lorsque vous rentrez, vous ne savez pas si vous êtes au point le plus haut ou au point le plus bas (ou autre) du cours. Effectuer plusieurs petits virements au lieu d'un seul gros virement permet de limiter cet effet-là.

Pour revenir à nos chères banques : pour savoir si un produit d'épargne vous correspond, écoutez attentivement votre conseiller(e) : si il(elle) utilise des arguments sentimentaux du type "depuis le temps que je vous connais, je n'ai pas intérêt à mal vous conseiller", vous pouvez être sur que le compte que vous désirez ouvrir (ou que l'on vous propose) est une arnaque.

Note : je n'ai pas parlé volontairement des taux des comptes d'épargne car ils fluctuent et ce n'est pas le cœur de mon propos.

Quand les banques nous prennent pour des cons ! - La vengeance du client

Vous connaissez très certainement l'adage "ne pas mettre tous ses œufs dans le même panier" et j'ose espérer que vous l'appliquer le plus souvent possible ! Le Hollandais Volant en parle à propos des magasins (voir ci-dessus). Moi je vais vous en parler à propos des banques.

Rien ne vous empêche d'éparpiller vos économies entre plusieurs établissements financiers. Par exemple, en reprenant la répartition que je vous ai exposée ci-dessus, on peut très bien imaginer avoir le compte chèque dans la banque A, le compte d'épargne avec disponibilité immédiate dans une banque B et l'épargne de long terme chez un gestionnaire de patrimoine !

Cela fait des années déjà que j'ai choisi ce mode de répartition : vous êtes moins dépendant d'une seule institution financière et vous pouvez négocier un prêt plus facilement (car vous êtes plus crédible quand vous menacez d'aller voir ailleurs alors que votre banque sait que vous avez d'autres économies dans une autre institution financière). Et en cas de conflit important avec une banque, vous avez toujours de l'argent quelque part le temps de faire les démarches de rupture.

Quand les banques nous prennent pour des cons ! - Le retour

Quand vous vous rendez compte que certains comptes d'épargne proposés par les banques sont des arnaques (voir ci-dessus), vous voulez bien naturellement les clôturer. Et là, c'est le drame !

Premier effet : le conseiller qui vous est affecté doit normalement réaliser un quota (= recevoir un certain nombre de clients en un temps donné). Vous remarquerez que lorsque vous demandez à clôturer plusieurs comptes, bizarrement le quota ne compte plus ! On vous retient pendant 1h30-2h voire plus (en fonction de votre patience en fait) pour tenter de vous convaincre de ne pas clôturer vos comptes. Si seulement le temps passé avec le client ne comptait pas non plus quand on demande une faveur à sa banque ... Douce utopie.

Deuxième effet : le conseiller tente de vous tirer les vers du nez : qu'allez-vous faire de cet argent, est-ce qu'il va aller à la concurrence ? Que d'angoisses ! Vous avez le devoir de ne pas répondre à ces questions qui nuisent à votre vie privée.

Troisième effet : la banque (et plus forcement le conseiller uniquement) va tenter de gagner du temps et ne va pas clôturer vos comptes immédiatement. Quand vous pensez qu'un compte se clôture en trois clics de souris de nos jours, il y a de quoi devenir enrager ! Quand vous retournez à votre banque, énervé, pour obtenir des explications, vous avez le droit aux gadgetophrases (terme trouvé chez Reflets.info) habituelles du type "ce n'est pas moi qui m'occupe de votre dossier". Mais parfois, vous tombez sur des perles du genre "ce compte est le réceptacle de vos parts sociales, comme nous avons besoin de calculer la fiscalité, nous ne pouvons pas le clôturer). Heu ouais ... je n'ai plus de parts sociales depuis longtemps m'enfin bon ... Quand à l'excuse de la fiscalité ... passons.

En ce qui me concerne, l'affaire a vite été réglée : j'ai d'abord répondu poliment à ma conseillère avec les arguments que j'avais préparés avant le rendez-vous. Puis, quand elle a commencé à la jouer sentimental (voir ci-dessus), j'ai gueulé ! Et quand j'ai vu qu'un de mes comptes n'était toujours pas clôturé au bout d'une semaine, j'ai gueulé et j'ai engagé une procédure pour passer à la concurrence ! Je n'aime pas qu'on me prenne pour un con trop longtemps !

La carte d'identité électronique (CNIE)

Si vous ne le savez pas, 11 gus (admirez la démocratie dans toute sa magnificence) ont votés, début juillet, la mise en place de la carte d'identité électronique. Ou comment ficher toujours plus les Français !

Encore une loi qui est passée en utilisant l’argument de la sécurité. Mais bien sûr : pour protéger le bon con de citoyen de l’usurpation d'identité, on lance la CNIE ! Et comme le gouvernement n'a rien à se reprocher et croit que cette loi est bienveillante, il l'a fait passer en plein mois de juillet, mois propice aux vacances parlementaires !

On notera que ce projet n'est pas nouveau et avait déjà été avorté suite à des levées de boucliers de la part de la CNIL, entre autres. À noter également que lors de la première tentative, l'argument avancé était, traduit de la novlangue en français "la chasse aux étrangers en situation irrégulière".

Pour en savoir au sujet de la CNIE : Quand la France devient la Chine, sous l’effet de 7 inconscients… chez Paul Da Silva ou 11 députés votent le fichage de 45 millions d'honnêtes gens chez PCInpact.

En signe de protestation, certains choisiront de faire renouveler leur CNI et d'autres de ne rien faire du tout. Certains choisiront même, pour marquer leur désaccord, de ne pas faire renouveler leur CNI qui a pourtant expiré. Cette dernière idée ne me paraît pas être la bonne car de plus en plus d'organismes (au pif : les banques) doivent vérifier de plus en plus souvent votre identité (oui, oui, la légende du "une CNI en cours de validité n'est nécessaire que pour sortir du territoire", c'est du pipeau). Vous aurez donc des problèmes. Même si je ne suis pas d'accord avec les pratiques de ces organismes, je ne vois pas d'autres alternatives que de gagner du temps (je ne vais pas stocker mon argent chez moi, par exemple). Il faut donc jouer en respectant les règles du jeu.

En ce qui me concerne, je joue la montre et j'ai fait renouveler ma carte d'identité version papier. Je gagne 10 ans. À moins, bien sûr, qu'une loi m'impose, dés demain, de posséder une CNIE, tout est possible !

Vous vous en doutez, mon renouvellement ne s'est pas passé dans la joie et la bonne humeur : j'ai expliqué très clairement pourquoi je la faisais renouveler à des ignorants qui n'avaient pas encore reçu leur note de service et ne connaissaient donc pas l'existence de la CNIE ! Là où la colère m'a emporté, c'est quand, en réponse à mon argument de fichage de la totalité de la population, une des personnes du service m'a répondu "si vous n'avez rien à vous reprochez, vous n'avez rien à craindre de la CNIE, comme vous dites". Cet argument facile permet de justifier n'importe quoi ! Mais je ne pense pas avoir besoin de vous l'expliquer.

Malgré tout, je trouve déjà que la CNI version papier écrase trop notre vie privée : à quoi sert ce relevé d'empreinte digitale ? Suis-je coupable de quoi que ce soit ? Quels sont les enfoirés des générations précédentes qui ne se sont pas révoltés contre ça ?!

Né pour être un râleur !

Adieu Ubuntu, bonjour Debian

Depuis le temps que j'y songeais, j'ai enfin laissé tomber Ubuntu sur toutes mes machines. Afin que vous puissiez vous faire une idée si vous hésitez à changer de distribution, je vais vous exposer mes raisons.

Ma première raison est l'arrivée, dans Ubuntu 11.04 (Natty) de Unity, la nouvelle interface graphique couplée à GNOME. D'un point de vue pratique, je ne sais pas si je suis un abruti fini mais je ne trouve pas cette interface ergonomique, loin de là. J'avoue même que j'étais perdu et la phase d'obtention des premiers réflexes est plus longue, signalant un fait : soit cette interface n'est pas ergonomique, soit elle n'est pas faite pour moi. Et, si on cherche sur internet, on se rend compte que je ne suis pas le seul. D'un point de vue moral, j'ai l'impression que Canonical tente de réinventer la roue et d'imposer des choix sur des éléments qui n'ont pas à l'être car fortement subjectifs. L'universalité, c'est bien (ex. : TCP/IP), mais elle doit être interrompue où commence la subjectivité, à mon avis.

Ma deuxième raison est que je trouve qu'Ubuntu prend une tournure orientée "cloud" (Ubuntu One, orientation générale d'Ubuntu dés aujourd'hui et dans les prochaines éditions) que je n'approuve pas. Je sens que certains vont me dire que les moyens de chiffrement ne sont pas faits pour les chiens, à l'instar d'EncFS. À cela, j'ai deux réponses. Ma première réponse : certes, ces moyens existent mais ne sont pas mis en avant lors de l'utilisation d'Ubuntu One. Donc les débutants ne les mettront pas en œuvre et je ne peux pas cautionner cela. Ma deuxième réponse : les moyens de chiffrement n'empêchent pas les contraintes juridiques voire le flou juridique qui règne sur vos données. À la question "à quelle législation sont-elles soumises ?", la réponse est rarement "la législation française". Et c'est là le véritable danger. Quels recours avez-vous en cas de désaccord avec l'hébergeur ? Avez-vous signé un contrat qui oblige l'hébergeur à quoi que ce soit ? Non.

Ma troisième raison est déjà expliquée par le Hollandais Volant dans ce billet : Rendre le terminal plus accessible…. Je n'ai rien à ajouter.

Ma quatrième raison a été exposée par Denis Bonor dans l'édito de GNU/Linux Magazine/France numéro 138 de mai 2011. Voir la version en ligne. J'ajouterai juste qu'une note est subjective et contribue à un nivellement par le bas et à un manque de diversité, à terme. Illustration : je suis un utilisateur lambda qui cherche un navigateur web. Ho tiens, Firefox est le mieux noté. Il est forcement bien ! Je le prends sans savoir si il me correspond. Je cherche un client mail, je prends Thunderbird parce qu'il est le mieux noté, etc., etc. . On tue la diversité du Libre tout en se faisant imposer nos choix par les autres de manière inconsciente : c'est de l'abus de conseils : on ne vit et on ne choisit que par le conseil des autres et c'est dangereux.

Ma dernière raison (enfin !) est que je trouve le cycle de développement d'Ubuntu assez naze. Se forcer à sortir une version tous les 6 mois ne me paraît pas être une bonne solution. Mais bon, il faut dire que c'est la mode, en ce moment, aussi bien pour les navigateurs que pour des noyaux de réduire le cycle de développement et de jouer à celui qui a le numéro de version le plus élevé. Bah oui, Chrome 13 est forcement supérieur à Firefox 6 ! Le noyau NT 6.1 est supérieur à Linux 3 ! Certes, le cycle de développement d'Ubuntu n'est pas nouveau mais il me dérange à présent. Je pense que deux modèles sont intéressants : le modèle "when it's ready" (cher à Debian, entre autres) ou le modèle rolling release. Je pense qu'il ne peut pas y avoir un modèle intermédiaire viable. Soit on utilise un système en rolling release et on sait à quoi s'attendre, soit on utilise un modèle "when it's ready" et on s'attend à de la stabilité. Mais on ne peut pas ne pas savoir à quoi on doit s'attendre. Or, les bugs à la sortie d'Ubuntu (corrigés rapidement certes), sont de plus en plus nombreux à chaque version. Pour rappel, même si ça date : Ubuntu 8.04... pas pour moi..

Mon seul regret sera de perdre la communauté bien active autour d'Ubuntu et la documentation produite.

C'est pour toutes ces raisons que je me retourne aujourd'hui vers une distribution GNU/Linux Debian qui fut une de mes premières amours GNU/Linux. Ce projet possède une vraie philosophie, un contrat social bref un vrai amour du libre que certains jugent extrême (à titre d'exemple, voir Renommage des applications de Mozilla par Debian) mais qui me convient aujourd'hui. Et en bonus, je garde la communauté active autour d'Ubuntu (l'aide, les billets, les tutoriels écrits pour Ubuntu peuvent facilement être transposés sur Debian).

Note : je n'ai pas utilisé qu'Ubuntu durant toutes ces années mais beaucoup d’autres distributions (parfois en mêmes temps pour certaines) : Knoppix (mon point d'entrée), Debian, Backtrack, Fedora, Ubuntu, Mandriva pour ne citer qu'elles. Mais au fils du temps, aucune à part Debian et Ubuntu n'a réussi à s'imposer au quotidien.

Et demain ? Certaines personnes (oui, coucou 😛 ) parient d'ores et déjà que je vais rapidement laisser tomber Debian pour Arch Linux. D'autres parient pour Linux Mint. Et moi ? Ben, je parie que mon prochain OS sera un BSD. Affaire à suivre :).

Avant de traiter le sujet du jour, je voulais vous dire que je suis désolé pour l'indisponibilité de ce site ces 2 derniers jours. Mon hébergeur n'avait pas prévenu de cette maintenance censée durer moins de 24h. J'ai bien évidemment envoyé un mail pour me plaindre : il n'est absolument pas normal ne pas prévenir les clients d'une maintenance longue. En tout cas, cela me prouve bien une chose : il faut toujours avoir une copie de son site en état de marche sur un autre hébergeur : comme ça, on a juste à changer un champ A dans le nom de domaine et ça repart !

Mais tout ça, c'est du passé. Parlons du sujet du jour : installer un Windows 7 chiffré avec TrueCrypt, un GNU/Linux Debian chiffré avec dm-crypt et une partition de données chiffrée avec dm-crypt sur un même disque dur . Le but final est de sécuriser (un peu plus) mon ordinateur portable.

Table des matières

Ne me demandez pas pourquoi j'utilise encore Windows malgré ma grande passion pour le monde du Libre : je vous l'ai déjà expliqué dans un billet : simplement par contrainte professionnelle.

Des tutoriels existent déjà sur le sujet : DualBoot OS FDE : Windows chiffré + Linux chiffré sur Artiflo Inside notamment mais ils ne sont plus à jour (passage de GRUB à GRUB 2).

Présentation des différentes solutions

Avant de commencer, sachez que plusieurs solutions existent (source : commentaires de Artiflo Inside) :

  • La méthode bricolage : Chainloading TrueCrypt with GRUB2 sur Ubuntu Forums. Bof bof comme méthode.
  • Repasser à Grub Legacy. Bof comme méthode vu les avancées de GRUB 2.
  • Laisser le bootloader de Truecrypt charger GRUB qui lui-même chargera votre GNU/Linux. Cette méthode est une des meilleures ... mais pas pour moi : TrueCrypt n'est pas un logiciel libre donc il est hors de question qu'il soit mon bootloader primaire ! Et comme je vais plus souvent sous GNU/Linux que sous Windows, il n'est pas normal que ce soit le bootloader de TrueCrypt que je vois le plus souvent
  • Utiliser grub2tc. Il convertit l'image de restauration de TrueCrypt en un fichier utilisable par GRUB2. Cette méthode me paraît être la meilleure. C'est donc elle que nous allons mettre en place.

ÉDIT du 24/05/2013 à 18h15 : Grub2tc n'est finalement plus la solution que je préconise. Il y a trop souvent des bugs bloquants : une fois la "compilation" foire, une autre fois on a le message suivant lors du boot sous Windows :

no physical memory is available at the location required for the windows boot manager

La solution qui marche toujours, c'est celle que je qualifie, finalement à tord, de bricolage ci-dessus : Chainloading TrueCrypt with GRUB2 sur Ubuntu Forums. Ce tutoriel reste toujours valable, seule la partie « Utiliser grub2tc » change. Fin de l'édit

Avant de commencer la mise en place de la solution grub2tc

Sachez que même pour cette unique méthode, il y a plusieurs moyens de la mettre en œuvre.

La méthode la plus souvent présentée sur internet consiste à : installer Windows puis installer un GNU/Linux chiffré, puis chiffrer la partition Windows, puis utiliser un LiveCD et grub2tc puis utiliser le disque de récupération de TrueCrypt.

Attention toutefois avec cette méthode souvent présentée :
Lors du prétest TrueCrypt, vous allez obtenir une erreur "No bootable partition". Pour remédier à ce problème, il suffit d'utiliser GParted et de mettre le drapeau "boot" sur la partition Windows.

Comme vous utilisez un live CD pour redéfinir GRUB comme programme d'amorçage, il vous faudra installer lvm, git et ruby (apt-get install git lvm2 ruby) pour pouvoir suivre les instructions d'utilisation de grub2tc. Il vous faudra ensuite monter votre partition chiffrée (j'utilise l'explorateur de fichier Nautilus pour faire ça). Puis vous devrez utiliser les commandes "vgscan" puis "vgchange -a y" pour trouver et utiliser votre volume LVM (sinon vous aurez l'erreur "not a mountable file systeme"). Ensuite vous devrez monter votre partition racine puis monter la partition /boot dans point_montage_racine/boot. Ensuite, vous devrez utiliser l'argument "--root-directory=/point_de_montage_racine" de la commande grub-install sinon, vous obtiendrez une erreur "Cannot find a device for /" ou "Cannot find a device for /boot". Tout un programme ! Pour grub-install, voir : Boot Problems:Cannot Find A Device For boot/grub sur Sourceforge/bootinfoscript.

Enfin, au redémarrage ou lors d'une mise à jour de GRUB2, TrueCrypt vous lancera des "Incorrect password" à la figure. Il faudra alors utiliser le disque de restauration de TrueCrypt pour demander la réécriture des headers ("Repair Options" puis "Restore key data (volume header)").

Un dernier mot : si vous comptez utiliser un liveCD Ubuntu 11.04 (Natty), je vous le déconseille. En effet, lors du lancement de la commande grub-install, vous obtiendrez une erreur "error: cannot stat `aufs'.". Il s'agit d'un bug reconnu. Vous pouvez utiliser Ubuntu 11.10 (The Oneiric Ocelot), dont les daily build se trouvent à cette adresse : Ubuntu 11.10 (Oneiric Ocelot) Daily Build. Ce bug y a été corrigé.

La méthode que je vous propose nécessite moins d'étapes et est moins "prise de tête".

Mise en place de grub2tc avec la méthode GuiGui

Partitionner

Utilisez un liveCD/liveUSB de GParted et créez 4 partitions :

  1. Une partition primaire de 1Gio (1024Mio) formatée en ext4 qui sera la partition /boot.
  2. Une partition primaire de 20Gio (20480Mio) formatée en NTFS qui sera la partition pour Windows 7.
  3. Une partition étendue de 50Gio (51200Mio) qui servira à stocker les différentes partitions de Debian.
  4. Une partition primaire utilisant tout l'espace disque restant et qui servira à stocker vos données.

Note : vous pouvez bien évidemment adapter les tailles de ces partitions à vos besoins.

Installer Windows

Je vous laisse installer Windows 7, sur la partition dédiée, tous seuls comme des grands et je vous attends à la prochaine étape.

Chiffrer la partition Windows

Rien de bien compliqué ici. Téléchargez, installez et lancez TrueCrypt.

Allez dans le menu "System" puis cliquez sur "Encrypt System Partition/Drive".

Sélectionnez les options suivantes : Normal => Next => Encrypt the windows system partition => Next => Single boot => Next => suivez le reste de l'assistant, il n'y a plus de questions piège.

La vitesse du chiffrement dépend de la capacité de votre processeur et de celle de votre système de stockage (SSD, disque dur).

Attention : Pensez à récupérez le fichier iso en lui-même, pas uniquement à graver le CD qu'il représente.

Installer GNU/Linux Debian chiffré

Nous allons utiliser l'image d'installation par le réseau. Suivez normalement l'assistant jusqu'à arriver sur les options de partitionnement. Choisissez le partitionnement manuel.

Choisissez la partition étendue créée précédemment et définissez-la comme un "volume physique de chiffrement". Refusez d'effacer les données et choisissez de terminer le paramétrage de cette partition.

Choisissez ensuite de configurer les volumes chiffrés. Validez les modifications, choisissez "Terminer" et saisissez votre passphrase.

Choisissez ensuite de configurer les volumes LVM. Validez les modifications et patientez. Créez un groupe de volumes, nommez-le (exemple : "Debian"), choisissez la partition chiffrée comme réceptacle et continuez en validant.

Ensuite créez des volumes logiques :

  • Un volume nommé "racine" de 25Gio.
  • Un volume nommé "usr" de 20Gio.
  • Un volume nommé "var" de 5Gio

Note : vous pouvez également créer une partition swap si votre ordinateur à une quantité limitée de mémoire vive. Vous pouvez également créer une partition pour recevoir le point de montage /tmp (fichiers temporaires). En ce qui me concerne, je compte utiliser le système de fichiers tmpfs pour mes fichiers temporaires. Je n'ai donc pas besoin d'une partition supplémentaire.

La séparation des points de montage /tmp, /var, /usr et / est recommandée. Notamment par le Guide to the Secure Configuration of Red Hat Enterprise Linux 5 de la NSA.

Terminez la configuration de LVM.

Choisissez la dernière partition primaire créée précédemment (et destinée à vos données) et définissez-la comme un "volume physique de chiffrement". Refusez d'effacer les données et choisissez de terminer le paramétrage de cette partition.

Allez à nouveau dans le menu "Configurer les volumes chiffrés" et suivez la même procédure que précédemment. Vous pouvez choisir une passphrase différente de la précédente pour plus de sécurité.

Vous n'êtes pas obligé de créer un volume LVM pour stocker vos données, une partition ext4 suffira.

Maintenant, il faut associer chaque point de montage à son volume LVM. Personnellement, j’ai choisi de formater toutes mes partitions en ext4.

  • Le point de montage "/" est à associer au volume LVM "racine".
  • Le point de montage "/usr" est à associer au volume LVM "usr".
  • Le point de montage "/var" est à associer au volume LVM "var".
  • "/boot" est à associer à la première partition primaire. N'oubliez pas cela sinon GRUB ne sera pas installé et vous aurez des problèmes.
  • Vous pouvez aussi attribuer le point de montage "/home" à la partition que nous avons créée pour recevoir vos données mais moi je ne le fais pas. Cela me permet de trier plus efficacement mes données. /home reçoit les données (fichiers de configuration, fichiers téléchargés) et je les range dans ma partition de documents quand cela m'intéresse.

Vous pouvez terminer le partitionnement et confirmer sa réalisation. Le reste de l'installation Debian n'est pas spécifique et se passe donc de commentaires.

ÉDIT du 18/03/2012 à 13h00 :
Attention : Lors de l'installation de Debian, ne définissez pas le drapeau d'amorçage sur la partition /boot ni sur aucune autre partition. Si vous le faites, vous aurez une erreur avec TrueCrypt : vous saisirez votre mot de passe au démarrage mais le système d'exploitation ne sera pas chargé et vous obtiendrez une erreur "no bootable partition found". Pour résoudre ce problème, il suffit, comme indiquer plus haut dans ce billet, de prendre un bon vieux live de Gparted et de définir le drapeau "boot" sur la partition Windows (oui, oui, la partition chiffrée que Gparted marque comme étant de type inconnu). Fin de l'édit.

Utiliser grub2tc

ÉDIT du 24/05/2013 à 18h15 : Grub2tc n'est finalement plus la solution que je préconise. Il y a trop souvent des bugs bloquants : une fois la "compilation" foire, une autre fois on a le message suivant lors du boot sous Windows :

no physical memory is available at the location required for the windows boot manager

La solution qui marche toujours, c'est celle que je qualifie, finalement à tord, de bricolage ci-dessus : Chainloading TrueCrypt with GRUB2 sur Ubuntu Forums.

Je copie ici les instructions afin d'en conserver une copie au cas-où :

1. Copy the rescue ISO to /boot
2. sudo apt-get install syslinux
3. sudo cp /usr/lib/syslinux/memdisk /boot
4. Add /etc/grub.d/40_windows_truecrypt:
#!/bin/sh
exec tail -n +3 $0
# Windows with TrueCrypt
menuentry "Microsoft Windows" {
insmod part_msdos
insmod ext2
set root='(hd0,msdos3)'
linux16 ($root)/memdisk iso raw
initrd16 ($root)/truecrypt.iso
}
 
Step 4 will add the entry whenever updating grub. You'll have to modify some of this to fit your situation. Such as the (hd0,msdos3) partition is your /boot, and the numbers start at 1.

Fin de l'édit

Source : README de grub2tc.

Au redémarrage, vous booterez sur Debian. Installez ruby, git, gcc et make :

$ su -
# apt-get update && apt-get install git ruby make gcc

Récupérez grub2tc :

$ git clone git://gitorious.org/grub2tc/grub2tc

Placez-vous dans le dossier récupéré :

$ cd grub2tc

Copiez l'image de récupération de TrueCrypt et renommez-la "tcrescue.iso".

Ensuite, lancez la commande :

grub2tc$ make

Vous allez récupérer un fichier "tcloader". Copiez-le dans le répertoire /boot :

grub2tc$ cp tcloader /boot

Modifiez le fichier /etc/grub.d/40_custom pour y ajouter :

menuentry "Windows via TrueCrypt" {
           insmod multiboot
           multiboot /tcloader
}

Bien entendu, vous pouvez remplacer le texte "Windows via TrueCrypt" par celui que vous voulez voir apparaitre dans le menu de GRUB2.

Mettez à jour les fichiers de configuration de GRUB2 :

# update-grub2

Installez GRUB2 dans le MBR de votre disque dur système :

# grub-install <disque système>

Remplacez "disque système" par votre disque dur : /dev/sda par exemple.

Enjoy

Rebootez et profitez du résultat !

ÉDIT du 28/10/2011 à 13h55 : Lors d'une mise à jour de GRUB2 ou de l'initramfs (via apt-get/aptitude par exemple), TrueCrypt vous lancera des "Incorrect password" à la figure. Il faudra alors utiliser le disque de restauration de TrueCrypt pour demander la réécriture des headers ("Repair Options" puis "Restore key data (volume header)"). Pour prévenir tout problème, lisez la liste des paquets qui seront mis à jour : si vous voyez grub2 ou lvm2 ou initramfs, alors préparez votre CD de restauration TrueCrypt. Je sais : je l'ai déjà écrit plus haut mais je préfère me répéter car la première occurrence n'est pas forcement bien visible. Fin de l'édit.

Retour sur les performances (10/12/2011 à 18h00)

Cela fait un peu plus de 3 mois maintenant que j'utilise, au quotidien, l'installation décrite dans ce billet sur mon ordinateur portable. Mon portable est loin d'être un foudre de guerre (Celeron 900 à 2.20Ghz) et j'avais peur de voir un ralentissement de mon système. Je voulais donc vous faire un feedback sur ce point. Finalement, je n'ai ressenti aucune gêne sous Debian : le système reste fluide. En revanche, je ressens une baisse des performances lors des écritures sur le disque (installation de programmes, copie de fichiers, ...) avec Windows 7. Mais ce dernier point n'est pas grave puisque je n'utilise quasiment plus Windows et que celui-ci était déjà lent avant l'utilisation de TrueCrypt (ceci n'est pas un troll : expliquez-moi juste pourquoi la lecture de la même vidéo HD avec la même version de VLC et un nombre minimal de programmes/démons lancés en arrière plan saccade fortement sous Windows et pas sous Debian ... ).

ÉDIT du 26/05/2012 à 7h25 : Il semble qu'utiliser TrueCrypt sur un SSD soit contre-productif. Alors que cela se passe bien avec W7 sur un disque dur classique (5400 tpm ou 7200 tpm), W7 manque de réactivité quand on l'utilise sur un SSD avec TrueCrypt. Mais quand je dis "manque de réactivité", c'est vraiment beaucoup : le boot en 3 minutes, l'arrêt en quasiment 2 minutes, le lancement des programmes ... Avec le même SSD, les mêmes programmes et les mêmes mises à jour mais sans TrueCrypt, ce problème ne se produit pas. On pourrait toujours se lancer dans une analyse psychologique du genre "sur un disque dur 5400 tpm, on s'attend à un certain ralentissement donc le ralentissement induit par l'usage de TrueCrypt ne choque pas alors qu'il choque sur un SSD dont on attend aucune lenteur" mais je ne pense pas que cela explique un W7 ayant un tel manque d'adrénaline. Je n'ai aucune idée sur l'origine de ce problème. Cela dit, utiliser TrueCrypt sur un SSD est déjà une mauvaise idée selon le niveau de sécurité que l'on souhaite atteindre à cause du TRIM et du wear-leveling. Aucun problème n'est à signaler avec dm-crypt sous GNU/Linux. Attention : le TRIM n'est pas activé par défaut (il faut utiliser l'option --allow-discards lors du luksFormat) et la remarque concernant le wear-leveling est toujours d'actualité. Fin de l'édit.

C'est ici que je vous laisse et le mois d'août également.

ÉDIT du 18/03/2012 à 13h00 : J'ai effectué les manipulations décrites dans ce billet sur un autre ordinateur sans rencontrer de problèmes. Fin de l'édit.

Créez votre image personnalisée d’OpenWRT

Avant de traiter le sujet du jour, je souhaite vous informer que j'ai relu tous les billets traitants d'OpenWRT et que j'ai modifié/corrigé la plupart d'entre eux. En effet, certains d'entre eux comportaient des phrases imprécises, d'autres des bourrelets inutiles et enfin d'autres comportaient des phrases qui pouvaient prêter à confusion.

Commençons à traiter le sujet du jour : créer une image personnalisée d'OpenWRT pour votre routeur. Attention : je parle ici d'un routeur déjà supporté par OpenWRT, pas d'une adaptation d'OpenWRT à votre routeur qui n'est pas encore supporté.

ÉDIT du 15 juillet 2012 : Ce billet traite de Backfire 10.03. Quelques petites choses ont changées avec Backfire 10.03.1 et je vous conseille en conséquence de lire, en parallèle, cet autre billet : Créez votre image personnalisée d’OpenWRT : ce qui change avec Backfire 10.03.1.

ÉDIT du 04 janvier 2014 : Ce billet traite de Backfire 10.03. Quelques petites choses ont changées avec Attitude Adjustment 12.09 et je vous conseille en conséquence de lire, en parallèle, cet autre billet : Créez votre image personnalisée d’OpenWRT : ce qui change avec Attitude Adjustment 12.09.

Table des matières

Pourquoi créer une image personnalisée ?

Tout est déjà dit sur le wiki d'OpenWRT, je traduis juste :

  • Inclure les logiciels dont vous avez besoin directement dans l'image squashfs permet de réduire l'espace disque qu'ils occupent sur la flash de votre routeur. Cela est dû aux propriétés du système de fichier squashfs qui est compressé. Pour vous donner un ordre d'idée des gains : prenons une Backfire 10.03 brcm47xx fraichement installée et installons dnscache, ntpd, etherwake, tcpdump-mini, luci-i18n-french, ddns-scripts, iptables-mod-conntrack-extra et supprimons luci-admin-mini et luci-i18n-english. Il me reste 196k d'espace libre. Maintenant, intégrons ces mêmes packages dans une image et installons-la sur le routeur. À la suite de cette installation, il reste 492k d'espace libre dans la mémoire de mon routeur. L'espace gagné vous permettra d'installer encore plus de logiciels 🙂 .
  • Créer une image personnalisée vous évitera de tout réinstaller et de tout reconfigurer en cas de problème. Si une expérience vient à foirer, vous aurez juste à reflasher votre routeur avec votre image personnalisée pour retrouver une configuration aux petits oignons. Et si vous avez plusieurs routeurs, vous gagnerez un temps fou en déploiement.
  • Construire une image minimale qui correspond à vos besoins.
  • Apprendre ... Ça se passe de commentaires.

Préparatifs

Si vous n'avez pas déjà installé l'environnement de développement d'OpenWRT, alors le mieux est de récupérer l'image builder de votre déclinaison.

Si comme moi, vous avez déjà récupéré la totalité de l'environnement, buildroot, servez-vous en. Il est inutile de télécharger l'image builder puisque celui-ci est inclus dans buildroot.

Dans la suite de ce guide, je considérerai que vous avez déjà récupéré buildroot. Sauf mention contraire, je considérerai également que votre répertoire courant est backfire_10.03, c'est-à-dire la racine du buildroot. Si vous avez déjà compilé quelque chose, sauvegardez les binaire obtenus et faites un peu de ménage avec :

backfire_10.03$ make clean

Note : selon ce que vous voulez obtenir, vous n'êtes pas obligé de suivre toutes les étapes de ce guide. Par exemple, si vous voulez simplement supprimer rdate proprement, vous vous contenterez de créer l'image officielle puis de configurer les options de busybox et de compiler le tout.

Recréer l'image officielle

Si j'ai un conseil à vous donner, progressez à petits pas vers la création de votre image personnalisée : compilez une image de base, puis intégrez vos packages et compilez, puis effectuez leur configuration et compilez encore, puis ... Il est inutile de tout faire d'un coup : si la compilation foire (et elle le fera, faites-moi confiance), vous galérerez pour trouver l'origine du bug. Dans la continuité de ce conseil, je vous conseille également de sauvegarder l'intégralité du buildroot après une compilation réussie. Ainsi, si la prochaine compilation plante et que vous ne trouvez pas l'origine du bug, vous pourrez toujours reprendre depuis votre sauvegarde plutôt que de tout recommencer depuis le début.

En suivant ce conseil, notre premier objectif sera de parvenir à la compilation de l'image officielle. Traduction : l'image que vous allez compiler, c'est celle qui est disponible en téléchargement sur le site officiel d'OpenWRT (ex. : openwrt-wrt54g-squashfs.bin). Cela n'a pas d'autres intérêts que de se faire la main.

On y va ! 🙂

D'abord, on met à jour la liste des paquets disponibles :

backfire_10.03$ ./scripts/feeds update -a && ./scripts/feeds install -a

Ensuite, on efface les fichiers de configuration de la compilation (créés automatiquement par make menuconfig, nous y reviendrons) :

backfire_10.03$ rm .config && rm .config.old

On récupère le fichier de configuration officiel (ici : déclinaison brcm47xx) et on le met en place :

backfire_10.03$ wget http://downloads.openwrt.org/backfire/10.03/brcm47xx/OpenWrt.config && mv OpenWrt.config .config

Par défaut, tous les packages sont compilés (en module) puis exclus de l'image finale. Pour éviter cette perte de temps lors de la compilation, on va demander à ce que les packages qui ne seront pas intégrés à l'image ne soient pas compilés. Pour cela, on commente les lignes qui finissent par "=m" (module) avec la commande suivante :

backfire_10.03$ sed -i 's,^.*=m,# & is not set,g' ./.config

On lance la compilation :

backfire_10.03$ make

Je vous rappelle qu'en cas de bug, il est possible d'utiliser l'option "V=99" qui permet d'avoir des indices quand à l'origine du plantage. Si vous avez un processeur multicœur, je vous rappelle qu'il est possible d'utiliser l'option "-j <nombre de cœurs + 1> .

Le système va compiler le noyau, busybox et les packages installés par défaut. Vous êtes autorisé à aller vous chercher un café 8) .

Si la compilation réussie (et il n'y a pas de raisons pour qu'elle ne réussisse pas), vous trouverez les images, au format squashfs, dans le dossier ./bin/brcm47xx .

Félicitation, vous venez de créer votre propre image pour votre routeur ! Elle doit avoir une taille équivalente à celle que l'on peut télécharger sur le site officiel. Vous pouvez essayer votre image sur votre routeur mais ce n'est vraiment pas la peine voire une mauvaise idée : la mémoire étant de la flash, elle est plus limitée qu'un disque dur en terme de nombre de cycles d'écriture possibles malgré les algorithmes de lissage de l'usure. Essayer une image qui n'a aucun intérêt use le matériel plus qu'autre chose.

Nous allons maintenant créer une image personnalisée.

Créer une image vraiment personnelle

Comme fil rouge, je vous propose de créer une image personnalisée contenant (presque) toutes les manipulations que je vous ai présentées sur ce blog : un résolveur DNS, un serveur NTP, ... Cela vous permettra de vous faire la main et de créer votre image bien à vous par la suite.

Si vous ne comprenez pas la raison d'être d'une modification ou si vous voulez plus d’explications, reportez-vous au billet qui traite de la modification en question. Ils sont tous dans la catégorie "OpenWRT".

Modifier les options du noyau Linux

Si vous voulez consulter et/ou modifier les options du noyau, utilisez la commande :

backfire_10.03$ make kernel_menuconfig

Une interface semi-graphique s'affichera au bout de quelques instants. Les options actuelles me convenant, je n'ai rien modifié. Mais il est toujours intéressant et instructif de regarder ce qui est déjà fait.

C'est également dans ce menu que vous pouvez, par exemple, activer le support du contrôle par groupe des processus, activez le support de systèmes de fichiers supplémentaires ou bien encore saisir un nom personnalisé pour votre noyau (la classe 8) pour frimer devant les copains).

Si vous faites des modifications, mettez "Exit" (bouton droit de la souris pour y accéder) et répondez "Yes" à la question de la sauvegarde de vos paramètres.

Ajouter/Supprimer des packages

Rien de plus facile : il suffit d'utiliser la commande :

backfire_10.03$ make menuconfig

Dans l'interface semi-graphique qui s'affiche, vous pouvez ajouter ou supprimer des packages.

Si vous n'avez pas un usage spécifique, vous pouvez désactiver la génération du SDK et de l'Image Builder. Vous gagnerez ainsi du temps à la compilation.

Pour notre part, nous activerons :

  • etherwake dans Network.
  • tcpdump-mini dans Network.
  • djbdns.-dnscache dans Network -> IP adresses and Names.
  • ddns-scripts dans Network -> IP adresses and Names.
  • ntpd dans Network -> Time Synchronization.
  • iptables-mod-conntrack-extra dans Network -> Iptables.
  • luci-i18n-french dans LuCi -> Translations.

C'est également le moment de décocher les logiciels que vous ne voulez pas afin qu'ils ne soient pas intégrés à l'image.Pour notre part, nous supprimerons les packages suivants :

  • ppp dans Network.
  • ppp-mod-pppoe dans Network.
  • kmod-ppp dans Kernel Modules -> Network support.
  • kmod-pppoe dans Kernel Modules -> Network support.

Pour sauvegarder vos paramètres, mettez "Exit" (bouton droit de la souris pour y accéder) et répondez "Yes" à la question de la sauvegarde de vos paramètres.

À moins que vous ne teniez à désactiver tous les autres composants qui vont être compilés en modules mais pas intégrés à l'image à la main, utilisez la commande que nous avons déjà vu :

backfire_10.03$ sed -i 's,^.*=m,# & is not set,g' ./.config

Ces deux étapes (sauvegarde des paramètres et désactivations des modules) sont à faire avant chaque compilation si vous avez modifié quelque chose dans l’interface semi-graphique.

Vous pouvez compilez avec make. N'oubliez pas de faire un make clean avant ! Je ne vous le rappellerai plus à partir de maintenant, il faudra donc y penser !

Deuxième pause café ! 😀

Vous devriez obtenir une image d'une taille de 3Mo/3.1Mo environ . Il est encore inutile de tenter de l'installer sur votre routeur pour les raisons déjà évoquées ci-dessus.

Ajouter votre package personnel / vos modifications aux sources

Si vous avez créé/porté un logiciel pour OpenWRT, c'est le moment de le mettre en place dans l'arborescence avec son makefile et tout et tout. Je vous regarde faire 😉 .

Ensuite, vous n'avez plus qu'à le sélectionner dans l’interface semi-graphique de configuration.

C'est également le moment de faire les modifications que vous voulez dans les sources. Par exemple, dans un billet, je vous avais montré comment optimiser la sécurité de dropbear et l'espace qu'il occupe dans la flash. C'est le moment d'appliquer ces modifications si vous le désirez. Je vous laisse aller les chercher dans l'article d'origine : OpenWRT : sécuriser l’accès SSH - Compiler dropbear pour n’autoriser que 3 essais de mot de passe par connexion.

Vous pouvez compiler et fabriquer l'image. Là encore, il me paraît inutile de l'essayer. Si vous voulez juste tester la compilation d'un package personnel, vous pouvez compiler uniquement ce package avec la commande :

backfire_10.03$ make package/dropbear/compile

Modifiez les options de busybox

Busybox est très personnalisable. Sa configuration se fait encore via le menu obtenu via la commande :

backfire_10.03$ make menuconfig

Pour cela, il suffit d'aller dans Base system -> Busybox -> Configuration. Enjoy !

Dans le cadre de ce tutoriel, nous allons :

  • Désactiver "rdate" dans Linux System Utilities.
  • Activer "history saving" dans Busybox Settings -> Busybox Library Tuning. Cela permet de sauvegarder l'historique des commandes saisies par chaque utilisateur entre deux connexions. Cela peut être utile.

À vous de continuer à personnaliser votre installation. Vous pouvez compiler mais je ne pense pas que cela soit nécessaire vu le peu de modifications que nous avons apportées.

Modifier des options générales

En dehors de Busybox, il reste encore plein d'options à explorer.

Dans le cadre de notre fil rouge, nous allons commencer par changer la langue par défaut de LuCi. Pour cela, cochez "Image configuration", appuyez sur Entrée et cochez "Preinit configuration option". Dans "Default Language", tapez "fr" et validez.

Maintenant, nous allons supprimer luci-admin-mini. Nous ne pouvons pas le faire depuis le menu de configuration car d'autres packages dépendent de lui. Nous allons forcer sa désinstallation en éditant directement le fichier .config, chose qu'il faut éviter de faire au maximum.

backfire_10.03$ vi .config

Cherchez la ligne suivante :

CONFIG_PACKAGE_luci-admin-mini=y

et commentez-là :

# CONFIG_PACKAGE_luci-admin-mini=y is not set

Appliquons le même raisonnement pour le package "luci-i18n-english".

Enregistrer vos modifications et quittez vi.

Libre à vous d'explorer les autres options.

Vous pouvez compiler l'image. Et si vous le souhaitez, vous pouvez même installer cette image sur votre routeur.

Note : Oui, j'ai lu la première ligne du fichier .config qui dit de ne pas le modifier à la main. Mais, n'ayant pas trouvé les packages qui dépendent de luci-admin-mini et de luci-i18n-english, je n'ai pas vraiment le choix. De plus, ce conseil est donné dans le cas où vous activez un logiciel sans activer ses dépendances (ex. : activer djbdns-dnscache sans activer djbdns-base). Autrement dit : si vous connaissez les dépendances d'un package que vous voulez installer, vous pouvez modifier le .config à la main sans problèmes.

Configurer les logiciels

Logiciels configurables avec uci

Il suffit de créer des scripts. Ces scripts seront placés dans un dossier files/etc/uci-defaults à la racine du buildroot. Tous les scripts se trouvant dans ce dossier seront exécutés une seule fois après le flashage du routeur quelque soit leur nom. Voici, à titre d'exemple, les scripts destinés à configurer les logiciels que nous avons installés ci-dessus :

backfire_10.03/files/etc/uci-defaults/ddns (pour ddns-scripts et DynDNS) :

#!/bin/sh
 
# DDNS parametres
uci set ddns.myddns.enabled=1 2>/dev/null
uci set ddns.myddns.interface=wan 2>/dev/null
uci set ddns.myddns.service_name=dyndns.org 2>/dev/null
uci set ddns.myddns.domain=<votre ndd> 2>/dev/null
uci set ddns.myddns.username=<votre login sur dynDNS> 2>/dev/null
uci set ddns.myddns.ip_source=network 2>/dev/null
uci set ddns.myddns.ip_network=wan 2>/dev/null
uci set ddns.myddns.force_interval=24 2>/dev/null
uci set ddns.myddns.force_unit=hours 2>/dev/null
uci set ddns.myddns.check_interval=10 2>/dev/null
uci set ddns.myddns.check_unit=minutes 2>/dev/null

 
# On valide tout
uci commit 2>/dev/null

Vous pouvez également marquer en dur votre mot de passe (uci set ddns.myddns.password=XXXX 2>/dev/null), mais je ne vous le conseille pas. Même si votre compte DynDNS n'est pas le compte le plus précieux que vous ayez, ce n'est pas une bonne pratique.

Dans la même veine, la bonne pratique voudrait que vous mettiez votre IP à jour sur DynDNS en utilisant le protocole HTTPS. C'est possible, voir le wiki d'OpenWRT à ce sujet mais les libs prennent beaucoup de place et je n'ai pas assez d'espace pour les accueillir.

Si vous êtes derrière une box ou qu'autre chose fait que l'interface wan (eth0.1) n'a pas une ip publique, il vous faudra utiliser un service externe pour récupérer votre ip publique et remplacer ces deux lignes :

uci set ddns.myddns.ip_source=network 2>/dev/null
uci set ddns.myddns.ip_network=wan 2>/dev/null

par

uci set ddns.myddns.ip_source=web 2>/dev/null
uci set ddns.myddns.ip_url=http://automation.whatismyip.com/n09230945.asp 2>/dev/null

backfire_10.03/files/etc/uci-defaults/dnscache (pour djbdns-dnscache) :

#!/bin/sh
 
# On configure dnscache
uci set djbdns.@dnscache[0].interface=lan 2>/dev/null
uci set djbdns.@dnscache[0].defaultallowif=lan 2>/dev/null
uci set djbdns.@dnscache[0].forwardonly=0 2>/dev/null

 
# On valide tout
uci commit 2>/dev/null
 
# On met les bonnes autorisations sur le script d'init de dnscache
chmod ugo+x /etc/init.d/dnscache 2>/dev/null

 
# dnscache est déjà pris en compte par hotplugd, il n'a pas besoin d'init pour 
# se lancer
rm -f /etc/rc.d/S65dnscache 2>/dev/null

ATTENTION : dnscache est pris en charge par hotplugd uniquement si votre interface wan est configurée avec DHCP. Dans le cas d'une IP statique sur l'interface wan et d'après mes tests, hotplugd n'agit pas et init est nécessaire. Si vous êtes dans ce cas, ne supprimez pas le script d'init.

backfire_10.03/files/etc/uci-defaults/dnsmasq (pour dnsmasq) :

#!/bin/sh
 
# On désactive la fonctionnalité forward DNS de dnsmasq
uci set dhcp.@dnsmasq[0].port=0 2>/dev/null

 
 
# On valide tout
uci commit 2>/dev/null
 
# On met les bonnes autorisations sur le script d'init de dnsmasq
chmod ugo+x /etc/init.d/dnsmasq 2>/dev/null

backfire_10.03/files/etc/uci-defaults/dropbear (pour dropbear) :

#!/bin/sh
 
# On désactive l'authentification par mot de passe
uci set dropbear.@dropbear[0].PasswordAuth=off 2>/dev/null

 
# On valide tout
uci commit 2>/dev/null

backfire_10.03/files/etc/uci-defaults/firewall (pour configurer, un peu, netfilter) :
L'idée, c'est de définir, intégralement, nos propres règles, de A à z. Or, des règles sont chargées à chaque reboot du routeur à partir du fichier /etc/config/firewall. Plusieurs méthodes s'offrent, comme d'habitude, à vous : soit vous éditez /etc/config/firewall qui est dans un format classique d'uCi pour y intégrer vos règles. Soit vous supprimez ce fichier de l'image et vous définisez, dans un script d'init, les règles de filtrage qu'il convient d'appliquer. Ayant déjà un script standard qui charge mes règles de filtrage qui est pas trop mauvais, j'ai choisi cette deuxième solution. backfire_10.03/files/etc/uci-defaults/firewall contient donc :

#!/bin/sh

 
# On supprime les regles par defaut stockees dans uci
rm -rf /etc/config/firewall 2>/dev/null

 
# On met les bonnes autorisations sur le script d'init du firewall
chmod ugo+x /etc/init.d/firewall 2>/dev/null

backfire_10.03/files/etc/uci-defaults/ntpd (pour configurer, un peu, ntpd) :

#!/bin/sh
 
# ntpd est deja lance par hotplug.d, nous n'avons pas besoin qu'il soit lance par init
rm -f /etc/rc.d/S65ntpd 2>/dev/null

ATTENTION : ntpd est pris en charge par hotplugd uniquement si votre interface wan est configurée avec DHCP. Dans le cas d'une IP statique sur l'interface wan et d'après mes tests, hotplugd n'agit pas et init est nécessaire. Si vous êtes dans ce cas, ne supprimez pas le script d'init de ntpd.

backfire_10.03/files/etc/uci-defaults/system (pour configurer les options générales du système) :

#!/bin/sh
 
# Nom du routeur
uci set system.@system[0].hostname="Nouveau_Nom" 2>/dev/null

echo "Nouveau_Nom" > /proc/sys/kernel/hostname 2>/dev/null

 
# Fuseau horaire
uci set system.@system[0].zonename=Europe/Paris 2>/dev/null
uci set system.@system[0].timezone=CET-1CEST,M3.5.0,M10.5.0/3 2>/dev/null

 
# On finit de supprimer rdate
uci del system.@rdate[0] 2>/dev/null
rm -f /etc/hotplug.d/iface/40-rdate 2>/dev/null

 
# On valide tout
uci commit 2>/dev/null

backfire_10.03/files/etc/uci-defaults/network (pour configurer les interfaces réseau) :

#!/bin/sh
 

# Configuration interface LAN
uci set network.lan.proto=static
uci set network.lan.netmask=255.255.255.0
uci set network.lan.ipaddr=192.168.0.254
uci set network.lan.dns=192.168.0.254 #dnscache

 
# Configuration interface WAN
uci set network.wan.proto=static
uci set network.wan.ipaddr=192.168.1.253
uci set network.wan.netmask=255.255.255.0
uci set network.wan.gateway=192.168.1.254
uci set network.wan.dns=192.168.0.254 #dnscache

 
# On valide tout
uci commit 2>/dev/null

Je pense que les interfaces peuvent également être configurées depuis le .config puisqu'on peut y lire les lignes suivantes :

CONFIG_UCI_PRECONFIG_network_lan_dns=""

CONFIG_UCI_PRECONFIG_network_lan_proto="static"
CONFIG_UCI_PRECONFIG_network_lan_gateway=""
CONFIG_UCI_PRECONFIG_network_lan_netmask="255.255.255.0"
CONFIG_UCI_PRECONFIG_network_lan_ipaddr="192.168.1.1"

Mon test a échoué mais je pense que cela est dû à un autre paramètre que j'ai activé en même temps.

On peut même configurer l'adresse que prend le bootloader :

CONFIG_TARGET_PREINIT_IFNAME=""
CONFIG_TARGET_PREINIT_IP="192.168.1.1"
CONFIG_TARGET_PREINIT_NETMASK="255.255.255.0"
CONFIG_TARGET_PREINIT_BROADCAST="192.168.1.255"

Vu le nombre de fois où ce bootloader et son serveur TFTP m'ont sauvés la mise, je n'ai pas essayé de changer ces paramètres.

Vous avez compris le principe et vous pouvez créer vos propres scripts pour les logiciels que vous avez installés ou modifier les scripts ci-dessous afin de configurer plus finement certains logiciels (dnsmasq par exemple).

Logiciels ne pouvant pas être configurés avec uci

Il y a des logiciels qui possèdent leurs propres fichiers de configuration. Pour eux, il suffit de placer les fichiers dans l'arborescence, comme si vous étiez sur votre routeur. Par exemple, si à la fin du flashage, vous avez besoin qu'un fichier /etc/xxxx soit créez, alors placez-le dans backfire_10.03/files/etc/xxxx et il sera mis au bon endroit. Si le fichier existe déjà car il est fourni par un logiciel, par exemple, il sera écrasé par votre version.

Il y a une autre manière de procéder : mettre le fichier dans le package qui lui correspond. Exemple : vous avez un fichier de configuration pour ntpd (/etc/ntp.conf), alors vous le mettez dans feeds/packages/net/ntpd/files/etc/ntp.conf. Pour les packages par défaut (dropbear par exemple), le chemin est différent : packages/dropbear ...

Personnellement, j'ai choisi de tout mettre dans un même dossier car cela simplifie la maintenance.

Voici donc les fichiers que j'ai rajoutés.

backfire_10.03/files/etc/banner (le message de bienvenue lors d'une connexion SSH) :

Salut !

backfire_10.03/files/etc/ntp.conf (configuration de ntpd) :

server ntp-p1.obspm.fr iburst prefer
server canon.inria.fr iburst
 
restrict default ignore
restrict ntp-p1.obspm.fr mask 255.255.255.255 nomodify notrap nopeer noquery
restrict canon.inria.fr mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap nopeer
restrict 127.0.0.1
 
driftfile  /etc/ntp.drift

backfire_10.03/files/etc/services (nécessaire au bon fonctionnement de ntpd) :
Sans lui, vous aurez des messages d'erreur du genre "getaddrinfo: "ntp-p1.obspm.fr" invalid host address, ignored", "restrict: error in address 'ntp-p1.obspm.fr' on line 6. Ignoring...", "Deferring DNS for ntp-p1.obspm.fr 1" et "getaddrinfo(127.0.0.1) failed: Servname not supported for ai_socktype".

ntp             123/udp     # Network Time Protocol
ntp             123/tcp     # Network Time Protocol

backfire_10.03/files/etc/passwd (permet de rajouter des comptes utilisateur sans droits d'administration (ici : guest)) :

root:*:0:0:root:/root:/bin/ash
guest:*:65533:65533:guest:/home/guest:/bin/ash
nobody:*:65534:65534:nobody:/var:/bin/false
daemon:*:65534:65534:daemon:/var:/bin/false

backfire_10.03/files/etc/group (permet de rajouter des groupes utilisateurs destinés à accueillir les comptes standards) :

root:x:0:
guestg:x:65533:
nogroup:x:65534:

Authentification par clé publique/privée :

Mettez la clé publique de root dans backfire_10.03/files/etc/dropbear/authorized_keys si vous voulez utiliser l'authentification à clé publique pour vous connecter avec le compte root via SSH.

Pour chaque compte utilisateur créé, mettez sa clé publique dans un fichier ".ssh/authorized_keys" placé dans son home directory. Par exemple, pour le compte guest créé ci-dessous, la clé publique devra se trouver dans backfire_10.03/files/home/guest/.ssh/authorized_keys .

Si vous voulez utiliser l'authentification par clé publique pour vos comptes sans droits, ne changez surtout pas le propriétaire de leurs home directory (pas de chown -R guest:guestp /home/guest dans un script dans l'image). En effet, pour une raison qui m'échappe, l'authentification échoue sinon. Mais, dans ce cas-là, l'utilisateur n'est pas vraiment chez lui : il ne peut pas créer un répertoire par exemple. Heureusement, vous pouvez changer le proprietaire du home directory de chacun de vos comptes utilisateurs après le flashage et aucun problème n'apparait.

backfire_10.03/files/etc/hotplug.d/iface/15-dnsd (script permettant de relancer dnscache en cas de coupure de l'accès au net) :

#!/bin/sh
 
if [ "$INTERFACE" = "wan" ] 

then
	DNS_RUNNING=`ps  | grep dnscache | grep -v grep`

 
	case "${ACTION:-ifup}" in
        	ifup)
                	[ -z "$DNS_RUNNING" ] && /etc/init.d/dnscache start
       		;;

 
		ifdown)
               		[ -n "$DNS_RUNNING" ] && /etc/init.d/dnscache stop
        	;;

	esac
fi

ATTENTION : Il semble que ce script est inutile si vous êtes en IP statique sur l'interface WAN.

backfire_10.03/files/etc/init.d/dnscache (script d'init pour dnscache modifié pour logger les démarrages/arrêts du démon) :
ATTENTION : Le script n'est pas donné ici dans son intégralité. Attention donc aux copier/coller malheureux.

#!/bin/sh /etc/rc.common
# Copyright (C) 2007 OpenWrt.org
 
[...]
 
start() {
    echo "Starting $DESC: $NAME"

    logger starting dnscache
    config_load djbdns
    config_foreach get_userids global
    mkdir -p $ROOT
    cp -fa /etc/dnscache/* $ROOT

    rm -f $ROOT/resolvers
    rm -f $ROOT/ignoreip
    chown -R $UID:$GID $ROOT

    config_foreach start_dnscache dnscache
}
 
[...]
 
stop() {
    echo -n "Stopping $DESC: $NAME"

    logger stopping dnscache
    kill `pidof $NAME|sed "s/$$//g"` > /dev/null 2>&1

    echo " ."
}
 
restart() {
    echo "Restarting $DESC: $NAME... "

    stop
    sleep 2
    start
}

backfire_10.03/files/etc/init.d/dnsmasq (script d'init pour dnsmasq modifié afin d'indiquer uniquement notre résolveur DNS local) :
ATTENTION : Le script n'est pas donné ici dans son intégralité. Attention donc aux copier/coller malheureux.

#!/bin/sh /etc/rc.common
# Copyright (C) 2007 OpenWrt.org
 
START=60
DNS_SERVERS=""
DOMAIN=""
 
[...]
 
start() {
        include /lib/network
        scan_interfaces
        config_load dhcp
 
        args=""
        config_foreach dnsmasq dnsmasq
        config_foreach dhcp_host_add host
        config_foreach dhcp_boot_add boot
        config_foreach dhcp_mac_add mac
        config_foreach dhcp_vendorclass_add vendorclass
        config_foreach dhcp_userclass_add userclass
        config_foreach dhcp_circuitid_add circuitid
        config_foreach dhcp_remoteid_add remoteid
        config_foreach dhcp_subscrid_add subscrid
        config_foreach dhcp_domain_add domain
        config_foreach dhcp_add dhcp
 

        /usr/sbin/dnsmasq $args && {
                rm -f /tmp/resolv.conf
                [ -n "$DOMAIN" ] && echo "search $DOMAIN" >> /tmp/resolv.conf
                DNS_SERVERS="192.168.1.1" #A REMPLACER SI VOTRE ROUTEUR A UNE IP LAN DIFFERENTE !
                for DNS_SERVER in $DNS_SERVERS ; do
                        echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
                done
        }
}

 
stop() {
        [ -f /tmp/resolv.conf ] && {
                rm -f /tmp/resolv.conf
                ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
        }
        killall dnsmasq
        return 0
}

backfire_10.03/files/etc/init.d/firewall (pour configurer, un peu plus, netfilter) :
À adapter à vos besoins et à complèter car il manque encore des choses (séparation tcp, udp, icmp et filtrage différentié, éviter d'autoriser des connexions sur le simple fait qu'elles sont établies mais préciser le port source, ...)

#!/bin/sh /etc/rc.common
 
START=45

 
start() {
	#On fait le menage
	stop
 
	############### TABLE FILTER
	##On créer les chaînes correspondant à nos zones
	iptables -t filter -N lan-lan
	iptables -t filter -N lan-bas
	iptables -t filter -N lan-wan

 
	iptables -t filter -N bas-lan
	iptables -t filter -N bas-bas
	iptables -t filter -N bas-wan

 
	iptables -t filter -N wan-lan
	iptables -t filter -N wan-bas
	iptables -t filter -N wan-wan

 
	##On redirige les paquets vers nos chaines
	iptables -t filter -A INPUT -i br-lan -j lan-bas
	iptables -t filter -A INPUT -i lo -j bas-bas
	iptables -t filter -A INPUT -i eth0.1 -j wan-bas

 
	iptables -t filter -A FORWARD -i br-lan -o br-lan -j lan-lan
	iptables -t filter -A FORWARD -i br-lan -o eth0.1 -j lan-wan 
	iptables -t filter -A FORWARD -i eth0.1 -o eth0.1 -j wan-wan
	iptables -t filter -A FORWARD -i eth0.1 -o br-lan -j wan-lan

 
	iptables -t filter -A OUTPUT -o br-lan -j bas-lan
	iptables -t filter -A OUTPUT -o lo -j bas-bas
	iptables -t filter -A OUTPUT -o eth0.1 -j bas-wan

 
	##On traite nos chaines
	#Du lan vers le routeur d'abord
	#Etablies/relatives
	iptables -t filter -A lan-bas -m state --state RELATED,ESTABLISHED -j ACCEPT
	#SSH

	iptables -t filter -A lan-bas -s 192.168.0.0/24 -d 192.168.0.254/32 -p tcp -m state --state NEW -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j ACCEPT 
	#DNS

	iptables -t filter -A lan-bas -s 192.168.0.0/24 -d 192.168.0.254/32 -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT 
	iptables -t filter -A lan-bas -s 192.168.0.0/24 -d 192.168.0.254/32 -p tcp -m state --state NEW -m tcp --dport 53 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#DHCP

	iptables -t filter -A lan-bas -p udp -m state --state NEW -m udp --sport 68 --dport 67 -j ACCEPT
	#HTTP

	iptables -t filter -A lan-bas -s 192.168.0.0/24 -d 192.168.0.254/32 -p tcp -m state --state NEW -m tcp --dport 80 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#NTP

	iptables -t filter -A lan-bas -s 192.168.0.0/24 -d 192.168.0.254/32 -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
	#ICMP (echo request)

	iptables -t filter -A lan-bas -s 192.168.0.0/24 -d 192.168.0.254/3 -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT

 
	#Du lan vers internet ensuite
	#Etablies/relatives
	iptables -t filter -A lan-wan -m state --state RELATED,ESTABLISHED -j ACCEPT
	#FTP

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 20 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 21 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#SSH

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#HTTP/HTTPS

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 80 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 443 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#SMTPS/SMTP auth

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 465 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 587 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#POP3S

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 995 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#SVN

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 3690 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p udp -m state --state NEW -m udp --dport 3690 -j ACCEPT
	#IRC

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 6667 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 6697 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#Plesk

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 8443 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#Git

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 9418 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p udp -m state --state NEW -m udp --dport 9418 -j ACCEPT
	#ICMP (echo request)

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT

 
	#Du routeur vers le lan
	#Etablies/relatives
	iptables -t filter -A bas-lan -m state --state RELATED,ESTABLISHED -j ACCEPT 
	#DHCP

	iptables -t filter -A bas-lan -p udp -m state --state NEW -m udp --sport 67 --dport 68 -j ACCEPT

 
	#Boucle locale
	iptables -t filter -A bas-bas -j ACCEPT
 
	#Du routeur vers internet

	#Etablies/relatives
	iptables -t filter -A bas-wan -m state --state RELATED,ESTABLISHED -j ACCEPT
	#FTP dans tunnel SSH

	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 20 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 21 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#SSH

	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#DNS

	iptables -t filter -A bas-wan -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT 
	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 53 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#HTTP/HTTPS pour opkg/HTTP dans tunnel SSH

	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 80 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 443 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#NTP

	iptables -t filter -A bas-wan -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
	#SMTPS/SMTP auth pour tunnel SSH

	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 465 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 587 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#POP3S dans tunnel SSH

	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 995 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#SVN

	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 3690 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A bas-wan -p udp -m state --state NEW -m udp --dport 3690 -j ACCEPT
	#IRC dans tunnel SSH

	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 6667 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 6697 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#Plesk pour tunnel SSH

	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 8443 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	#Git

	iptables -t filter -A bas-wan -p tcp -m state --state NEW -m tcp --dport 9418 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	iptables -t filter -A bas-wan -p udp -m state --state NEW -m udp --dport 9418 -j ACCEPT
	#ICMP (echo request)

	iptables -t filter -A bas-wan -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT

 
	#D'internet vers le lan
	#Etablies/relatives
	iptables -t filter -A wan-lan -m state --state RELATED,ESTABLISHED -j ACCEPT

 
	#D'internet vers le routeur enfin
	#Etablies/relatives
	iptables -t filter -A wan-bas -m state --state RELATED,ESTABLISHED -j ACCEPT
	#SSH

	iptables -t filter -A wan-bas -p tcp --dport 22 -m state --state NEW -m recent --name ATTACKER_SSH --rsource --update --seconds 600 --hitcount 2 -j DROP
	iptables -t filter -A wan-bas -p tcp --dport 22 -m state --state NEW -m recent --name ATTACKER_SSH --rsource --set

	iptables -t filter -A wan-bas -p tcp --dport 22 -m state --state NEW -j ACCEPT

 
	##On change les politiques d'accés
	iptables -t filter -P INPUT DROP
	iptables -t filter -P FORWARD DROP
	iptables -t filter -P OUTPUT DROP

 
 
	##############TABLE NAT
	##On créer des chaines qui correspondent à nos zones
	iptables -t nat -N prerouting-lan
	iptables -t nat -N prerouting-wan

 
	iptables -t nat -N postrouting-lan
	iptables -t nat -N postrouting-wan
 
	##On redirige les paquets dans nos chaines

	#C'est ici que l'on peut rediriger des ports (ex. : proxy transparent, on redirige port 80/443 -> 8080)
	iptables -t nat -A PREROUTING -i br-lan -j prerouting-lan

 
	#C'est ici que l'on fait le DNAT (ex. : monter un serveur web sur le LAN, accessible sur internet)
	iptables -t nat -A PREROUTING -i eth0.1 -j prerouting-wan

 
	iptables -t nat -A POSTROUTING -o br-lan -j postrouting-lan
 
	#C'est ici que l'on fait le SNAT ou MASQUERADE si ip dynamique

	iptables -t nat -A POSTROUTING -o eth0.1 -j postrouting-wan
 
	##On traite nos chaines

	##SNAT/masquerade
	iptables -t nat -A postrouting-wan -s 192.168.0.0/24 -j MASQUERADE

 
	##DNAT
	# Torrent
	#iptables -t nat -A prerouting-wan -p tcp -m tcp --dport 4444 -j DNAT --to-destination 192.168.1.138:4444
	#iptables -t nat -A prerouting-wan -p udp -m udp --dport 4444 -j DNAT --to-destination 192.168.1.138:4444
 
	##############TABLE MANGLE

	##Cette table sert pour la modification des paquets (ex:. marquer les paquets pour faire de la QoS ensuite)
	##Nous verrons cela plus tard
 
 
	##############TABLE RAW
	##Cette table sert à indiquer les connections qui ne doivent pas être suivies par conntrack
 
	echo "Firewall started"

	logger Firewall started
}
 
stop() {
	############### TABLE FILTER
	##On change les politiques d'accés
	iptables -t filter -P INPUT ACCEPT
	iptables -t filter -P FORWARD ACCEPT
	iptables -t filter -P OUTPUT ACCEPT

 
	##On fait le menage
	iptables -t filter -F
	iptables -t filter -X

 
 
	##############TABLE NAT
	##On change les politiques d'accés
	iptables -t nat -P PREROUTING ACCEPT

	iptables -t nat -P OUTPUT ACCEPT
	iptables -t nat -P POSTROUTING ACCEPT
 
	##On fait le menage

	iptables -t nat -F
	iptables -t nat -X
 
	#NAT

	iptables -t nat -A POSTROUTING -o eth0.1 -s 192.168.0.0/24 -j MASQUERADE

 
 
	##############TABLE MANGLE
	##On change les politiques d'accés
	iptables -t mangle -P PREROUTING ACCEPT
	iptables -t mangle -P INPUT ACCEPT
	iptables -t mangle -P FORWARD ACCEPT
	iptables -t mangle -P OUTPUT ACCEPT
	iptables -t mangle -P POSTROUTING ACCEPT

 
	##On fait le menage
	iptables -t mangle -F
	iptables -t mangle -X

 
 
	##############TABLE RAW
	##On change les politiques d'accés
	iptables -t raw -P PREROUTING ACCEPT
	iptables -t raw -P OUTPUT ACCEPT

 
	##On fait le menage
	iptables -t raw -F
	iptables -t raw -X

 
	echo "Rules cleaned and firewall stopped"
	logger Rules cleaned and firewall stopped
}
 
restart() {
	start
 
	echo "Firewall restarted"

	logger Firewall restarted
}
 
reload() {
	start
 
	echo "Firewall reloaded"
	logger Firewall reloaded

}

À vous de continuer la configuration de votre système (ex. : VLAN). La méthode exposée ci-dessus fonctionne pour tous les fichiers.

Vous pouvez compiler puis essayer l'image ainsi générée. Tous vos logiciels doivent être configurés.

Si jamais vous avez une erreur durant la compilation

La liste ci-dessous est loin d'être exhaustive.

  • N'avez-vous pas oublié de faire un make clean avant de compiler ? Faites-le et relancez la compilation en faisant un make clean au préalable.
  • N'avez-vous pas oublié de faire un sed après avoir modifié une option avec make menuconfig ? Faites-le et relancez la compilation en faisant un make clean au préalable.
  • Lancez la compilation avec le paramètre V=99, lisez le message d'erreur. C'est parfois tout bête (espace disque manquant (sisi ...), mauvaise saisie dans un makefile, ...).

Si rien n'améliore la situation, supprimez vos modifications récentes (d'où l'intérêt d'avoir fait des sauvegardes du buildroot à chaque étape concluante) et retenter la compilation sans oublier de faire un make clean. Si jamais quelque chose qui compilait avant ne compile plus, redémarrez votre ordinateur (sisi, ça arrive, même sous UNIX ...).

Ce qui vous reste à faire après le flashage

Le serveur SSH est fonctionnel et telnetd est déjà désactivé. Il est nécessaire d'attendre un peu pendant que dropbear génère la paire de clé du serveur. Durant ce laps de temps, le serveur rejette les tentatives de connexions sur le port SSH.

Changez le mot de passe de root, même si vous utilisez une authentification par clé publique avec la commande passwd.

Changez le mot de passe de chacun des comptes utilisateurs sans droits avec passwd <login> .

Définissez le mot de passe pour le DDNS avec la commande : uci set ddns.myddns.password=XXXX

Modifiez le proprietaire du home directory de chacun de vos comptes utilisateurs sans droits : chown -R login:groupe home_directory

Profit !

Sources

P.S. : Oui, j'ai remarqué les bugs de mon hébergeur (site inaccessible, billet qui disparait (ou plutôt base de données qui perd des données ...)). Ça devrait aller mieux ... peut-être 😀 .

Installer un serveur NTP sur OpenWRT

Table des matières

Pourquoi ?

Vous avez peut-être lu mon billet sur comment utiliser un client NTP sous OpenWRT et vous vous demandez peut-être pourquoi je décide maintenant d'utiliser un serveur.

Tout simplement car je me suis aperçu que j'avais fait une erreur lors de mon choix d'utiliser seulement un client NTP.

En effet, comment vais-je synchroniser les autres machines de mon réseau ? Comme avant, en utilisant un serveur externe ? Avouez que cela fait beaucoup de requêtes, ce qui encombre inutilement ma bande passante comme la bande passante du serveur externe. De plus, si la connexion au net tombe, un serveur local permettra de conserver le même temps (qui perdra en précision, certes) sur toutes les machines du LAN.

De plus, un serveur NTP permet une plus grande précision (certains se demanderont si on a besoin d'une telle précision ... à chacun de juger). À titre d'exemple : selon la documentation officielle, ntpclient utilise le premier serveur qu'il peut joindre parmi ceux que vous lui avez spécifiés. NTPd utilise des algorithmes plus complexes pour déterminer le meilleur serveur de temps de la liste.

Il doit surement y avoir d'autres arguments en faveur d'un serveur NTP mais je pense que je vous ai donné les principaux

Quel serveur choisir ?

root@OpenWrt:~# opkg list | grep -i NTP
chrony - 1.23-3 - A NTP implementation that has been specifically written to work
 connection to the network where your NTP servers are.
[...]
ntpd - 4.2.6-4 - The ISC ntp suite is a collection of tools used to synchronize
 the system clock with remote NTP time servers and run/montior
 local NTP servers.
 This package contains the ntpd server.
[...]
openntpd - 3.9p1-3 - A free and easy to use NTP (Network Time Protocol) implementation.

OpenWRT donne le choix entre trois implémentations du protocole NTP :

  • ntpd de ntp.org, le démon de référence maintenu par l'ISC.
  • openntpd, un démon maintenu par le projet OpenBSD.
  • chronyd, un démon NTP à préférer en cas de connexion instable au réseau.

Ma connexion est relativement stable donc chrony n'est pas fait pour moi. Le choix entre openntpd ou ntpd dépend de vos préférences ... Openntpd est sous licence BSD, ntpd est sous licence ISC. Openntpd est une implémentation allégée avec une configuration plus simple (je n'ai pas dit "simpliste" !) du protocole NTP mais le fait qu'il soit développé par l’équipe du projet OpenBSD est un gage de sécurité supplémentaire (openntpd tourne sous un compte sans droits par exemple). ntpd propose une configuration plus touffue (je n'ai pas dis "plus efficace"), un mécanisme d'authentification ainsi que des outils permettant de surveiller le fonctionnement du démon, ce que ne propose pas openntpd. Opennptd propose un système de poids pour choisir la priorité des serveurs NTP à interroger plutôt qu'une simple option "prefer" comme ntpd ... Bref, comme vous le voyez, la décision vous revient, dépend de vos besoins et est très personnelle.

Personnellement, j'ai choisi ntpd, le démon historique pour 2 raisons :

  • Sous OpenWRT, openntpd réclame le support de l'ipv6 (sinon un message "fatal: client_query socket: Address family not supported by protocol" s'affichera lors du lancement. Il faut donc installer le package kmod-ipv6. Je ne souhaite pas avoir le support ipv6 sur mon routeur pour l'instant (tant que mon FAI ne me proposera pas du full ipv6 en fait) et donc m’encombrer d'un package inutile. Source : can't start the NTP daemon (openntpd) sur forum.openwrt.org
  • Openntpd ne permet pas de déplacer le fichier servant à stocker la dérive de l'horloge. Celui-ci se trouve dans /var/db qui est un répertoire tmpfs donc effacé au redémarrage du routeur. Donc le serveur doit recalculer la dérive à chaque redémarrage. Même si ce n'est pas une opération lourde, c'est dommage.

Dans la suite de ce guide, je m’intéresserai donc uniquement à ntpd de ntp.org.

Installation de ntpd

Vous avez l'habitude :

opkg update && opkg install ntpd

Configuration de ntpd

Modification du fichier de configuration

La configuration se fait dans le fichier /etc/ntp.conf (attention, pas de "d" à "ntp" !). Voici le fichier que je vous propose :

## Les serveurs externes qui seront utilisés pour se synchroniser (strate 1 et 1)
server ntp-p1.obspm.fr iburst prefer
server canon.inria.fr iburst
 
## Contrôle des accès
# Par défaut, on ne répond à rien ...
restrict default ignore

# ... exception faite des serveurs externes sur lesquels on va se synchroniser ... 
# (rien ne circule sauf la correction du temps : dans l'ordre, on n'autorise 
# pas la création de hooks pour des journaux à distance, on ne peut pas consulter 
# ou modifier la configuration du serveur, les serveurs ne peuvent pas tenter 
# d'établir une connexion en tant que peer)
restrict ntp-p1.obspm.fr mask 255.255.255.255 nomodify notrap nopeer noquery
restrict canon.inria.fr mask 255.255.255.255 nomodify notrap nopeer noquery

# ... et des stations du réseau local (on peut demander le temps et consulter 
# l'état du serveur, les autres actions sont refusées)
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap nopeer
 
# ... et en local (on peut tout faire)
restrict 127.0.0.1
## Fin du contrôle des accès
 
# On stocke le décalage de l'horloge système. Cela permet de maintenir, un peu, 
# l'heure en cas de coupures du net. Ne pas placer ce fichier dans un répertoire 
# temporaire : cela évite aussi à ntpd d'avoir à refaire les calculs permettant
# de déterminer la dérive de l'horloge après chaque redémarrage.
driftfile  /etc/ntp.drift

Malgré les commentaires, je souhaite ajouter quelques détails :

  • Pour trouver des serveurs NTP, vous pouvez faire une recherche Google et/ou consulter le site du Comité Réseau des Universités. Veuillez à respecter les conditions d'utilisation (ce n'est pas compliqué à envoyer, un mail). Essayez de choisir des serveurs qui ne sont pas sur le même réseau/FAI afin d'accroître la redondance en cas de problème sur un réseau. Ce point est relativement compliqué vu que beaucoup de serveur sont fournis par l'enseignement supérieur et donc sont sur le réseau RENATER. Ce point n'est pas non plus le point capital : même si tout un réseau venait à tomber (ce qui est déjà rare), votre horloge ne sera pas instantanément déréglée E de plusieurs minutes. Par contre, veuillez à choisir des serveurs qui ne sont pas dépendant l'un de l'autre. Exemple : vous choisissiez d'utiliser S1 et S2, deux serveurs pris au hasard et vous vous rendez compte qu'en fait S2 se synchronise sur S1 ... Pour vérifier cela, utilisez la commande "ntpq -np <ip_du_serveur>" sur chaque serveur que vous souhaitez utiliser.
  • Comme vous pouvez le constater, j'utilise des serveurs de strate 1. On pourra discuter sur les usages qu'un particulier peut faire de ces serveurs et de la précision associée. On pourra également s'interroger sur qui a réellement besoin d'une horloge en strate 2 et de sa grande précision (pourvu que la source soit fiable) : une PME, une institution bancaire, l'armée ?! Bref, je m'arrête là. Bien qu'on recommande habituellement l'usage de serveurs de strate 2 voire 3 pour un particulier, je signale que je ne suis pas le seul à utiliser un serveur de strate 1 : voir à ce sujet l'article "Installation pas à pas de Debian 6.0 (Squezze)" dans GNU/Linux Magazine/France n°139 de juin 2011.
  • L'option iburst permet de répéter les tentatives quand un serveur est inaccessible.
  • L'option prefer permet de marquer un et un seul serveur comme étant ... notre serveur de temps de référence préféré.

ÉDIT 25/08/2011 à 2h15 :
Attention :
De nombreux guides (y compris celui-ci avant cette correction) suggèrent d'utiliser l'horloge locale en insérant les lignes suivantes dans le fichier de configuration :

server 127.127.1.0
fudge 127.127.1.0 stratum 10

Cela permet, en théorie, d'utiliser l'horloge locale afin que le serveur continue à fonctionner dans le cas où les serveurs externes deviendraient inaccessibles. Cela permet également de pouvoir synchroniser les clients alors que le serveur n'est pas encore totalement synchronisé avec les serveurs externes. Et, en effet, cela fonctionne.

Mais sur OpenWRT, lors de chaque reboot, l'horloge revient à l'heure de compilation du noyau. Probablement car il n'y a pas de circuit temporel sur le WRT54GL. Donc, le fait d'utiliser l'horloge locale comme référence fait que ntpd va mettre doucement à jour l'heure au lieu de la mettre brutalement à jour au démarrage du système puis de la synchroniser régulièrement. Et comme le décalage est important, la synchronisation initiale va prendre beaucoup de temps. Trop de temps. Donc, je ne conseille pas cette option sous OpenWRT.
Fin de l'édit

A noter : Par défaut, ntpd envoie ses journaux à syslog. Ils sont donc accessibles via la commande logread. Si vous voulez les enregistrer dans un fichier différent, il est possible d'utiliser l'option "logfile /path/fichier" dans le fichier de configuration. Il est également possible d'utiliser l'option "logconfig" pour régler les informations qui seront logguées (via syslog ou via le fichier). "logconfig +all" permet de tout logguer. Je ne conseille néanmoins pas cette option sur le long terme vu la masse d'information qui est envoyée mais elle peut servir lors d'une phase de débogage. Referez-vous au man pour voir les autres valeurs que peut prendre cette option.

Il n'y a rien d'autre à configurer : un script d'init et un script pour le démon hotplugd ont déjà été fourni par OpenWRT.

On pensera tout de même à configurer convenablement le pare-feu du routeur. Mais là, c'est une autre histoire 🙂 .

Faire en sorte que ntpd n'écoute pas sur toutes les interfaces réseau

Pour cela, ntpd possède un paramètre, "-I", qui permet de préciser les interfaces sur lesquelles le démon écoutera. Bizarrement, il faut indiquer également l'interface de sortie (= l'interface par laquelle les paquets à destination des serveurs NTP externes passeront). De ce fait, ntpd doit, au minimum, écouter sur l'interface externe et sur l'interface LAN. Il le fait par défaut donc pas besoin de lui indiquer. Si vous avez plusieurs VLAN et que vous ne voulez pas proposer de serveur NTP sur l'un d'eux, il est préférable, à mon avis, de ne pas autoriser le plan d'adressage de ce VLAN dans le fichier de configuration de ntpd voir de bloquer le trafic NTP avec iptables. Si malgré tout vous voulez faire en sorte que ntpd écoute uniquement sur les interfaces que vous spécifiez, voici comment procéder.

Il suffit de modifier le fichier /etc/init.d/ntpd. Dans la fonction start, la ligne :

/usr/sbin/ntpd -g -p $PIDFILE

devient :

/usr/sbin/ntpd -g -p $PIDFILE -I <1ere_interface> -I <2eme interface>

Puis, relancez le démon :

/etc/init.d/ntpd restart

"ignore" versus serveur de strate >= 2

En effet, si vous utilisez un serveur dont la strate d'appartenance est supérieure à 1 combiné avec l'option de configuration "restrict default ignore", vous obtiendrez une sortie ressemblant à celle ci-dessous avec l'outil ntpq -p :

91.121.20.142   .INIT.          16 u    -   64    0    0.000    0.000   0.000

Votre serveur tente de savoir sur quel serveur se synchronise le serveur de strate > 1 que vous avez défini dans le fichier de configuration et il n'y parvient pas. Ce qui est normal puisque le serveur de référence du serveur de strate > 1 que vous utilisez n'a pas été autorisé dans le fichier de configuration. Le serveur défini est donc exclu du processus de sélection d'un serveur de référence. Cela n'a donc rien à voir avec les pool qui utilisent des serveurs aléatoires et ne permettent donc pas à ntpd de pouvoir réaliser l'association avec eux comme on le lit sur certains forums.

Deux méthodes s'offrent à vous pour résoudre ce problème :

  1. Ne pas utiliser l'option "restrict default ignore" dès le début afin de connaître les adresses des serveurs sur lesquels se synchronisent les serveurs que vous utilisez. Ainsi, vous n'avez plus qu'à les autoriser explicitement dans votre ntp.conf et à appliquer l'option "restrict default ignore" par la suite.
  2. La méthode n°1 trouvera ses limite dans le cas d'un pool de serveurs (ex. : fr.pool.ntp.org) car le serveur qui vous sert de référence change souvent (round-robin DNS (= fr.pool.ntp.org ne pointe pas toujours sur le même serveur de temps). Il vous faudrait donc pas mal de temps pour faire la liste complète de tous les serveurs qui servent de référence aux serveurs du pool. Dans ce cas là, au lieu d'utiliser l'option "restrict default ignore", vous devez utiliser l'option "restrict default notrap noquery nopeer". Vous pouvez supprimer les règles restrict que nous avons créées pour chaque serveur. Cela signifie aussi que toute machine arrivant à contacter votre routeur pourra se synchroniser sur celui-ci. Attention donc à bien configurer iptables sur l'interface eth0.1 si vous voulez éviter que votre bande passante ne soit pompée par des bots.

Test

D'abord, voyons les commandes que nous allons utiliser :

  • ntpq se trouve dans le package ntp (Debian) ou ntp-utils (OpenWRT). Vous pouvez utiliser cette commande depuis votre routeur.
  • ntpdate se trouve dans le package ntpdate (Debian).

Pour tester votre serveur, il vous suffit d'utiliser la commande ntpq -pn (l'adresse est facultative si vous lancez la commande depuis votre routeur). Vous devez obtenir une sortie qui ressemble à celle-ci :

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 145.238.203.14  .TS-2.           1 u   25   64    1   41.906  -35.002   0.113
 192.93.2.20     .GPSi.           1 u   24   64    1   42.545  -35.312   0.222
*127.127.1.0     .LOCL.          10 l   33   64    1    0.000    0.000   0.031

En essayant quelques dizaines de minutes plus tard (ça peut aller jusqu'à 30 minutes voire 1 heure), vous obtiendrez quelque chose comme :

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*145.238.203.14  .TS-2.           1 u   20   64    7   41.446  -38.169   3.057
+192.93.2.20     .GPSi.           1 u   22   64    7   42.545  -35.312   1.275
 127.127.1.0     .LOCL.          10 l   93   64    6    0.000    0.000   0.031

Vous constatez que le serveur ntp-p1.obspm.fr a été choisi comme serveur de référence et que le serveur canon.inria.fr est candidat en cas de problème. L'horloge locale a, quand a elle, été rejetée par l'algorithme de sélection. La valeur du champ pool doit augmenter progressivement jusqu'à atteindre 1024. La valeur du champ reach doit augmenter progressivement (1, 3, 7, 17, 37, 77, 177) jusqu'à atteindre 377. Cela indique que les 8 dernières tentatives de connexion à ce serveur ont réussi. En effet, chaque tentative réussie est marquée avec le chiffre 1 et chaque échec est marqué avec le chiffre 0. Ainsi, 2 réussites sur 2 essais donnent 11 en binaire et donc 3 en octal. 8 réussites sur 8 essais donnent 11111111 en binaire et donc 377 en octal.

D'autres commandes de ntpq permettent d'obtenir l'état des serveurs de référence de votre serveur (ex. : ntpq -c 'associations' 192.168.1.1) mais je ne vous les expliquerai pas dans ce billet. Reportez-vous au man ntpq pour obtenir plus d'informations.

Si tout est en ordre, vous êtes en mesure de synchroniser votre ordinateur avec votre routeur. Pour tester cela, utilisez la commande ntpdate . Vous devez obtenir une sortie ressemblant à celle-ci :

24 Aug 02:03:04 ntpdate[2448]: adjust time server 192.168.1.1 offset 0.002604 sec

Configuration des clients

Pour synchroniser vos clients en temps réel, je vous recommande d'utiliser ntpd/openntpd/chronyc plutôt que de créer une cron qui lancera ntpdate régulièrement pour la simple et bonne raison que ntpd permet un ajustement plus doux de l'horloge et qu'il ne consomme que très peu de ressources.

La configuration d'un client avec ntpd se fait comme nous l'avons vu : on définit le serveur sur lequel on se synchronise (le routeur), on ne répond à rien sauf aux requêtes locales et on laisse sortir les requêtes vers le routeur. En somme, on utilise un fichier ntp.conf comme celui-ci :

server 192.168.1.1 iburst prefer
 
server 127.127.1.0
fudge 127.127.1.0 stratum 10

restrict default ignore
restrict 192.168.1.1 mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 127.0.0.1
 
driftfile  /etc/ntp.drift

Et on ajuste les règles du pare-feu en conséquence.

Pour aller plus loin avec NTPD

Je vais vous proposer quelques idées pour peaufiner votre installation et vous faire cogiter encore un peu 😉 .

Rendre son serveur public ?

Si vous répondez aux exigences demandées, vous pouvez envisager d'ouvrir votre serveur au public. Dans ce cas-là, pensez à modifier le fichier de configuration car le "restrict default ignore", ça va pas l'faire 😉 .

Vous pouvez également mettre en place de la QoS afin que votre bande passante ne soit pas entièrement consommée par des requêtes NTP.

Dans le fichier de configuration de ntpd, vous pouvez utiliser la directive "discard", qui permet d'appliquer des limites de nombre de paquets pour éviter les abus des clients. Utilisez ensuite la directive "limited" pour appliquer ces restrictions. Exemple :

discard average 3 minimum 2
restrict default notrap noquery nopeer limited

Ici, nous spécifions un espacement minimum entre les requêtes de 2 secondes et un espacement minimum moyen entre les requêtes de 8 secondes.

Attention : average est donné en log2. Ainsi, si vous voulez 8 secondes d'espacement minimum moyen entre deux paquets, vous indiquerez la valeur 3 (car log2(8) = 3). Utilisez ce convertisseur. La valeur de l'option "minimum" est donnée en secondes.

Enfin, vous pouvez activer l'envoi d'un paquet KoD (Kiss-of-Death) : il permet d'informer le client qu'il a dépassé les limites mises en place avec discard. Il doit donc cesser d'envoyer autant de paquets sinon il ne sera plus en mesure de récupérer le temps sur notre serveur. Activer cette option n'est pas nécessaire car, par défaut, les paquets qui dépassent la limite sont ignorés de toute façon. Mais informer le client permet d'avertir les clients un peu trop "speed".

Voir la documentation officielle pour plus d'informations sur discard/limited/kod.

Après, rien ne vous empêche d'ouvrir votre serveur pour vos proches/amis ou de le rendre totalement public même si vous ne pouvez pas rejoindre le pool ntp.org.

Me concernant, ma connexion ne répond pas aux exigences (ip dynamique, bande passante qui sera limite en pointe). Mon serveur restera donc privé.

Sécuriser la liaison entre votre serveur et vos clients

Il est possible de sécuriser ces échanges à l'aide de la cryptographie à clé publique ou de la cryptographie symétrique. OpenWRT propose ntpd avec le support d'OpenSSL dans le package ntpd-ssl.

Comme je ne souhaite pas cela en place sur mon LAN, je vous laisse vous débrouiller.

Devenir votre propre référence

Non, je ne suis pas fou. Si tout le monde n'a pas une horloge atomique chez soi ( 🙂 ), certains peuvent avoir un module GPS qui se branche sur un port série ou sur un port USB. Ce module peut être utilisé comme source de temps puisque les satellites GPS contiennent des horloges atomiques qui leur permettent de rendre leur service. Le temps acquis par le module peut être diffusé par ntpd sur l'ensemble de votre réseau.

Comme je n'ai pas ce matériel sous la main, je vous laisse, là encore, vous débrouiller 8) .

Références documentaires