lalahop

Association : législation, fiscalité et plus

Je backup ici le contenu que j'ai produit et mis à disposition sur le wiki de la FFDN. Ça cause fiscalité d'une association de loi 1901 à but non lucratif, de quelques points de la législation concernant les associations et de quelques autres trucs relatifs aux associations. La partie fiscalité est quand même bien orientée FAI associatif mais quelques éléments peuvent sûrement être repris pour des associations ayant une activité différente.

Si vous êtes intéressé par le sujet, je vous conseille de lire ça sur le wiki de la FFDN car des gens corrigeront certainement mes éventuelles conneries alors qu'il se passera plus de temps avant que je mette la présente copie à jour.

Sommaire

Quelques points de fiscalité

Les informations ci-dessous ont été récoltées sur des sites *.gouv.fr et sont donc a peu près fiables si l'on exclue la mauvaise interprétation d'un texte.

Attention : Cette page traite en priorité des associations de loi 1901. Si le siège social se situe dans un des 3 départements d'Alsace-Moselle, il peut exister des changements importants.

Disclaimer : Ça paraît évident mais ça va mieux en le disant : cette page n'a pas vocation à remplacer la décision de votre centre des impôts ni à remplacer l'avis d'un fiscaliste. Elle sert uniquement de guide pour connaître les droits de votre association et avoir des arguments pour discuter avec l'administration fiscale si nécessaire.

Déclaration

La déclaration d'une association de loi 1901 à but non lucratif auprès du Centre des Impôts duquel dépend son siège social n'est plus obligatoire depuis quelques années pour la simple et bonne raison qu'une association à but non lucratif est exonérée des impôts commerciaux.

Néanmoins, il appartient aux dirigeants de l'association de vérifier que leur association est bien à but non lucratif. Les critères utilisés par l'administration fiscale pour juger si l'association poursuit un but lucratif (ou non) sont consignés dans le Bulletin Officiel des Impôts 4H-5-06 numéro 208 du 18 décembre 2006 (dans la suite de cette page, "BOI" fera référence à ce document précis). Je vous conseille d'en prendre connaissance car il est relativement accessible (disons qu'on a vu pire de la part de l'administration fiscale).

Si, malgré l'étude du BOI, une association doute sur sa situation et son exonération d'impôts commerciaux, elle peut avoir recours à la procédure de rescrit fiscal général qui permet de connaître la position de l'administration fiscale sur la situation de l'association et sur l'application d'un texte à son égard. La réponse de l'administration l'engage en cas de contrôle. L'association n'est pas obligée de suivre l'avis de l'administration fiscale obtenu par la procédure de rescrit. En cas de problème, le juge de l'Impôt tranchera.

Exonération aux impôts commerciaux

Le terme "impôts commerciaux" désignent :

  • La TVA (si l'association en est exonérée, cela signifie qu'elle facture ses prestations (abonnements, cotisation, ...) en HT (exemple : si l'abonnement mensuel est fixé à 30€, alors l'association recevra la totalité de cette somme) et paye ses fournitures (collecte, transite, location serveur, ...) en TTC (exemple : si une location d'un serveur coûte 17,94€ TTC/mois (en supposant une TVA à 19,6%), alors l'association ne peut pas obtenir cette prestation à 15€ (prix HT)).
  • L'impôt sur les sociétés (IS).
  • La Taxe Professionnelle.

L'algorithme utilisé par les Impôts pour déterminer si une association poursuit un but lucratif ou non est présenté, sous forme graphique, dans les premières pages du BOI. Nous allons le résumer.

Étape 1 : Si l'association entretient des relations privilégiés avec un ou plusieurs organismes du secteur lucratif (voir la partie “L'association entretient-elle des relations privilégiées avec des organismes du secteur lucratif ?” ci-dessous pour connaître les modalités) OU si la gestion de l'association est intéressée (voir la partie “La gestion de l’association est-elle désintéressée ?” ci-dessous pour connaître les modalités). Alors elle est considérée comme étant à but lucratif et c'est la fin de l'algorithme. Sinon, on passe à l'étape 2.

Étape 2 : À partir de là, on examine chacune des activités de l'association (voir la partie “L'association exerce-t-elle des activités lucratives ?” pour plus d'informations). Pour chaque activité, il faut se demander si l'activité concurrence un organisme à but lucratif (voir la partie “L'association concurrence-t-elle un organisme à but lucratif ?” pour plus d'informations). Si aucune activité ne répond à ces critères de concurrence, alors l'association est totalement exonérée des impôts commerciaux. Pour chacune des activités qui répond à ces critères, on passe à l'étape 3.

