Le Blog Utux

HTTP 200 GET /

Migration sur Traefik

Rédigé par uTux Aucun commentaire

Mon blog fonctionne sous Pluxml dans un container Docker. Jusqu'à présent l'accès http/https se faisait par une instance Nginx frontale faisant office de reverse-proxy et SSL offloading. Je viens de le remplacer par Traefik.

Qu'est-ce que Traefik ? Il se qualifie de Edge Router, un terme qui vous sera peut-être familier si vous travaillez avec Kubernetes ou Openshift. En fait c'est un reverse-proxy adaptatif :

  • Gère les certificats Let's Encrypt comme un grand.
  • Route le trafic http/https vers vos backends applicatifs dans Docker.
  • S'auto-configure, l'ajout d'un container Docker correctement labelisé va déclencher la création d'un certificat Let's Encrypt et d'une route.
  • Scalable
traefik diagram

Je reviendrais un peu plus tard sur la mise en place de Traefik !

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 :)

How to remove server_tokens in Azure Application Gateway

Rédigé par uTux Aucun commentaire

In Azure, the Application Gateway is basically a reverse proxy, passing traffic to some backends. While testing the SSL certificate of a listener with ssllabs, I have been surprised by the "HTTP server signature" field: Nexus/2.14.10-01. Indeed, the backend was a Nexus service, but I was expecting to see the server signature of the Application Gateway (which is Nginx), or nothing, but not the backend.

Turns out the HTTP response contains the following header:

< HTTP/1.1 200 OK
< Server: Nexus/2.14.10-01
[...]

Many sysadmins and organizations consider this as a security issue, giving attackers information about the server. While I do not totally agree with this statement (Obfuscation), I often disable this information. This is simple with Nginx and Apache, but what about Azure Application Gateway?

Application Gateway -> Your application gateway -> Rewrites -> + Rewrite set

Name and Association
  • Name: give a name to your rewrite set. Ie: DisableServerTokens.
  • Associated routing rules: Select the rule associated to your backend(s)
Rewrite rule configuration
  • Rewrite rule name: give a name to your rewrite rule name. Ie: DisableServerHeader.
  • Action type: Delete
  • Header type: Response
  • Header name: Common header
  • Common header: Server

Then Save your modifications. This should remove the "Server" HTTP header.

Monter ses partages à la demande avec Autofs

Rédigé par uTux 4 commentaires

Je me connecte régulièrement avec mon laptop à des partages Samba/CIFS de mon NAS. Pour cela j'utilise la commande suivante à chaque démarrage:

$ sudo mount -t cifs //192.168.1.1/partage /mnt/partage/ -o user=utux

J'aimerai que ce soit automatique. Le problème est que je ne peux pas utiliser le /etc/fstab car au moment où il est exécuté le réseau n'est pas prêt (wifi ou client openvpn). Il existe bien l'option _netdev mais elle n'a jamais fonctionné pour moi. Ce cas d'usage montre bien les limites des montages Linux qui ne sont pas adaptés à la mobilité et aux environnements dynamiques.

Bonne nouvelle, il existe une alternative: autofs qui s'appuie sur automount. Contrairement à mount, il connecte le partage lorsqu'on y accède (et pas au démarrage) et le déconnecte si on ne l'utilise pas. Il a aussi de nombreuses autres fonctionnalités:

  • Un système de templates utile quand on a de nombreux partages.
  • Support de plusieurs protocoles (cifs, nfs, raw...).
  • Auto-découverte des partages.
  • Consommation de ressources moindre (déconnecte les partages non utilisés)
  • Meilleure tolérance aux coupures réseau.

Installation sous Debian / Ubuntu:

$ sudo apt install autofs

Créer/éditer le /etc/auto.master:

/mnt	/etc/auto.nas --timeout 300 --browse

Créer/éditer le /etc/auto.nas:

partage -fstype=cifs,credentials=/home/utux/.autofs_creds,user=utux,uid=utux,rsize=8192,wsize=8192 ://192.168.1.1/partage

Créer le fichier /home/utux/.autofs_creds:

username=utux
password=secret

Mettre le /home/utux/.autofs_creds en chmod 0600:

$ chmod 0600 /home/utux/.autofs_creds

Mettre le /etc/auto.nas en chmod 0644

$ sudo chmod 0644 /etc/auto.nas

Démarrer le service:

$ sudo systemctl start autofs

Tester:

$ ls /mnt/partage

Si cela ne fonctionne pas:

$ sudo systemctl stop autofs
$ sudo automount -f –v

Notez que cela ne fonctionnera pas si le /etc/auto.nas est exécutable:

$ sudo chmod -x /etc/auto.nas

Autofs est génial et solutionne mes problèmes de montage de partages en mobilité.

EDIT 15/03/2020: Smb version 4, ajout uid pour corriger des problèmes de droits.

Fil RSS des articles de cette catégorie