Le Blog Utux

HTTP 200 GET /

Install openSUSE from Alpine on aarch64 on Hetzner

Rédigé par uTux Aucun commentaire

Hetzner provides a console access (aka kvm ip) on cheap virtual servers which is really a cool thing. While it's not possible to mount a custom iso image, they have a library with multiple choices. The openSUSE project has iso images for aarch64 but unfortunately they are missing on hetzner.

Fortunately it is possible to boot another iso and install openSUSE anyway.

  1. Provision an aarch64 virtual machine with any system.
  2. Mount the Alpine iso, reboot the virtual machine and open console / kvm ip.
  3. Login as "root" (no password) and run "setup-alpine". Set your keyboard, configure Network, and press CTRL+C to cancel.

Find the latest "Generic" KVM/Xen aarch64 image on openSUSE's website and grab it:

curl -O https://fr2.rpmfind.net/linux/opensuse/distribution/leap/15.5/appliances/openSUSE-Leap-15.5-Minimal-VM.aarch64-kvm.qcow2

Edit /etc/apk/repositories then add:

http://dl-cdn.alpinelinux.org/alpine/v3.19/main
http://dl-cdn.alpinelinux.org/alpine/v3.19/community

Install qemu-img and convert the qcow2 image to raw:

apk update && apk add qemu-img
qemu-img convert \
openSUSE-Leap-15.5-Minimal-VM.aarch64-kvm.qcow2 \
openSUSE-Leap-15.5-Minimal-VM.aarch64-kvm.raw

Now you can dd the raw image to disk (make sure /dev/sda is the main disk):

dd if=openSUSE-Leap-15.5-Minimal-VM.aarch64-kvm.qcow2 of=/dev/sda bs=1M

Unmount iso & restart the virtual server. You should see the openSUSE cloud image initial setup :)

Security warning: /etc/ssh/sshd_config has "PermitRootLogin yes". Copy your SSH public key to /root/.ssh/authorized_keys then quickly change the config file to "PermitRootLogin prohibit-password".

Bonus: to extend the root partition:

zypper install growpart
growpart /dev/sda 2

Protonmail, un écosystème fermé qui vous veut du bien.

Rédigé par uTux Aucun commentaire

Voilà maintenant un peu plus de 10 ans que je gère mon propre serveur de messagerie Postfix (avec un bref passage par OpenSMTPD) mais je me pose de plus en plus la question de passer sur une offre managée qui me permettrait de ne plus avoir à m'en soucier, tout en conservant mon nom de domaine personnalisé.

Un choix facile aurait été Office365 mais l'hébergeur ne supporte plus les custom domains pour les particuliers. J'ai aussi écarté GMail car je n'aime pas l'UI et à cause de la tendance de Google à vouloir toujours afficher des informations (nom, avatar) sur vos interlocuteurs et à les ajouter en ami dans Hangouts.

Je ne connais pas tous les fournisseurs d'adresses e-mail de la planète mais il me restait OVH et Protonmail dans ma liste. Le premier est intéressant mais se base sur Microsoft Exchange + owa (Outlook Web Access) dont l'interface est très lourde et peu intuitive à mon sens. J'ai donc tenté ma chance avec Protonmail.

Une communication axée sur la sécurité

Protonmail met en avant le 100% chiffrement et l'importance accordée à la vie privée de l'utilisateur. En réalité ce n'est pas aussi simple puisque comme nous le verrons plus tard cela se fait au détriment des protocoles standards (pas d'IMAP par exemple). De plus les e-mails sont faits pour circuler, on en envoie et on en reçoit avec le monde entier, et 80% de vos interlocuteurs utilisent Office 365 ou GMail :) Donc peu importe à quel point Protonmail est sécurisé, à partir du moment où un message sort à l'extérieur il ne pourra plus être considéré comme sûr et vos métadonnées traîneront à un endroit où à un autre.