Étape 3 : Pour les activités qui concurrencent un organisme à but lucratif, on applique la règle des 4P (voir la partie “L’association exerce-t-elle son activité dans des conditions similaires à celles d’un organisme lucratif ?” pour plus d'information). Si, au regard de ces critères, toutes les activités examinées à ce stade sont non-lucratives, alors l'association est totalement exonérée des impôts commerciaux. Dans le cas contraire, chaque activité jugée lucrative est imposable, sauf abattements particuliers (voir la partie “En cas d'erreur d'analyse”).

En effet, une association à but non lucratif peut exercer une activité lucrative au sens des Impôts.

« Si toutes les activités exercées par un organisme sont non lucratives, l’organisme n’est pas soumis aux impôts commerciaux et ce quelque soit le montant de son budget ou de son chiffre d’affaires. Il peut au plus être assujetti à l’impôt sur les sociétés à taux réduit sur ses revenus patrimoniaux. Si l’organisme exerce une ou plusieurs activités lucratives en plus de ses activités non lucratives, il est en principe soumis à l’impôt sur les sociétés et à la TVA pour l’ensemble de son activité. Toutefois, l’assujettissement à ces deux impôts porte au plus sur ses activités lucratives, dès lors que ses activités non lucratives sont prépondérantes. En matière d’impôt sur les sociétés, l’assujettissement des seules activités lucratives est subordonné à leur sectorisation. » (BOI, paragraphe 6).

Pour résumer ce dernier point, je vous propose ce tableau extrait du BOI :
Résumé des exonérations

L'association entretient-elle des relations privilégiées avec des organismes du secteur lucratif ?

Si l'association entretient des relations privilégiées avec des organismes du secteur lucratif permettant à ces derniers d'en retirer un avantage concurrentiel, alors l'association est soumise aux impôts commerciaux.

Une relation privilégiée est confirmée si :

  • L'association a pour objet de fournir des services aux entreprises qui en sont membres dans l’intérêt de leur exploitation.
  • L'association permet "aux professionnels de réaliser, manière directe, une économie de dépenses, un surcroît de recettes ou de bénéficier de meilleures conditions de fonctionnement".
  • Si l'association réalise les prestations mentionnées dans les deux points précédent de manière non-accessoire (= qu'il apparaît que l'association poursuit ce but de manière claire dans sa structure et son organisation).

Le fait que l'association fournisse un accès à Internet à une personne morale du secteur lucratif, membre de l'Association, qui le désirerait, comme elle le ferait à tout membre, ne pourra être considéré comme un avantage concurrentiel ni comme une relation privilégiée car cette personne morale lucrative n'en retirerait aucun avantage vis-à-vis de ses concurrents ni aucune économie de dépenses ni de meilleures conditions de fonctionnement. Il faut, évidement, que l'organisme lucratif soit traité comme tout autre membre (pas un meilleur débit, pas plus de droits, ...)

En conclusion : un FAI associatif n'est normalement pas concerné par ce critère et reste donc une association sans but lucratif et reste donc exonéré des impôts commerciaux.

La gestion de l’association est-elle désintéressée ?

Si la gestion de l'association est intéressée, alors elle est soumise aux impôts commerciaux.

L'intéressement se mesure par :

  • La rémunération et les avantages accordés aux dirigeants de l'association.
  • Redistribution des ressources.
  • Attribution de parts d'actifs.

Les dirigeants sont les personnes siégeant à l'organe dirigeant de l'association (Bureau, CA, ...). Attention, si un membre, de par ses actes et ses responsabilités, peut être vu comme un dirigeant sans pour autant qu'il siège à l'organe dirigeant, alors il est vu comme un dirigeant de fait et soumis aux mêmes exigences.

Détaillons :

La rémunération et les avantages aux dirigeants se mesurent par la perception de rémunération supérieure à 3/4 du SMIC ou par la perception d'avantages (cadeaux, honoraires, avantages en nature, complément de rémunération, remboursement de frais non justifiables, ...). Les dirigeants ne doivent avoir aucun intérêt direct (ou indirect, par personne interposée) dans l'association. Cela exclu donc la fourniture de débouchés ou d'une activité complémentaire à un organisme du secteur lucratif dans laquelle un dirigeant de l’organisme aurait, directement ou indirectement, des intérêts.
En outre, les dirigeants doivent exercer en suivant un fonctionnement démocratique (élections) et si ils perçoivent une rémunération, alors cela doit se faire dans la plus grande transparence (rémunération votée et contrôlée) et la plus grande cohérence (une rémunération énorme pour un travail effectif faible est louche ...)

Enfin, la rémunération des salariés éventuels devra correspondre à un travail effectif et être non-excessive.

La redistribution des ressources (prise en charge de dépenses personnelles, rémunérations exagérées ou injustifiées, service de rémunérations de comptes courants, prélèvements en nature, prêts à des taux préférentiels, etc.) remet en cause le caractère désintéressée de l'association. En effet, une association dans le but de partager des bénéfices s'appelle une entreprise 😉

L'attribution de parts d'actifs est effective si, lors d'une dissolution, l'actif est dévolu en tout ou partie à une ou plusieurs personnes (morales ou physiques). Si l'actif est dévolu à une autre association à but non lucratif, il n'y a pas de problèmes. Si les membres exercent leur droit de reprise de leur apports, cela ne remet pas en cause la gestion désintéressée.

En conclusion : les associations de la FFDN visent un fonctionnement démocratique, ce qui exclu, normalement, un fonctionnement intéressé. L'assocation reste donc exonérée des impôts commerciaux.

L'association exerce-t-elle des activités lucratives ?

Si votre association respecte les critères énoncés dans les deux précédents paragraphes, alors l'administration cherchera à savoir si vous exercez une activité lucrative sur laquelle vous pourrez être taxés.

L'administration fiscale va étudier CHACUNE de vos activités au niveau le plus fin. L'activité commune aux membres de la FFDN est la fourniture d'un accès à Internet libre. C'est donc cette activité que nous allons étudié. À vous de voir pour les autres activités (un VPN rentre-t-il dans le cadre de la fourniture d'un accès à Internet ?).

Pour déterminer si une activité est lucrative, l'administration fiscale se demande d'abord si l'association concurrence un organisme du secteur lucratif. Dans la négative, l'association est exonérée. Dans l'affirmative, l'administration procède à une analyse plus profonde dite la méthode des "4P".

FAI

Ici, l'association aura une activité d'opérateur de télécommunications fixes/filaires dans le but de fournir un accès à Internet via une technologie filaire (ADSL, câble, fibre optique, ...).

Certaines associations peuvent aussi fournir un accès à travers une infrastructure WiFi. À part le changement de la dénomination précise de l'activité, cela ne changera pas l'analyse ci-dessous.

L'association concurrence-t-elle un organisme à but lucratif ?

La question est de savoir si il existe des concurrents du secteur lucratif et si le public peut s'adresser indifféremment à l'association et à l'organisme à but lucratif.

Plusieurs FAI lucratif existent : Free, SFR, Orange, Numéricable, ...

Néanmoins, le public ne peut pas s'adresser indifféremment à l'association ou à un organisme lucratif.

D'une part, l'Association ne propose son service d'accès à Internet qu'à ses membres adhérents. Cela suppose d'être en accord avec les thématiques défendues par l'Association :

  • Promotion et utilisation d'un réseau Internet libre, ouvert, neutre, acentré et tel que ses fondateurs l'avaient conçu ;
  • Utilisation de l'accès fournit pour des activités majoritairement sans volonté commerciale ;
  • Volonté de défendre le réseau et les libertés qui en dépende ;
  • Compréhension du réseau Internet et de ses enjeux sociaux et politiques ;
  • Se réapproprier son accès internet ;
  • Esprit de partage de connaissances et de solidarité envers les autres membres.

Les organismes lucratifs qui fournisse une prestation analogue n'exigent pas ces pré-requis et fournissent simplement un accès à Internet contre paiement de la prestation.

D'autre part, la fourniture d'un accès à Internet à ses membres qui le désire n'est qu'un moyen d'agir pour l'association afin de lui permettre d'atteindre son objet. Il ne s'agit donc pas d'un unique moyen d'action.

Enfin, là où les organismes lucratifs fournissent des accès à Internet dans toute la France, les associations de la FFDN ont la volonté de rester local et de se concentrer uniquement sur une région au maximum voire, dans un deuxième temps, de se partager un même département entre plusieurs associations.

En conclusion, l'association ne concurrence pas un organisme du secteur lucratif et conserve donc son exonération d'impôts commerciaux.

L’association exerce t-elle son activité dans des conditions similaires à celles d’un organisme lucratif ?

Néanmoins, si l'administration fiscale considère toujours votre activité comme étant lucrative, il convient d'appliquer leur méthodologie des "4P" pour leur démontrer que l'activité n'est pas lucrative.

L'administration n'accorde pas la même attention à tous les critères. En effet, le critère de la publicité n'est pas de nature à remettre en cause le but non lucratif d'une association contrairement aux critères produit, prix et affectation des excédents.

Le produit proposé (= caractère d’utilité sociale de l’activité)

« Est d’utilité sociale l’activité qui tend à satisfaire un besoin qui n’est pas pris en compte par le marché ou qui l’est de façon peu satisfaisante. » (BOI, paragraphe 62).

Le service d'accès à Internet proposé par les organismes du secteur lucratif ne prend pas en compte un certain nombre de besoins :

  • L'accès que nous proposons sera toujours neutre. Cela signifie que notre réseau se contentera de transporter les données de l'abonné jusqu'à leur destination et réciproquement. L'abonné est libre d'utiliser les services et applications de son choix. Les organismes à but lucratif ont tendance à « inspecter » le trafic et à influer sur la livraison de ce trafic en fonction d'accords commerciaux ou de pression. Comme exemples, nous pouvons citer :
    • Les organismes à but lucratif imposent certains services (exemple : leur service de téléphonie) alors qu'il existe des offres techniquement équivalentes sur le marché.
    • Ils attribuent une priorité au trafic en fonction du destinataire et/ou de l'émetteur (cas de Orange-Megaupload-Dailymotion entre 2009 et 2012 ou Free-Youtube depuis 2012).
    • Ils censurent l'accès à des informations sans l'intervention de la Justice (cas de Wikileaks fin 2010).
    • Ils modifient les données durant leur transit (cas des « DNS menteurs »).
    • Ils convergent avec des groupes de médias (exemples : SFR est une filiale de Vivendi, France Télécom détient Orange à 100 %, Studio 37 à 100 % et Dailymotion à 49 %) ce qui pose des problèmes de conflits d'intérêts et parfois de distorsion de la concurrence.
    • Tous les exemples précédents nuisent aux clients de ces fournisseurs d'accès à internet lucratifs.
  • Une association FFDN encourage ses membres à auto-héberger leurs contenus plutôt que de les livrer à des multinationales de droit américain qui en feront ce qu'elles veulent (non-respect de la vie privée, entre autres) et de créer ainsi des points de centralisation. La possibilité, pour tout utilisateur d'Internet, de publier du contenu ou des applications depuis sa machine personnelle est un aspect fondamental d'Internet : cela fait partie de sa définition. L'auto-hébergement est rendu techniquement impossible chez la plupart des fournisseurs d'accès à internet lucratifs (exemple : héberger un serveur mail personnel n'est pas possible chez Orange).

Notons que les problématiques sont d'ordre moral et politique et ne pourrons être réglées par un traitement par le marché (offre et demande, acteur conscient, éclairé et intelligent). L'apport d'une solution appartient donc aux organismes non lucratifs qui sont, par définition, hors-marché.

Le service fourni par une association FFDN offre des garanties d'un accès démocratique à l'information. Il répond donc à un objectif d'utilité sociale (en répondant à des besoins non pris en compte par le marché) et politique (en étant garant, entre autres, des libertés d'informations et d'expression).

De plus, une association FFDN n'a pas vocation à fournir un accès à Internet strictement identique à ceux proposés par les organismes à but lucratif. En effet, à l'heure où les organismes à but lucratif fournissent un accès à Internet dans lequel est inclus un service de téléphonie, un bouquet de chaînes de télévision et des services annexes, l'association ne fournit qu'un accès à Internet. Les organismes à but lucratif incluent également, dans l'abonnement, la location d'un matériel de raccordement (« box »). Une association FFDN ne fourni pas un tel équipement. Le service proposé par l'Association n'est donc pas techniquement strictement équivalent à ceux proposés par les organismes à but lucratif.

Le public visé (= caractère d’utilité sociale de l’activité)

Une association FFDN ne vise pas un public identique aux organismes du secteur lucratif.

D'une part, le service s'adresse à des initiés qui doivent savoir installer, configurer et utiliser leur matériel informatique en toute autonomie. L'association n'assurera aucun service d'assistance technique. Ce mode de fonctionnement est très différent des organismes à but lucratif qui proposent une offre « tout public » accessible au plus grand nombre ainsi qu'un service d’assistance technique.

D'autre part, comme nous l'avons expliqué dans la partie « L'association concurrence-t-elle un organisme à but lucratif ? », notre service est réservé à nos membres adhérents. Ceux-ci doivent donc être en accord avec les principes défendus par l'association et participer à la vie associative. Ces conditions ne sont pas exigées par les organismes à but lucratif qui fournissent juste le service contre paiement. De plus, nous avons la volonté de rester à taille humaine là ou les organismes à but lucratif tentent d'élargir leur nombre de clients.

L’affectation des excédents

Normalement, une association FFDN partagera, exclusivement, ses excédents entre :

  • La mise en provision afin de faire face à des besoins ultérieurs ou à des problèmes futurs imprévisibles et dont l'association n'est pas responsable ;
  • La maintenance et l'évolution de l'infrastructure informatique de l'association (qui permet de fournir le service d'accès à Internet) ;
  • Le financement d'activités entrant dans l'objet de l'association.

Comme nous l'avons déjà indiqué plus haut, les excédents n'ont pas vocation à être distribués ou à être placés.

Le prix pratiqué

Expliquer à quoi sert la cotisation et l'abonnement et pourquoi ils ne peuvent être abaissés :

  • Afin de garantir la survie de l'association en cas de problèmes temporaires ;
  • Permettre le financement de nouvelles activités étant en accord avec l'objet de l'association et jugées intéressantes par les membres.
  • Assumer les frais engendrés par la maintenance de l'infrastructure de fourniture.

Faire remarquer que l'Association n'a pas volonté à surtaxer le service en vue de s'enrichir : la différence entre le prix facturé et le coût de revient est réinvestie dans la maintenance de l'infrastructure, son amélioration et le financement d'activités nouvelles répondant de l'objet de l'association.

Prévoir des tarifs modulés en fonction de la situation du client (faibles revenus, handicap, …).

La publicité

Pour informer tant ses adhérents que toute personne intéressée par ses activités, l'association dispose d'un site web. Celui-ci sera accessible depuis d'autres sites web partageant les mêmes objets et les mêmes activités ou des activités étroitement liées (exemple : la promotion du logiciel libre est un domaine extrêmement proche (voire indispensable) de la promotion d'un internet libre). L'association pourra également réaliser des informations sur ses prestations notamment sur des sites web. Ces deux éléments ne sont pas nature à remettre en cause le but non lucratif de l'association.

