From c58680d2d42be0876225b3714a7e01ec164f5b73 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Thu, 12 May 2022 12:38:57 +0200 Subject: =?UTF-8?q?R=C3=A9organisation=20du=20manuel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/formations/Chiffrement_froid.md | 46 --- content/formations/Configuration_disques.md | 424 ---------------------- content/formations/Grappe.md | 77 ---- content/formations/Installation_NixOS.md | 15 - content/formations/Live_CD.md | 49 --- content/formations/est/_index.md | 14 + content/formations/nix/_index.md | 6 + content/formations/nixos.md | 9 - content/formations/sysadmin/_index.md | 73 ++++ content/formations/sysadmin/chiffrement_froid.md | 45 +++ content/formations/sysadmin/installer_linux.md | 48 +++ content/formations/sysadmin/partitionnement.md | 425 +++++++++++++++++++++++ content/operations/Jitsi.md | 105 ------ content/operations/_index.md | 10 +- content/operations/app/Jitsi.md | 105 ++++++ content/operations/app/_index.md | 8 + content/operations/app/email.md | 30 ++ content/operations/email.md | 30 -- content/operations/grappe/_index.md | 8 + content/operations/noeud/_index.md | 7 + content/operations/noeud/deploiement.md | 51 +++ content/prise_en_main/matrix.md | 2 +- 22 files changed, 829 insertions(+), 758 deletions(-) delete mode 100644 content/formations/Chiffrement_froid.md delete mode 100644 content/formations/Configuration_disques.md delete mode 100644 content/formations/Grappe.md delete mode 100644 content/formations/Installation_NixOS.md delete mode 100644 content/formations/Live_CD.md create mode 100644 content/formations/est/_index.md create mode 100644 content/formations/nix/_index.md delete mode 100644 content/formations/nixos.md create mode 100644 content/formations/sysadmin/_index.md create mode 100644 content/formations/sysadmin/chiffrement_froid.md create mode 100644 content/formations/sysadmin/installer_linux.md create mode 100644 content/formations/sysadmin/partitionnement.md delete mode 100644 content/operations/Jitsi.md create mode 100644 content/operations/app/Jitsi.md create mode 100644 content/operations/app/_index.md create mode 100644 content/operations/app/email.md delete mode 100644 content/operations/email.md create mode 100644 content/operations/grappe/_index.md create mode 100644 content/operations/noeud/_index.md create mode 100644 content/operations/noeud/deploiement.md (limited to 'content') diff --git a/content/formations/Chiffrement_froid.md b/content/formations/Chiffrement_froid.md deleted file mode 100644 index 7348598..0000000 --- a/content/formations/Chiffrement_froid.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Chiffrement à froid -description: Guide à l'installation d'une machine en chiffrant intégralement son disque dur -published: true -date: 2022-01-30T20:43:56.953Z -tags: serveur, infrastructure, sysadmin, technique, guide, tutoriel, administration, chiffrement, luks -editor: markdown -dateCreated: 2021-12-29T15:29:02.943Z ---- - -# Chiffrer les partitions de son futur serveur - -Le chiffrement à froid, c'est le fait de n'inscrire que des données chiffrées sur un disque (plus précisément [une partition de disque](https://fr.wikipedia.org/wiki/Partitionnement_logiciel_/_mat%C3%A9riel)). C'est le standard [LUKS](https://fr.wikipedia.org/wiki/LUKS) qui permet ce chiffrement : ce dernier se place entre le support de stockage et le système d'exploitation (OS), et dé/chiffre tout ce qui est lu ou écrit sur une partition. **Cette étape doit donc être réalisée avant d'installer le système d'exploitation, mais après [le partitionnement de vos disques](/Guide/Infra/Configuration_disques).** - -Une fois le chiffrement mis en place, on utilise le système d'exploitation comme d'habitude (tout a l'air déchiffré à l'usage), parce que LUKS chiffre et déchiffre - de façon transparente - toutes les informations que l'OS lit et écrit sur la mémoire morte (le disque). - -L'intérêt, c'est que, si quelqu'un part avec votre disque dur - il ne pourra pas lire son contenu à moins de vous avoir extorqué la clé. - -Dans le cas d'un **hébergement en centre de données**, votre hébergeur a accès à vos disques - c'est donc une bonne première ligne de défense que de **chiffrer son disque, afin que l'hébergeur ne puisse pas y lire comme dans un livre ouvert.** -Néanmoins, ne croyez pas que le chiffrement à froid soit une mesure *suffisante* pour empêcher votre hébergeur d'accéder à vos données : déterminé, il y arrivera - ça lui prendra seulement plus de travail. -**La solution, pour garantir qu'on est seul⋅e à avoir accès à ses données, c'est l'auto-hébergement.** - - -Les aspects négatifs, c'est que : - -* Toutes ces opérations cryptographiques (dé/chiffrement) ont un coût, qui peut être non-négligeable sur un vieil ordinateur disposant d'un processeur hors d'âge. -* Avant chaque démarrage du système, il faut fournir la clé (le mot de passe) qui débloquera les partitions disque (sur lesquelles se trouvent l'OS qu'on espère démarrer et nos données). - - **On se demande bien ce qu'on va faire du mot de passe - s'agirait pas de le perdre !** - - Des outils comme [clevis](https://github.com/latchset/clevis) existent pour automatiser le déverouillage d'ordinateurs disants, mais c'est hors du cadre de ce tutoriel. - - Pour le moment, on se contentera d'installer de quoi déverouiller manuellement le disque à distance (SSH dans initrd). - - -> TODO - -## Chiffrement de la mémoire - -Certains processeurs AMD récent disposent d'une fonctionalité de chiffrement à la volée de la mémoire. Cela permet d'éviter - en théorie du moins - les attaques physique per lecture du cotenue de la mémoire. Plus d'informations sont disponible [en anglais dans cet article](https://mricher.fr/post/amd-memory-encryption/). - -# Références - -* cryptsetup, [Frequently Asked Questions](https://gitlab.com/cryptsetup/cryptsetup/-/wikis/FrequentlyAskedQuestions), Dépôt Gitlab de `cryptsetup`, anglais. -* ADRN, [Guide d'installation de Debian avec chiffrement à froid dans le centre de données Kimsufi](https://plume.deuxfleurs.fr/~/WebTrotter/installing-a-cloud-server-with-full-disk-encryption), Blog Deuxfleurs, avril 2021, anglais. - diff --git a/content/formations/Configuration_disques.md b/content/formations/Configuration_disques.md deleted file mode 100644 index 94119c1..0000000 --- a/content/formations/Configuration_disques.md +++ /dev/null @@ -1,424 +0,0 @@ ---- -title: Configuration des disques -description: "Redondance, partitionnement, chiffrement : comment configurer ses disques durs en vue d'une installation de serveur" -published: true -date: 2022-04-02T13:38:01.527Z -tags: serveur, infrastructure, sysadmin, technique, administration, chiffrement, disque, partitionnement, redondance -editor: markdown -dateCreated: 2021-12-30T11:39:09.554Z ---- - -# Configurer les disques de son futur serveur - -On part du principe que vous disposez d'un ordinateur, chez vous ou dans un centre de données, et vous êtes prêt⋅e à annihiler le contenu de ses disques pour en faire un beau serveur tout propre. (Il est tout à fait faisable de garder des données existantes sur les disques, mais c'est hors du cadre de cet article.) - -On commencera par expliquer comment accéder aux disques pour les configurer, avant de traiter de partitionnement et de redondance (le fait d'écrire la même choses sur plusieurs disques, au cas où l'un d'entre eux casse). Un autre se focalise sur [le chiffrement des disques](/Guide/Infra/Chiffrement_froid), dont le but est que leur contenu soit incompréhensible sans la clé (si vous vous faites voler le disque, ou que votre hébergeur est trop curieux). - -## Préliminaire : accéder aux disques - -Pour configurer les disques, il faut y avoir accès, comme s'ils étaient des disques durs externes. Donc, pas depuis le système d'exploitation (ou OS pour *operating system*) déjà installé sur la machine : lui, il utilise activement les disques. Mais depuis *un autre OS*. Qui sera Linux, puisqu'il dispose, d'office, de tous les outils pour ce faire, en ligne de commande. -Deux possibilités : - -* _Vous disposez d'un accès physique à la machine_, et pouvez donc brancher écran, clavier, et insérer un live CD/USB Linux qui vous permettra de lancer Linux *depuis le live CD/USB*. - Si vous avez déjà installé un OS sur une machine, vous savez de quoi je parle. Sinon, référez-vous au [guide d'utilisation d'un Live CD](/Guide/Infra/Live_CD). - -* _Vous n'avez pas accès physiquement à la machine_ (par exemple : elle est dans un centre de données). Auquel cas, le propriétaire de la machine doit avoir prévu le coup : vous devriez pouvoir vous connecter en SSH (ligne de commande à distance) à un *mode rescue* qui vous permettra d'agir sur les disques de la machine alors qu'elle est éteinte. Comment s'y prendre dépend de l'infrastructure logicielle du propriétaire du centre de données. - -À partir de maintenant, on considère que vous avez accès aux disques que vous souhaitez configurer *via* la ligne de commande en mode administrateur. Pour vous en assurer, vous pouvez lancer la commande `fdisk -l` (en tant qu'administrateur) ou `lsblk` : - -```bash -# fdisk -l -[...] -Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors -[...] -Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors -[...] -Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors -[...] -# lsblk -NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT -sdb 8:16 0 1.8T 0 disk -sdc 8:32 1 1.8T 0 disk -sda 8:0 0 1.8T 0 disk -``` - -Comme vous pouvez le voir, je m'apprête à installer mon serveur sur une belle machine avec 3 disques de 2 To (= 1.8 Tio). Miam ! - -## Préparer son partitionnement - -Partitionner un disque, c'est le découper en sous-volumes logiques, appelés partitions. - -Un exemple classique de partitionnement, c'est de découper son disque en deux pour disposer *et* de Linux *et* de Windows sur son ordinateur de bureau. Chaque système d'exploitation est installé sur sa partition - et c'est au démarrage qu'on décide si on lance Linux ou Windows aujourd'hui. - -Nous, on s'apprète à installer un serveur sous Linux. On ne cherche pas à faire vivre plusieurs OS sur un seul disque, mais plutôt à séparer les données d'un OS dans des partitions distinctes. On va donc se payer le luxe d'expliquer d'abord quelles stockées vont dans quels dossiers sous Linux, puis on parlera de redondance, avant de revenir sur les contraintes du partitionnement. On passera ensuite à [la pratique](#partitionnement-en-pratique). - - -### Comment sont organisées les données sur Linux - -Comprenez d'abord qu'on « montera » un dossier du système Linux dans chaque partition de stockage. Listons donc les dossiers à considérer lors du partitionnement : - -* `/`, c'est le dossier qui contient tout le système. - On peut mettre tout le système dans la même partition, mais c'est sous-optimal : imaginons que vous vouliez mettre à jour ou changer votre OS. Le plus simple serait de ne supprimer que les données système en gardant par ailleurs toutes les données utilisateur. Mais avec une seule partition contenant tout `/`, je vous souhaite bon courage pour démêler et transférer toutes ces données utilisateur ! -* `/var` contient beaucoup trop de trucs qui ont tendance à manger tout l'espace disque : - * **Les données utilisateur** : la plupart des services (bases de données, Docker, etc.) stockent par défaut tout leur état dans `/var`. On préfèrera configurer nos services pour qu'ils stockent leurs données ailleurs (voir `/data`) pour les démêler des données moins importantes du système. - - * **Les journaux d'accès**, stockés par défaut dans `/var/log`. Ce dossier peut croître soudainement de plusieurs Go/jour en cas d'attaque ([DDoS](https://fr.wikipedia.org/wiki/Attaque_par_d%C3%A9ni_de_service), notamment). - - Ces **méta-données**, essence du [capitalisme de surveillance](https://www.cairn.info/revue-esprit-2019-5-page-63.htm), décrivent précisément l'activité de vos utilisateurs. Elles sont donc presque aussi précieuses que les données à proprement parler. - - On automatise généralement leur suppression périodique ([`logrotate`](https://doc.ubuntu-fr.org/logrotate)), après une **durée de conservation** à définir en fonction de la loi ([6-12 mois en France](https://doc.ubuntu-fr.org/logrotate)) et de vos besoins de journalisation. - -* `/data` (ou `/srv` ou autre) : c'est un dossier de notre invention (il n'existe pas par défaut dans Linux) dans lequel on mettra toutes nos **données utilisateur** en configurant les logiciels clients (bases de données, Docker etc.) pour qu'ils stockent leur état dedans. - - Ce sont les données **les plus précieuses** de votre serveur, et elles sont sous votre responsabilité : il vous revient d'en assurer la **permanence** (redondance, archivage) et la **[sécurité](https://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_des_syst%C3%A8mes_d%27information)** (chiffrement). - - Le fait de caler toutes nos données précieuses dans un seul disque facilite la sauvegarde ultérieure. - -* `/home` contient les données des opérateurs de la machine. Il peut mériter sa propre partition pour que ces données survivent à une réinstallation. -* Et il y en a encore ! Tapez « partitionnement serveur Linux » dans un moteur de recherche, et vous verrez de vives discussions de tout âge justifier tout et son contraire ([exemple intéressant](https://fr.hotelarbredegel.com/895817-what-is-the-correct-way-TSKMON)). - -À part cela, vous aurez sans doute besoin des partitions suivantes : - -* Une partition **BIOS/EFI**, qui sert à expliquer à votre BIOS/EFI (le programme qui démarre votre ordinateur) où se situent vos systèmes d'exploitation. Nécessaire pour que le système démarre, donc. - Elle a besoin d'être sur le disque dur principal, et son format (BIOS ou EFI) dépend de l'âge de l'ordinateur (EFI est plus récent). La taille qu'elle doit faire dépend de son format, mais ça ne dépassera jamais 600 Mo. - Si vous non plus, vous n'y comprenez rien, j'ai trouvé [ce guide](https://www.easeus.fr/partition-manager-tips/difference-entre-bios-et-uefi.html) très clair et complet. -* `/boot` contient les données d'amorçage du système, et pèse le plus souvent moins de 200 Mo. - On a besoin de mettre ce dossier dans sa propre partition quand on fait du [Chiffrement à froid](/Guide/Infra/Chiffrement_froid) sur la partition système (`/`), par exemple. -* Une partition `swap`, qui sert de **RAM de secours super lente**. - Très utile si l'on n'a pas beaucoup de RAM, parce qu'elle évite que le serveur ne s'éteigne brutalement dès la limite atteinte. En lieu et place, l'ordinateur fonctionne ô-combien-lentement, mais vous laisse quand même la possibilité de tuer cette saleté de processus qui a mangé toute la RAM, sans avoir à redémarrer. - - * **Si vous avez moins de 4 Go de RAM**, c'est un choix prudent que de mettre une partition *swap* de quelques Go. Si vous comptez chiffrer votre disque, assurez-vous de chiffrer la *swap* ! Beaucoup d'informations personnelles pourraient y transiter. - * **Si vous pensez avoir suffisamment de RAM pour ne jamais la remplir**, vous avez moins besoin de *swap*. Néanmoins, le noyau et certains logiciels aiment bien en avoir sous le coude. Donc, si la taille de votre disque n'est pas un problème, n'hésitez pas ! - -Vous l'aurez compris, il n'y a pas partitionnement parfait, et **c'est à vous de décider de votre schéma de partitionnement**. - -**En résumé :** -* Les données les plus précieuses sur un serveur, ce sont les données utilisateur dont vous aurez la responsabilité. -* Les données système & de configuration sont moins importantes parce que (1) un système ça se réinstalle, et (2) vous devriez prendre l'habitude de faire des copies de toute votre configuration. -* Séparer données système & utilisateur, on se remercie de l'avoir fait le jour où on veut réinstaller le système. -* La *swap* c'est important quand on a pas beaucoup de RAM. - -### Redondance des données - -Parlons maintenant des stratégies qu'on peut mettre en œuvre, quand on dispose de plusieurs disques, pour diminuer le risque de perte de données grâce à la redondance (c'est à dire : le fait de copier une même information à plusieurs endroits à la fois). -**Si vous ne disposez que d'un disque sur votre ordinateur, n'êtes pas concerné⋅e. Vous pouvez passer directement au [partitionnement](#partitionnement-en-pratique).** - -La redondance (entre autres) est permise par la technologie [RAID](https://fr.wikipedia.org/wiki/RAID_%28informatique%29) (pour « *Redundant Array of Independent Disks* » ou « ensemble redondant de disques indépendants »). Notez que RAID crée des volumes « logiques » à partir de partitions physiques (des bouts de disques, pas les disques entiers). RAID propose plusieurs architectures, en fonction de ses besoins ; en voici quelques unes : - -* [_RAID0_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_0_:_volume_agr%C3%A9g%C3%A9_par_bandes) : Permet d'agréger des partitions, pour constituer un plus gros volume logique. Si vous avez 2 disques, disposant chacun d'une partition de 1 To en RAID0, vous disposez d'un volume logique de 2 To. Si un disque meurt, tout le volume est mort. On a donc, ici, multiplié le risque de panne par deux - ce n'est pas de la redondance. -* [_RAID1_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_1_:_Disques_en_miroir) : Un volume logique en RAID1 est constitué de partitions (une partition par disque physique) contenant à tout instant les mêmes données : les partitions sont « en miroir ». - - * **Taille du volume logique** = taille de la partition la plus petite. - * **Combien tolère-t-on de disques HS avant de perdre des données ?** Tous sauf un. - - Si vous avez 3 disques disposant chacun d'une partition de 1 To en RAID1, vous disposez d'un volume logique de 1 To, et vos données survivront tant qu'un des 3 disques survit. - -* [_RAID5_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_5_:_volume_agr%C3%A9g%C3%A9_par_bandes_%C3%A0_parit%C3%A9_r%C3%A9partie) : Il a besoin d'au moins 3 partitions physiques sous-jacentes. Une des partitions contiendra un « bloc de parité », qui permettra de reconstituer les données si l'on perd n'importe lequel des disques. Les autres partitions contiendront des données. - - Considérant un volume RAID5 sur N partitions : - - * **Taille du volume logique** = taille de la partition la plus petite x (N-1). - * **Combien tolère-t-on de disques HS avant de perdre des données ?** Un seul. - -* [_RAID6_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_6), c'est comme RAID5, avec 2 volumes de parité : on tolère la perte de 2 partitions, mais on a moins de stockage. RAID6 nécessite au moins 4 partitions sous-jacentes. - - * **Taille du volume logique** = taille de la partition la plus petite x (N-2). - * **Combien tolère-t-on de disques HS avant de perdre des données ?** Jusqu'à deux. - -* [_RAID10_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_10_(ou_RAID_1+0)) (ou RAID1+0) : on met un RAID0 sur un RAID1. Je vous laisse regarder par vous-même, il faut au moins 4-5 disques pour que ça vaille le coup : c'est pas pour tout le monde. - -Que de choix ! Ici aussi, **c'est à vous de trouver un schéma de redondance adapté** à votre matériel et à vos besoins. - -### Contraintes de partitionnement ou comment les éviter avec LVM - -Le partitionnement c'est chiant : on est limité à un certain nombre de partitions par disque, les partitions doivent être contiguës, modifier un schéma de partitionnement une fois l'OS installé est risqué... Et enfin : **si on veut chiffrer ses données, on ne peut chiffrer qu'une partition à la fois, et ça demande une clé différente par partition !** - -Heureusement qu'il y a [LVM](https://doc.ubuntu-fr.org/lvm) ! C'est un outil permettant la création de partitions logiques : donnez-lui une grosse partition (pourquoi pas redondée), et LVM vous permettra de gérer autant de sous-partitions « logiques » (virtuelles) en son sein, affranchies des contraintes listées ci-dessus. - -C'est surtout pour nous permettre de chiffrer toute notre installation avec une seule clé qu'il nous est précieux, LVM : on crée une partition immense, avec de la redondance, on la chiffre, on met LVM dessus, et on découpe nos partitions systèmes là-dedans, comme on veut. - -Même si vous ne souhaitez pas chiffrer vos données, LVM peut être une bonne idée, parce qu'il offre beaucoup plus de flexibilité que le partitionnement « à l'ancienne » pour pas cher. - -## Partitionnement en pratique - -Personnellement, aujourd'hui, j'ai deux configurations de serveur à partitionner : - -* _3 disques de 2 To_ (machine Bebop) : - * Déjà, je n'ai pas vraiment besoin de *swap* (32 Go de RAM), mais on va en mettre quelques Go quand même. - * Ce serveur étant loué dans un centre de données, je compte chiffrer mes données. Je ne veux pas avoir X clés de déchiffrement (une par partition) à rentrer à chaque démarrage, donc je vais utiliser LVM pour ne créer qu'une seule grosse partition chiffrée (dont LVM gèrera le sous-partitionnement pour mon système). - * J'ai 3 disques, je vais donc pouvoir utiliser RAID5 pour la redondance de cette méga-partition LVM (RAID1 aurait toléré un *crash* de disque de plus, mais j'aurais eu moins d'espace disque). - * Dans LVM, on aura presque 4 To d'espace ! On va faire une partition `/`, une `/home`, une `/var`, une `/data` et la `swap`. Leurs tailles seront facilement adaptables avec LVM à l'usage, donc on s'en fiche à ce stade. - * Le chiffrement va nécessiter un partition `/boot`, pour que je puisse me connecter au serveur et le déchiffrer avant chaque démarrage (cf. [guide du chiffrement à froid](/Guide/Infra/Chiffrement_froid)). La partition `/boot` sera redondée en RAID1. - * Il va me falloir une petite partition d'amorçage BIOS/EFI de quelques Mo. - - Graphiquement, ça ressemblera à ça : - -![Partitionnement de 3 disques avec partition /boot et LVM](/partitionnement_3_disques_lvm.svg) - -* _2 disques de 2 To_ (machines Swordfish & Red Tail) : - - * Ici, je mettrai 8 Go de *swap* (seulement 4 Go de RAM). - * Pour le système, on va mettre une méga-partition LVM en RAID1 avec chiffrement, ne disposant que de deux disques. - * `/boot` en RAID1 et une partition BIOS/EFI. Bref, à peu près pareil que pour la configuration avec 3 disques. - - En image : - -![partitionnement_2_disques_lvm.svg](/partitionnement_2_disques_lvm.svg) - - -> L'article est en réécriture à partir de ce point ! -{.is-warning} - -#### BIOS ou EFI ? - -Ces deux acronymes sont deux versions du système d'amorçage. Ils démarrent l'ordinateur et vont chercher l'OS à lancer sur disque. BIOS est plus vieux, donc on préfère utiliser EFI quand c'est supporté. (Pour les détails, faudra aller voir ailleurs.) - -Pour savoir si votre système supporte BIOS ou EFI ou les deux, lancez la commande `dmidecode | less` en tant qu'administrateur : - -``` -# dmidecode 3.0 -Getting SMBIOS data from sysfs. -SMBIOS 2.7 present. -61 structures occupying 2578 bytes. -Table at 0x.... - -Handle 0x0000, DMI type 0, 24 bytes -BIOS Information - Vendor: Intel Corp. - # [...] - Characteristics: - # [...] - BIOS boot specification is supported - UEFI is supported -# [...] -``` - -Comme vous pouvez le voir, on lit à la fois `BIOS boot specification is supported` et `UEFI is supported`. J'ai donc le choix. - -#### Kibioctets (Kio ou KiB) ou Kilooctets (Ko ou KB) ? - -Dans les commandes suivantes, j'utiliserai des `KiB` (kibioctets) et non des `KB` (kilooctets). [Cela n'a pas grande importance.](https://forums.commentcamarche.net/forum/affich-24162713-conversion-mo-en-mio) -La notation "kilo, méga..." du système métrique fonctionne en base 10 : « 1 Ko = 1000 (10³) octets ». -En informatique, tout tourne en base 2 : « 1 Kio = 1024 (2¹⁰) octets ». -En conséquence, on a deux notations qui veulent dire presque la même chose : 1 Mio = 1,048576 Mo. - -Ça serait quand même plus simple si tout le monde comptait en base 2 ! - -### Création des partitions sur le Bebop (3 disques) - -* On commence par créer les tables de partition de chaque disque, au format GPT : - - **Attention, créer une table de partition sur un disque en supprime l'intégralité des données !** - - ```bash - # ATTENTION, CETTE COMMANDE EFFACE L'ENTIÈRETÉ DE CHAQUE DISQUE - parted -sa optimal /dev/sda mklabel gpt - parted -sa optimal /dev/sdb mklabel gpt - parted -sa optimal /dev/sdc mklabel gpt - ``` - -* Partitionnement de `/dev/sda`, où réside le système : - - ```bash - # Création de la première partition BIOS, de 1 Mio - # syntaxe : parted -sa optimal [disque] mkpart [nom de la partition] [début] [fin] - # "-s" pour "silent", sinon parted se permet de me poser des questions (le lourd) - # "-a optimal" pour que parted aligne les partitions sur le disque de façon optimale - parted -sa optimal /dev/sda mkpart bios 0% 1MiB - # Seconde partition /boot, 512 Mio - parted -sa optimal /dev/sda mkpart boot 1MiB 513MiB - # Troisième partition /, 100 Gio - parted -sa optimal /dev/sda mkpart system 513MiB 100513MiB - # Dernière partition /home, de 1.5 Tio, alignée à la fin du disque - parted -sa optimal /dev/sda mkpart home 500GiB 100% - - # Ajout du drapeau "bios_grub" à la partition BIOS : - # (Permet au BIOS de savoir que cette partition lui est dédiée.) - # syntaxe : parted [disque] set [partition] [drapeau] [état] - parted /dev/sda set 1 bios_grub on - ``` - - Résultat : - - ```bash - # fdisk -l /dev/sda - Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors - Units: sectors of 1 * 512 = 512 bytes - Sector size (logical/physical): 512 bytes / 512 bytes - I/O size (minimum/optimal): 512 bytes / 512 bytes - Disklabel type: gpt - Disk identifier: 7DE23465-3A2B-4145-99F3-0A232C2DD37D - - Device Start End Sectors Size Type - /dev/sda1 34 2047 2014 1007K BIOS boot - /dev/sda2 2048 1050623 1048576 512M Linux filesystem - /dev/sda3 1050624 205850623 204800000 97.7G Linux filesystem - /dev/sda4 1048576000 3907028991 2858452992 1.3T Linux filesystem - ``` - - -* Partitionnement de `/dev/sdb` et `/dev/sdc`, et création du volume logique en RAID1 : - - ```bash - # Création d'une partition occupant tout l'espace, sur chaque disque - parted -sa optimal /dev/sdb mkpart primary 0% 100% - parted -sa optimal /dev/sdc mkpart primary 0% 100% - # Ajout du drapeau "raid" sur chaque partition nouvellement créée - parted /dev/sdb set 1 raid on - parted /dev/sdc set 1 raid on - # Création du volume RAID1 - mdadm --verbose --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 - # Répondez "y" si on vous emande confirmation. - ``` - - Résultat : - - ```bash - # fdisk -l - Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors - Units: sectors of 1 * 512 = 512 bytes - Sector size (logical/physical): 512 bytes / 512 bytes - I/O size (minimum/optimal): 512 bytes / 512 bytes - Disklabel type: gpt - Disk identifier: 44D8D3D8-6EF3-4052-AFB6-850DEED66C81 - - Device Start End Sectors Size Type - /dev/sdb1 2048 3907028991 3907026944 1.8T Linux RAID - - Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors - Units: sectors of 1 * 512 = 512 bytes - Sector size (logical/physical): 512 bytes / 512 bytes - I/O size (minimum/optimal): 512 bytes / 512 bytes - Disklabel type: gpt - Disk identifier: A89A5F18-5383-41F8-A8C8-3960E12D9AF2 - - Device Start End Sectors Size Type - /dev/sdc1 2048 3907028991 3907026944 1.8T Linux RAID - - Disk /dev/md0: 1.8 TiB, 2000263577600 bytes, 3906764800 sectors - Units: sectors of 1 * 512 = 512 bytes - Sector size (logical/physical): 512 bytes / 512 bytes - I/O size (minimum/optimal): 512 bytes / 512 bytes - ``` - -Et pour tout le disque, nous obtenons : - -```bash -# lsblk -NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT -sdb 8:16 0 1.8T 0 disk -└─sdb1 8:17 0 1.8T 0 part - └─md0 9:0 0 1.8T 0 raid1 -sdc 8:32 1 1.8T 0 disk -└─sdc1 8:33 1 1.8T 0 part - └─md0 9:0 0 1.8T 0 raid1 -sda 8:0 0 1.8T 0 disk -├─sda4 8:4 0 1.3T 0 part -├─sda2 8:2 0 512M 0 part -├─sda3 8:3 0 97.7G 0 part -└─sda1 8:1 0 1007K 0 part -``` - -### Création des partitions sur Swordfish & Red Tail (2 disques) - - -* On commence par créer les tables de partition de chaque disque, au format GPT : - - **Attention, créer une table de partition sur un disque en supprime l'intégralité des données !** - - ```bash - # ATTENTION, CETTE COMMANDE EFFACE L'ENTIÈRETÉ DE CHAQUE DISQUE - parted -sa optimal /dev/sda mklabel gpt - parted -sa optimal /dev/sdb mklabel gpt - ``` - -* Partitionnement des volumes système : - - ```bash - # partition BIOS, 1 Mio, sur /dev/sda - parted -sa optimal /dev/sda mkpart bios 0% 1MiB - parted /dev/sda set 1 bios_grub on - # partition /boot, 512 Mio, sur /dev/sda - parted -sa optimal /dev/sda mkpart boot 1MiB 513MiB - # partition swap, 8 Gio, sur /dev/sda - parted -sa optimal /dev/sda mkpart swap 513MiB 8513MiB - # partition /, 100 Gio, sur /dev/sda - parted -sa optimal /dev/sda mkpart system 8513MiB 108513MiB - # partition /home, 500 Gio, sur /dev/sdb - parted -sa optimal /dev/sdb mkpart home 0% 500GiB - ``` - -* Création des deux partitions d'1.5 Tio à la fin de chaque disque : - - ```bash - parted -sa optimal /dev/sda mkpart primary 500GiB 100% - parted -sa optimal /dev/sdb mkpart primary 500GiB 100% - ``` - -* Création du volume logique en RAID1 : - - - Pour commencer, il ne faut pas se tromper de numéro de partition ! - - ```bash - # lsblk - NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT - sdb 8:16 0 1.8T 0 disk - ├─sdb2 8:18 0 1.3T 0 part # <-- futur RAID1 - └─sdb1 8:17 0 500G 0 part - sda 8:0 0 1.8T 0 disk - ├─sda4 8:4 0 97.7G 0 part - ├─sda2 8:2 0 512M 0 part - ├─sda5 8:5 0 1.3T 0 part # <-- futur RAID1 - ├─sda3 8:3 0 7.8G 0 part - └─sda1 8:1 0 1007K 0 part - ``` - - On va mettre le RAID1 sur la **5e** partition du disque `sda`, et sur la **2e** partition de `sdb`. - - Il reste seulement à ajouter les drapeaux `raid` sur les deux partitions, avant d'invoquer `mdadm` qui va créer le volume RAID1 : - - ```bash - parted /dev/sda set 5 raid on - parted /dev/sdb set 2 raid on - - mdadm --verbose --create /dev/md0 --level=1 --raid-devices=2 /dev/sda5 /dev/sdb2 - ``` - -Et voilà le travail ! - -```bash -# lsblk -NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT -sdb 8:16 0 1.8T 0 disk -├─sdb2 8:18 0 1.3T 0 part -│ └─md0 9:0 0 1.3T 0 raid1 -└─sdb1 8:17 0 500G 0 part -sda 8:0 0 1.8T 0 disk -├─sda4 8:4 0 97.7G 0 part -├─sda2 8:2 0 512M 0 part -├─sda5 8:5 0 1.3T 0 part -│ └─md0 9:0 0 1.3T 0 raid1 -├─sda3 8:3 0 7.8G 0 part -└─sda1 8:1 0 1007K 0 part -``` - -## Installation des systèmes de fichier - -C'est magnifique, nous avons des partitions. Mais pour l'instant, elles ne servent à rien : il leur manque un système de fichier pour être utilisables par un système d'exploitation. - -Si vous comptez chiffrer les disques de votre futur serveur (ce qu'on recommande chaudement si votre serveur est dans un centre de données), il faut configurer le chiffrement *avant* d'installer un système de fichier. Rendez-vous donc sur le [guide du chiffrement à froid](/Guide/Infra/Chiffrement_froid), où on traitera aussi de l'installation du système de fichier de A à Z : vous avez donc fini ce guide, bravo ! - ---- - -Si vous êtes encore là, vous n'avez pas l'intention de chiffrer vos disques. Il ne vous reste donc plus qu'à ajouter ce satané système de fichiers à vos partitions, et vous pourrez enfin installer votre système d'exploitation préféré ! - -### Oui mais quel système de fichiers ? `ext4` ou `ZFS` ou autre ? - -> TODO: ext4 vs. ZFS. [Un guide en anglais](https://nascompares.com/2021/07/21/zfs-vs-ext4-for-nas-what-is-the-difference-in-your-file-system/). - -Le système de fi - -# Références - -* ADRN, [Guide d'installation de Debian avec chiffrement à froid dans le centre de données Kimsufi](https://plume.deuxfleurs.fr/~/WebTrotter/installing-a-cloud-server-with-full-disk-encryption), Blog Deuxfleurs, avril 2021, anglais. diff --git a/content/formations/Grappe.md b/content/formations/Grappe.md deleted file mode 100644 index a60163b..0000000 --- a/content/formations/Grappe.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Nouvelle grappe -description: Guide d'installation d'une grappe de serveurs estampillés Deuxfleurs -published: true -date: 2022-01-09T13:29:29.710Z -tags: installation, serveur, infrastructure, réseau, sysadmin, site géographique, technique, administration -editor: markdown -dateCreated: 2021-12-28T14:33:59.088Z ---- - -# Création d'une nouvelle grappe - -Dans ce guide, nous allons expliquer comment installer une grappe de serveurs, en vue d'un hébergement pour Deuxfleurs. - -## Définitions - -* _Une grappe_, c'est **un ensemble d'ordinateurs, au moins trois** pour obtenir une grappe bien solide. - - Une grappe est **gérée de façon cohérente** (avec le même système logiciel), **plus ou moins autonome** (elle ne dépend pas du reste du monde pour fournir des services web), **par une entité définie** (une personne physique ou un groupe de personnes). - -* _L'entité administratrice_ de la grappe a **deux responsabilités** principales : **la maintenance** de la grappe, et **la protection des données hébergées**. - -## Choix des ordinateurs - -Héberger des services web est une tâche à la portée de la plupart des ordinateurs des 10 dernières années. Néanmoins, essayer de faire tourner correctement des applications lourdes sur une toute petite machine n'est pas une partie de plaisir. Alors, quitte à installer une nouvelle grappe, la vie sera plus agréable si ses machines disposent d'au moins : - -* 4 Go de RAM -* 1 To de disque (dur ou SSD) - -## Choix d'un site géographique - -Dans un *site géographique*, on installe une *grappe d'ordinateurs* au sein d'un *réseau local*, qu'on connecte au cluster de Deuxfleurs. - -On peut distinguer deux types de sites : - -* _Dans un centre de données_ : chaque ordinateur de la grappe appartient au même centre de données, dispose d'une adresse IP fixe qui le connecte directement à Internet. - - Dans ce cas-ci, **l'installation et l'administration sont assez simples** (on a moins de concepts à avaler que chez un particulier). - Par contre, **nous ne sommes pas chez nous** : le propriétaire du centre de données peut accéder aux disques, et voit ce qui passe sur le réseau. **Chiffrement du disque vivement conseillé.** - -* _Chez un particulier_ : la grappe est reliée à Internet par une *box*, qui filtre le trafic réseau selon des règles variables. La grappe se partage l'adresse IP de la box (qui peut changer régulièrement, être en IPv4 ou en IPv6). - - Dans ce cas de figure, **l'installation comme l'administration demandent plus de connaissances** : pour caricaturer, on doit installer et administrer la grappe **malgré le Fournisseur d'Accès Internet** (FAI), qui considère *a priori* que son abonnement ne sert pas à héberger des services web. - - On aura affaire à sa box (NAT, pare-feu...), au manque de garanties concernant notre adressabilité (IPv4 dynamique, IPv6 ? ...), ce qui va nous mener à devoir faire du routage. Le nœud du problème, c'est que chaque ordinateur de la grappe n'aura pas pignon sur rue (pas d'adresse IP publique et fixe par machine). - - Néanmoins, **on est chez nous !** Votre disque dur - qui contient les données personnelles de vos usagers chéris - est sous vos yeux, bien au chaud. Le seul curieux qui voit passer votre trafic réseau est votre FAI : *rien de nouveau sous le soleil*. - -Dans les deux cas - grâce à [la magie des VPN](/Technique/Infra/Wireguard) - on pourra communiquer sans souci avec le reste du cluster de Deuxfleurs. - -**À terme, chez Deuxfleurs, on compte héberger toute notre infrastructure chez des particuliers.** Mais [la route est encore longue](/Technique/Jalons/Interconnexion) avant que nous ayons assez de bonnes connexions et des ordinateurs suffisamment puissants, sans parler du système de gestion logiciel. -Ainsi, **pour le moment, il est tout à fait acceptable d'héberger des services Deuxfleurs en centre de données** : tant qu'on en informe nos usagers et qu'on fait attention à la sécurité. - -## Installation des ordinateurs - -Pour chaque ordinateur de notre future grappe, nous allons avoir besoin d'en configurer le ou les disques, de les chiffrer éventuellement, et d'installer son système d'exploitation. - -### Configuration des disques - -La première chose à faire, avant d'installer un système d'exploitation sur un ordinateur, c'est de configurer son ou ses disques. Souhaite-t-on de la redondance (que plusieurs disques stockent la même chose - pour ne pas tout perdre en cas de pépin), et comment veut-on partitionner ses disques ? - -Référez-vous au guide [Configuration des disques](/Guide/Infra/Configuration_disques) - on vous attend ici. - -### Chiffrement à froid - -Une fois nos disques dûment partitionnés, on peut décider de chiffrer nos partitions (c'est même vivement conseillé en cas d'installation dans un centre de données). - -Référez-vous au guide [Chiffrement à froid](/Guide/Infra/Chiffrement_froid). pour ce faire. - -### Installation de NixOS - -Enfin, avec les disques de notre futur serveur tout bien configurés, on peut passer à l'installation du système d'exploitation. - -Dans le monde du réseau, il n'y a pas à hésiter : Linux reigne en maître. Chez Deuxfleurs, on utilise la distribution [NixOS](https://nixos.org/). - -Référez-vous à notre guide d'[installation de NixOS](/Guide/Infra/Installation_NixOS) pour installer NixOS à notre sauce. - diff --git a/content/formations/Installation_NixOS.md b/content/formations/Installation_NixOS.md deleted file mode 100644 index 9cbca5d..0000000 --- a/content/formations/Installation_NixOS.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Installation de NixOS -description: Guide d'installation de NixOS, pour avoir des systèmes d'exploitation configurés à l'identique dans notre cluster -published: true -date: 2021-12-30T12:10:36.753Z -tags: installation, serveur, infrastructure, sysadmin, technique, guide, tutoriel, administration, nixos, linux -editor: markdown -dateCreated: 2021-12-30T12:10:34.730Z ---- - -# Installer NixOS sur son futur serveur - -Chez Deuxfleurs, on essaye d'avoir la même configuration sur tous nos ordinateurs, pour en faciliter l'adminitration. Mission impossible ? Non, pas avec [NixOS](https://nixos.org/) ! Cette distribution Linux - complètement maniaque de la *reproductibitilité* - garantit l'identité à l'octet près de configurations système - et ce, grâce à de simples fichiers de configuration. - -> TODO diff --git a/content/formations/Live_CD.md b/content/formations/Live_CD.md deleted file mode 100644 index c4e5043..0000000 --- a/content/formations/Live_CD.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Live CD -description: Guide à la création et à l'utilisation d'un Live CD (ou USB) Linux -published: true -date: 2021-12-30T15:23:52.320Z -tags: installation, infrastructure, sysadmin, technique, guide, tutoriel, linux, live cd, live usb -editor: markdown -dateCreated: 2021-12-30T15:23:50.137Z ---- - -# Création et utilisation d'un Live CD/USB - -On utilise un Live CD (ou Live USB - le support de stockage important peu) pour lancer un système d'exploitation (celui présent dans le support de stockage) sur un ordinateur, sans toucher aux disques présents dans l'ordinateur. - -Utiliser un Live CD, c'est la base pour configurer les disques d'une machine, installer un système d'exploitation (OS) dessus, accéder au disque quand on ne connaît pas le mot de passe administrateur. Bref, c'est la vie ! - -Ce guide se décompose ainsi : - -* On commence par expliquer comme obtenir une *image disque* ou ISO. Elle contient le système qu'on va mettre sur le Live CD. -* On explique comment *flasher* l'ISO obtenue sur le support de stockage de notre choix (CD, USB, carte SD, disque dur externe : ce que vous avez sur la main, tant que c'est capable de contenir l'ISO et connectable à l'ordinateur cible). *Flasher*, c'est le verbe classe pour dire « copier l'image disque sur le support de stockage » (avouez que ça claque). -* On découvre les arcanes du BIOS, ce mini-OS présent sur la carte-mère de l'ordinateur et dont le rôle (entre autres) est de savoir quel système démarrer aujourd'hui. Dans notre cas, on veut démarrer sur le Live CD, ce qu'il faudra donc expliquer à notre ami le BIOS. -* Et ça démarre ! - -## Obtention d'une image disque - -Avant toute chose, il faut choisir quelle *distribution* de Linux on va mettre sur le Live CD. Une distribution Linux, c'est une *variante* de Linux. Parce qu'en fait, Linux en lui-même n'est qu'un *noyau* (*kernel* en anglais), pas tout à fait un OS. Il y a donc [mille et unes distributions de Linux](http://distrowatch.org/?language=FR), qui ont toutes leurs avantages et inconvénients. - -Vous connaissez peut-être de nom les distributions Ubuntu, Debian, Fedora, Manjaro... -Nous, chez Deuxfleurs, on utilise la distribution NixOS (parce qu'elle garantit des configurations identiques entre machines, ce qui nous est très utile). On présentera donc comment générer une ISO pour Live CD NixOS. On présentera aussi comment télécharger une ISO de Debian, parce que c'est moins farfelu, très fiable, et que ça fait un bon système de bureau (si d'aventure, vous aviez envie d'utiliser Linux comme OS principal !). - -### NixOS - -> TODO - -### Debian - -> TODO - -## Installation de l'ISO sur le support de stockage - -> TODO - -## Démarrer l'ordinateur sur l'OS du Live CD - -> TODO - -## Et pour finir, on a un système d'exploitation qui marche ! - -> TODO (screenshots?) \ No newline at end of file diff --git a/content/formations/est/_index.md b/content/formations/est/_index.md new file mode 100644 index 0000000..e132c1e --- /dev/null +++ b/content/formations/est/_index.md @@ -0,0 +1,14 @@ ++++ +title = "Études sur les sciences et les techniques" +description = "Études sur les sciences et les techniques" +weight = 20 +sorted_by = "weight" ++++ + +Science & Technology Studies. + +# Ressources + +Technologie Partout, Démocratie nulle part +Techno critique + diff --git a/content/formations/nix/_index.md b/content/formations/nix/_index.md new file mode 100644 index 0000000..bef807b --- /dev/null +++ b/content/formations/nix/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Nix" +description = "L'écosysème Nix : nixlang, nixpkgs, nixos, flakes, etc." +sorted_by = "weight" +weight = 30 ++++ diff --git a/content/formations/nixos.md b/content/formations/nixos.md deleted file mode 100644 index c1cc3f4..0000000 --- a/content/formations/nixos.md +++ /dev/null @@ -1,9 +0,0 @@ -+++ -title = "NixOS" -description = "NixOS" -weight = 1 -+++ - -# NixOS - -Ceci est un manuel diff --git a/content/formations/sysadmin/_index.md b/content/formations/sysadmin/_index.md new file mode 100644 index 0000000..f6c4ad7 --- /dev/null +++ b/content/formations/sysadmin/_index.md @@ -0,0 +1,73 @@ ++++ +title = "Administration Système" +description = "Administration Système" +sort_by = "weight" ++++ + +L'administration système est un concept en réalité aux contours flous. +Ici, on va considérer que l'administration système c'est tout ce qui consiste à faire en sorte que les applications soient fonctionnelles, que les données soient en sécurité, et que les ordinateurs puissent communiquer entre eux à travers le réseau qui nous est mis à disposition. +Et tout ça doit être garanti alors que les usages des services peuvent changer, que des machines peuvent tomber en panne, que des attaques informatiques sont tentées sur notre système, que des fibres sont coupées par des tractopelles, que des bugs existent dans les logiciels, etc. +Promis, on ne s'ennuie pas ! + +Dans d'autres domaines, il est courant de faire la différence entre "conception" et "production", et en réalité cette catégorisation s'applique très bien au monde de l'informatique tel qu'il est constitué aujourd'hui : le développement logiciel est la conception, et l'administration système est la production. +Cette séparation entre "conception" et "production" n'est pas intrinsèque à l'informatique, elle est artificielle et souvent remise en question. +Par exemple, les entreprises de la Silicon Valley ont remarqué que ce découpage était vecteur d'inefficiences. +Formulé avec leurs mots, cette critique a donné des expressions comme "tu le développes, tu l'administres" ou encore les concepts de DevOps et SRE, qui sont parfois devenus plus des buzzwords pour cacher que rien d'autre n'avait changé. +Il nous semble plus efficace de mobiliser des concepts Marxistes de la [division du travail et de l'aliénation](https://www.universalis.fr/encyclopedie/division-du-travail/) pour expliquer ce malaise. + +Chez Deuxfleurs, si on identifie des tâches comme relevant de "la conception" ou de "la production", nos membres de sont pas spécialisés dans un domaine : une même personne développe et opère les logiciels. +Adopter cette attitude a plusieurs avantages importants : ça encourage à concevoir des logiciels faciles à opérer, robuste et résilients, ça permet aussi d'identifier, de remonter et de corriger directement des bugs ou anomalies identifiées en production, +enfin ça permet de mobiliser les outils de développement (exemple : les langages de programmation) pour opérer le système de manière plus sûre et plus rapide. + +Évidemment, pouvoir jongler entre conception et opération, ça demande un grand nombre de qualifications. +Heureusement, la plupart des ressources pour se former sont accessibles gratuitement sur Internet et sont d'excellentes qualité. +De plus, un grand nombre de ces dernières sont mêmes accessibles en Français. +Bref, avec un peu d'aide, il est tout à fait possible de s'auto-former. + +Pour bien se former, il faut des bases théoriques dans un ensemble de domaines précis : réseau, système d’exploitation,« ingénieurie de fiabilité », et sécurité/cryptographie. +Pour couvrir plus largement le domaine, il est bon d'inclure également un peu de programmation, un peu d’architecture matériel, un peu de base de données, un peu d’algorithmie, un peu de structure de données, etc. Une fois cette base acquise, et seulement une fois qu’elle est acquise, il est possible de s'intéresser au fonctionnement précis d'une technologie en particulier, mais c’est vraiment secondaire. +Ce wiki a pour objectif de référencer les bases théoriques existantes et d'apporter des bases pratiques spécifiques complémentaires. + +# Ressources externes + +**Les réseaux de zéro - Zeste de savoir**. Ce livre abondamment illustré explique de manière simple et moderne les principes fondamentaux des réseaux (topologies, couches, protocoles...), avec à l'appui de nombreux schémas, exemples, exercices et cas pratiques. En particulier, il utilise le simulateur de matériel réseau Packet Tracer, outil gratuit édité par Cisco, pour proposer au lecteur des mises en situation et des exercices de configuration. Agréable à lire, cet ouvrage d'une grande pédagogie offre un panorama complet des réseaux informatiques, en accompagnant le lecteur jusqu'à la compréhension des concepts les plus complexes. Sans nécessiter de prérequis, il constituera un excellent support pour tous ceux et celles qui souhaitent acquérir un bagage solide dans ce domaine. + +[Acheter le livre](https://www.eyrolles.com/Informatique/Livre/les-reseaux-de-zero-9782416005237/) - [Lire gratuitement en ligne](https://zestedesavoir.com/tutoriels/2789/les-reseaux-de-zero/) + +**Système d'exploitation 3IF - INSA Lyon**. Contenu du cours : + - Chap. 1: noyau, shell, appel système + - Chap. 2: partage du temps, ordonnancement + - Chap. 3: mémoire virtuelle + - Chap. 4: allocation dynamique de mémoire + - Chap. 5: threads et synchronisation + - Chap. 6: stockage et systèmes de fichiers + +[Accéder au cours sur le Moodle de l'INSA Lyon](https://moodle.insa-lyon.fr/course/view.php?id=4045) + +**Linux - OpenClassrooms**. Pour avoir une approche pratique aux systèmes d'exploitations avec Linux après le cours théorique précédent. + +[Lire "Initiez vous à Linux"](https://openclassrooms.com/fr/courses/7170491-initiez-vous-a-linux) - [Lire "Administrez un système Linux"](https://openclassrooms.com/fr/courses/7274161-administrez-un-systeme-linux) + +**Le langage C - Zeste de Savoir**. Pour être proche du matériel et mieux appréhender comment ton système/OS a été conçu, et comment mieux concevoir et opérer tes applications. + +[Lire "Le langage C"](https://zestedesavoir.com/tutoriels/755/le-langage-c-1/) + +**Python - Zeste de Savoir & Site du Zéro**. Langage de script haut niveau très utilisé + +[Cours Zeste de Savoir](https://zestedesavoir.com/tutoriels/799/apprendre-a-programmer-avec-python-3/) - [Cours Site du Zéro](https://user.oc-static.com/ftp/livre/python/apprenez_a_programmer_en_python.pdf) + +**Ingénieurie de la fiabilité - Google**. Google publie un livre de référence en libre accès sur comment opérer des systèmes de manière fiable. + +[Lire les livres de la collection SRE](https://sre.google/books/) + +**Sécurité - ANSSI et Univ Savoie**. Pour la sécurité, aller voir du côté de l'ANSSI ou des cours d'école d'ingé en libre accès : + +[MOOC de l'ANSSI](https://secnumacademie.gouv.fr/) - [Guide bonnes pratiques ANSSI](https://www.ssi.gouv.fr/entreprise/bonnes-pratiques/) - [Cours Cryptologie et Sécurité](http://www.lama.univ-savoie.fr/pagesmembres/lachaud/Cours/INFO006/Cours/cours.pdf) + +**Trouver les livres de référence**. Dans chaque domaine, et parfois pour des technologies installées, des livres de référence existent. Ce sont souvent des ressources beaucoup plus efficaces qu'un simple tutoriel sur un blog. + +[Liste de livres](https://notes.shichao.io/books/) - [Exemple Linux](https://man7.org/tlpi/) - [Exemple Kubernetes](https://www.manning.com/books/kubernetes-in-action) + +**MOOC**. Il existe pas mal de MOOC en informatique, que ce soit en français comme en anglais, sur des plateformes spécialisées comme une playlist Youtube. + +[Exemple "France Université Numérique](https://www.fun-mooc.fr/fr/cours/?limit=21&offset=0&subjects=2787) diff --git a/content/formations/sysadmin/chiffrement_froid.md b/content/formations/sysadmin/chiffrement_froid.md new file mode 100644 index 0000000..6d52df0 --- /dev/null +++ b/content/formations/sysadmin/chiffrement_froid.md @@ -0,0 +1,45 @@ +--- +title: Chiffrement à froid +description: Guide à l'installation d'une machine en chiffrant intégralement son disque dur +weight: 20 +published: true +date: 2022-01-30T20:43:56.953Z +tags: serveur, infrastructure, sysadmin, technique, guide, tutoriel, administration, chiffrement, luks +editor: markdown +dateCreated: 2021-12-29T15:29:02.943Z +--- + +Le chiffrement à froid, c'est le fait de n'inscrire que des données chiffrées sur un disque (plus précisément [une partition de disque](https://fr.wikipedia.org/wiki/Partitionnement_logiciel_/_mat%C3%A9riel)). C'est le standard [LUKS](https://fr.wikipedia.org/wiki/LUKS) qui permet ce chiffrement : ce dernier se place entre le support de stockage et le système d'exploitation (OS), et dé/chiffre tout ce qui est lu ou écrit sur une partition. **Cette étape doit donc être réalisée avant d'installer le système d'exploitation, mais après [le partitionnement de vos disques](/Guide/Infra/Configuration_disques).** + +Une fois le chiffrement mis en place, on utilise le système d'exploitation comme d'habitude (tout a l'air déchiffré à l'usage), parce que LUKS chiffre et déchiffre - de façon transparente - toutes les informations que l'OS lit et écrit sur la mémoire morte (le disque). + +L'intérêt, c'est que, si quelqu'un part avec votre disque dur - il ne pourra pas lire son contenu à moins de vous avoir extorqué la clé. + +Dans le cas d'un **hébergement en centre de données**, votre hébergeur a accès à vos disques - c'est donc une bonne première ligne de défense que de **chiffrer son disque, afin que l'hébergeur ne puisse pas y lire comme dans un livre ouvert.** +Néanmoins, ne croyez pas que le chiffrement à froid soit une mesure *suffisante* pour empêcher votre hébergeur d'accéder à vos données : déterminé, il y arrivera - ça lui prendra seulement plus de travail. +**La solution, pour garantir qu'on est seul⋅e à avoir accès à ses données, c'est l'auto-hébergement.** + + +Les aspects négatifs, c'est que : + +* Toutes ces opérations cryptographiques (dé/chiffrement) ont un coût, qui peut être non-négligeable sur un vieil ordinateur disposant d'un processeur hors d'âge. +* Avant chaque démarrage du système, il faut fournir la clé (le mot de passe) qui débloquera les partitions disque (sur lesquelles se trouvent l'OS qu'on espère démarrer et nos données). + + **On se demande bien ce qu'on va faire du mot de passe - s'agirait pas de le perdre !** + + Des outils comme [clevis](https://github.com/latchset/clevis) existent pour automatiser le déverouillage d'ordinateurs disants, mais c'est hors du cadre de ce tutoriel. + + Pour le moment, on se contentera d'installer de quoi déverouiller manuellement le disque à distance (SSH dans initrd). + + +> TODO + +## Chiffrement de la mémoire + +Certains processeurs AMD récent disposent d'une fonctionalité de chiffrement à la volée de la mémoire. Cela permet d'éviter - en théorie du moins - les attaques physique per lecture du cotenue de la mémoire. Plus d'informations sont disponible [en anglais dans cet article](https://mricher.fr/post/amd-memory-encryption/). + +# Références + +* cryptsetup, [Frequently Asked Questions](https://gitlab.com/cryptsetup/cryptsetup/-/wikis/FrequentlyAskedQuestions), Dépôt Gitlab de `cryptsetup`, anglais. +* ADRN, [Guide d'installation de Debian avec chiffrement à froid dans le centre de données Kimsufi](https://plume.deuxfleurs.fr/~/WebTrotter/installing-a-cloud-server-with-full-disk-encryption), Blog Deuxfleurs, avril 2021, anglais. + diff --git a/content/formations/sysadmin/installer_linux.md b/content/formations/sysadmin/installer_linux.md new file mode 100644 index 0000000..7975844 --- /dev/null +++ b/content/formations/sysadmin/installer_linux.md @@ -0,0 +1,48 @@ +--- +title: Installer Linux +weight: 10 +description: Installer Linux +published: true +date: 2021-12-30T15:23:52.320Z +tags: installation, infrastructure, sysadmin, technique, guide, tutoriel, linux, live cd, live usb +editor: markdown +dateCreated: 2021-12-30T15:23:50.137Z +--- + +On utilise un Live CD (ou Live USB - le support de stockage important peu) pour lancer un système d'exploitation (celui présent dans le support de stockage) sur un ordinateur, sans toucher aux disques présents dans l'ordinateur. + +Utiliser un Live CD, c'est la base pour configurer les disques d'une machine, installer un système d'exploitation (OS) dessus, accéder au disque quand on ne connaît pas le mot de passe administrateur. Bref, c'est la vie ! + +Ce guide se décompose ainsi : + +* On commence par expliquer comme obtenir une *image disque* ou ISO. Elle contient le système qu'on va mettre sur le Live CD. +* On explique comment *flasher* l'ISO obtenue sur le support de stockage de notre choix (CD, USB, carte SD, disque dur externe : ce que vous avez sur la main, tant que c'est capable de contenir l'ISO et connectable à l'ordinateur cible). *Flasher*, c'est le verbe classe pour dire « copier l'image disque sur le support de stockage » (avouez que ça claque). +* On découvre les arcanes du BIOS, ce mini-OS présent sur la carte-mère de l'ordinateur et dont le rôle (entre autres) est de savoir quel système démarrer aujourd'hui. Dans notre cas, on veut démarrer sur le Live CD, ce qu'il faudra donc expliquer à notre ami le BIOS. +* Et ça démarre ! + +## Obtention d'une image disque + +Avant toute chose, il faut choisir quelle *distribution* de Linux on va mettre sur le Live CD. Une distribution Linux, c'est une *variante* de Linux. Parce qu'en fait, Linux en lui-même n'est qu'un *noyau* (*kernel* en anglais), pas tout à fait un OS. Il y a donc [mille et unes distributions de Linux](http://distrowatch.org/?language=FR), qui ont toutes leurs avantages et inconvénients. + +Vous connaissez peut-être de nom les distributions Ubuntu, Debian, Fedora, Manjaro... +Nous, chez Deuxfleurs, on utilise la distribution NixOS (parce qu'elle garantit des configurations identiques entre machines, ce qui nous est très utile). On présentera donc comment générer une ISO pour Live CD NixOS. On présentera aussi comment télécharger une ISO de Debian, parce que c'est moins farfelu, très fiable, et que ça fait un bon système de bureau (si d'aventure, vous aviez envie d'utiliser Linux comme OS principal !). + +### NixOS + +> TODO + +### Debian + +> TODO + +## Installation de l'ISO sur le support de stockage + +> TODO + +## Démarrer l'ordinateur sur l'OS du Live CD + +> TODO + +## Et pour finir, on a un système d'exploitation qui marche ! + +> TODO (screenshots?) diff --git a/content/formations/sysadmin/partitionnement.md b/content/formations/sysadmin/partitionnement.md new file mode 100644 index 0000000..ddc4f73 --- /dev/null +++ b/content/formations/sysadmin/partitionnement.md @@ -0,0 +1,425 @@ +--- +title: Partitionnement +description: "Redondance, partitionnement, chiffrement : comment configurer ses disques durs en vue d'une installation de serveur" +published: true +weight: 30 +date: 2022-04-02T13:38:01.527Z +tags: serveur, infrastructure, sysadmin, technique, administration, chiffrement, disque, partitionnement, redondance +editor: markdown +dateCreated: 2021-12-30T11:39:09.554Z +--- + +# Configurer les disques de son futur serveur + +On part du principe que vous disposez d'un ordinateur, chez vous ou dans un centre de données, et vous êtes prêt⋅e à annihiler le contenu de ses disques pour en faire un beau serveur tout propre. (Il est tout à fait faisable de garder des données existantes sur les disques, mais c'est hors du cadre de cet article.) + +On commencera par expliquer comment accéder aux disques pour les configurer, avant de traiter de partitionnement et de redondance (le fait d'écrire la même choses sur plusieurs disques, au cas où l'un d'entre eux casse). Un autre se focalise sur [le chiffrement des disques](/Guide/Infra/Chiffrement_froid), dont le but est que leur contenu soit incompréhensible sans la clé (si vous vous faites voler le disque, ou que votre hébergeur est trop curieux). + +## Préliminaire : accéder aux disques + +Pour configurer les disques, il faut y avoir accès, comme s'ils étaient des disques durs externes. Donc, pas depuis le système d'exploitation (ou OS pour *operating system*) déjà installé sur la machine : lui, il utilise activement les disques. Mais depuis *un autre OS*. Qui sera Linux, puisqu'il dispose, d'office, de tous les outils pour ce faire, en ligne de commande. +Deux possibilités : + +* _Vous disposez d'un accès physique à la machine_, et pouvez donc brancher écran, clavier, et insérer un live CD/USB Linux qui vous permettra de lancer Linux *depuis le live CD/USB*. + Si vous avez déjà installé un OS sur une machine, vous savez de quoi je parle. Sinon, référez-vous au [guide d'utilisation d'un Live CD](/Guide/Infra/Live_CD). + +* _Vous n'avez pas accès physiquement à la machine_ (par exemple : elle est dans un centre de données). Auquel cas, le propriétaire de la machine doit avoir prévu le coup : vous devriez pouvoir vous connecter en SSH (ligne de commande à distance) à un *mode rescue* qui vous permettra d'agir sur les disques de la machine alors qu'elle est éteinte. Comment s'y prendre dépend de l'infrastructure logicielle du propriétaire du centre de données. + +À partir de maintenant, on considère que vous avez accès aux disques que vous souhaitez configurer *via* la ligne de commande en mode administrateur. Pour vous en assurer, vous pouvez lancer la commande `fdisk -l` (en tant qu'administrateur) ou `lsblk` : + +```bash +# fdisk -l +[...] +Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors +[...] +Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors +[...] +Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors +[...] +# lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +sdb 8:16 0 1.8T 0 disk +sdc 8:32 1 1.8T 0 disk +sda 8:0 0 1.8T 0 disk +``` + +Comme vous pouvez le voir, je m'apprête à installer mon serveur sur une belle machine avec 3 disques de 2 To (= 1.8 Tio). Miam ! + +## Préparer son partitionnement + +Partitionner un disque, c'est le découper en sous-volumes logiques, appelés partitions. + +Un exemple classique de partitionnement, c'est de découper son disque en deux pour disposer *et* de Linux *et* de Windows sur son ordinateur de bureau. Chaque système d'exploitation est installé sur sa partition - et c'est au démarrage qu'on décide si on lance Linux ou Windows aujourd'hui. + +Nous, on s'apprète à installer un serveur sous Linux. On ne cherche pas à faire vivre plusieurs OS sur un seul disque, mais plutôt à séparer les données d'un OS dans des partitions distinctes. On va donc se payer le luxe d'expliquer d'abord quelles stockées vont dans quels dossiers sous Linux, puis on parlera de redondance, avant de revenir sur les contraintes du partitionnement. On passera ensuite à [la pratique](#partitionnement-en-pratique). + + +### Comment sont organisées les données sur Linux + +Comprenez d'abord qu'on « montera » un dossier du système Linux dans chaque partition de stockage. Listons donc les dossiers à considérer lors du partitionnement : + +* `/`, c'est le dossier qui contient tout le système. + On peut mettre tout le système dans la même partition, mais c'est sous-optimal : imaginons que vous vouliez mettre à jour ou changer votre OS. Le plus simple serait de ne supprimer que les données système en gardant par ailleurs toutes les données utilisateur. Mais avec une seule partition contenant tout `/`, je vous souhaite bon courage pour démêler et transférer toutes ces données utilisateur ! +* `/var` contient beaucoup trop de trucs qui ont tendance à manger tout l'espace disque : + * **Les données utilisateur** : la plupart des services (bases de données, Docker, etc.) stockent par défaut tout leur état dans `/var`. On préfèrera configurer nos services pour qu'ils stockent leurs données ailleurs (voir `/data`) pour les démêler des données moins importantes du système. + + * **Les journaux d'accès**, stockés par défaut dans `/var/log`. Ce dossier peut croître soudainement de plusieurs Go/jour en cas d'attaque ([DDoS](https://fr.wikipedia.org/wiki/Attaque_par_d%C3%A9ni_de_service), notamment). + + Ces **méta-données**, essence du [capitalisme de surveillance](https://www.cairn.info/revue-esprit-2019-5-page-63.htm), décrivent précisément l'activité de vos utilisateurs. Elles sont donc presque aussi précieuses que les données à proprement parler. + + On automatise généralement leur suppression périodique ([`logrotate`](https://doc.ubuntu-fr.org/logrotate)), après une **durée de conservation** à définir en fonction de la loi ([6-12 mois en France](https://doc.ubuntu-fr.org/logrotate)) et de vos besoins de journalisation. + +* `/data` (ou `/srv` ou autre) : c'est un dossier de notre invention (il n'existe pas par défaut dans Linux) dans lequel on mettra toutes nos **données utilisateur** en configurant les logiciels clients (bases de données, Docker etc.) pour qu'ils stockent leur état dedans. + + Ce sont les données **les plus précieuses** de votre serveur, et elles sont sous votre responsabilité : il vous revient d'en assurer la **permanence** (redondance, archivage) et la **[sécurité](https://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_des_syst%C3%A8mes_d%27information)** (chiffrement). + + Le fait de caler toutes nos données précieuses dans un seul disque facilite la sauvegarde ultérieure. + +* `/home` contient les données des opérateurs de la machine. Il peut mériter sa propre partition pour que ces données survivent à une réinstallation. +* Et il y en a encore ! Tapez « partitionnement serveur Linux » dans un moteur de recherche, et vous verrez de vives discussions de tout âge justifier tout et son contraire ([exemple intéressant](https://fr.hotelarbredegel.com/895817-what-is-the-correct-way-TSKMON)). + +À part cela, vous aurez sans doute besoin des partitions suivantes : + +* Une partition **BIOS/EFI**, qui sert à expliquer à votre BIOS/EFI (le programme qui démarre votre ordinateur) où se situent vos systèmes d'exploitation. Nécessaire pour que le système démarre, donc. + Elle a besoin d'être sur le disque dur principal, et son format (BIOS ou EFI) dépend de l'âge de l'ordinateur (EFI est plus récent). La taille qu'elle doit faire dépend de son format, mais ça ne dépassera jamais 600 Mo. + Si vous non plus, vous n'y comprenez rien, j'ai trouvé [ce guide](https://www.easeus.fr/partition-manager-tips/difference-entre-bios-et-uefi.html) très clair et complet. +* `/boot` contient les données d'amorçage du système, et pèse le plus souvent moins de 200 Mo. + On a besoin de mettre ce dossier dans sa propre partition quand on fait du [Chiffrement à froid](/Guide/Infra/Chiffrement_froid) sur la partition système (`/`), par exemple. +* Une partition `swap`, qui sert de **RAM de secours super lente**. + Très utile si l'on n'a pas beaucoup de RAM, parce qu'elle évite que le serveur ne s'éteigne brutalement dès la limite atteinte. En lieu et place, l'ordinateur fonctionne ô-combien-lentement, mais vous laisse quand même la possibilité de tuer cette saleté de processus qui a mangé toute la RAM, sans avoir à redémarrer. + + * **Si vous avez moins de 4 Go de RAM**, c'est un choix prudent que de mettre une partition *swap* de quelques Go. Si vous comptez chiffrer votre disque, assurez-vous de chiffrer la *swap* ! Beaucoup d'informations personnelles pourraient y transiter. + * **Si vous pensez avoir suffisamment de RAM pour ne jamais la remplir**, vous avez moins besoin de *swap*. Néanmoins, le noyau et certains logiciels aiment bien en avoir sous le coude. Donc, si la taille de votre disque n'est pas un problème, n'hésitez pas ! + +Vous l'aurez compris, il n'y a pas partitionnement parfait, et **c'est à vous de décider de votre schéma de partitionnement**. + +**En résumé :** +* Les données les plus précieuses sur un serveur, ce sont les données utilisateur dont vous aurez la responsabilité. +* Les données système & de configuration sont moins importantes parce que (1) un système ça se réinstalle, et (2) vous devriez prendre l'habitude de faire des copies de toute votre configuration. +* Séparer données système & utilisateur, on se remercie de l'avoir fait le jour où on veut réinstaller le système. +* La *swap* c'est important quand on a pas beaucoup de RAM. + +### Redondance des données + +Parlons maintenant des stratégies qu'on peut mettre en œuvre, quand on dispose de plusieurs disques, pour diminuer le risque de perte de données grâce à la redondance (c'est à dire : le fait de copier une même information à plusieurs endroits à la fois). +**Si vous ne disposez que d'un disque sur votre ordinateur, n'êtes pas concerné⋅e. Vous pouvez passer directement au [partitionnement](#partitionnement-en-pratique).** + +La redondance (entre autres) est permise par la technologie [RAID](https://fr.wikipedia.org/wiki/RAID_%28informatique%29) (pour « *Redundant Array of Independent Disks* » ou « ensemble redondant de disques indépendants »). Notez que RAID crée des volumes « logiques » à partir de partitions physiques (des bouts de disques, pas les disques entiers). RAID propose plusieurs architectures, en fonction de ses besoins ; en voici quelques unes : + +* [_RAID0_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_0_:_volume_agr%C3%A9g%C3%A9_par_bandes) : Permet d'agréger des partitions, pour constituer un plus gros volume logique. Si vous avez 2 disques, disposant chacun d'une partition de 1 To en RAID0, vous disposez d'un volume logique de 2 To. Si un disque meurt, tout le volume est mort. On a donc, ici, multiplié le risque de panne par deux - ce n'est pas de la redondance. +* [_RAID1_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_1_:_Disques_en_miroir) : Un volume logique en RAID1 est constitué de partitions (une partition par disque physique) contenant à tout instant les mêmes données : les partitions sont « en miroir ». + + * **Taille du volume logique** = taille de la partition la plus petite. + * **Combien tolère-t-on de disques HS avant de perdre des données ?** Tous sauf un. + + Si vous avez 3 disques disposant chacun d'une partition de 1 To en RAID1, vous disposez d'un volume logique de 1 To, et vos données survivront tant qu'un des 3 disques survit. + +* [_RAID5_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_5_:_volume_agr%C3%A9g%C3%A9_par_bandes_%C3%A0_parit%C3%A9_r%C3%A9partie) : Il a besoin d'au moins 3 partitions physiques sous-jacentes. Une des partitions contiendra un « bloc de parité », qui permettra de reconstituer les données si l'on perd n'importe lequel des disques. Les autres partitions contiendront des données. + + Considérant un volume RAID5 sur N partitions : + + * **Taille du volume logique** = taille de la partition la plus petite x (N-1). + * **Combien tolère-t-on de disques HS avant de perdre des données ?** Un seul. + +* [_RAID6_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_6), c'est comme RAID5, avec 2 volumes de parité : on tolère la perte de 2 partitions, mais on a moins de stockage. RAID6 nécessite au moins 4 partitions sous-jacentes. + + * **Taille du volume logique** = taille de la partition la plus petite x (N-2). + * **Combien tolère-t-on de disques HS avant de perdre des données ?** Jusqu'à deux. + +* [_RAID10_](https://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_10_(ou_RAID_1+0)) (ou RAID1+0) : on met un RAID0 sur un RAID1. Je vous laisse regarder par vous-même, il faut au moins 4-5 disques pour que ça vaille le coup : c'est pas pour tout le monde. + +Que de choix ! Ici aussi, **c'est à vous de trouver un schéma de redondance adapté** à votre matériel et à vos besoins. + +### Contraintes de partitionnement ou comment les éviter avec LVM + +Le partitionnement c'est chiant : on est limité à un certain nombre de partitions par disque, les partitions doivent être contiguës, modifier un schéma de partitionnement une fois l'OS installé est risqué... Et enfin : **si on veut chiffrer ses données, on ne peut chiffrer qu'une partition à la fois, et ça demande une clé différente par partition !** + +Heureusement qu'il y a [LVM](https://doc.ubuntu-fr.org/lvm) ! C'est un outil permettant la création de partitions logiques : donnez-lui une grosse partition (pourquoi pas redondée), et LVM vous permettra de gérer autant de sous-partitions « logiques » (virtuelles) en son sein, affranchies des contraintes listées ci-dessus. + +C'est surtout pour nous permettre de chiffrer toute notre installation avec une seule clé qu'il nous est précieux, LVM : on crée une partition immense, avec de la redondance, on la chiffre, on met LVM dessus, et on découpe nos partitions systèmes là-dedans, comme on veut. + +Même si vous ne souhaitez pas chiffrer vos données, LVM peut être une bonne idée, parce qu'il offre beaucoup plus de flexibilité que le partitionnement « à l'ancienne » pour pas cher. + +## Partitionnement en pratique + +Personnellement, aujourd'hui, j'ai deux configurations de serveur à partitionner : + +* _3 disques de 2 To_ (machine Bebop) : + * Déjà, je n'ai pas vraiment besoin de *swap* (32 Go de RAM), mais on va en mettre quelques Go quand même. + * Ce serveur étant loué dans un centre de données, je compte chiffrer mes données. Je ne veux pas avoir X clés de déchiffrement (une par partition) à rentrer à chaque démarrage, donc je vais utiliser LVM pour ne créer qu'une seule grosse partition chiffrée (dont LVM gèrera le sous-partitionnement pour mon système). + * J'ai 3 disques, je vais donc pouvoir utiliser RAID5 pour la redondance de cette méga-partition LVM (RAID1 aurait toléré un *crash* de disque de plus, mais j'aurais eu moins d'espace disque). + * Dans LVM, on aura presque 4 To d'espace ! On va faire une partition `/`, une `/home`, une `/var`, une `/data` et la `swap`. Leurs tailles seront facilement adaptables avec LVM à l'usage, donc on s'en fiche à ce stade. + * Le chiffrement va nécessiter un partition `/boot`, pour que je puisse me connecter au serveur et le déchiffrer avant chaque démarrage (cf. [guide du chiffrement à froid](/Guide/Infra/Chiffrement_froid)). La partition `/boot` sera redondée en RAID1. + * Il va me falloir une petite partition d'amorçage BIOS/EFI de quelques Mo. + + Graphiquement, ça ressemblera à ça : + +![Partitionnement de 3 disques avec partition /boot et LVM](/partitionnement_3_disques_lvm.svg) + +* _2 disques de 2 To_ (machines Swordfish & Red Tail) : + + * Ici, je mettrai 8 Go de *swap* (seulement 4 Go de RAM). + * Pour le système, on va mettre une méga-partition LVM en RAID1 avec chiffrement, ne disposant que de deux disques. + * `/boot` en RAID1 et une partition BIOS/EFI. Bref, à peu près pareil que pour la configuration avec 3 disques. + + En image : + +![partitionnement_2_disques_lvm.svg](/partitionnement_2_disques_lvm.svg) + + +> L'article est en réécriture à partir de ce point ! +{.is-warning} + +#### BIOS ou EFI ? + +Ces deux acronymes sont deux versions du système d'amorçage. Ils démarrent l'ordinateur et vont chercher l'OS à lancer sur disque. BIOS est plus vieux, donc on préfère utiliser EFI quand c'est supporté. (Pour les détails, faudra aller voir ailleurs.) + +Pour savoir si votre système supporte BIOS ou EFI ou les deux, lancez la commande `dmidecode | less` en tant qu'administrateur : + +``` +# dmidecode 3.0 +Getting SMBIOS data from sysfs. +SMBIOS 2.7 present. +61 structures occupying 2578 bytes. +Table at 0x.... + +Handle 0x0000, DMI type 0, 24 bytes +BIOS Information + Vendor: Intel Corp. + # [...] + Characteristics: + # [...] + BIOS boot specification is supported + UEFI is supported +# [...] +``` + +Comme vous pouvez le voir, on lit à la fois `BIOS boot specification is supported` et `UEFI is supported`. J'ai donc le choix. + +#### Kibioctets (Kio ou KiB) ou Kilooctets (Ko ou KB) ? + +Dans les commandes suivantes, j'utiliserai des `KiB` (kibioctets) et non des `KB` (kilooctets). [Cela n'a pas grande importance.](https://forums.commentcamarche.net/forum/affich-24162713-conversion-mo-en-mio) +La notation "kilo, méga..." du système métrique fonctionne en base 10 : « 1 Ko = 1000 (10³) octets ». +En informatique, tout tourne en base 2 : « 1 Kio = 1024 (2¹⁰) octets ». +En conséquence, on a deux notations qui veulent dire presque la même chose : 1 Mio = 1,048576 Mo. + +Ça serait quand même plus simple si tout le monde comptait en base 2 ! + +### Création des partitions sur le Bebop (3 disques) + +* On commence par créer les tables de partition de chaque disque, au format GPT : + + **Attention, créer une table de partition sur un disque en supprime l'intégralité des données !** + + ```bash + # ATTENTION, CETTE COMMANDE EFFACE L'ENTIÈRETÉ DE CHAQUE DISQUE + parted -sa optimal /dev/sda mklabel gpt + parted -sa optimal /dev/sdb mklabel gpt + parted -sa optimal /dev/sdc mklabel gpt + ``` + +* Partitionnement de `/dev/sda`, où réside le système : + + ```bash + # Création de la première partition BIOS, de 1 Mio + # syntaxe : parted -sa optimal [disque] mkpart [nom de la partition] [début] [fin] + # "-s" pour "silent", sinon parted se permet de me poser des questions (le lourd) + # "-a optimal" pour que parted aligne les partitions sur le disque de façon optimale + parted -sa optimal /dev/sda mkpart bios 0% 1MiB + # Seconde partition /boot, 512 Mio + parted -sa optimal /dev/sda mkpart boot 1MiB 513MiB + # Troisième partition /, 100 Gio + parted -sa optimal /dev/sda mkpart system 513MiB 100513MiB + # Dernière partition /home, de 1.5 Tio, alignée à la fin du disque + parted -sa optimal /dev/sda mkpart home 500GiB 100% + + # Ajout du drapeau "bios_grub" à la partition BIOS : + # (Permet au BIOS de savoir que cette partition lui est dédiée.) + # syntaxe : parted [disque] set [partition] [drapeau] [état] + parted /dev/sda set 1 bios_grub on + ``` + + Résultat : + + ```bash + # fdisk -l /dev/sda + Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: gpt + Disk identifier: 7DE23465-3A2B-4145-99F3-0A232C2DD37D + + Device Start End Sectors Size Type + /dev/sda1 34 2047 2014 1007K BIOS boot + /dev/sda2 2048 1050623 1048576 512M Linux filesystem + /dev/sda3 1050624 205850623 204800000 97.7G Linux filesystem + /dev/sda4 1048576000 3907028991 2858452992 1.3T Linux filesystem + ``` + + +* Partitionnement de `/dev/sdb` et `/dev/sdc`, et création du volume logique en RAID1 : + + ```bash + # Création d'une partition occupant tout l'espace, sur chaque disque + parted -sa optimal /dev/sdb mkpart primary 0% 100% + parted -sa optimal /dev/sdc mkpart primary 0% 100% + # Ajout du drapeau "raid" sur chaque partition nouvellement créée + parted /dev/sdb set 1 raid on + parted /dev/sdc set 1 raid on + # Création du volume RAID1 + mdadm --verbose --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 + # Répondez "y" si on vous emande confirmation. + ``` + + Résultat : + + ```bash + # fdisk -l + Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: gpt + Disk identifier: 44D8D3D8-6EF3-4052-AFB6-850DEED66C81 + + Device Start End Sectors Size Type + /dev/sdb1 2048 3907028991 3907026944 1.8T Linux RAID + + Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: gpt + Disk identifier: A89A5F18-5383-41F8-A8C8-3960E12D9AF2 + + Device Start End Sectors Size Type + /dev/sdc1 2048 3907028991 3907026944 1.8T Linux RAID + + Disk /dev/md0: 1.8 TiB, 2000263577600 bytes, 3906764800 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + ``` + +Et pour tout le disque, nous obtenons : + +```bash +# lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +sdb 8:16 0 1.8T 0 disk +└─sdb1 8:17 0 1.8T 0 part + └─md0 9:0 0 1.8T 0 raid1 +sdc 8:32 1 1.8T 0 disk +└─sdc1 8:33 1 1.8T 0 part + └─md0 9:0 0 1.8T 0 raid1 +sda 8:0 0 1.8T 0 disk +├─sda4 8:4 0 1.3T 0 part +├─sda2 8:2 0 512M 0 part +├─sda3 8:3 0 97.7G 0 part +└─sda1 8:1 0 1007K 0 part +``` + +### Création des partitions sur Swordfish & Red Tail (2 disques) + + +* On commence par créer les tables de partition de chaque disque, au format GPT : + + **Attention, créer une table de partition sur un disque en supprime l'intégralité des données !** + + ```bash + # ATTENTION, CETTE COMMANDE EFFACE L'ENTIÈRETÉ DE CHAQUE DISQUE + parted -sa optimal /dev/sda mklabel gpt + parted -sa optimal /dev/sdb mklabel gpt + ``` + +* Partitionnement des volumes système : + + ```bash + # partition BIOS, 1 Mio, sur /dev/sda + parted -sa optimal /dev/sda mkpart bios 0% 1MiB + parted /dev/sda set 1 bios_grub on + # partition /boot, 512 Mio, sur /dev/sda + parted -sa optimal /dev/sda mkpart boot 1MiB 513MiB + # partition swap, 8 Gio, sur /dev/sda + parted -sa optimal /dev/sda mkpart swap 513MiB 8513MiB + # partition /, 100 Gio, sur /dev/sda + parted -sa optimal /dev/sda mkpart system 8513MiB 108513MiB + # partition /home, 500 Gio, sur /dev/sdb + parted -sa optimal /dev/sdb mkpart home 0% 500GiB + ``` + +* Création des deux partitions d'1.5 Tio à la fin de chaque disque : + + ```bash + parted -sa optimal /dev/sda mkpart primary 500GiB 100% + parted -sa optimal /dev/sdb mkpart primary 500GiB 100% + ``` + +* Création du volume logique en RAID1 : + + + Pour commencer, il ne faut pas se tromper de numéro de partition ! + + ```bash + # lsblk + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT + sdb 8:16 0 1.8T 0 disk + ├─sdb2 8:18 0 1.3T 0 part # <-- futur RAID1 + └─sdb1 8:17 0 500G 0 part + sda 8:0 0 1.8T 0 disk + ├─sda4 8:4 0 97.7G 0 part + ├─sda2 8:2 0 512M 0 part + ├─sda5 8:5 0 1.3T 0 part # <-- futur RAID1 + ├─sda3 8:3 0 7.8G 0 part + └─sda1 8:1 0 1007K 0 part + ``` + + On va mettre le RAID1 sur la **5e** partition du disque `sda`, et sur la **2e** partition de `sdb`. + + Il reste seulement à ajouter les drapeaux `raid` sur les deux partitions, avant d'invoquer `mdadm` qui va créer le volume RAID1 : + + ```bash + parted /dev/sda set 5 raid on + parted /dev/sdb set 2 raid on + + mdadm --verbose --create /dev/md0 --level=1 --raid-devices=2 /dev/sda5 /dev/sdb2 + ``` + +Et voilà le travail ! + +```bash +# lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +sdb 8:16 0 1.8T 0 disk +├─sdb2 8:18 0 1.3T 0 part +│ └─md0 9:0 0 1.3T 0 raid1 +└─sdb1 8:17 0 500G 0 part +sda 8:0 0 1.8T 0 disk +├─sda4 8:4 0 97.7G 0 part +├─sda2 8:2 0 512M 0 part +├─sda5 8:5 0 1.3T 0 part +│ └─md0 9:0 0 1.3T 0 raid1 +├─sda3 8:3 0 7.8G 0 part +└─sda1 8:1 0 1007K 0 part +``` + +## Installation des systèmes de fichier + +C'est magnifique, nous avons des partitions. Mais pour l'instant, elles ne servent à rien : il leur manque un système de fichier pour être utilisables par un système d'exploitation. + +Si vous comptez chiffrer les disques de votre futur serveur (ce qu'on recommande chaudement si votre serveur est dans un centre de données), il faut configurer le chiffrement *avant* d'installer un système de fichier. Rendez-vous donc sur le [guide du chiffrement à froid](/Guide/Infra/Chiffrement_froid), où on traitera aussi de l'installation du système de fichier de A à Z : vous avez donc fini ce guide, bravo ! + +--- + +Si vous êtes encore là, vous n'avez pas l'intention de chiffrer vos disques. Il ne vous reste donc plus qu'à ajouter ce satané système de fichiers à vos partitions, et vous pourrez enfin installer votre système d'exploitation préféré ! + +### Oui mais quel système de fichiers ? `ext4` ou `ZFS` ou autre ? + +> TODO: ext4 vs. ZFS. [Un guide en anglais](https://nascompares.com/2021/07/21/zfs-vs-ext4-for-nas-what-is-the-difference-in-your-file-system/). + +Le système de fi + +# Références + +* ADRN, [Guide d'installation de Debian avec chiffrement à froid dans le centre de données Kimsufi](https://plume.deuxfleurs.fr/~/WebTrotter/installing-a-cloud-server-with-full-disk-encryption), Blog Deuxfleurs, avril 2021, anglais. diff --git a/content/operations/Jitsi.md b/content/operations/Jitsi.md deleted file mode 100644 index 4563c73..0000000 --- a/content/operations/Jitsi.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Jitsi -description: -published: true -date: 2021-11-09T12:53:23.811Z -tags: -editor: markdown -dateCreated: 2021-11-09T12:46:50.731Z ---- - -## 2020-04-02 Campagne de debug Jitsi - -Contact: Quentin - -### Description du problème - -Les conversations à 3+ donc relayées par le serveur ne fonctionnent pas bien. -Louison m'a rapporté que ça avait marché pour lui (3 utilisateurs avec un Webkit). -Mais moi ça a échoué hier soir (01/04/2020) avec des participants sous Firefox. -Le bug est toujours le même : on entend 2 personnes sur 3 ou on voit 2 personnes sur 3, on recharge la page et c'est quelqu'un d'autre pour qui ça ne fonctionne plus. Souvent c'est que dans un sens. -À chaque fois en passant sur Facebook Messenger, le problème est résolu instantanément. -Par contre Facebook Messenger impose Google Chrome/Chromium pour les visio de groupe (et ne supporte donc pas Firefox). - -D'où mes 2 suspicions : - -- Firefox a un bug quelconque dans sa pile WebRTC déclenché par le mode conversation de groupe -- Jitsi a un problème avec les déconnexions/changement de connexion/petit hoquets du réseau et n'arrive pas à se reconnecter. Ça pourrait être rendu pire à certain moment de la journée comme le soir où le réseau est plus sollicité. Et ce serait provoqué lors du reload on repasse de 3 à 2, en P2P donc puis de nouveau de 2 à 3. - -### Approfondissement - -Avant d'aller plus loin, nous avons voulu prendre le temps d'identifier précisément les problèmes d'expérience utilisateurs et leur corrélation avec la plateforme de l'utilisateur (navigateur, OS). - -Pour celà, nous avons suivi deux approches : -1. Mener nos propres tests -2. Chercher d'autres retours - -#### Mener nos propres tests - -Nous avons effectué deux appels : un avec Firefox seulement et un avec Chrome/Chromium seulement. -Merci à Alex, Adrien et Maximilien pour leur participation. - -Voilà les conclusions que nous avons tirées de nos tests : - -- L'appel avec Firefox a déclenché le bug immédiatement, peu importe la version de Firefox ou de l'OS (firefox stable/nightly, fedora stable/beta, etc.) -- Le passage de tout le monde sous Chrome/Chromium a permis d'avoir une conversation stable. -- Adrien avait sa Livebox avec pare-feu configuré en mode "élevé" et a dû ajouter dans sa liste blanche les ports utilisés par Jitsi (`4443/tcp` et `10000/udp` au moment du test, seul un des deux a besoin d'être accessible) - -Nous avons donc demandé à Adrien quels étaient les ports ouverts par défaut dans le mode élevé de sa box : - -![Livebox Parefeu Personnalisé](/img/operations/livebox_parefeu_personnalise.png) - -Nous avons dans un premier temps retenu le port `995/tcp` pour Jitsi, le port UDP ne pouvant être changé (limitation de Jitsi). -Cependant, pour des raisons de sécurité, les navigateurs ne peuvent pas utiliser les ports en dessous de `1024/*`, à l'exception des ports `80/tcp` et `443/tcp` comme l'indique ;'issue [#3583](https://bugs.chromium.org/p/webrtc/issues/detail?id=3583) de Chromium. - -La capture n'indique pas de port TCP supérieur à 1024, nous ne pouvons donc pas résoudre ce problème de notre côté, car à l'heure actuelle, nos ports `80/tcp` et `443/tcp` sont utilisés et nous n'avons qu'une seule IP publique. -Les utilisateurs activant le parefeu en mode élevé devront ajouter une exception dans leur parefeu eux-mêmes. - -#### Chercher d'autres retours - -[Tedomum](https://tedomum.net/) a eu connaissance de problèmes similaires. -Ils ont également identifié Firefox et assurent qu'avec l'application Android ça marche bien. -Ils me confirment que le problème vient bien du logiciel et non pas de notre déploiement. -Ils m'ont pointé entre autres vers cette issue github [#4758](https://github.com/jitsi/jitsi-meet/issues/4758) -Apparemment une issue est dédiée en particulier au problème que nous rencontrons de déconnexion partielle d'un participant, mais nous ne l'avons pas encore retrouvée. - -### Correctifs - - 1. Notre instance Jitsi a été reconfigurée pour refuser Firefox. Suivre l'avancée du développement de Jitsi pour Firefox - * [#4758](https://github.com/jitsi/jitsi-meet/issues/4758) - * [#5439](https://github.com/jitsi/jitsi-meet/issues/5439) - * _À compléter_ - 2. Pour relayer la vidéo à travers la plupart des parefeux, notre `videobridge` Jitsi devait écouter sur le port `443/tcp`. Or ce port est déjà utilisé par notre frontal HTTPS. À défaut, Jitsi est maintenant configuré avec `8080/tcp` et `10000/udp` (contre `4443/tcp` et `10000/udp` avant). - * Un déploiement en IPv6 pourrait résoudre le problème pour une partie des utilisateurs - * Avoir un cluster géo-distribué avec plusieurs IPv4 pourrait également résoudre le problème - * Avoir un frontend layer 4 (niveau TCP) qui trouve une signature pour router du DTLS vers videobridge et du TLS vers traefik - -### À propos du control/data plane de Jitsi - -Notre videobridge écoute donc sur les ports `8080/tcp` et `10000/udp`. - -WebRTC fonctionne en deux étapes : -- Des offres doivent être échangées via un serveur de signaling quelconque -- Ensuite, ces offres servent à connecter des clients directement via un protocole TCP ou UDP avec un thin layer propre à WebRTC - -#### Le control plane de Jitsi : Prosody sur HTTPS via Bosh/XMPP - -Le serveur de signaling Jitsi n'est autre que le serveur de chat prosody. -Pour ça, prosody est exposé à travers HTTP grâce au protocole BOSH (XMPP overs HTTPS). -Une fois l'offre reçue ([exemple](/assets/operations/exemple_offre.txt)), elle est enregistrée dans le navigateur à l'aide de `setRemoteDescription` pour initialiser le data plane. -On peut débugger le signaling WebRTC sous Chromium avec [chrome://webrtc-internarls](chrome://webrtc-internals/). - - -Quand plus de deux participants sont connectés dans la conversation, Jitsi n'envoie pas les offres de chaque participant aux autres participants. À la place, elle envoie qu'une seule offre, celle de son VideoBridge. - -Ainsi, le VideoBridge est une sorte de client WebRTC particulier, qui récolte et redispatche à travers WebRTC tous les flux video/audio. - -#### Le data plane de Jitsi : videobridge sur DTLS/SCTP via WebRTC - -WebRTC utilise deux formats de paquets selon [Mozilla Developer Network|RTCDataChannel|DataFormat](https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel#Data_format) : -- `UDP/DTLS/SCTP` -- `TCP/DTLS/SCTP` - -On a donc un format de données arbitraire encapsulé dans du SCTP lui-même encapsulé dans du DTLS. -DTLS est prévu pour les datagrammes à l'origine, car WebRTC est prévu d'abord pour fonctionner sous UDP. -Le TCP est là en mode dégradé, en secours, il sert juste de tunnel pour relayer des datagrammes. \ No newline at end of file diff --git a/content/operations/_index.md b/content/operations/_index.md index 29ebdef..17843e4 100644 --- a/content/operations/_index.md +++ b/content/operations/_index.md @@ -2,8 +2,14 @@ title = "Opérations" description = "Opérations" weight = 100 +sorted_by = "weight" +++ -# Opérations +# Définitions + +* _Une grappe_, c'est **un ensemble d'ordinateurs, au moins trois** pour obtenir une grappe bien solide. + + Une grappe est **gérée de façon cohérente** (avec le même système logiciel), **plus ou moins autonome** (elle ne dépend pas du reste du monde pour fournir des services web), **par une entité définie** (une personne physique ou un groupe de personnes). + +* _Les opérateur·ices_ de la grappe ont **deux responsabilités** principales : **la maintenance** de la grappe, et **la protection des données hébergées**. -Ceci est un manuel diff --git a/content/operations/app/Jitsi.md b/content/operations/app/Jitsi.md new file mode 100644 index 0000000..4563c73 --- /dev/null +++ b/content/operations/app/Jitsi.md @@ -0,0 +1,105 @@ +--- +title: Jitsi +description: +published: true +date: 2021-11-09T12:53:23.811Z +tags: +editor: markdown +dateCreated: 2021-11-09T12:46:50.731Z +--- + +## 2020-04-02 Campagne de debug Jitsi + +Contact: Quentin + +### Description du problème + +Les conversations à 3+ donc relayées par le serveur ne fonctionnent pas bien. +Louison m'a rapporté que ça avait marché pour lui (3 utilisateurs avec un Webkit). +Mais moi ça a échoué hier soir (01/04/2020) avec des participants sous Firefox. +Le bug est toujours le même : on entend 2 personnes sur 3 ou on voit 2 personnes sur 3, on recharge la page et c'est quelqu'un d'autre pour qui ça ne fonctionne plus. Souvent c'est que dans un sens. +À chaque fois en passant sur Facebook Messenger, le problème est résolu instantanément. +Par contre Facebook Messenger impose Google Chrome/Chromium pour les visio de groupe (et ne supporte donc pas Firefox). + +D'où mes 2 suspicions : + +- Firefox a un bug quelconque dans sa pile WebRTC déclenché par le mode conversation de groupe +- Jitsi a un problème avec les déconnexions/changement de connexion/petit hoquets du réseau et n'arrive pas à se reconnecter. Ça pourrait être rendu pire à certain moment de la journée comme le soir où le réseau est plus sollicité. Et ce serait provoqué lors du reload on repasse de 3 à 2, en P2P donc puis de nouveau de 2 à 3. + +### Approfondissement + +Avant d'aller plus loin, nous avons voulu prendre le temps d'identifier précisément les problèmes d'expérience utilisateurs et leur corrélation avec la plateforme de l'utilisateur (navigateur, OS). + +Pour celà, nous avons suivi deux approches : +1. Mener nos propres tests +2. Chercher d'autres retours + +#### Mener nos propres tests + +Nous avons effectué deux appels : un avec Firefox seulement et un avec Chrome/Chromium seulement. +Merci à Alex, Adrien et Maximilien pour leur participation. + +Voilà les conclusions que nous avons tirées de nos tests : + +- L'appel avec Firefox a déclenché le bug immédiatement, peu importe la version de Firefox ou de l'OS (firefox stable/nightly, fedora stable/beta, etc.) +- Le passage de tout le monde sous Chrome/Chromium a permis d'avoir une conversation stable. +- Adrien avait sa Livebox avec pare-feu configuré en mode "élevé" et a dû ajouter dans sa liste blanche les ports utilisés par Jitsi (`4443/tcp` et `10000/udp` au moment du test, seul un des deux a besoin d'être accessible) + +Nous avons donc demandé à Adrien quels étaient les ports ouverts par défaut dans le mode élevé de sa box : + +![Livebox Parefeu Personnalisé](/img/operations/livebox_parefeu_personnalise.png) + +Nous avons dans un premier temps retenu le port `995/tcp` pour Jitsi, le port UDP ne pouvant être changé (limitation de Jitsi). +Cependant, pour des raisons de sécurité, les navigateurs ne peuvent pas utiliser les ports en dessous de `1024/*`, à l'exception des ports `80/tcp` et `443/tcp` comme l'indique ;'issue [#3583](https://bugs.chromium.org/p/webrtc/issues/detail?id=3583) de Chromium. + +La capture n'indique pas de port TCP supérieur à 1024, nous ne pouvons donc pas résoudre ce problème de notre côté, car à l'heure actuelle, nos ports `80/tcp` et `443/tcp` sont utilisés et nous n'avons qu'une seule IP publique. +Les utilisateurs activant le parefeu en mode élevé devront ajouter une exception dans leur parefeu eux-mêmes. + +#### Chercher d'autres retours + +[Tedomum](https://tedomum.net/) a eu connaissance de problèmes similaires. +Ils ont également identifié Firefox et assurent qu'avec l'application Android ça marche bien. +Ils me confirment que le problème vient bien du logiciel et non pas de notre déploiement. +Ils m'ont pointé entre autres vers cette issue github [#4758](https://github.com/jitsi/jitsi-meet/issues/4758) +Apparemment une issue est dédiée en particulier au problème que nous rencontrons de déconnexion partielle d'un participant, mais nous ne l'avons pas encore retrouvée. + +### Correctifs + + 1. Notre instance Jitsi a été reconfigurée pour refuser Firefox. Suivre l'avancée du développement de Jitsi pour Firefox + * [#4758](https://github.com/jitsi/jitsi-meet/issues/4758) + * [#5439](https://github.com/jitsi/jitsi-meet/issues/5439) + * _À compléter_ + 2. Pour relayer la vidéo à travers la plupart des parefeux, notre `videobridge` Jitsi devait écouter sur le port `443/tcp`. Or ce port est déjà utilisé par notre frontal HTTPS. À défaut, Jitsi est maintenant configuré avec `8080/tcp` et `10000/udp` (contre `4443/tcp` et `10000/udp` avant). + * Un déploiement en IPv6 pourrait résoudre le problème pour une partie des utilisateurs + * Avoir un cluster géo-distribué avec plusieurs IPv4 pourrait également résoudre le problème + * Avoir un frontend layer 4 (niveau TCP) qui trouve une signature pour router du DTLS vers videobridge et du TLS vers traefik + +### À propos du control/data plane de Jitsi + +Notre videobridge écoute donc sur les ports `8080/tcp` et `10000/udp`. + +WebRTC fonctionne en deux étapes : +- Des offres doivent être échangées via un serveur de signaling quelconque +- Ensuite, ces offres servent à connecter des clients directement via un protocole TCP ou UDP avec un thin layer propre à WebRTC + +#### Le control plane de Jitsi : Prosody sur HTTPS via Bosh/XMPP + +Le serveur de signaling Jitsi n'est autre que le serveur de chat prosody. +Pour ça, prosody est exposé à travers HTTP grâce au protocole BOSH (XMPP overs HTTPS). +Une fois l'offre reçue ([exemple](/assets/operations/exemple_offre.txt)), elle est enregistrée dans le navigateur à l'aide de `setRemoteDescription` pour initialiser le data plane. +On peut débugger le signaling WebRTC sous Chromium avec [chrome://webrtc-internarls](chrome://webrtc-internals/). + + +Quand plus de deux participants sont connectés dans la conversation, Jitsi n'envoie pas les offres de chaque participant aux autres participants. À la place, elle envoie qu'une seule offre, celle de son VideoBridge. + +Ainsi, le VideoBridge est une sorte de client WebRTC particulier, qui récolte et redispatche à travers WebRTC tous les flux video/audio. + +#### Le data plane de Jitsi : videobridge sur DTLS/SCTP via WebRTC + +WebRTC utilise deux formats de paquets selon [Mozilla Developer Network|RTCDataChannel|DataFormat](https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel#Data_format) : +- `UDP/DTLS/SCTP` +- `TCP/DTLS/SCTP` + +On a donc un format de données arbitraire encapsulé dans du SCTP lui-même encapsulé dans du DTLS. +DTLS est prévu pour les datagrammes à l'origine, car WebRTC est prévu d'abord pour fonctionner sous UDP. +Le TCP est là en mode dégradé, en secours, il sert juste de tunnel pour relayer des datagrammes. \ No newline at end of file diff --git a/content/operations/app/_index.md b/content/operations/app/_index.md new file mode 100644 index 0000000..8c93fad --- /dev/null +++ b/content/operations/app/_index.md @@ -0,0 +1,8 @@ ++++ +title = "Applications" +description = "Gestion des applicatifs" +sorted_by = "weight" +weight = 30 ++++ + + diff --git a/content/operations/app/email.md b/content/operations/app/email.md new file mode 100644 index 0000000..60a03f5 --- /dev/null +++ b/content/operations/app/email.md @@ -0,0 +1,30 @@ +--- +title: Emails +description: Emails +--- + +# Support d'un nom de domaine personnalisé + + 1. xxx + 1. Communiquez lui votre nom de domaine pour qu'il l'ajoute dans `ou=domains,ou=groups,dc=deuxfleurs,dc=fr` + 2. Communiquez lui l'adresse email que vous souhaitez pour qu'il change l'entrée `mail` dans votre profil utilisateur + 3. Si vous souhaitez avoir une boite mais plusieurs alias, demandez un champs `uid` dans votre profil utilisateur + + 2. Vous devez ensuite rajouter les entrées pour votre nom de domaine en éditant votre zone : + 1. L'entrée MX pour recevoir les emails +```bind +@ MX 10 email-in.deuxfleurs.fr +``` + 2. L'entrée SPF pour autoriser notre IP à délivrer des emails en votre nom : +```bind +@ TXT "v=spf1 mx:out.deuxfleurs.fr -all" +``` + 3. L'entrée DKIM pour autoriser notre postfix+opendkim à délivrer des emails en votre nom : +``` +smtp._domainkey TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtdZp4qrgZR+6R7HeAkuLGJ/3L/6Ungvf5zwrMq6T8Tu931j2G4lYuPtsxyn9fZkT4y7DlX0waktLDBOCwf7X78nLEWjAFWiJTeWGRGhRdYRUFpscs9NUN0P+46jKlabibG3XTKd1DeAmywTu6o1oO03yiolrgKD1zgyDRFeUTfSwZIdPrdbcBSA1arda4WFtcBIrSygM9b4jtlqfQwGDrsMLbCBfVHDn4WfmDWyNg0gDAkuLrYClNETk6aqIyj9fC8srKri0Qp3cRagCn+fjBvuxP35qWWJH7Rnnh/tuEDr1ufuNYO2KgJZ7JdMidUotxXE8cfU+OrEWQf4mIYeJ4wIDAQAB" +``` + 4. L'entrée DMARC pour indiquer le comportement à adopter si les contraintes précédentes ne sont pas satisfaites : +``` +_dmarc TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:contact@deuxfleurs.fr!10m; ruf=mailto:contact@deuxfleurs.fr!10m; rf=afrf; pct=100; ri=86400" +``` + 3. C'est tout ! Vous devrez probablement attendre 24/48h que les changements se propagent. diff --git a/content/operations/email.md b/content/operations/email.md deleted file mode 100644 index 60a03f5..0000000 --- a/content/operations/email.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Emails -description: Emails ---- - -# Support d'un nom de domaine personnalisé - - 1. xxx - 1. Communiquez lui votre nom de domaine pour qu'il l'ajoute dans `ou=domains,ou=groups,dc=deuxfleurs,dc=fr` - 2. Communiquez lui l'adresse email que vous souhaitez pour qu'il change l'entrée `mail` dans votre profil utilisateur - 3. Si vous souhaitez avoir une boite mais plusieurs alias, demandez un champs `uid` dans votre profil utilisateur - - 2. Vous devez ensuite rajouter les entrées pour votre nom de domaine en éditant votre zone : - 1. L'entrée MX pour recevoir les emails -```bind -@ MX 10 email-in.deuxfleurs.fr -``` - 2. L'entrée SPF pour autoriser notre IP à délivrer des emails en votre nom : -```bind -@ TXT "v=spf1 mx:out.deuxfleurs.fr -all" -``` - 3. L'entrée DKIM pour autoriser notre postfix+opendkim à délivrer des emails en votre nom : -``` -smtp._domainkey TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtdZp4qrgZR+6R7HeAkuLGJ/3L/6Ungvf5zwrMq6T8Tu931j2G4lYuPtsxyn9fZkT4y7DlX0waktLDBOCwf7X78nLEWjAFWiJTeWGRGhRdYRUFpscs9NUN0P+46jKlabibG3XTKd1DeAmywTu6o1oO03yiolrgKD1zgyDRFeUTfSwZIdPrdbcBSA1arda4WFtcBIrSygM9b4jtlqfQwGDrsMLbCBfVHDn4WfmDWyNg0gDAkuLrYClNETk6aqIyj9fC8srKri0Qp3cRagCn+fjBvuxP35qWWJH7Rnnh/tuEDr1ufuNYO2KgJZ7JdMidUotxXE8cfU+OrEWQf4mIYeJ4wIDAQAB" -``` - 4. L'entrée DMARC pour indiquer le comportement à adopter si les contraintes précédentes ne sont pas satisfaites : -``` -_dmarc TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:contact@deuxfleurs.fr!10m; ruf=mailto:contact@deuxfleurs.fr!10m; rf=afrf; pct=100; ri=86400" -``` - 3. C'est tout ! Vous devrez probablement attendre 24/48h que les changements se propagent. diff --git a/content/operations/grappe/_index.md b/content/operations/grappe/_index.md new file mode 100644 index 0000000..f904d8c --- /dev/null +++ b/content/operations/grappe/_index.md @@ -0,0 +1,8 @@ ++++ +title = "Grappe" +description = "Gestion d'une grappe" +sorted_by = "weight" +weight = 20 ++++ + + diff --git a/content/operations/noeud/_index.md b/content/operations/noeud/_index.md new file mode 100644 index 0000000..4e894fd --- /dev/null +++ b/content/operations/noeud/_index.md @@ -0,0 +1,7 @@ ++++ +title = "Noeuds" +description = "Gestion des noeuds" +sorted_by = "weight" ++++ + + diff --git a/content/operations/noeud/deploiement.md b/content/operations/noeud/deploiement.md new file mode 100644 index 0000000..dcc348f --- /dev/null +++ b/content/operations/noeud/deploiement.md @@ -0,0 +1,51 @@ +--- +title: Déploiement +description: Déploiement d'un noeud +published: true +date: 2022-01-09T13:29:29.710Z +tags: installation, serveur, infrastructure, réseau, sysadmin, site géographique, technique, administration +editor: markdown +dateCreated: 2021-12-28T14:33:59.088Z +--- + + +Dans ce guide, nous allons expliquer comment installer une grappe de serveurs, en vue d'un hébergement pour Deuxfleurs. + + + +# Choix des ordinateurs + +Héberger des services web est une tâche à la portée de la plupart des ordinateurs des 10 dernières années. Néanmoins, essayer de faire tourner correctement des applications lourdes sur une toute petite machine n'est pas une partie de plaisir. Alors, quitte à installer une nouvelle grappe, la vie sera plus agréable si ses machines disposent d'au moins : + +* 4 Go de RAM +* 1 To de disque (dur ou SSD) + +# Choix d'un site géographique + +Dans un *site géographique*, on installe une *grappe d'ordinateurs* au sein d'un *réseau local*, qu'on connecte au cluster de Deuxfleurs. + +On peut distinguer deux types de sites : + +* _Dans un centre de données_ : chaque ordinateur de la grappe appartient au même centre de données, dispose d'une adresse IP fixe qui le connecte directement à Internet. + + Dans ce cas-ci, **l'installation et l'administration sont assez simples** (on a moins de concepts à avaler que chez un particulier). + Par contre, **nous ne sommes pas chez nous** : le propriétaire du centre de données peut accéder aux disques, et voit ce qui passe sur le réseau. **Chiffrement du disque vivement conseillé.** + +* _Chez un particulier_ : la grappe est reliée à Internet par une *box*, qui filtre le trafic réseau selon des règles variables. La grappe se partage l'adresse IP de la box (qui peut changer régulièrement, être en IPv4 ou en IPv6). + + Dans ce cas de figure, **l'installation comme l'administration demandent plus de connaissances** : pour caricaturer, on doit installer et administrer la grappe **malgré le Fournisseur d'Accès Internet** (FAI), qui considère *a priori* que son abonnement ne sert pas à héberger des services web. + + On aura affaire à sa box (NAT, pare-feu...), au manque de garanties concernant notre adressabilité (IPv4 dynamique, IPv6 ? ...), ce qui va nous mener à devoir faire du routage. Le nœud du problème, c'est que chaque ordinateur de la grappe n'aura pas pignon sur rue (pas d'adresse IP publique et fixe par machine). + + Néanmoins, **on est chez nous !** Votre disque dur - qui contient les données personnelles de vos usagers chéris - est sous vos yeux, bien au chaud. Le seul curieux qui voit passer votre trafic réseau est votre FAI : *rien de nouveau sous le soleil*. + +Dans les deux cas - grâce à [la magie des VPN](/Technique/Infra/Wireguard) - on pourra communiquer sans souci avec le reste du cluster de Deuxfleurs. + +**À terme, chez Deuxfleurs, on compte héberger toute notre infrastructure chez des particuliers.** Mais [la route est encore longue](/Technique/Jalons/Interconnexion) avant que nous ayons assez de bonnes connexions et des ordinateurs suffisamment puissants, sans parler du système de gestion logiciel. +Ainsi, **pour le moment, il est tout à fait acceptable d'héberger des services Deuxfleurs en centre de données** : tant qu'on en informe nos usagers et qu'on fait attention à la sécurité. + +# Installation des ordinateurs + +Pour chaque ordinateur de notre future grappe, nous allons avoir besoin d'en configurer le ou les disques, de les chiffrer éventuellement, et d'installer son système d'exploitation. + + diff --git a/content/prise_en_main/matrix.md b/content/prise_en_main/matrix.md index f4e6386..321221f 100644 --- a/content/prise_en_main/matrix.md +++ b/content/prise_en_main/matrix.md @@ -25,7 +25,7 @@ Adrien a écrit un [guide d'installation/utilisation du résau Matrix](https://g Deuxfleurs a une pléthore de salons sur Matrix. C'est vraiment à cet endroit qu'on discute le plus entre nous. Le mieux pour les découvrir, c'est de rejoindre notre « espace » (un annuaire de salons et de personnes) qui s'appelle [#la-cabane:deuxfleurs.fr](https://matrix.to/#/#la-cabane:deuxfleurs.fr) et qui ressemble à ça : -![espace_matrix_3salons.png](/espace_matrix_3salons.png) +![espace_matrix_3salons.png](/img/matrix.png) À l'intérieur de cet espace, on vous recommande notamment les 3 salons suivants : -- cgit v1.2.3