Un bon point en revanche est que l'inscription à Protonmail ne nécessite pas de coordonnées personnelles, pas plus que de carte bleue, du moins pour la période d'essai.

Une offre pas claire

Protonmail est gratuit mais pour avoir un domaine personnalisé, il faut payer. Voici ce qu'affiche la page "pricing" de ce fournisseur :

Protonmail general pricing
Gratuit ou €10/mois avec 1 an d'engagement ? Non...

Diantre ! €10 par mois alors qu'il n'y a que le mail qui m'intéresse (le packaging comprend plein d'autres services), c'est beaucoup trop cher ! Mais heureusement il y a un twist (merci Etenil pour l'info) puisqu'en cliquant sur "View Mail plans" on obtient d'autres tarifs :

Protonmail general pricing
Oh ! Un tarif à €4 par mois...

Il y a donc un plan "Mail Plus" au tarif intermédiaire un peu plus abordable mais celui-ci n'est pas mis en avant, c'est dommage car beaucoup de clients potentiels risquent de passer leur chemin. J'ai souscrit à ce service avec 30 jours d'essai gratuit.

Une souscription et une UI bien pensés

Comme dit précédemment, l'inscription ne demande pas de carte bleue ni même de coordonnées, vous devez juste choisir un identifiant principal (en @protonmail.ch ou @proton.me) et un mot de passe, ce qui est un bon point car on ne risque pas de se retrouver avec un prélèvement quand on oublie de résilier à la fin de la période d'essai.

Les champs en rose sont des informations personnelles masquées.

L'ajout d'un custom domain est déconcertant de simplicité, ainsi que la mise en place de DKIM, SPF et DMARC au niveau de vos entrées DNS. Le seul point négatif est l'absence de double authentification, c'est à dire combiner votre mot de passe sur le webmail avec une validation sur une appli générique (Microsoft ou Google authenticator, par exemple) ou en recevant un code par SMS.

Le webmail de Protonmail est plutôt intuitif et peu gourmand en ressources, il est très réactif, beaucoup plus que Outlook. Il supporte également plusieurs thèmes dont certains sombres ce que j'apprécie particulièrement.

Un système fermé

L'accès doit se faire par le webmail ou par l'application mobile iOs ou Android. Oubliez les protocoles standards tels que IMAP, Activesync, CardDav, CalDav... aucun n'est supporté. Loin d'être une question de mauvaise volonté, il semble que ce soit plutôt la nécessité de conserver le chiffrement de bout en bout qui est à l'origine de ce manque.

Pour palier à ça, Protonmail met à disposition Mail Bridge ~ une application à exécuter en local et qui spawne un serveur IMAP relié à votre compte Protonmail ~ mais l'interfaçage n'est pas parfait. Ainsi les dossiers ne sont pas supportés et certains mails que je voulais copier depuis mon ancien compte ne passent pas car "dépassant les 30MB" même si le plus gros ne faisait "que" 19 MB. Ce bridge est donc un jouet que je ne m'imagine pas utiliser tous les jours.