L'association ne doit pas avoir recours à des services de publicités payants ni au paiement de service visant à obtenir un traitement particulier de la part des moteurs de recherche. Elle ne doit pas non plus avoir recours à la vente d'un catalogue en kiosque ni à la diffusion de messages publicitaires payants (passage de messages dans les journaux, à la radio, location de panneaux publicitaires, bandeaux publicitaires sur des sites internet, etc.) ni à des réseaux de commercialisation.

Attention également à la participation à des événements professionnels à visée commerciale ("foire" de spécialistes, ...) qui peut remettre en cause ce critère.

En cas d'erreur d'analyse

S'il s'avère que l'analyse précédente est fausse et/ou qu'une des activités de l'association venait à être requalifiée en activité lucrative par l'administration fiscale, il faut encore tenir compte de la franchise des impôts commerciaux (BOI 4H-5-06, Titre 3, chapitre 2).

En effet, l'association peut conserver son exonération d'impôts commerciaux si les trois conditions suivantes sont réunies :

  • La gestion de l’organisme doit rester désintéressée ;
  • Les activités non lucratives de l’organisme doivent rester significativement prépondérantes ;
  • Le montant des recettes d’exploitation encaissées au cours de l’année civile au titre des activités lucratives ne doit pas excéder 60 000 €.

Ce dernier critère laisse de la marge :). En attendant, il y a peu de chance que votre association intéresse réellement l'administration fiscale vu que, selon ses critères, votre association ne lui rapportera rien.

Les revenus du patrimoine imposables

Même si l'association est reconnue comme n'ayant aucune activité lucrative, elle peut avoir à payer l'impôt sur les sociétés à taux réduit pour ses revenus imposables.

Attention : ces revenus ne sont pas pris en compte lors du calcul de la franchise évoquée dans le paragraphe précédent.

Les revenus fonciers

L'impôt sur les sociétés à taux réduit s'applique aux locations d'immeubles (bâtis ou non) possédés par l'association ainsi qu'à d'autres cas bien particuliers (exploitation agricole ou forestière, contrat de capitalisation, ...).

Les revenus mobiliers

L'impôt sur les sociétés à taux réduit s'applique aux placements de l'excédent (actions, obligations, épargne, dividendes, ... Notons que certains placements sont totalement exonérés d'IS : livret A, livret bleu, ...

Notes :

  • Si l'IS ne dépasse pas 150€, il n'est pas dû.
  • Si l'association profite de revenus de son patrimoine, elle doit les déclarer chaque année au centre des d'impôts dont dépend son siège social avec l'imprimé numéro 2070.

De la fiscalité des dons

Première chose intéressante à savoir : les cotisations libres sont assimilées à des dons manuels. Exemple : vous fixez une cotisation à 20€ minimum. Si un adhérent décide de donner 30€, les 10€ dépassant le montant minimal imposé seront considérés comme un don et doivent être consignés comme tel dans la comptabilité de l'association. Voir Cotisation à une association.

Les dons manuels ("main à la main", sans passer devant un notaire, effectué durant le vivant du donateur) sont imposables aux frais de mutation. Ceux-ci peuvent s’élèver soit à 35%, 45% ou 60% du don en fonction de la proximité (au sens familiale) entre les dirigeants et le donateur. Des abattements et autres mesures dégressives sont également appliquées par l'administration fiscale. Voir : Article 757 du CGI.

Les dons manuels n'ont pas a être déclarés sauf à deux conditions :

  • Soit le donateur veut obtenir un avantage fiscal sur sa déclaration de revenu. Dans ce cas, l'association doit répondre à des critères et émettre un reçu réglementaire. Comme les critères sont flous (du fait qu'un FAI associatif n'est pas banal et prévu par l'administration fiscale), même les plus "grandes" associations du domaine informatique (FDN, Quadrature, ...) ne le font pas. Si l'aventure vous tente, vous pouvez toujours tenter un rescrit fiscal ...
  • Soit le total des dons sur une année dépasse 153 000 euros (source : Déclaration des changements).

Qui dit non déclarés dit non imposables.

Néanmoins, un ou plusieurs dons peuvent être "révélés" à l'administration fiscale par :

  • Voie judiciaire ;
  • Lors d'un contrôle des comptes de l'association par l'administration fiscale (c'est un point de jurisprudence qui concerne néanmoins des associations cataloguées comme sectes par la commission parlementaire d'enquête sur les sectes donc rien n'indique qu'elle serait suivie dans le cas d'un FAI associatif).

Qui dit révélés dit imposables.

Notons encore quelques petites choses :

  • Un don jugé élevé vis-à-vis du patrimoine du donateur peut être qualifié en donation par l'administration fiscale.
  • Une donation (don effectué en passant par un notaire) ou un leg (testament) doivent être déclarés à l'administration fiscale. De plus seules certaines associations (association reconnue d'utilité publique, association ayant pour objet exclusif un culte, les associations soumises au droit local d’Alsace-Moselle) sont autorisées à les percevoir.

Pour plus d'informations, voir Dons manuels et Donations et legs.

Dissociation des impôts commerciaux

La question est de savoir si une association peut profiter du régime de la TVA (afin d'acheter en HT) tout en restant exonérée des autres impôts commerciaux.

FDN étudiait cette question complexe. Pas de nouvelles ?

Quelques points de législation

Les informations ci-dessous ont été récoltées sur des sites *.gouv.fr et sont donc a peu près fiables si l'on exclue la mauvaise interprétation d'un texte.

Attention : Cette page traite en priorité des associations de loi 1901. Si le siège social se situe dans un des 3 départements d'Alsace-Moselle, il peut exister des changements importants.

Structure de l'association

La loi 1901 n'oblige aucune structure. Ainsi une association sans le trio président/trésorier/secrétaire est tout à fait valide quoi qu'en dise la Préfecture. Les associations à gouvernance horizontable sont donc possibles. Il en va de même pour les associations collégiales.

Registre spécial

Toute association de loi 1901 est obligée de tenir un registre spécial consignant :

  • Les changements de personnes chargées de l’administration ou de la direction,
  • Les nouveaux établissements fondés,
  • Le changement d’adresse du siège social,
  • Les acquisitions ou aliénations du local destiné à l’administration et à la réunion de ses membres,
  • Les modifications apportées aux statuts,
  • Les dates des récépissés délivrés par la préfecture ou sous-préfecture lors du dépôt des déclarations modificatives.

Pour cela, on peut utiliser un cahier dont les pages ne peuvent être déchirées sans laisser de trace, numéroter les pages de manière continue puis un dirigeant de l'association doit paraphé toutes les pages. Les différentes consignations ne doivent pas être raturées, effacées et doivent être écrites les unes à la suite des autres, sans blanc. Voilà pour les grandes lignes. Pour le reste : Modèles de registre spécial. Voir également : Registre spécial.

Si l'association n'est pas capable de fournir ce registre en cas de contrôle, une sanction allant jusqu'à la dissolution de l'association peut être prononcée et une amende d'un maximum de 1500€ (3000€ en cas de récidive) peut punir les dirigeants.

Déclaration des changements

Toute association de loi 1901 doit déclarer les changements importants (titre, objet, statuts, dirigeants, adresse du siège, acquisition/perte d'immeuble, création/suppression d'un établissement, ...) auprès de la Préfecture dans les 3 mois sous peine de sanctions.

La déclaration des changements auprès de la Préfecture n'implique pas la publication des modifications au JOAFE ! Les dirigeants "sont libres d’effectuer ou non la publication au Journal officiel des modifications touchant les informations obligatoirement publiées à l’occasion de la déclaration initiale (titre, objet, adresse du siège social)".

L'article 127 de la loi n°2012-387 du 22 mars 2012 supprime les sanctions pénales en cas de non-déclaration. La tenue du registre spécial reste obligatoire.

Néanmoins :

  • La tenue du registre spécial consignant ces changements reste obligatoire ;
  • Cette loi ne supprime pas les sanctions administratives comme la suppression de subvention lorsque l’association en perçoit ;
  • Cette loi ne supprime pas la nécessité de déclarer les changements pour les rendre opposables aux tiers.

Sources : Les obligations déclaratives : suppression des sanctions pénales, L’association régie par la loi du 1er juillet 1901 et Déclaration des changements.

Comptabilité

De base, la loi 1901 n'impose pas aux associations de tenir une comptabilité.

Néanmoins, celle-ci peut-être amenée à établir une comptabilité dans des cas précis (montant annuel perçu de dons donnant lieu à des avantages fiscaux > 153000€, montant annuel perçu de subventions publiques > 153000€, associations de financement électoral, ...). Dans ce cas, il conviendra de suivre le le plan comptable des associations (adaptation du plan comptable général au milieu associatif).

Même si l'association n'est pas tenue à tenir une comptabilité, cela peut être intéressant lors d'échanges avec des partenaires économiques et/ou l'administration. Une comptabilité de trésorerie (suivi chronologique des encaissements et des décaissements) voire un bilan ne sont pas inaccessibles à produire.

Pour plus d'informations, voir : http://www.associations.gouv.fr/704-comment-compter.html

Registre des délibérations

Aucun texte n'oblige une association à tenir un registre des délibérations (dates des assemblées générales/réunion de l'instance dirigeante et les procès-verbaux/compte-rendus associés). Néanmoins, il convient d'établir et de conserver les PV/compte-rendu car cela permet d'établir la vérité dans le cas d'une contestation ultérieure d'une décision.

Source : |L’association régie par la loi du 1er juillet 1901.

Adhésion des mineurs

Un mineur n'a pas la capacité juridique et donc la possibilité de signer un contrat (si l'on met de côté le mineur en état de comprendre la portée de ses actes et le mineur émancipé).

Un mineur peut adhérer à une association (et même en fonder une à partir de ses 16 ans, loi n° 2011-893 du 28 juillet 2011 ). Il est présumé avoir eu l'autorisation de son responsable légal. La jurisprudence considère mène que l'autorisation peut être tacite (= si le responsable légal n'a pas clairement marqué son opposition à l'exercice d'une forme de vie associative, alors l'adhésion à une association est autorisée.).

L'adhérent mineur peut payer une cotisation mais la cotisation doit être accessible compte tenu de l'argent de poche moyen d'un mineur. En cas de problème, ce point sera apprécié et tranché par le juge.

Voir : Le mineur dans l'association

Interdire, dans les statuts, le vote délibératif en assemblée générale d'une personne membre depuis moins d'un an est-il légal ?

Cette clause est généralement utilisée afin d'éviter l'entrisme (un groupe de personnes adhèrent quelques jours avant l’assemblée générale pour détourner l’association). Sa légalité est souvent remise en cause.

De prime abord, on remarquera que FDN le fait juste depuis 20 ans et vu :

  • La longévité de l'association ;
  • Les connaissances en droit de son président (voir PSES 2012 - listes des courses aux députés ou tout autre conférence) ;
  • Le fait qu'ils ont pas mal “d'ennemis” (sans être non plus des cibles à abattre, n'imaginez pas des trucs que je n'ai pas écrit).

On est en droit de penser que les statuts de FDN sont blindés.

Dans la même veine, je vous laisse chercher, sur un moteur de recherche. Vous constaterez qu'il y a un paquet d'autres associations dans la même situation.

Cet argument pourra être réfuté “ce n'est pas parce que c'est fait que c'est légal”. Pour ces sceptiques, détaillons avec des éléments de Droit.

Un traitement différencié des membres n'est pas illégal. Par exemple : on peut prévoir des tarifs modulés en fonction de la situation des adhérents/clients. C'est même un élément pris en compte dans l'appréciation de la non lucrativité d'un organisme par les Impôts (voir BOI 4H-5-06, paragraphe 69).

Les personnes qui disent qu'une telle clause est illégale s'appuient sur la nécessaire équité entre les membres. En effet, ce principe existe et il est une conséquence du droit des contrats (article 1135 du Code Civil) qui s'applique aussi aux associations (loi 1901 comme loi locale d'Alsace-Moselle).