Cette absence de support propre de protocoles standards peut poser des soucis en terme de sauvegardes (il faut s'en remettre à la plateforme) ou de flexibilité car on imagine qu'à la vue des problèmes rencontrés sur le Mail Bridge on ne pourra pas sortir facilement de Protonmail pour migrer ailleurs.

Concernant le stockage cloud il n'existe pas de client pour Linux, il faudra donc passer par le navigateur web. En revanche le VPN supporte wireguard mais je n'ai pas testé, pas plus que le calendrier ou le gestionnaire de mots de passe.

Conclusion

La promesse de Protonmail est tenue et la sécurité n'est pas qu'un argument marketing car des efforts sont faits pour limiter la collecte de données sur l'utilisateur et assurer le chiffrement de bout en bout (il manque juste le 2FA). Néanmoins il est important d'être conscient du risque d'enfermement et de dépendance à la plateforme.

Je choisis pour le moment de donner une chance à Protonmail et vais conserver ma subscription au moins pour quelques temps, tout en ayant conscience des limitations et des risques.

Backups in Azure with Duplicati

Rédigé par uTux Aucun commentaire

I need to backup my NAS to a remote and secured location, and because I am a Azure AZ-103 associate, I have decided to use an Azure storage account. I will use Duplicati, a free backup software written in C# with the following features:

  • Native AES-256 encryption.
  • Wide variety of storage backends: Azure, S3, GCS, FTP, SSH, Onedrive...
  • Works well on Windows, Linux, FreeBSD.
  • Works on a headless server with a WebUI.

Storage account offers 3 tier with different pricing: hot, cool, archive. If you choose a hot tier, access is less charged, but storage is more expensive. This is the opposite for cool and archive, storage is cheap but access is expensive. Archive is the most interesting tier for backups but it has many constraints, such as the need to pick every object inside the container and move them to the tier. So I will use cool.

Create a Resource group and a Storage account

First you need to create a Resource group. Go to the Resource groups blade then click +Add. Take a look at Ready: Recommended naming and tagging conventions if you don't know how to name it. Select a region (does not really matters now).

Create a resourcegroup

Now you need to create a Storage account. Go to the Storage accounts blade then click +Add.

  • Subscription: your subscription.
  • Resource group: the one you just created
  • Storage account name: must be unique accross Azure and as many limitations, so I recommend using a very short name + short random id.
  • Location: Select the location of your choice (choose a close one with an interesting pricing, see Azure Calculator)
  • Account kind: StorageV2
  • Replication: LRS
  • Access tier: cool
Create storage account

Now open you new Storage account and go to the Containers blade then click +Container. This time the name is private and does not need to be unique. Make sure the Public level access is set to Private (no anonymous access).

Create container

Go to the Access keys blade and retrieve the value of key1 or key2. These key are private and should not be shared with anyone because they basically give full access to the storage account and the data inside.

Retreive access key

Configure Duplicati

Go into the Web UI then + Add backup > Configure a new backup.

Enter a name, a description and a very strong encryption passphrase (if you forget this passphrase, you wan't be able to decrypt your backups).

duplicati step 1

Select "Azure blob" for Storage type and set your credentials.

duplicati step 2

Click Test connection to make sure Duplicati can reach your Azure container.

duplicati step 2 test

Select the files you want to backup.

duplicati step 3

Schedule your backups. For me, monthly is enough.

duplicati step 4

Duplicati will not copy your files one by one but use "volumes". To select the size of each block, read this documentation. Smaller means more transactions but better de duplication. Bigger means less transactions but less optimized de duplication. If you have the bandwith, go for higher chunks. 1 Gbyte seems to be a good value for me. More is not good, takes too much resources.

You can also set a retention, for me it's 6 months.

duplicati step 5

Et voila, just run your backup now!

Pricing considerations

It is not easy to estimate monthly charges. It depends not only on used storage, but also on write and read operations. Here is how much I pay:

  • Region: North Europe
  • Chunks: 1 GB
  • Monthly backups
  • Used Storage: 488 GiB
  • Monthly cost: < €5

J'ai ma certification Azure AZ-103 !

Rédigé par uTux Aucun commentaire

Après 1 an à travailler sur Azure (sur des périmètres Linux ou serverless), j'ai enfin eu l'occasion de passer ma certification ! Il en existe plusieurs et cela bouge régulièrement. J'ai retenu la AZ-103 (Microsoft Azure Administrator) car accessible pour une première approche et très en rapport avec ce que je fais en ce moment.

Azure Associate badge

L'examen se planifie en ligne et ne se déroule pas chez Microsoft mais dans des centres qui ont reçu l'agrément. Après avoir présenté deux pièces d'identité, vidé nos poches et mis nos affaires dans un casier sécurisé, nous nous rendons dans une pièce filmée où un client léger connecté en TSE nous permet de dérouler les questions de la certification. Dans mon cas j'ai eu :

  • 62 questions (tout type compris).
  • En majorité du QCM type "code de la route".
  • 2 labs (accès au portail Azure avec une liste de tâches à effectuer).
  • Plusieurs case study (une page qui décrit un contexte, puis du QCM).
  • Temps limité de 3 h (j'ai terminé avec une marge de... 4 min !)

Le résultat est donné dès la sortie, positif pour moi car j'ai eu plus de 800 points alors que le minimum est 700.

Mes conseils pour bien se préparer à la certification AZ-103 sont les suivants:

  1. Faire les examens à blanc AZ-103 chez Whizlabs. Oui c'est payant (€15,95 au moment où j'écris) mais les questions proposées sont très proches (voire identiques) à celles du vrai examen, je pense que je n'aurais pas réussi sans Whizlabs. Prenez une semaine pour faire et refaire les questions.
  2. 12 labs AZ-103 par Microsoft (sources). Vous ne pourrez pas faire les points qui évoquent la synchronisation A.D ou demandent une subscription P2, mais c'est quand même une bonne base.
  3. Bien potasser l'Azure Active Directory, la synchronisation avec les A.D On Premise, la protection des identités (MFA), la migration des Data vers du Blob Storage car beaucoup de questions s'y rapportent.
  4. Avoir déjà provisionné des machines virtuelles, disques managés, availability sets, scalesets, VNET, peerings. Vous aurez des questions sur les SLA des VMs, et sur les niveaux de tiering des comptes de stockage.
  5. Avoir de bonnes bases en réseau (masques, VPN, DNS, firewall), des bases en Powershell (bien que pas indispensable).

Bonne chance si vous aussi vous visez la AZ-103 ou tout autre certification :)

Merci Terraform 0.12 :)