Mais ce principe doit être apprécié dans le contexte du contrat c'est-à-dire que le code civil oblige au respect d'une égalité de traitement des co-contractants (les membres de l'association) qui, étant libres d'adhérer ou non, consentent librement à participer au contrat qui, étant identique pour tous, ne «peut» pas être inéquitable, sauf cas de discrimination fondée sur des critères n'ayant pas de rapport avec les objectifs de l'association. (source : Sylvain Vallerot - Association GIXE, SCIC OPDOP, participation à Gitoyen (GIE/Asso) et d'autres donc un minimum de connaissances en droit des contrats))

Dans notre cas, les statuts (le contrat) sont identiques pour tous les membres et sont librement acceptés (le libre consentement sans vice étant un autre point du droit des contrats). Tous les membres sont logés à la même enseigne → équité.

Cet argumentaire pourrait être remis en question si les statuts prévoient des classements arbitraires (toi tu n'auras pas le droit de vote car je t'aime pas) ou discriminatoires (les handicapés/étrangers/pauvres/whatever n'auront pas le droit de vote). Dans notre cas, il n'y a rien de tout ça, toutes les clauses des statuts s'appliquent à tout le monde, elles s'appliquent juste à un moment différent (interprétation confirmée par Sylvain).

Responsabilités

Attention : la question est complexe et me dépasse. Pensez à vous renseignez ailleurs.

Les dirigeants de l'association sont tenus à des responsabilités civiles (en cas de dommages causés) et pénales (dans le cadre d'infractions (code du travail, santé, ...) comme dans le cadre de toute personne morale.

Attention à la notion de dirigeant de fait : si une personne, de par ses actes, peut être vu comme un dirigeant de droit, alors cette personne endosse également les responsabilités attenantes au statut de dirigeant.

Plus d'informations : La responsabilité des dirigeants.

Dettes

Attention : la question est complexe et me dépasse. Pensez à vous renseignez ailleurs.

Les dirigeants d'une association ne sont pas tenus des dettes de celle-ci dés lors que les actes les ayant en conséquence ont été contractés valablement et dans le cadre de l'objet de l'association. Ce principe peut être levé dans certains cas.

Lorsqu'un dirigeant :

  • Endette l'association pour son profit personnel et/ou
  • Dans des prestations ne relevant pas de l'objet de l'association et/ou
  • Si les ordonnes des actes dépassant ses responsabilité et/ou
  • Si le dirigeant est reconnu coupable d'une faute de gestion

Alors le dirigeant fautif peut être tenu responsable du paiement de la dette sur ses biens personnels.

D'un point de vu fiscal, le dirigeant peut faire l'objet d'une procédure de recouvrement sur ses biens personnels dans le cas où il a commit des manœuvres frauduleuses ayant rendues impossibles le recouvrement des impôts dûs. Cette procédure peut également être engagée dans le cas d’inobservation grave et répétées des obligations fiscales par le dirigeant. Cette disposition ne s'applique pas si le dirigeant est "déjà tenu au paiement des dettes sociales en application d’une autre disposition".

Pour plus d'informations, voir : Responsabilités et Responsabilité financière.

Quelques conseils pour choisir une banque pour votre association

Les habitués, passez votre chemin car ce que je vais dire est basique.

Trouver une banque pour votre association sera certainement plus compliqué que de trouver une banque pour votre compte personnel (surtout si la banque apprend qu'elle peut vous endetter sur 5 générations mais don't feed the troll).

  • L'histoire d'avoir le feeling avec le chargé de clientèle est un non-sens selon moi étant donné la rotation permanente de ces personnes. De plus, trouver un chargé de clientèle intéressé par un projet associatif est compliqué compte-tenu du fait qu'une association ne leur rapporte pas autant qu'un particulier endetté et la pression du chiffre qui pèse sur les chargés de clientèle.
  • Pour une petite structure, il convient de regarder les prix. Mais les offres bancaires sont tellement variées qu'il vaut mieux préférer les banques qui permettent un contrat à la carte (l'assurance ou l'assistance juridique proposé par le forfait se justifie-t-elle ?). Il convient aussi de se demander ce dont a vraiment besoin l'association et de comparer les prix sur ces besoins précis.
  • Il faut regarder le prix dans sa globalité en essayant de deviner les coûts cachés. Tiens, ici la tenue d'un compte est moins cher mais le NNE est facturé, ho tiens, ici c'est pas mal mais les agios sont terribles, ho tiens, …). Autrement dit : il faut déchiffrer la grille tarifaire.
  • Il faut penser évolution. Un exemple vaudra mieux qu'un long discours : vous pensez avoir besoin des prelevements automatiques dans un futur proche. Banque A est moins chère mais le NNE sera facturé puis il faudra payer 6,90€/mois. Quand vous parlez d'EBICS, la banque ne répond pas. Banque B propose un NNE gratuit et 3€/remise et EBICS, bien que trop cher pour un début, est proposé sur simple demande. Si vous ne voulez pas changer de banque à chaque nouveau besoin de votre association, la banque B est la plus adaptée car son offre suivra votre évolution.
  • Il faut regarder les surcoûts (tiens, banque A est joignable par un numéro de téléphone non surtaxé …) et les “services” de la banque (exemple : les chargés de clientèle sont souvent vite limités vis-à-vis des questions relatives aux télétransmissions et banque A dispose d'un service totalement dédié, joignable facilement par téléphone, via un numéro non surtaxé = gain de temps) …
  • Se souvenir que, dans le fond, les offres des banques sont assez bonnet blanc et blanc bonnet. Exemple : banque A est moins chère en récurrent mensuel mais impose plus au moins la souscription de parts sociales. Il convient donc de regarder sur combien de temps les parts sociales seront amorties vis-à-vis du récurrent mensuel proposé par banque B. Le ratio peut donner B gagnante, au final (je parle bien pour le tout début d'une petite structure).

Immatriculer l'association au Répertoire des Entreprises et des Etablissements (SIRENE)

Je ne suis plus le seul "créateur" du contenu qui va suivre donc je me dois de créditer Maethor et Zorun.

Ce numéro permet (indirectement) les prélèvements automatique sur les comptes de vos membres/abonnés et facilite les échanges avec des "partenaires" économiques.

  • Obtenir un numéro SIRENE, ça se fait en contactant le CFE (centre de formalité des entreprises) dont vous dépendez, ou directement auprès de l'INSEE, voir ce lien (annuaire des cfe).
  • Comme vous le voyez, vous pouvez contacter, indifféremment le CFE de l'URSSAF, le CFE de votre centre des impôts ou directement l'instance régionale de l'INSEE. Apinnet a effectué sa demande auprès de la direction régionale de l'INSEE et je ne peux que vous conseiller cette méthode : rapide car moins d'intermédiaires et moins de curieux dans un premier temps.
  • Si vous choisissez de vous adresser directement à l'INSEE, il vous suffit d'envoyer simple lettre accompagnée d'une copie des statuts et du récépissé de la Préfecture.
  • Je vous conseille également de demander, dans la lettre, à être retiré de la liste de diffusion commerciale sinon vous allez recevoir des publicités proposant des prestations pour les entreprises (assurance pour cadre, ...) et des arnaques (inscription à un registre des personnes morales bidon). Si vous n'avez pas pensé à demander votre retrait de la liste de diffusion commerciale lors de votre inscription SIRENE, vous pouvez la demander plus tard : cela se fait en lettre recommandée (pas besoin d'accusé) adressée à la direction générale de l'INSEE.

Se déclarer opérateur de réseaux

Je ne suis plus le seul "créateur" du contenu qui va suivre donc je me dois de créditer Maethor et Zorun.

  • Remplir le formulaire de déclaration d'opérateur de l'ARCEP, daté, signé, envoyé à Autorité de régulation des communications électroniques et des postes - 7, Square Max Hymans - 75730 PARIS Cedex 15. Il faut accompagné cette demande du récépissé de la Préfecture ainsi que d'une lettre à en-tête signé. Modèle utilisé par Apinnet (original : Sylvain Vallerot pour déclarer GIXE, merci).
  • Réception d'un récépissé de l'ARCEP (et se voir dans la liste des opérateurs puis protester contre l'utilisation d'un format de fichier fermé).

Pour remplir le formulaire :

  • À priori, si le FAI ne fait qu'utiliser l'infrastructure ADSL de FDN, il n'y a pas lieu de cocher "Établir et/ou exploiter des réseaux", mais seulement "Fournir des services". Si le FAI envisage par exemple une couverture wifi, il faudra le cocher et le préciser. En pratique, aquilenet a prévu large et a coché câble/wifi/adsl sans préciser de schéma ni de calendrier précis, et c'est passé. Pour la nature des services, Fournir l'accès à Internet bien sûr, "fournir des services de transmission de données", pourquoi pas, c'est tellement vague... 🙂

Pour remplir le formulaire (version détaillée) :
Ce qui suit est un résumé de la déclaration d'Apinnet, opérateur partant de rien. Pensez à adapter (exemple : si vous faîtes de la collecte en WiFi).

  • Première page : Nom de l'association et adresse du siège social, code NAF : 94,99Z, gérant = président (si association collégiale [ = pas de président, mais des membres d'une instance dirigeant (CA/Bureau) à égalité en droit], un seul des membres du Bureau/CA suffit), pas d'inscription au registre du commerce ni d'actionnariat. Pour les différents contacts, vous pouvez en mettre un seul (le président ou le membre de l'instance dirigeante choisi plus haut). Le numéro SIRET de l'établissement de facturation n'est pas obligatoire.
  • Deuxième page : Nouvelle déclaration, cocher "fournir des services de communication électroniques au public" et établir/exploiter des réseaux ouverts au public (voir cependant la remarque du précédent paragraphe si marque blanche FDN), public = grand public, couverture géographique = métropole.
  • Troisième page : Nature des services = {transit IP, accès fixe à Internet, accès mobile à Internet, CDN, Transmission de données, Hébergement de service à valeurs ajoutées} (vous pouvez ratisser large tout en restant cohérent, cela évite de devoir modifier la déclaration ultérieurement), calendrier de déploiement = ne rien indiquer.
  • Quatrième page : Disposez-vous d'un réseau d'accès en propre : non ; technologies déployées/prévues = {DSL/Cuivre, Coaxial/FFTLA, FTTH, RLAN} ; Disposez-vous d'un réseau de collecte : non ; Disposez-vous d'un cœur de réseau : non ; Disposez-vous de plateformes de services en propre : non ; Avez-vous recours à des produits de gros (si vous vous posez la question, la marque blanche FDN n'est pas un tel produit) : non ; Calendrier de déploiement : là encore, n'indiquez rien.

Il faudra ensuite communiquer, chaque année, à l'ARCEP, via l'adresse mail indiquée dans le récépissé, un justificatif du chiffre d'affaires annuel de l'association. On n'est pas taxé tant que le CA ne dépasse pas le million d'euros annuel, ce qui laisse de la marge, même pour FDN. Selon Taxes administratives dues par les opérateurs de réseaux - ARCEP, une simple déclaration sur l'honneur du président (ou d'un membre dirigeant) suffit.

IRSSI, Windows et les accents

IRSSI est un client IRC multiplateforme.

Sur une Debian/Debian-like, pour l'installer : apt-get install irssi. Sous Windows, il suffit de télécharger l'archive auto-extractible sur le site officiel et de l'extraire dans %PROGRAMFILES%/IRSSI ou %PROGRAMFILES(X86)%/IRSSI.

Sous GNU/Linux, il se configure depuis ~/.irssi/config. Sous Windows 7, la configuration se trouve en : C:\Users\\.irssi\config.

Pour le configurer, sous nux comme sous Windows, il suffit de modifier ce fichier de configuration. On peut également configurer IRSSI depuis son interface et lui demander de sauvegarder les paramètres une fois la configuration terminée. Voir : Irssi - client IRC en mode console sur doc.fedora-fr.org ou Irssi sur doc.ubuntu-fr.org. Un tutoriel est également disponible sur le Site du Zéro.

Une fois configuré et connecté aux chan, quelques infos (trouvables dans la doc pour débutant d'IRSSI, m'enfin ...) :

  • Si vous avez join plusieurs chan, vous pouvez passer d'un chan à un autre avec Echap+ (alt+n ne marche pas sous Windows). est un nombre à saisir au pavé numérique (ou avec les chiffres de la deuxième rangée de touches de votre clavier). Vous pouvez aussi utiliser CTRL+N/P pour naviguer de chan en chan.
  • Si vous voyez [Act: ...] dans la barre de statut, c'est qu'il y a eu de l'activité dans une ou plusieurs autre(s) fenêtre(s) : si le numéro de la fenêtre est en bleu : il s'agit d'un message du type join/quit/... Si c'est en blanc, alors ça discute. Si c'est en mauve/violet, alors quelqu'un a fait référence à votre pseudo, ...
  • Si vous voulez garder la conversation qui vient d'avoir lieu mais que vous n'avez pas configuré le logging/auto-logging d'IRSSI, vous pouvez sauvegarder le buffer avec la commande : /LASTLOG -file ~/irc.log. Sous Windows, le log arrivera dans C:\Users\\irc.log. Vous pouvez également naviguer dans le buffer avec les touches PgUp et pgDn de votre clavier.
  • Il est également possible de mettre en évidence une ligne dans laquelle un mot qui vous intéresse a été écrit. C'est la fonctionnalité "text highlighting" d'IRSSI.

Pour enregistrer votre pseudo ou créer un chan, vous devez communiquer avec un bot. Sur Geeknode, il s'agit de C. Sur Freenode, il s'agit de NickServ/ChanServ ...

Venons-en maintenant au sujet de cet article : ces foutus accents sous Windows !

Sous Windows, IRSSI utilise PuTTY qui, par défaut, utilise un encodage iso8859-1. Pour éviter de galérer, je vous propose :

  1. De passer sous un OS propre :D.
  2. Plus sérieusement, il s'agit, dans un premier temps, de définir l'encodage par défaut de PuTTY. Si vous utilisez PuTTY pour un autre usage, ouvrez-le comme d'habitude. Sinon, exécutez le binaire puttycyg.exe qui se trouve dans le dossier d'installation d'IRSSI. Sélectionnez la session "Default Settings" et cliquez sur "Load". Ensuite, allez dans "Translation" et choisissez "UTF-8" dans la liste. Enfin, revenez dans "Session" et cliquez sur "Save".
  3. Si le problème n'a pas disparu, ouvrez le fichier de configuration et utilisez la directive "term_charset = "utf-8";" dans chaque bloc "server" qui supporte cet encodage.
  4. Si le problème n'a toujours pas disparu, il faudra jouer avec la fonctionnalité recode d'IRSSI.

IRSSI possède tout un tas de possibilités comme émettre un "bip" quand quelqu'un mentionne votre pseudo (oui, comme MSN !). Je vous laisse découvrir tout ça ... avec le manuel d'IRSSI. 😀

Domain Name System : Attaques et sécurisation

Aujourd'hui, je vous propose un long billet sur le DNS, DNSSEC et les attaques que l'on peut mener contre ce protocole et son extension de sécurité.

Ce travail a été réalisé conjointement avec Hamza HMAMA.

Pour lire la version HTML, il suffit de cliquer sur le lien "Lire la suite" (et/ou de poursuivre ci-dessous). Pour ceux qui préfèrent lire un si gros pavé en PDF, c'est par là : Domain Name System : Attaques et sécurisation.

Nous mettons également les sources LaTeX à votre disposition. Nous avons pris le plus de soin possible pour respecter les règles typographiques et l'esprit de LaTeX. Les seules erreurs restantes sont relatives à des underfull/overfull et sont causées par les URLs/Références. Si jamais notre code choque des gourous LaTeX, qu'ils n'hésitent pas à nous corriger. En attendant, ces sources LaTeX peuvent servir de base à d'autres projets. Sources.

Vous pouvez également récupérer les laboratoires Netkit (vous comprendrez la raison de leur existence en lisant le pavé). Ils peuvent servir pour des expériences DNS/DNSSEC. Labo DNS | Labo DNSSEC | Les deux.

Et pour terminer, vous pouvez également récupérer le visuel projeté durant notre soutenance et ses sources. Par contre, ne faites pas attention aux private jokes qui se sont incrustées. Support visuel soutenance | Sources LaTeX support visuel soutenance.

Si vous voulez tout récupérer (labos, sources, pdf) en un seul coup, c'est par là : DNS - Attaques et securisation - Pack all-in-one.

Le tout (les sources LaTeX, les pdf, les images, les labos Netkit, ...) est diffusé sous la licence habituelle de ce blog, à savoir : CC-BY-SA 3.0 France.

Lire la suite >>

En vrac

Ça commence à faire un petit moment que je n'ai rien posté. On va donc se faire un concentré d'astuces.

Table des matières

Copier/déplacer un dossier contenant beaucoup de petits fichiers

Quand vous tentez de déplacer un dossier qui contient vraiment beaucoup de petits fichiers (au hasard, le Buildroot complet d'OpenWRT), vous allez prendre du temps car le débit en écriture va s'effondrer à cause des petits fichiers. Pour peu que le support physique qui est en dessous soit un peu mou, la copie va vraiment s'éterniser.

On n'y pense pas assez souvent mais tar est notre ami. La création de l'archive (tar -cf destination.tar source/ ), même directement sur le support de destination sera largement plus rapide (on parle d'un gain de plusieurs dizaines de minutes dans mon cas). 7z s'est montré moins efficace. Pas contre, rien n'empêche de 7zippé une archive tar 😉 .

Dans le même ordre d'idée, un rm -rf dossier sera toujours plus rapide dans ces cas-là qu'une interface graphique.

Trier vos comptes de courrier sous Thunderbird/Icedove

La barre latérale gauche de Thunderbird vous montre vos comptes de courrier ainsi que leurs sous-dossiers. Si vous souhaitez trier l'ordre d'affichage de cette liste, il y a deux méthodes : le faire à la main dans le about:config ou le faire avec une extension.

Parmi les extensions existantes, ma préférence va à manually-sort-folders/manually-sort-folders qui fait juste ce qu'on attend d'elle.

Restreindre les droits de Wireshark

Pour utiliser Wireshark, il y a le bon vieux sudo que personne ne recommande et pour cause, lancer une GUI en root est une aberration car elle n'a pas besoin des droits acquis et qu'il s'agit donc d'un vecteur d'attaque supplémentaire. Il y a aussi la méthode qui consiste à exécuter seulement la dumpcap (la librairie de capture) en mode root en utilisant le setuid bit. C'est la méthode que j'ai toujours utilisée.

®om nous parle d'une autre méthode qui consiste à autoriser les membres d'un groupe d'utilisateurs bien défini à capturer les paquets.

Notez deux choses :

  1. On a déporté les droits d'une application sur un groupe : n'importe quelle application lancée par l'utilisateur faisant partie du groupe aura donc la possibilité de capturer le trafic réseau.
  2. Cette méthode permet de faire en sorte que la manipulation soit persistante : le setuid bit sur la dumpcap saute à chacune de ses mises à jour (sauf à utiliser dpkg-statoverride mais c'est une autre histoire).

Pensez à regarder les commentaires sous le billet de ®om pour y trouver d'autres manips sympas (capabilities ou le chaînage tcpdump/wireshark).

Ne pas être informé des mises à jour d'une extension WordPress

Quand une mise à jour pour un thème ou une extension que vous utilisez apparaît, WordPress vous le signale dans l'administration. C'est très bien. Sauf quand il confond une extension avec une autre. Non, Table of Contents Generator de Scott Yang n'est pas la même extension que Table of Contents Generator de Tim Carr (l'insertion d'une TOC ne se fait pas avec le même tag et il y a qu'un seul fichier dans la version de Scott Yang contre une multitude dans celle de Tim Carr, par exemple).

Jusqu'à peu, j'empêchais WordPress de m'informer d'une mise à jour de cette extension en modifiant son numéro de version dans le fichier source. Mais depuis peu, WordPress ne se laisse plus berner. J'ai donc recours à une extension qui bloque les notifications de mise à jour d'une extension en particulier. Parmi toutes les extensions disponibles pour ce travail, j'ai choisi Plugin updates blocker. Simple et efficace.

Attention toutefois à ne pas faire n'importe quoi : ce n'est pas une bonne idée de bloquer les notifications de MAJ de toutes vos extensions, par exemple. Entre autres, sachez que la non-mise à jour d'une extension peut entraîner des risques de compromission (sisi, ça c'est déjà vu). Mais quand l'extension dont vous désirez bloquer les notifications n'est plus maintenue depuis plus de 5 ans ...

Faire en sorte que les identifiants de Table of Contents Generator soient uniques

En effet, si vous utilisez un même titre dans deux de vos billets et que vous utilisez ToCG (de Scott Yang hein), vous aurez deux identifiants identiques. Exemple fictif : Pour deux titres "toto" dans deux billets différents, vous aurez http://www.guiguishow.info/2011/07/14/mon-super-billet/#toc-toto et http://www.guiguishow.info/2012/08/02/en-vrac-2/#toc-toto. Si les deux billets tombent sur la même page (index, catégories, archives, ...), cela posera quelques problèmes au navigateur, au validateur W3C et à l'utilisateur qui n'obtiendra pas ce qu'il voudra quand il cliquera sur le lien. En effet, un identifiant (ancre ou autre) doit être unique dans une page web.

L'idée est donc d'ajouter dans l'identifiant toc un élément variable et unique. L'ID du billet ? Dans l'exemple précédent, cela donnerait (toujours fictif) :http://www.guiguishow.info/2011/07/14/mon-super-billet/#toc-254-toto et http://www.guiguishow.info/2012/08/02/en-vrac-2/#toc-123-toto. Les identifiants seront uniques et plus aucune collision ne se produira si les billets tombent sur la même page.

Pour réaliser ce changement, il suffit de modifier une ligne de la méthode "get_tocid($text)" :
La ligne 26 :

return "toc-$tocid";

devient :

return "toc-$this->postid-$tocid";

Le code complet de la méthode devient donc :

function get_tocid($text) {
        $text = sanitize_title_with_dashes($text);
        $text = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '', $text);
        $tocid = $text;
        $count = 0;
        while (isset($this->tocmap[$tocid]))
            $tocid = $text.strval(++ $count);

        $this->tocmap[$tocid] = true;
        return "toc-$this->postid-$tocid";
}

La variable d'instance $this->postid est définie dans la méthode "the_posts($posts)".

À voir

Si vous ne vous êtes jamais penché sur eux, je vous conseille d'aller voir de plus près :

  • OpenStreetMap (OSM) : Projet de cartographie mondiale libre. Je ne trollerai pas sur "pas complet"/"plus complet que"/"collaboratif donc pas fiable" car la messe est déjà dite avec Wikipédia (dans le sens où Wikipédia a été reconnue aussi fiable que les encyclopédies classiques) et ce billet de SebSauvage. Et quand je vois les arnaques sur les GPS commerciaux (30 jours max après achat pour mettre à jour les cartes avec un soft non libre, une seule mise à jour dans les GPS bas de gamme, les GPS haut de gamme mise à jour "à vie" limitées, ...), je ne peux pas m'empêcher de penser que si je m'achète un GPS un jour, alors ça sera un modèle sur lequel je pourrais mettre les cartes OSM. En attendant, j'ai déjà effectué quelques modifications de la carte de ma ville et il faut reconnaître que c'est facile à faire et rapide même avec l'éditeur en ligne.
  • FRnOG : "Le FRench Network Operators Group (FRnOG) est un groupe d'échange d'informations qui rassemble des personnes intéressées par les domaines de la sécurité, la recherche et le fonctionnement d'Internet en France." Mélange entre information et troll, toute personne intéressée par le monde des réseaux se doit de suivre cette liste de discussion.

Quelques définitions basiques et simplifiées de termes employés chez les opérateurs

Quelques définitions à ceux qui débutent en "vrai" réseau ( 😉 ) car le net regorge de schémas et d'explication juste que des fois, il faut faire plus simple.

GIX | IX | IPX | Point d'échange : Lieu physique (généralement un datacenter) dans lequel des opérateurs s'interconnectent. Pour simplifier, il faut voir cela comme un gros switch sur lequel des opérateurs viendraient connecter un câble menant à leur réseau. Actuellement, beaucoup d'interconnexions se font sur Paris. Ce qui est une mauvaise chose puisque le trafic se concentre en un lieu avant d'être réparti localement. L'idéal serait de favoriser les GIX locaux entre plusieurs membres de la fédération.

Peering : Accord (souvent gratuit mais pas que) entre deux (ou plus) opérateurs pour s'échanger le trafic entre leurs réseaux de manière directe.
Avantages :

  • Optimisation : route plus courte donc on diminue la latence.
  • On gagne (un poil) en indépendance vis-à-vis de son transitaire : si le réseau de ce dernier tombe, on a encore nos routes vers les réseaux avec lesquels on a un peering.
  • On augmente les interconnexions existantes entre plusieurs points et donc, on augmente la robustesse de l'Internet.

Dans la vraie vie, les opérateurs imposent des politiques de peering plus ou moins débiles (quota, “jeCausePasAuxPetits”, …).
Attention : le peering n'est pas transitif. Si A peer avec B et B peer avec C, A ne peer pas avec C et A devra donc avoir un transitaire pour faire le trajet A <> C.

Transitaire : Opérateur qui donne accès à tous les réseaux qui composent Internet. Cet opérateur peut faire des peering, acheter des routes, … mais l'important est qu'il doit fournir un accès complet. La question bête qui peut venir à l'esprit est : mais si tous les transitaires fournissent toutes les routes vers n'importe où, comment en choisir un plutôt qu'un autre ? On tombe là dans des problématiques de qualité des routes proposées. Exemple : vous êtes en France et vous avez le choix entre le transitaire A et le transitaire B. A peer avec les réseaux importants français (FT, Free, peu importe) à Paris. B peer avec ces mêmes réseaux à Amsterdam. Vous comprenez que, dans votre cas, A > B.

Porte de collecte : Point de sortie d'un tunnel L2TP.

Tunnel L2TP : Permet de récupérer les abonnés au BAS (= concentrateur en sortie de DSLAM) et de les acheminer jusqu'au réseau de l'opérateur desdits abonnés quand l'opérateur ne dispose pas de ses propres installations au niveau physique et local. Il faut voir ça comme un câble virtuel amenant l'abonné jusqu'au réseau de l'opérateur.

Note : ce contenu est disponible sur le wiki de la FFDN tout simplement car je l'y ai mis. Mais comme j'aime bien la redondance, je recopie ici.

Les différentes approches de la collecte ADSL

Attention : Cette page se veut simple et non-exhaustive. Son but principal est de répondre à la question “Pourquoi un FAI de FFDN ne prend pas en charge l'abonné de son routeur jusqu'à son réseau ?”.

Quel est le but du jeu quand on est FAI ? Amener un abonné à votre service jusqu'à Internet. Plus précisément, jusqu'à votre réseau, qui, comme d'autres, compose Internet. Ce qui n'est pas forcement clair, c'est qu'il y a plusieurs niveaux. Du plus indépendant au plus dépendant. On ne parle ici que d'ADSL et donc de collecte ADSL. La fibre semble ouvrir de nouvelles opportunités.

Tout faire soit même (du routeur de l'abonné jusqu'à votre réseau opérateur)

Vous êtes financé par une jeune et riche Nigérienne qui vient d'hériter de ses parents ( 😀 ) ?

Alors vous installez des DSLAM dans les NRA dans lesquels arrivent les lignes des abonnés qui vous intéressent. Ensuite vous avez votre propre BAS (= un bête concentrateur) raccordé à votre DSLAM, votre propre lien en fibre optique jusqu'à un datacenter dans lequel vous installez votre cœur de réseau (le routeur qui parle BGP, entre autres) et depuis lequel vous donnez accès au net grâce à des peering et des transitaires.

L'indépendance est totale (sauf vis-à-vis du(des) prestataires qui vous fournissent des chemins vers le reste d'Internet). Cette solution est fortement onéreuse : coût du DSLAM et du BAS, location des lignes de vos abonnés à FT, “loyer” pour installer votre DSLAM et votre BAS, …

Plus raisonnable

Faire appel à un opérateur de collecte qui vous livrera, en L2TP, vos abonnés dans un datacenter. Reste à trouver celui qui fait ça à un niveau local sans passer par Paris. Il y a eu coût à prévoir qui n'est pas à la portée du premier FAI local en construction venu.

Être en marque blanche FDN. Cela est déjà expliqué ailleurs sur ce wiki 🙂 . Cela revient à de la collecte Parisienne à prix réduit.

Note : ce contenu est disponible sur le wiki de la FFDN tout simplement car je l'y ai mis. Mais comme j'aime bien la redondance, je recopie ici.

Interconnexion locale de FAI locaux

C'est quoi le VRAI Internet dont les membres de FFDN ne cessent de parler ?

En plus d'être neutre et libre, le vrai Internet est acentré. Si l'on crée un centre, on recréer le Minitel, pas de l'Internet. Donc il faut favoriser les points d'échanges locaux plutôt que de tout regrouper à Paris (en plus de favoriser des usages acentrés (pas de Facebook ou de MSN) mais c'est un autre sujet).

Pour l'exemple FICTIF, prenons 2 FAI de la fédération géographiquement proches : Ilico (Corrèze) et Aquilenet (Aquitaine). Il y a plusieurs moyens de s'échanger du trafic entre un abonné Ilico et un abonné Aquilenet :

  • Soit on demande à un opérateur tiers qui a le matériel au niveau local de la zone à couvrir de nous livrer le trafic en un point donné (notez que plusieurs opérateurs de collecte peuvent intervenir (= se chaîner) : Nerim passe à FDN qui passe à l'association locale, par exemple). La centralisation française fait que la livraison se fait généralement dans un datacenter de la région Parisienne. Donc, un abonné Ilico qui veut consulter un contenu hébergé par un abonné Aquilenet fera le chemin suivant : opérateur de collecte → porte de collecte Ilico → réseau d'Ilico (à Paris donc) → réseau d'Aquilenet (à Paris) → porte de collecte Aquilenet → opérateur de collecte.
  • Soit on fait de la collecte locale. Ilico récupère ses abonnés dans un datacenter à Brive et Aquilenet récupère les siens dans un datacenter à Bordeaux. En l'état, ça ne change rien au point précédent, il faudra emprunter des réseaux tiers pour faire Bordeaux → Brive. Mais si l'on fait un lien physique entre Brive et Bordeaux ? Le chemin devient opérateur de collecte → porte de collecte Ilico → réseau d'Ilico (à Brive donc) → réseau d'Aquilenet (à Bordeaux) → porte de collecte Aquilenet → opérateur de collecte. La distance est raccourcie. Remarquez également qu'un lien supplémentaire relie désormais Brive à Bordeaux : si Paris se fait bombarder, ces deux villes pourront encore communiquer. La liaison Bordeaux <> Brive peut se faire en fibre (on parle de 150€/mois) ou en WiFi (Plus d'infos).
  • Soit on fait la collecte de telle façon que les abonnés des deux FAI soient récupérés au même endroit (Bordeaux ou Brive donc) et les deux FAI installent leur cœur de réseau dans le même datacenter de la même ville.
  • D'autres solutions existent, c'était juste pour le cas d'école. D'ailleurs, il est donné au lecteur l'exercice de réfléchir à cette question : est-il pertinent de mettre un GIX entre 3 tout petits opérateurs comme dans l'exemple que nous venons de développer ? 🙂 /> (Indice : On est dans une question de charge des liens à comparer aux coûts de ces mêmes liens.)

Il ne s'agit pas d'un rêve : d'autres pays d'Europe sont moins centralisés (Plus d'infos). Les USA sont également décentralisés par construction (état fédéral et disposition géographique de la population). Des projets sont en cours pour construire des GIX locaux (Plus d'infos).

Note : ce contenu est disponible sur le wiki de la FFDN tout simplement car je l'y ai mis. Mais comme j'aime bien la redondance, je recopie ici.

Plutôt que de vous arrêter là, je vous invite à lire le reste du wiki de la FFDN ainsi que les contenus produits par ses membres.

NTP via DHCP sous Debian

DHCP permet de passer tout un tas de paramètres en dehors des traditionnels IP, masque, broadcast, gateway, hostname, serveur dns, ... Il permet également de passer l'IP d'un serveur de temps. Rappelez-vous, j'ai installé un serveur de temps sur mon routeur OpenWRT. Je suis donc un peu furax quand je vois mon Debian aller contacter le pool ntp.org pour se synchroniser.

L'étendue du problème est résumée ici : NTP - Configuration des clients chez L'Internet Rapide et Permanent. Pour résumer : le Network-Manager (NM) bypass les scripts dhclient.

Pour résoudre le problème, il suffit de placer un script dans le dispatcher du Network-Manager comme indiqué ici : network-manager: ignores /etc/dhcp3/dhclient-*-hooks.d. J'avais tenté de copier les scripts dhclient dans le dispatcher, sans effet (et pour cause, les variables contenant l'information ne sont pas les mêmes entre dhclient et NM).

Mais plutôt que de reprendre le script, je vous propose ce script fortement inspiré de celui proposé sur le bugreport de Debian :

#!/bin/sh -e
# Script to take DHCP configured NTP servers
# This heavily leverages the ntp script from dhclient-exit-hooks.d
 
if [ -z "$1" ]; then

    echo "$0: called with no interface" 1>&2
    exit 1;
fi
 
case "$2" in

    up|vpn-up)
 
	if [ -z "$DHCP4_NTP_SERVERS" ]; then

		logger "DHCP n'a retourné aucun serveur NTP."
		exit 1;
	else
		ntpdate $DHCP4_NTP_SERVERS
		if [ $? -eq 0 ]

		then
			logger "Synchronisation NTP effectuée."
			exit 0;
		else
			logger "Problème lors de la synchronisation NTP."

			exit 1;
		fi
	fi
	;;
    down|vpn-down)

	;;
    *)
	echo "$0: called with unknown action \`$2'" 1>&2
	exit 1

	;;
esac

Placez ce script dans le dispatcher NM (exemple : /etc/Network-Manager/dispatcher.d/02ntpdate) et votre ordinateur prendra le serveur NTP local pour synchroniser son horloge (si le serveur DHCP lui a bien communiqué ladite IP). La variable $DHCP4_NTP_SERVERS est fournie par NM.

ÉDIT du 17/02/2014 à 11h50 : Mouais, il y a mieux à faire ...
/etc/NetworkManager/dispatcher.d/01ifupdown exécute les scripts contenus dans les dossiers /etc/network/if-(up|down).d. /etc/network/if-up.d/ntpdate exécute /usr/sbin/ntpdate-debian. Par défaut, ce dernier script récupère la liste des serveurs NTP à utiliser dans /etc/default/ntpdate ou dans /etc/{ntp.conf,/openntpd/ntpd.conf} ou dans /var/lib/ntpdate/default.dhcp.

Il suffit donc de rajouter un bloc : si on récupère des adresses de serveurs NTP en DHCP, on les utilise, sinon on utilise ceux de /etc/default/ntpdate :

[...]
 
if [ -r /etc/default/ntpdate ]; then
        . /etc/default/ntpdate
fi
 
# VIA DHCP
NTPSERVERS=$(nmcli -f DHCP4 dev list | grep ntp_servers | cut -d '=' -f 2)" "$NTPSERVERS
 