Rédigé par uTux 2 commentaires

J'ai une relation d'amour et de haine avec Terraform. Cet outil est formidable pour discuter avec les providers de cloud et faire de la remédiation, en revanche je me casse régulièrement les dents sur le langage hcl que je trouve extrêmement limité et frustrant. Trois exemples :

  • Les variables : Toute variable doit être déclarée, typée et contenir une valeur, même si on ne s'en sert pas. Une variable ne peut pas être égale à une autre. Pas de dictionnaire.
  • Pas de if, pas de loop : On doit ruser avec count mais on perd grandement en souplesse et en lisibilité.
  • pas DRY: (Don't Repeat Yourself) on ne peut pas utiliser du code commun et envoyer des variables en fonction de l'environnement, donc on duplique pas mal de code. Ce problème est réglé par Terragrunt que je recommande.
Logo Terraform
C'est principalement pour ces deux raisons que je considère qu'il est très difficile voire impossible de faire du code générique sur Terraform. On ne peut pas créer un module qui gère tous les cas possibles à l'aide des variables, on devra obligatoirement imposer des choix.

Terraform 0.12 est une version qui était très attendue depuis près de 1 an car promettant de lever pas mal de limitations du hcl. Et en effet la nouvelle version du langage nous apporte des nouveautés très appréciables. Mes 3 préférées sont :

  • First-class expression syntax :
    • ${var.foo} devient var.foo
    • ${var.foo["key"]} devient var.foo.key
    • ${var.foo[count.index]} devient var.foo (mon préféré)
  • Generalized type system :Les variables peuvent être des "object" composés de clés de différents types. Les objets eux-mêmes peuvent faire partie d'une liste: exemple. C'est peut-être le plus gros progrès de cette version.
  • Iteration constructs : Arrivée des boucles for et des boucles dynamiques, semble en pratique plus limité que ce qu'on pourrait croire mais c'est bon à prendre. Exemple.

Terraform 0.12 couplé à Terragrunt offre une plus grande souplesse et évite de se répéter. J'ai entamé la migration de mes projets pour profiter de ces nouveautés, et j'en suis très content. Merci Terraform :)

Fil RSS des articles de cette catégorie