[...]

Oui, si un fichier ntp.conf/openntpd/ntpd.conf existe, alors les paramètres obtenus via DHCP seront ignorés. Il suffit de mettre ce morceau de code après le check ntp.conf.

Oui, ça se repose sur Network-Manager.

« NTPSERVERS=[...]" "$NTPSERVERS » permet de garder les serveurs du pool ntp.org (ceux indiqués dans /etc/default/ntpdate) sous le coude au cas où le(s) serveur(s) NTP obtenu(s) avec DHCP ne soi(ent) pas disponibles ou erronés. Fin de l'édit

Et pour ceux que ça intéresse : Pour indiquer au dnsmasq d'OpenWRT de préciser le serveur NTP à utiliser via DHCP, il suffit de créer/modifier la variable "dhcp.lan.dhcp_option" d'uCi. Exemple :

uci set dhcp.lan.dhcp_option=42,192.168.0.254

/etc/init.d/dnsmasq restart

42 est le numéro d'option concernant NTP. L'intégralité des options (et le code associé) permissent par DHCP sont publiées dans le RFC 2132.

Vous pouvez spécifier n'importe quelle option (serveur TFTP + nom du fichier pour un boot PXE, par exemple) à dnsmasq de la même manière. Et si vous voulez combiner plusieurs options (ici TFTP et NTP), deux méthodes sont à votre disposition :

uci set dhcp.lan.dhcp_option="42,192.168.0.254 66,tftpsrv.lan 67,tftp.bin"

/etc/init.d/dnsmasq restart
 
ou
 
uci add_list dhcp.lan.dhcp_option=42,192.168.0.254
uci add_list dhcp.lan.dhcp_option=66,tftpsrv.lan
uci add_list dhcp.lan.dhcp_option=66,tftp.bin
/etc/init.d/dnsmasq restart

ÉDIT du 04 janvier 2014 : Ce billet traite de Backfire 10.03.1. 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

Comme avant, nous allons utiliser Buildroot mais sachez qu'en dehors d'un usage précis, l'Image Builder distribué par le projet OpenWRT suffit amplement pour créer une image personnalisée.

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.

Préparatifs

Nous allons d'abord préparer notre Debian Wheezy pour recevoir Buildroot :

sudo apt-get install asciidoc autoconf bison build-essential fastjar flex gawk gettext git-core intltool libextutils-autoinstall-perl libncurses5-dev libssl-dev libtool subversion zlib1g-dev

Puis nous récupérons, via subversion, les sources stables de Backfire 10.03.1 :

svn co svn://svn.openwrt.org/openwrt/tags/backfire_10.03.1

On s'assure que tout le nécessaire est bien présent :

cd backfire_10.03.1
backfire_10.03.1$ make defconfig && make prereq

Dans la suite de ce guide, sauf mention contraire, je considérerai que votre répertoire courant est backfire_10.03.1, c'est-à-dire la racine du buildroot.

Recréer l’image officielle

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 met à jour la liste des packages disponibles :

backfire_10.03.1$ ./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.1$ 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.1$ wget http://downloads.openwrt.org/backfire/10.03.1/brcm47xx/config && mv 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.1$ sed -i 's,^.*=m,# & is not set,g' ./.config

On lance la compilation :

make V=99

La compilation va échouer avec une trace ressemblant à celle-ci :

make -C /home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs
make[4]: Entering directory `/home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs'
make all-recursive
make[5]: Entering directory `/home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs'
Making all in src
make[6]: Entering directory `/home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs/src'
Making all in mklibs-readelf
make[7]: Entering directory `/home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs/src/mklibs-readelf'
i686-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I../.. -O2 -I/home/zachary/openwrt/openwrt-dreambox/staging_dir/host/include -I/home/zachary/openwrt/openwrt-dreambox/tools/mklibs/include -g -O2 -MT elf.o -MD -MP -MF .deps/elf.Tpo -c -o elf.o elf.cpp
elf.cpp: In static member function 'static Elf::file* Elf::file::open(const char*)':
elf.cpp:68:5: error: '::close' has not been declared
make[7]: * [elf.o] Error 1
make[7]: Leaving directory `/home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs/src/mklibs-readelf'
make[6]: * [all-recursive] Error 1
make[6]: Leaving directory `/home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs/src'
make[5]: * [all-recursive] Error 1
make[5]: Leaving directory `/home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs'
make[4]: * [all] Error 2
make[4]: Leaving directory `/home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs'
make[3]: * home/zachary/openwrt/openwrt-dreambox/build_dir/host/mklibs/.built Error 2
make[3]: Leaving directory `/home/zachary/openwrt/openwrt-dreambox/tools/mklibs'
make[2]: * [tools/mklibs/compile] Error 2
make[2]: Leaving directory `/home/zachary/openwrt/openwrt-dreambox'
make[1]: * home/zachary/openwrt/openwrt-dreambox/staging_dir/target-arm_v4t_uClibc-0.9.30.1_eabi/stamp/.tools_install_nnynn Error 2
make[1]: Leaving directory `/home/zachary/openwrt/openwrt-dreambox'
make: * [world] Error 2

Comme l'indique ce bugreport, la solution est d'ajouter la ligne suivante :

#include <unistd.h>

au fichier backfire_10.03.1/build_dir/host/mklibs/src/mklibs-readelf/elf.cpp puis de relancer la compilation (make) sans faire de make clean au préalable.

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

Modifier les options du noyau Linux

Pour modifier les options du kernel, rien n'a changé, il faut utiliser la commande :

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

La commande à utiliser :

backfire_10.03$ make menuconfig

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 les packages suivants :

  • 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 -> Firewall -> 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 !

Ajouter votre package personnel / vos modifications aux sources

Ici, rien ne change sur la méthodologie à employer.

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.

Néanmoins, si comme moi, vous optimisez dropbear, sachez qu'il n'est plus possible de désactiver TWOFISH128 sinon, une erreur de compilation se produit :

make[4]: Leaving directory `/tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3'
touch /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/.built
rm -rf /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox
mkdir -p /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/CONTROL
echo "Package: busybox" > /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/CONTROL/control
echo "Version: 1.15.3-3.4" >> /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/CONTROL/control
( DEPENDS=''; for depend in ; do DEPENDS=${DEPENDS:+$DEPENDS, }${depend##+}; done; echo "Depends: $DEPENDS"; echo "Provides: "; echo "Source: package/busybox"; echo "Section: base"; echo "Status: unknown ok not-installed"; echo "Essential: yes"; echo "Priority: optional"; echo "Maintainer: OpenWrt Developers Team <openwrt-devel@openwrt.org>"; echo "Architecture: brcm47xx"; echo "Installed-Size: 0"; echo -n "Description: "; getvar V_Package_busybox_description | sed -e 's,^[[:space:]]*, ,g'; ) >> /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/CONTROL/control
chmod 644 /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/CONTROL/control
(cd /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/CONTROL;  )
install -d -m0755 /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/etc/init.d
cp -fpR /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-install/* /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/
for tmp in  cron telnet; do install -m0755 ./files/$tmp /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/etc/init.d/$tmp; done
rm -rf /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/lib64
mkdir -p /tmp/backfire_10.03.1/bin/brcm47xx/packages
find /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox -name 'CVS' -o -name '.svn' -o -name '.#*' | xargs -r rm -rf
NM="mipsel-openwrt-linux-uclibc-nm" STRIP="/tmp/backfire_10.03.1/staging_dir/host/bin/sstrip" STRIP_KMOD="mipsel-openwrt-linux-uclibc-strip --strip-unneeded --remove-section=.comment --remove-section=.pdr --remove-section=.mdebug.abi32" /tmp/backfire_10.03.1/scripts/rstrip.sh /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox
rstrip.sh: /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox/bin/busybox:executable
ipkg-build -c -o 0 -g 0 /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox /tmp/backfire_10.03.1/bin/brcm47xx/packages
Packaged contents of /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-brcm47xx/busybox into /tmp/backfire_10.03.1/bin/brcm47xx/packages/busybox_1.15.3-3.4_brcm47xx.ipk
rm -rf /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/tmp-busybox
mkdir -p /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/stamp /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/tmp-busybox
install -d -m0755 /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/tmp-busybox/etc/init.d
cp -fpR /tmp/backfire_10.03.1/build_dir/target-mipsel_uClibc-0.9.30.1/busybox-1.15.3/ipkg-install/* /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/tmp-busybox/
for tmp in  cron telnet; do install -m0755 ./files/$tmp /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/tmp-busybox/etc/init.d/$tmp; done
rm -rf /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/tmp-busybox/lib64
cp -fpR /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/tmp-busybox/. /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/
rm -rf /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/tmp-busybox
touch /tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/root-brcm47xx/stamp/.busybox_installed
make[3]: Leaving directory `/tmp/backfire_10.03.1/package/busybox'
make[2]: Leaving directory `/tmp/backfire_10.03.1'
make[1]: *** [/tmp/backfire_10.03.1/staging_dir/target-mipsel_uClibc-0.9.30.1/stamp/.package_compile] Error 2
make[1]: Leaving directory `/tmp/backfire_10.03.1'
make: *** [world] Erreur 2

Je ne désactive donc plus TWOFISH et je supprime donc les deux lignes suivantes que je mettais dans le Makefile de dropbear :

$(SED) 's,^#define DROPBEAR_TWOFISH256,/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define DROPBEAR_TWOFISH128,/* & */,g' $(PKG_BUILD_DIR)/options.h

Modifiez les options de busybox

backfire_10.03$ make menuconfig

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

Rien ne change. Sauf que rdate n'est plus activé donc nous n'avons aucune raison de le désactiver 🙂 .

Modifier des options générales

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

Il n'y a plus d'option pour choisir la langue par défaut de LuCi. Seule l'anglais est disponbile par défaut. Si plusieurs langue sont activées, la langue est choisie à la volée en fonction, je pense, des entêtes envoyées par le navigateur.

luci-admin-mini n'existe plus (seule la version complète luci-admin-full est disponible) et luci-admin-core n'est pas son équivalent (ce package n'a même rien à voir).

En revanche, vous pouvez toujours désactiver luci-i18n-english en éditant le fichier .config avec votre éditeur favori.

Cherchez la ligne suivante :

CONFIG_PACKAGE_luci-i18n-english=y

et commentez-là :

# CONFIG_PACKAGE_luci-i18n-english=y is not set

Enregistrer vos modifications et quittez vi.

Libre à vous d'explorer les autres options.

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.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 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 (plus utile)
# 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érencié, é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
	#Traceroute GNU\Linux, *BSD (?)

	iptables -t filter -A lan-wan -s 192.168.0.0/24 -p udp -m udp --dport 33434:33474  -m state --state NEW -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
	#ICMP (echo request)

	iptables -t filter -A bas-lan -s 192.168.0.254/32 -d 192.168.0.0/24 -p icmp -m state --state NEW --icmp-type 8 -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

	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

	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

	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

	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

	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
	#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
	#Traceroute GNU\Linux, *BSD (?)

	iptables -t filter -A bas-wan -s 192.168.1.253/32 -p udp -m udp --dport 33434:33474  -m state --state NEW -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 vide la regle par défaut de stop() 
	iptables -t nat -D POSTROUTING 1

 
	##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 SNAT --to-source 192.168.1.253

 
	##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 SNAT --to-source 192.168.1.253

 
 
	##############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és 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 !

Les sources de ce billet sont identiques à celles de l'ancien billet.