Match un motif sauf si la ligne contient d'autres motifs à ignorer, avec une regex Perl-Compatible :
Ho, une regex look-ahead + negative look-ahead. Utilisable avec grep -Po
.
J'en ai déjà parlé. Cool de revoir cette syntaxe bien pratique afin d'éviter des grep / cut / awk / etc. en cascade. :)
Dans cet exemple, la partie look-ahead me semble être superflue et la fin me semble être saturée en parenthèses inutiles. La regex suivante devrait produire le même résultat : \MOTIF_A_MATCH\b(?!ignoreme1|ignoreme2|ignoremeX)$
.
« All modern digital infrastructure » reposent sur « a project some random person in Nebraska has been thanklessly maintaining since 2003 ».
Tellement vrai.
Une analyse critique de la généralisation à prévoir de la confidentialité différentielle (manipuler des données personnelles tout en utilisant des statistiques et, éventuellement, de la cryptographie afin d'empêcher des croisements / levées d'anonymat) par les géants du net. Pérennisation du "business as usual" autour des données personnelles face au RGPD (il voit d'un bon œil les stats, la prétendue anonymisation, tout ça, le RGPD) en racontant potentiellement du bullshit (si l'anonymiseur est celui qui bénéficie financièrement du traitement de données persos, comment garantir qu'il ne désanonymisera pas les données pour son propre compte ? ‒ pompier pyromane ‒) et en permettant, de fait, de fuir tout questionnement autour de la protection de notre intimité ("faites-nous confiance, c'est de l'anonymisation military-grade avec tout plein de calculs compliqués dedans !").
Péréniser l’exploitation commerciale des données personnelles en dégradant leur granularité par des mécanismes cryptographiques, c’esi ici une intéressante approche poussée par Google et d’autres.
[…]
Le concept s'appelle confidentialité différentielle, et vous risquez d'en entendre parler ces prochains mois vu que Google commence à envoyer l'artillerie lourde pour pousser ce concept. Rappel des faits : il y a environ un an, Google publiait sa bibliothèque dédiée. Il n'est pas le premier à s'intéresser à ce concept. Apple avait placé ses pions en 2016, mais de manière peut-être moins ostantatoire. Normal car, contrairement à Google, la collecte des données n'est pas la principale source de revenu d'Apple.
[…]
[…] C'est bien ce que propose la confidentialité différentielle en introduisant des aléas mathématique dans les sets de données afin qu'un croisement ultérieur non prévu ne permette pas d'identifier nomminativement une personne.
Quand un acteur soutient qu'il anonymise les données, il se garde souvent d'expliquer par quel procédé il parvient à une anonymisation interdisant à des tiers, mais aussi à lui-même, de "désanonymiser" ces données. […]
[…]
[…] Le RGPD a sifflé la fin d'une récréation et ceci a été anticipé de longue date par quelques gros acteurs qui voient dans l'anonymisation de la collecte une piste pour continuer à exploiter ces données personnelles.
[…]
Selon le principe du pompier pyromane, c'est celui qui collecte qui "anonymise", qui stocke, qui traite, et qui monétise... Au doigt mouillé, c'est ce que l'on appelle un bug d'architecture.
[…]
C'est encore l'un des coups de génie de Google qui va s'approprier la généralisation du concept de confidentialité différentielle. L'objectif est ici de se poser en "tiers de confiance" et ainsi enfermer un peu plus un public déjà captif de professionnels qui pourront brandir ce nouvel argument pour instaurer un climat de confiance avec leurs propres clients... Parce que le client, "il a confiance en Google".
Via https://twitter.com/bearstech/status/1291009891688210433 .
J'aime beaucoup l'exemple exposé dans la fiche Wikipedia de la confidentialité différentielle, car il permet de nuancer la critique enflammée précédente :
La confidentialité différentielle est souvent obtenue en appliquant un procédé qui introduit de l'aléa dans les données. Un exemple simple, qui s'est notamment développé en sciences sociales6, est de demander à une personne de répondre à la question "Possédez-vous l'attribut A ?" selon le déroulement suivant :
- Lancer une pièce.
- Si pile, alors répondre honnêtement.
- Si face, alors lancer à nouveau la pièce et répondre "Oui" si face, "Non" si pile.
La confidentialité surgit du caractère réfutable de chacune des réponses individuelles. En particulier, si A est synonyme de comportement illégal, alors répondre "Oui" n'est pas incriminant, dans la mesure où la personne a une probabilité d'un quart de réponse "Oui", quel qu'il en soit. Mais, de façon globale, ces données sont significatives, puisque les réponses positives sont données à un quart par des personnes qui n'ont pas l'attribut A et à trois quart par des personnes qui le possèdent véritablement. Ainsi, si p est la proportion véritable de personnes ayant A, alors on s'attend à obtenir (1/4)(1-p) + (3/4)p = (1/4) + p/2 réponses positives. D'où une estimation possible de p.
Bien que cette illustration, s'inspirant de la réponse aléatoire, puisse s'appliquer à la divulgation de micro-données (c'est-à-dire de jeu de données contenant une entrée par participant), la confidentialité différentielle exclut par définition ce type de divulgation, en ne permettant que la divulgation de données agrégées par requêtes. En effet, la divulgation de micro-données violerait les axiomes fondant la confidentialité différentielle, dont notamment le déni plausible d'inclusion ou d'exclusion de participants
Résumé : fin juillet 2020 = premières observations publiques d'un blocage, par la censure chinoise, des connexions TLS qui utilisent ESNI afin de masquer le nom du serveur auquel la communication chiffrée est adressée.
Lors de l'établissement d'une connexion chiffrée (HTTPS, IMAPS, etc.), le client (navigateur web, logiciel de courriel, etc.) indique, en clair (sans chiffrement), le nom de la machine à laquelle il veut se connecter. Cela permet au serveur de présenter le bon certificat x509 dans le cas où il héberge plusieurs services différents derrière une même adresse IP (hébergement web mutualisé, par exemple). C'est l'extension Server Name Indication ‒ SNI ‒ de TLS.
Dans le nouveau protocole TLS, le 1.3, et contrairement aux protocoles antérieurs, l'établissement de la connexion est chiffré (voir mon article de présentation de TLS 1.3 pour les détails), donc on peut envisager de masquer totalement le nom du serveur. Le projet le plus avancé se nomme Encrypted Server Name Indication ‒ ESNI. On peut lire le cahier des charges ESNI si l'on veut se rendre compte que le problème n'est pas simple à résoudre, car il est de la forme "œuf et poule".
ESNI n'est pas encore normalisé et il est très très peu déployé, mais, depuis fin juillet 2020, la censure chinoise bloque déjà les connexions chiffrées qui utilisent cette nouvelle extension de TLS. Au moins, les adminsys du gouvernement chinois se tiennent informés, ce qui n'est pas commun dans la profession (même si chacun prétend que, lui, se tient à jour). :)
J'évoquais ce genre de filtrage dans mon article sur les apports et les limites de DNS over HTTPS / TLS et sur ce que ces protocoles changent pour un adminsys. Si l'on chiffre, à raison car il est très bavard / indiscret, le trafic DNS, alors la censure sera déportée sur SNI puis sur ESNI puis sur l'adresse IP, et la seule parade utilisable par le commun des mortels sera une centralisation des contenus chez une minorité d'hébergeurs / fournisseurs de services. La Chine ouvre la voie.
Via https://twitter.com/kkomaitis/status/1292160887206432769 via https://twitter.com/bluetouff .
Carte de France collaborative de la surveillance sécuritaire de l'espace public : drones, police prédictive, vidéosurveillance automatisée, reconnaissance faciale, capteurs sonors, safe city, etc.
Via https://twitter.com/technopolice_fr/status/1292759840780148738 via https://twitter.com/vincib/ .
J'veux jouer à un jeu vidéo uniquement disponible sur ordinateur de poche sans pour autant détenir un tel smartphone.
Une simple recherche sur le web me dégote un article de Korben sur Anbox, un système libre (GPL et Apache) qui utilise les conteneurs Linux (LXC, Docker, etc.) afin de faire tourner un système d'exploitation Android complet sur un ordinateur (équipé d'un noyau Linux, donc). Il ne s'agit pas d'un émulateur (performances préservées, tout ça).
Comme c'est un peu la galère à installer de bout en bout, voici mes notes d'installation / configuration sur un système Debian GNU/Linux Buster :
ashmem_linux
et binder_linux
. Ils sont présents dans l'image Linux fournie par le projet Debian (pour s'en assurer : find /lib/modules/ -iname '*ashmem*'
) et ils seront chargés automatiquement au moment propice ;sudo apt install snapd
;anbox
avec snap
: sudo snap install --devmode --beta anbox
. Le démon système qui gère le conteneur Android, container-manager, est automatiquement démarré à la fin de l'installation et au démarrage du système hôte ;Récupérer le script qui automatise l'installation des bibliothèques de fonctions permettant l'exécution d'applications mobiles conçues pour l'architecture ARM (source). Sans ça, l'installation d'un logiciel mobile ARM se soldera par l'erreur suivante : adb: failed to install <nom_apk>: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
. wget https://raw.githubusercontent.com/geeks-r-us/anbox-playstore-installer/master/install-houdini-only.sh
;
wget https://raw.githubusercontent.com/geeks-r-us/anbox-playstore-installer/master/install-playstore.sh
. Installer le Google Play après avoir déjà installé les bibliothèques ARM a aucun impact. Je rappelle que Google Play nécessite la possession d'un compte Google et que sa création nécessite la validation d'un numéro de téléphone mobile… ;
ANBOX='/snap/bin/anbox'
;sudo apt install curl lzip
;bash install-houdini-only.sh
;snap run anbox session-manager
. Il s'agit d'un processus utilisateur, pas système. Attention : cette commande ne rend pas la main, donc on peut la lancer en fond (nohup snap run anbox session-manager &
) si l'on le souhaite, mais je préfère ne pas le faire afin de pouvoir la tuer avec un ctrl+c puis la relancer avec un flèche_haut+entrée ;adb
. Il faut donc récupérer le fichier apk kiVaBien ;adb
: sudo apt install adb
;adb install <appli>.apk
;snap run anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
;
Commandes utiles :
sudo snap restart anbox.container-manager
. Cela permet parfois de terrasser un bug genre une application mobile qui ne démarre pas ou le réseau à l'intérieur du conteneur qui n'est pas configuré au démarrage du système hôte ;adb shell su 0 pm list packages
;adb uninstall <nom_unique>
. Pour connaître le nom unique d'une application, on peut lister l'ensemble des applications installées (voir point précédent). Si l'on ne la trouve pas dans la liste, on peut exécuter la commande adb shell su 0 ps
pendant que l'application est en cours d'exécution afin de tenter de l'identifier ;
Notes utiles :
adb shell
+ la commande date
, ne fonctionne pas, même en désactivant la synchronisation par le réseau. C'est normal : il s'agit d'un conteneur LXC. ;) Solution : changer la date / heure sur le système hôte ;sudo nft add rule inet filter FORWARD iifname "anbox0" counter accept
.Résumé : epmd, l'un des bidules erlang dont dépend le serveur XMPP ejabberd, écoute le monde entier sur le port tcp/4369 en utilisant le mécanisme d'activation par socket de systemd (à la inetd / xinetd). Pour le faire écouter uniquement en local, il faut modifier la configuration de la socket systemd epmd.socket, changer la configuration de ejabberdctl a aucun effet. ejabberd écoute également sur un port aléatoire…
Sur un de mes serveurs, je regarde tous les ports ouverts / en écoute avec ss -ltupn
(je rappelle que netstat est déprécié depuis de nombreuses années, ss
utilise les """"nouvelles"""" fonctions du noyau et est capable d'afficher plus d'informations ‒ tous les processus qui utilisent une socket, les options de la socket genre ipv6only, les timers dans un format lisible, l'algo de contrôle de la congestion, la pmtu, la mss, etc. ‒) et je vois ceci :
tcp LISTEN 0 128 0.0.0.0:4369 0.0.0.0:* users:(("systemd",pid=1,fd=47)) ino:11367904 sk:166 <->
Pourquoi systemd écoute-t-il sur le port tcp/4369 ? Une recherche sur le web montre qu'il s'agit en fait d'epmd, un démon Erlang qui utilise le mécanisme d'activation par socket de systemd (à la inetd / xinetd). Pourquoi epmd n'apparaît pas dans la liste des utilisateurs de la socket (ss
fait ça d'habitude, contrairement à netstat ;) ) ? Car, à ce moment-là, j'avais arrêté (systemctl stop) ejabberd, donc epmd n'était plus en activité.
Le seul bidule Erlang que j'utilise est ejabberd. Lisons la doc' : « epmd (Erlang Port Mapper Daemon) is a small name server included in Erlang/OTP and used by Erlang programs when establishing distributed Erlang communications. ejabberd needs epmd to use ejabberdctl and also when clustering ejabberd nodes. This small program is automatically started by Erlang, and is never stopped. »
J'ai un seul serveur derrière mon service Jabber et j'ose espérer qu'on peut piloter son serveur avec un ejabberdctl exécuté localement. Pas besoin d'être ouvert à tous les vents.
Lisons encore la doc' : « You should block the port 4369 in the firewall in such a way that only the programs in your machine can access it, or configure the option ERL_EPMD_ADDRESS in the file ejabberdctl.cfg. ». Non, ça ne fonctionne pas.
Lisons encore : « It is also possible to configure in ejabberdctl.cfg the network interface where the Erlang node will listen and accept connections. The Erlang command-line parameter used internally is, for example: erl ... -kernel inet_dist_use_interface "{127,0,0,1}" ». Non, changer la valeur de la variable « INET_DIST_INTERFACE » ne fonctionne pas non plus.
Au final, j'ai suivi ce tuto (mais pour obtenir le résultat inverse) et j'ai fait la modification côté systemd :
systemctl edit epmd.socket
;Contenu :
[Socket]
ListenStream=127.0.0.1:4369
systemctl daemon-reload
;systemctl restart epmd.socket ejabberd
;J'étais persuadé que ce changement est intervenu avec Buster, mais, non, j'observe ce comportement dans une machine virtuelle Jessie… Ça doit dater du passage à systemd. Vache, toutes ces années sans rien voir. :O
Résumé : « ssh-rsa », l'algorithme de signature et de vérification de la clé publique de type RSA d'un serveur SSH, est déprécié à cause des récentes attaques pratiques contre SHA-1, l'algorithme d'intégrité utilisé en interne. Il sera désactivé dans une version future d'OpenSSH. Il est temps de le désactiver au profit de rsa-sha2-* qui utilisent SHA-256 ou SHA-512 : HostKeyAlgorithms -ssh-rsa
dans sshd_config
. Attention : ça casse les vieux bouzins qui se connectent au serveur genre un OpenWRT Backfire.
Pour valider mes nouvelles configurations TLS renforcées, j'ai utilisé le testeur TLS/SSH Cryptcheck. Quand j'ai testé mes serveurs SSH, tout était OK… ou presque :
Au début, je me dis qu'Aeris est dans le mouvement qui consiste à dire que les courbes elliptiques sont potentiellement plus robustes que RSA même si l'on en sait trop rien. Mais, dans ce cas, pourquoi existe-t-il aussi rsa-sha2-256 et rsa-sha2-512 ? RSA est un format de clé, non ?
J'ai trouvé la réponse chez tonton Bortzmeyer. Je cite : « (Petit point au passage, dans SSH, le format de la clé ne désigne que la clé elle-même, alors que l'algorithme désigne un format de clé et des procédures de signature et de vérification, qui impliquent un algorithme de condensation. Ainsi, ssh-keygen -t rsa va générer une clé RSA, indépendamment de l'algorithme qui sera utilisé lors d'une session SSH. Le registre IANA indique désormais séparement le format et l'algorithme.) ».
D'accord ! ssh-rsa = RSA + SHA-1. Or, la robustesse de SHA-1 a pris de sacrés coups ces dernières années (attaque de collisions pour moins de 50 000 $). C'est pour ça qu'Aeris a choisi de le marquer au fer rouge. Fin mai 2020, dans les notes de la version 8.3, le projett OpenSSH a annoncé que ssh-rsa sera désactivé dans une future version.
Cette vérification concerne la clé avec laquelle le serveur se présente afin que le client l'authentifie, pas les clés des utilisateurs du serveur. Dans mon cas, il s'agit d'une clé de type RSA 4096 bits.
Je pourrais configurer mon serveur SSH pour utiliser une clé de type ed25519, mais, comme je l'ai déjà écrit, je trouve que les algorithmes de l'équipe de chercheurs autour de djb sont trop utilisées partout sans discernement, ce qui peut créer un dangereux monopole de fait / une dangereux monoculture. Une clé ECDSA avec des paramètres normalisés au NIST, organisme état-unien peu transparent, ne me tente pas plus.
Il me reste une possibilité : désactiver ssh-rsa et utiliser les algorithmes de signature et de vérifications RSA dépourvus de SHA-1 que sont rsa-sha2-256 et rsa-sha2-512.
Pour ce faire, j'ajoute ceci dans mon fichier /etc/ssh/sshd_config
: HostKeyAlgorithms rsa-sha2-512
. Attention : si ton serveur SSH peut se présenter avec d'autres formats de clés (ed25519, ecdsa, etc.), active les algorithmes correspondants en les concatenant avec une virgule. Tu peux aussi désactiver uniquement ssh-rsa : HostKeyAlgorithms -ssh-rsa
(note le « - »).
Attention : si tu as de vieux bouzins qui doivent se connecter à ton serveur SSH (genre un OpenWRT Backfire), ils ne doivent sûrement pas prendre en charge rsa-sha2-*. ;)
Au final, la configuration de mon serveur SSH est :
# Le serveur se présente avec une clé de type RSA
HostKey /etc/ssh/ssh_host_rsa_key
# Pour vérifier la clé du serveur, le client doit utiliser tel algo
HostKeyAlgorithms rsa-sha2-512
# Échange de clé EDH
KexAlgorithms diffie-hellman-group-exchange-sha256
# Chiffrement symétrique AEAD
Ciphers aes256-gcm@openssh.com
# Intégrité encrypt-then-pad-then-mac.
# Inutile : on utilise GCM, donc pas besoin d'un autre algo d'intégrité que celui intégré.
MACs hmac-sha2-512-etm@openssh.com
# On désactive la compression, même si le client la réclame (ssh -C)
Compression no
La même, mais qui permet la connexion d'un OpenWRT Backfire :
# Le serveur se présente avec une clé de type RSA
HostKey /etc/ssh/ssh_host_rsa_key
# Pour vérifier la clé du serveur, le client doit utiliser tels algos (ssh-rsa pour OpenWRT…)
HostKeyAlgorithms rsa-sha2-512,ssh-rsa
# Échange de clé EDH (diffie-hellman-group14-sha1 pour OpenWRT)
KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
# Chiffrement symétrique (aes256-ctr pour OpenWRT)
Ciphers aes256-gcm@openssh.com,aes256-ctr
# Intégrité (hmac-sha1 pour OpenWRT, hmac-sha2-512-etm@openssh.com au cas où on utiliserait aes256-ctr)
MACs hmac-sha2-512-etm@openssh.com,hmac-sha1
# On désactive la compression, même si le client la réclame (ssh -C)
Compression no
Résumé : virer les protocoles antérieurs à TLS 1.2 quand c'est possible (pas sur un serveur emails), migrer sur une configuration qui indique le plus vieux protocole TLS que l'on veut prendre en charge (comme conseillé dans la documentation d'OpenSSL) plutôt qu'une configuration qui spécifie chaque protocole qu'on veut prendre en charge (syntaxe imposée par dovecot et possible uniquement avec Apache httpd, pour l'instant), utiliser uniquement des mécanismes d'échange de clés qui permettent la confidentialité persistante, utiliser uniquement des algorithmes de chiffrement intègre (AEAD) quand c'est possible (pas sur un serveur emails), utiliser des courbes elliptiques un peu plus costaudes lors des échanges de clés quand c'est possible (pas sur un serveur emails), tenter d'utiliser des paramètres plus costauds lors des échanges de clés sans courbes elliptiques (mais ce n'est pas possible pour le moment avec la version d'OpenSSL livrée dans Debian), et autres manips en lien avec TLS. À la fin, je publie mes configurations TLS actualisées.
Quand j'ai étudié les nouveautés apportées par TLS 1.3, je me suis demandé « quand a été publiée la norme TLS 1.2 ? ». En 2008. Il y a 12 ans. Ça laisse le temps de migrer. Ça a été le déclic : il est temps de renforcer à nouveau les configurations TLS de mes serveurs. Ma dernière réflexion globale sur le sujet date de 2014 (et il y a une erreur dans la conf' Postfix que je propose…). Depuis, j'ai fait évoluer mes configurations, comme ici, en 2016, mais je n'ai pas réfléchi globalement.
Ce que je viens d'écrire est une vue de l'esprit. Certes, la norme TLS 1.2 a été publiée en 2008, mais l'implémentation TLS la plus répandue, OpenSSL, l'a implémentée à partir de 2012 (version 1.0.1). Ce qui signifie que TLS 1.2 est arrivée dans la version Wheezy / 7 de Debian publiée en 2013. TLS 1.2 est activé par défaut à partir de winwin 8, publié en 2012. Pour winwin 7 (client) / winwin 2008 + IIS, il faut activer TLS 1.2 dans le registre après une mise à jour publiée en 2016. Les principaux navigateurs web ont activé TLS 1.2 à partir de 2013-2014. Idem pour OpenVPN (2014). TLS 1.2 n'a pas vraiment 12 ans, mais plutôt 6 à 8 ans.
Avant de commencer, je vais te donner trois conseils : 1) ne me suis pas aveuglément, je ne suis ni mathématicien, ni cryptographe, ni expert en sécurité informatique, ni… ; 2) vérifie le comportement de tes configurations TLS avec plusieurs testeurs TLS ; 3) évalue, dans le temps (plusieurs mois), le bon fonctionnement de tes confs TLS actualisées, car certains problèmes se détectent sur le tard (exemple ci-dessous).
Une configuration TLS doit être adapté au service protégé et à son public.
Pour illustrer ça, une petite anecdote. La CPAM envoie des informations à l'ensemble des assurés ("ce que nous faisons pour vous durant le Covid", "attention à la campagne de phishing en cours", etc.). Pour cela, elle a recours à un prestataire, Worldline. Dans le journal de mon Postfix, je lis l'erreur TLS library problem: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:../ssl/record/rec_layer_s3.c:1544:SSL alert number 80
. Sur le web, on trouve aucune aide. Je suis revenu progressivement en arrière dans ma configuration TLS. Au final, Wordline refuse que je priorise les algorithmes d'échange de clés qui ne sont pas basés sur les courbes elliptiques par rapport à ceux qui les utilisent. C'est compréhensible : l'utilisation des courbes elliptiques est un gain de performance, donc de temps. Comme la CPAM n'envoie pas d'emails tous les jours (et que les emails relatifs à une question posée via l'espace personnel emprunte un autre circuit), cette compréhension du problème m'a pris trois mois. Bref, ne fais pas n'importe quoi et surveille tes journaux pendant plusieurs mois.
Voici les commandes que j'ai utilisées afin de surveiller les journaux de mes serveurs pendant plusieurs mois :
grep -E -C1 "(unsupported protocol|unknown protocol|no shared cipher|TLS library problem|SSL_connect error|handshake failure)" /var/log/mail/postfix.log
(attention, ce chemin est spécifique à ma configuration) ;grep -E -C1 "(unsupported protocol|unknown protocol|no shared cipher|TLS handshaking|SSL_connect error|handshake failure)" /var/log/mail/dovecot.log
(idem) ;grep -E "(unsupported protocol|unknown protocol|no shared cipher|TLS failed|SSL_connect error|handshake failure)" /var/log/ejabberd/ejabberd.log
;tshark
, la version ligne de commande de wireshark
(on peut la laisser tourner dans un screen
ou un tmux
, par exemple) : tshark -Y 'ssl.record.content_type == 21 && ssl.record.length <= 2 && ssl.alert_message.desc != 48' 'tcp and port 443'
. Source 1. Source 2.Comme dit ci-dessus, TLS 1.2 a été publié en 2008 et implémenté depuis 2012-2014. Il est temps de désactiver les versions antérieures à TLS 1.2.
Les principaux éditeurs de navigateurs web sont arrivés à la même conclusion. Mozilla devrait désactiver TLS 1.0 et TLS 1.1 dans la version 78 de Firefox qui devrait être publiée fin juin 2020 (source). Google devrait faire de même dans la version 84 de Chrome prévue pour fin juillet 2020 (source). Microsoft devrait suivre avec la version 84 d'Edge sui devrait être publiée en juillet 2020 (source) et avec un correctif pour la version 11 d'IE (source) qui devrait être publié en septembre 2020.
Côté emails, je déconseille de virer TLS 1.0 / 1.1, car des fournisseurs d'emails utilisent uniquement ces protocoles. Exemple : Orange utilise exclusivement TLS 1.0.
Le manuel d'OpenSSL indique qu'à partir de sa version 1.1.0, définir les protocoles est déprécié. Il vaut mieux préciser le plus petit protocole que l'on souhaite activer et, éventuellement, le plus grand. Source 1, source 2. Dovecot utilise nativement cette syntaxe. Avec Apache httpd, on peut se débrouiller ainsi : SSLOpenSSLConfCmd MinProtocol TLSv1.2
. J'ai rien trouvé pour nginx, postfix et ejabberd.
Seuls 5 algorithmes de chiffrement symétrique + intégrité sont utilisables avec TLS 1.3 à l'heure actuelle. Il s'agit des plus robustes du moment, donc il n'y a pas de ménage à faire. Néanmoins, si l'on veut changer les suites de chiffrement utilisées dans une connexion TLS 1.3, comme l'API d'OpenSSL est différente pour gérer TLS 1.2 et TLS 1.3, il faut utiliser le paramètre « Ciphersuites » de la fonction « SSL_CONF_cmd » qui s'utilise ainsi avec Apache httpd : « SSLOpenSSLConfCmd Ciphersuites TLS_CHACHA20_POLY1305_SHA256 ». Je n'ai pas trouvé d'équivalent pour nginx, postfix, dovecot et ejabberd. Pour tester, il faut utiliser l'argument -ciphersuites
de s_client
.
En revanche, c'est le bazar complet avec les versions antérieures de TLS.
Dans l'idéal, on aimerait dégager tout ce qui n'inclut pas un échange de clés éphémères (EDH / EECDH) car c'est ce qui permet la confidentialité persistante (Perfect Forward Secrecy), le fait que des communications passées qui auraient été enregistrées ne pourront être déchiffrées, même si la clé privée du serveur est compromise. Cet objectif est atteignable, même sur le protocole emails : même mon serveur d'emails mutualisé n'a pas eu d'échanges sans confidentialité persistante sur l'année passée. Attention toutefois : ce serveur a peu d'utilisateurs et nos usages du numérique sont limitées (très peu de commerce en ligne, très très peu d'inscriptions sur des sites web, peu de sites web gouvernementaux).
Dans l'idéal, on voudrait aussi dégager SHA-1, car sa robustesse a pris de sacrés coups ces dernières années. Côté emails, ce n'est pas possible : des fournisseurs emails l'utilisent pour garantir l'intégrité d'une communication. Orange, par exemple.
Dans l'idéal, on voudrait aussi dégager tout ce qui n'est pas chiffrement intègre (AEAD) vu que ça a toujours été plus ou moins vulnérable (voir mon article sur TLS 1.3), mais, ce n'est pas possible pour l'email : l'utilisation de SHA-1 emporte l'utilisation de suites cryptographiques sans chiffrement intègre, par définition.
De nos jours, il vaut mieux privilégier EECDH à EDH (plus performant, prétendument plus robuste), mais je continue de privilégier EDH car je n'ai pas compris le problème mathématique insoluble sur lequel repose la cryptographie avec courbes elliptiques alors que j'ai compris le problème de la factorisation d'un très grand nombre en facteurs premiers. Néanmoins, des services emails, comme celui retenu par la CPAM imposent un échange de clés EECDH.
Au final :
EDH:EECDH:!ECDSA:!DSS:!SHA1:!SHA256:!SHA384:@STRENGTH
. Confidentialité persistante + authentification RSA + chiffrement intègre AES ou ARIA. Attention : si tu utilises un certificat x509 avec une clé de type courbes elliptiques, il faut remplacer « !ECDSA » par « !aRSA » ;EECDH:EDH:!ECDSA:!DSS:!PSK:!CAMELLIA:!SEED:!eNULL:@STRENGTH
. Confidentialité persistante + authentification RSA + chiffrement intègre AES / ARIA ou AES / ARIA avec SHA-1 / SHA-256 / SHA-384. Attention : si tu utilises un certificat x509 avec une clé de type courbes elliptiques, il faut remplacer « !ECDSA » par « !aRSA ».
Relevons l'erreur qui se trouvait dans la configuration TLS de mon Postfix jusqu'en février 2020 :
smtpd_tls_security_level = may
smtpd_tls_mandatory_ciphers = medium
tls_medium_cipherlist = ALL:!aNULL:!eNULL:!EXP:!RC4:!3DES:!MD5:!LOW:+HIGH:+MEDIUM
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXP, RC4, 3DES, MD5, LOW
J'active le chiffrement opportuniste (« may ») : le serveur indiquera qu'il accepte les connexions TLS, mais il ne rejettera pas les clients emails (les autres serveurs emails, concrètement) qui viendront lui causer. Pourtant, j'effectue la configuration des algorithmes cryptographiques dans les paramètres qui sont uniquement utilisés quand le chiffrement est obligatoire, c'est-à-dire quand la valeur de « smtpd_tls_security_level » est « encrypt ». Résultat, cette configuration est ignorée, sauf la dernière ligne, qui définit les algos à ne pas utiliser. Lorsque l'on active le chiffrement opportuniste, il faut utiliser le paramètre « smtpd_tls_ciphers » pour définir le niveau de sécurité des algorithmes de chiffrement utilisables. Si l'on configure la valeur de ce paramètre à « medium », il est possible de surcharger la liste des algos autorisés avec le paramètre « tls_medium_cipherlist ».
Au final, la même configuration, mais corrigée est celle-ci :comparée
smtpd_tls_security_level = may
smtpd_tls_ciphers = medium
tls_medium_cipherlist = ALL:!aNULL:!eNULL:!EXP:!RC4:!3DES:!MD5:!LOW:+HIGH:+MEDIUM
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXP, RC4, 3DES, MD5, LOW
On aimerait choisir les courbes elliptiques utilisables lors des échanges EECDH des clés de session (utilisées pour effectuer le chiffrement symétrique). D'abord pour faire péter notre score sur Cryptcheck (dans la première version, la courbe elliptique la plus utilisée, prime256v1, avait une note faible liée à sa robustesse comparée à celle d'un algo symétrique), ensuite car la courbe P-256 aka prime256v1 aka secp256r1 a été normalisée au NIST (entre autres), organisme américain qui a aussi normalisé Dual_EC_DRBG, un générateur de nombres pseudo-aléatoires volontairement affaibli par la NSA, et qui a jamais publié le choix des paramètres de la courbe P-256. Un peu de diversité ne fait pas de mal.
À part les courbes d'organismes de normalisation fermés états-uniens, il existe les courbes X25519, Brainpool et X448. En pratique, X25519 a la plus grande part de marché. Brainpool a la plus petite, au point d'avoir été dégagée de TLS 1.3 pour cette raison avant d'y être ré-intégré en février 2020 (source). En pratique, s_client
ou Firefox / Thunderbird préfère X25519 à tout autre courbe. s_client
préfère X448 aux courbes du NIST, ce qui n'est pas le cas de Firefox / Thunderbird, qui acceptent uniquement X25519 ou les courbes du NIST (source : capture réseau + lecture du champ supported_groups dans une poignée de main TLS 1.2 ou 1.3). En TLS 1.2, s_client
préfère basculer sur un échange EDH plutôt que de procéder à un échange EECDH utilisant Brainpool, c'est dire…
De plus, contrairement à la négociation des suites de chiffrement (voir ci-dessus) dans laquelle l'ordre des suites du serveur l'emporte sur celui du client, la négociation des courbes elliptiques dans un échange EECDH en TLS 1.3 semble être à la faveur d'un client quand X25519 est autorisé sur le serveur. Soit un client annonçant « X25519, P-256, X448, P-521, P-384 » dans son ClientHello. Côté serveur, même si X25519 est défini en dernier, il sera quand même choisi (même en utilisant « Options ServerPreference » de SSL_CONF_cmd). Si x25519 est totalement absent et que X448 vient avant P-256, alors X448 sera choisi (cette fois-ci, l'ordre du serveur importe) et le client reçoit un message « Hello Retry Request » lui demandant de renégocier. En TLS 1.2, l'ordre du serveur est parfaitement respecté.
Donc, en TLS 1.3, la présence de X25519 dans la liste des courbes autorisées par le serveur, même au fond de la liste, fera qu'il sera utilisé. Ne pas l'autoriser contraint l'utilisation des courbes du NIST (avec Firefox / Thunderbird, autre), ce qui est moins malin. Autoriser les courbes Brainpool sur le serveur a aucun effet, ni en TLS 1.3 ni en 1.2. Ne pas le faire n'encourage pas à la diversité.
Sur un serveur emails, la prise en charge de P-256 aka prime256v1 aka secp256r1 est nécessaire pour dialoguer avec certains fournisseurs d'emails, comme Microsoft.
Le serveur XMPP ejabberd ne permet pas encore de choisir les courbes elliptiques utilisables lors d'un échange EECDH. La négociation automatique est codée depuis 2017 dans la bibliothèque sous-jacente, mais rien semble permettre de définir la liste des courbes utilisables.
Au final :
X448:brainpoolP512r1:brainpoolP384r1:X25519:P-521:P-384
. X448 pour un peu de variété crédible (les algorithmes de l'équipe du cryptographe djb, Curve25519 et ChaCha20+Poly1305 sont trop utilisés partout sans discernement, à mon goût), Brainpool pour une variété factice puisque elle très peu utilisée en pratique, et les courbes du NIST les plus robustes (en termes de comparaison avec la robustesse d'un algorithme symétrique) pour la compatibilité ;X448 brainpoolP512r1 brainpoolP384r1 X25519 P-521 P-384 P-256
(oui, ici il faut séparer les courbes avec des espaces…). J'ajoute P-256 afin de maintenir une compatibilité "à tout prix".Définir certains paramètres mathématiques (comme le module) afin d'améliorer la sécurité, la compatibilité et la performance des échanges de clés EDH ? C'est l'objectif du RFC 7919 qui normalise des groupes finis pour EDH. Le but est d'éviter que les implémentations choisissent des paramètres vaseux et que l'interlocuteur ne puisse pas les refuser.
Au début, je me suis intéressé à ça afin de prioriser un échange EDH sur un échange EECDH dans TLS 1.3. En effet, par défaut, l'échange de clés se fait avec des courbes elliptiques (ECDHE). Définir les suites de chiffrement est vain puisqu'en TLS 1.3, elles indiquent uniquement les algorithmes de chiffrement et d'intégrité, plus l'échange de clés. La négociation des algorithmes EDH et EECDH se fait dans le champ « supported groups » des messages qui constituent une poignée de main TLS 1.3.
Dans un deuxième temps, je voulais résoudre la contradiction énoncée dans la section 6 du RFC 7919 (uniquement valable pour TLS < 1.3) : mon serveur propose uniquement des courbes elliptiques dans le champ TLS « supported groups » tout en proposant d'abord des suites de chiffrement EDH dans le champ « cipher suites ». La résolution automatique de cette contradiction est laissée à l'implémentation TLS utilisée côté serveur, d'après la norme, ce qui est jamais une bonne idée.
Le côté amélioration de la sécurité est sympa aussi, mais on est clairement en dehors du modèle de menace applicable à mes services… Comme tout le reste de ce shaarli, ceci dit…
Comme pour la définition des courbes elliptiques EECDH, OpenSSL permet d'indiquer les groupes finis EDH utilisables via la directive « Groups » de sa fonction SSL_CONF_cmd. Cette prise en charge a été codée en juin 2019 (source 1, source 2) et documentée en mai 2019 (source), mais elle n'est pas utilisable dans Debian à l'heure actuelle, y compris dans sid, sauf à utiliser le dépôt experimental.
ÉDIT DU 06/09/2022 : cette section est erronée. DH repose toujours des groupes finis. Ce que le RFC 7919 normalise, c'est des groupes DH prédéfinis choisis, en effet, pour leur robustesse mathématique. Les paramètres DH à groupes prédéfinis s'utilisent comme les autres paramètres DH, avec les mêmes directives de configuration. Donc, il n'y a pas lieu d'attendre une quelconque directive de configuration spécifique. Voir : Mise à jour de mes configurations TLS pour utiliser les paramètres Diffie-Hellman normalisés. FIN DE L'ÉDIT DU 06/09/2022.
On peut également définir les algorithmes et les schémas utilisables pour authentifier le pair et les messages d'initialisation de la connexion TLS.
C'est la directive « SignatureAlgorithms » de la fonction « SSL_CONF_cmd » qui s'utilise ainsi avec Apache httpd : « SSLOpenSSLConfCmd SignatureAlgorithms rsa_pss_pss_sha256 ». Je n'ai pas trouvé d'équivalent pour nginx, dovecot, postfix et ejabberd.
Avec TLS 1.3, il est obligatoire d'utiliser le schéma RSA PSS si l'on fait de l'authentification RSA des messages TLS, mais, l'ancien schéma RSA PKCS#1 1.5 reste utilisable pour l'authentification du pair, d'après la norme. Or, OpenSSL semble mélanger les deux : tenter d'utiliser le schéma RSA PKCS#1 1.5 dans SignatureAlgorithms conduit à l'échec de la connexion TLS.
Évidemment, il faut choisir un algorithme (liste à l'IANA) qui correspond à celui utilisé dans le certificat de ton serveur : inutile d'utiliser ed25519 avec un certificat x509 signé avec RSA+SHA256.
Je vois peu l'intérêt de la manip', à part pour forcer l'utilisation du schéma RSA PSS avec TLS 1.2. Avec Apache httpd, je fais ça avec « SSLOpenSSLConfCmd SignatureAlgorithms rsa_pss_rsae_sha256:rsa_pss_pss_sha256 ». Cependant, beaucoup de clients seront exclus d'après le testeur SSLLabs. Même SSLLabs et Cryptcheck ne parviennent pas à discuter en TLS 1.2 + RSA PSS. :D Donc, il faut impérativement supporter PKCS#1 1.5 en dernier ressort avec SSLOpenSSLConfCmd SignatureAlgorithms rsa_pss_rsae_sha256:rsa_pss_pss_sha256:rsa_pkcs1_sha256
.
# TLS 1.2 + TLS 1.3 uniquement
SSLOpenSSLConfCmd MinProtocol TLSv1.2
# Confidentialité persistante + authentification RSA + chiffrement symétrique AEAD (AES et ARIA)
# Le choix du serveur l'emporte sur celui du client
SSLCipherSuite EDH:EECDH:!ECDSA:!DSS:!SHA1:!SHA256:!SHA384:@STRENGTH
SSLHonorCipherOrder on
# Paramètres EDH 4096 bits (3072 saurait suffisant, ne pas aller en dessous)
SSLOpenSSLConfCmd DHParameters "/etc/apache2/ssl/dh_4096.pem"
# Courbes elliptiques EECDH
SSLOpenSSLConfCmd ECDHParameters Automatic
SSLOpenSSLConfCmd Groups X448:brainpoolP512r1:brainpoolP384r1:X25519:P-521:P-384
# Désactivation de la compression TLS (pour TLS 1.2). Déjà désactivée par défaut.
# SSLCompression off
# Cache partagé des sessions TLS : activé par défaut (module ssl dépend du module socache_shmcb)
# SSLSessionCacheTimeout 300
# Prioriser l'utilisation du schéma RSA-PSS (PKCS#1 version 2.1)
SSLOpenSSLConfCmd SignatureAlgorithms rsa_pss_rsae_sha256:rsa_pss_pss_sha256:rsa_pkcs1_sha256
# Si certificat x509 signé par une autorité de certification publique, activer OCSP stapling
# (http://shaarli.guiguishow.info/?bbeKhg) afin de respecter la vie privée des visiteurs
# (http://shaarli.guiguishow.info/?SgQmAA)
# SSLCACertificateFile </chemin/vers/cert/CA.pem>
# SSLUseStapling on
# Journaliser des informations plus détaillées sur les connexions TLS entrantes échouées.
# Pas possible
# TLS 1.2 + TLS 1.3 uniquement
ssl_protocols TLSv1.2 TLSv1.3;
# Confidentialité persistante + authentification RSA + chiffrement symétrique AEAD (AES et ARIA)
# Le choix du serveur l'emporte sur celui du client
ssl_ciphers EDH:EECDH:!ECDSA:!DSS:!SHA1:!SHA256:!SHA384:@STRENGTH;
ssl_prefer_server_ciphers on;
# Paramètres EDH 4096 bits (3072 saurait suffisant, ne pas aller en dessous)
ssl_dhparam /etc/nginx/ssl/dh_4096.pem;
# Courbes elliptiques EECDH
ssl_ecdh_curve X448:brainpoolP512r1:brainpoolP384r1:X25519:P-521:P-384;
# Compression TLS (pour TLS 1.2) totalement désactivée dans nginx
# Cache partagé des sessions TLS. Le site web servi par ce serveur nginx affiche une page blanche (sans CSS)
# et permet à des connaissance de télécharger quelques fichiers. Je n'ai pas de
# visiteurs réguliers. Il est inutile d'activer la réouverture de session TLS ainsi que le cache qui va avec.
ssl_session_cache off;
# Prioriser l'utilisation du schéma RSA-PSS (PKCS#1 version 2.1)
# Je n'ai pas trouvé le paramètre KiVaBien
# Si certificat x509 signé par une autorité de certification publique, activer OCSP stapling
# (http://shaarli.guiguishow.info/?bbeKhg) afin de respecter la vie privée des visitteurs
# (http://shaarli.guiguishow.info/?SgQmAA)
# ssl_trusted_certificate </chemin/vers/cert/CA.pem>
# ssl_stapling on;
# ssl_stapling_verify on;
# Journaliser des informations plus détaillées sur les connexions TLS entrantes échouées.
# Pas possible
## Serveur
# Chiffrement opportuniste (si pas possible, on accepte de recevoir en clair)
smtpd_tls_security_level = may
# Pas d'authentification tant qu'on n'a pas établie une connexion TLS
smtpd_tls_auth_only = yes
# TLS 1.0 + TLS 1.1 + TLS 1.2 + TLS 1.3, car des fournisseurs d'emails ont besoin de TLS 1.0 (Orange, par exemple)
smtpd_tls_protocols = !SSLv2, !SSLv3
# Confidentialité persistante + authentification RSA + chiffrement intègre (AES ou ARIA) ou AES / ARIA avec SHA-1 / SHA-256 / SHA-384.
# Des fournisseurs d'emails exigent que EECDH soit prioritaire sur EDH, genre Worldline qui opère pour le compte de la CPAM
# Le choix du serveur l'emporte sur celui du client
smtpd_tls_ciphers = medium
tls_medium_cipherlist = EECDH:EDH:!ECDSA:!DSS:!PSK:!CAMELLIA:!SEED:!eNULL:@STRENGTH
tls_preempt_cipherlist = yes
# Paramètres EDH 4096 bits (3072 saurait suffisant, ne pas aller en dessous)
smtpd_tls_dh1024_param_file = /etc/postfix/ssl/dh_4096.pem
# Courbes elliptiques EECDH
# Des fournisseurs d'emails exigent P-256, comme Microsoft
# Cela s'applique aussi au client SMTP
smtpd_tls_eecdh_grade = auto
tls_eecdh_auto_curves = X448 brainpoolP512r1 brainpoolP384r1 X25519 P-521 P-384 P-256
# Désactivation de la compression TLS (pour TLS 1.2)
# Cela s'applique aussi au client SMTP
tls_ssl_options = NO_COMPRESSION
# Cache partagé des sessions TLS. Par défaut, une session expire au bout d'une heure
# Pratique pour les échanges rapides avec un même destinataire genre une liste de discussion ou un même interlocuteur
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_tls_cache
# Prioriser l'utilisation du schéma RSA-PSS (PKCS#1 version 2.1)
# Je n'ai pas trouvé le paramètre KiVaBien
# Pas de prise en charge d'OCSP stapling
# Journaliser des informations plus détaillées sur les connexions TLS entrantes
smtpd_tls_loglevel = 1
## Client
# J'utilise DANE TLSA (http://shaarli.guiguishow.info/?M3y2yQ)
# Cela peut parfois faire chier (http://shaarli.guiguishow.info/?tQqSHw)
smtp_dns_support_level = dnssec
smtp_tls_security_level = dane
# La doc' dit « For purposes of protocol and cipher selection, the "dane" security level is treated
# like a "mandatory" TLS security level ».
# On fait pointer la liste de suites de chiffrement de ce niveau de sécurité sur tls_medium_cipherlist
# défini plus haut avec mandatory = medium
smtp_tls_mandatory_protocols = $smtpd_tls_protocols
smtp_tls_mandatory_ciphers = medium
# Les courbes utilisables lors d'un échange EECDH sont configurées dans la partie serveur
# La compression TLS est désactivée dans la partie serveur
# Cache partagé des sessions TLS. Par défaut, une session expire au bout d'une heure
smtp_tls_session_cache_database = btree:${data_directory}/smtp_tls_cache
# Journaliser des informations plus détaillées sur les connexions TLS sortantes
smtp_tls_loglevel = $smtpd_tls_loglevel
# TLS est obligatoire avant tout échange
ssl = required
# TLS 1.2 + TLS 1.3 uniquement
ssl_min_protocol = TLSv1.2
# Confidentialité persistante + authentification RSA + chiffrement symétrique AEAD (AES et ARIA)
# Le choix du serveur l'emporte sur celui du client
ssl_cipher_list = EDH:EECDH:!ECDSA:!DSS:!SHA1:!SHA256:!SHA384:@STRENGTH
ssl_prefer_server_ciphers = yes
# Paramètres EDH 4096 bits (3072 saurait suffisant, ne pas aller en dessous)
ssl_dh = </etc/dovecot/ssl/dh_4096.pem
# Courbes elliptiques EECDH
ssl_curve_list = X448:brainpoolP512r1:brainpoolP384r1:X25519:P-521:P-384
# Désactivation de la compression TLS (pour TLS 1.2). Déjà désactivée par défaut.
# ssl_options = no_compression
# Cache partagé des sessions TLS. Pas pertinent, un seul utilisateur, qui se moque de la performance
# Prioriser l'utilisation du schéma RSA-PSS (PKCS#1 version 2.1)
# Je n'ai pas trouvé le paramètre KiVaBien
# Pas de prise en charge d'OCSP stapling
# Pas de journalisation détaillée des connexions TLS entrantes échouées
# TLS est obligatoire avant tout échange
s2s_use_starttls: required
define_macro:
# Confidentialité persistante + authentification RSA + chiffrement symétrique AEAD (AES et ARIA)
'TLS_CIPHERS': "EDH:EECDH:!ECDSA:!DSS:!SHA1:!SHA256:!SHA384:@STRENGTH"
# Paramètres EDH 4096 bits (3072 saurait suffisant, ne pas aller en dessous)
'DH_FILE': "/etc/ejabberd/ssl/dh_4096.pem"
# Impossible pour l'instant de préciser les courbes elliptiques utilisables lors d'un échange EECDH
'TLS_OPTIONS':
# TLS 1.2 ou TLS 1.3 uniquement
- "no_sslv3"
- "no_tlsv1"
- "no_tlsv1_1"
# En matière d'algorithmes de chiffrement, le choix du serveur l'emporte sur celui du client
- "cipher_server_preference"
# Désactivation de la compression TLS
- "no_compression"
c2s_ciphers: 'TLS_CIPHERS'
s2s_ciphers: 'TLS_CIPHERS'
c2s_protocol_options: 'TLS_OPTIONS'
s2s_protocol_options: 'TLS_OPTIONS'
c2s_dhfile: 'DH_FILE'
s2s_dhfile: 'DH_FILE'
# Cache partagé des sessions TLS. Pas pertinent, un seul utilisateur, qui se moque de la performance
# Prioriser l'utilisation du schéma RSA-PSS (PKCS#1 version 2.1)
# Je n'ai pas trouvé le paramètre KiVaBien
# Pas de journalisation détaillée des connexions TLS entrantes échouées
Je veux accéder à distance à l'interface graphique d'une machine Ubuntu 20.04. Protocole VNC, RDP, NX, peu importe. Facile, non ? Ha, j'ai deux critères qui rendent la chose compliquée :
Je ne sais pas ce qu'il en est aujourd'hui, mais, il y a plus de 10 ans, c'était très simple à faire sous winwin : ultraVNC et zout.
Avec Ubuntu 20.04, cela semble être impossible. J'ai essayé TightVNC, TigerVNC, x11vnc, vino, x2go, et xrdp.
TigerVNC s'en sort le moins mal. Ce tutoriel est fonctionnel. La session s'ouvre, tout est utilisable. Il ne faut pas verrouiller la session (attention au délai d'inactivité) sinon on ne pourra pas la déverrouiller, car il y a une sorte de boucle permanente qui fait échouer l'authentification, comme si quelqu'un appuyait sur la touche entrée en permanence. Il ne faut pas non plus que l'utilisateur ait ouvert sa session en présentiel, sinon il ne pourra pas la récupérer à distance. Cependant, ça ne répond pas à mon besoin : je suis directement connecté à ma session, sans passer par l'écran de connexion, ce que je ne veux pas.
Je pense que ça doit aussi fonctionner avec TightVNC. Je pense que TigerVNC a fonctionné, car le tutoriel indique un contenu plus sensé pour le fichier ~/.vnc/xstartup
. Je pense qu'utiliser ce fichier avec TightVNC produira le même résultat.
Pour le futur, voici des contenus de ~/.vnc/xstartup
qui fonctionnent sur un système Ubuntu 20.04 fraîchement installé (donc Wayland + GNOME + …) :
#!/bin/sh
exec /etc/vnc/xstartup
vncconfig -iconic &
dbus-launch --exit-with-session gnome-session &
ou :
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec /usr/bin/gnome-session &
x11vnc ne prend pas en charge Wayland / gdm3 (tous les tutos désactivent Wayland dans GNOME depuis Ubuntu 18.xx et installent lightDM). Il n'arrivait pas à se raccorder à l'afficheur 1024 (qui était celui de Wayland), en tout cas. Je n'ai pas non plus trouvé la socket censée être crée par gdm3 via laquelle xrdp est censé récupérer le cookie d'authentification…
xdmcp ne fonctionne pas avec Wayland, a priori.
xrdp ne fonctionne pas. vinagre
(client RDP, VNC, etc. de GNOME) crashe en s'y connectant ou affiche une boîte de dialogue de connexion (là où, normalement, on saisit son identifiant, son mdp de passe e tle type de session) totalement vide. Remmina (autre client VNC, RDP, etc.) tourne en boucle « essai 0/20, 1/20, 0/20 (non, pas d'erreur de frappe), etc. ». On aperçoit l'écran de connexion vide. Ce qui m'ennuie, c'est qu'on trouve des tutoriels xrdp pour Ubuntu 20.04 qui datent du 22 mai 2020. Leurs auteurs ne peuvent pas même pas tous mentir ni avoir tous hallucinés ! Mais, j'ai beau partir d'une Ubuntu 20.04 fraîchement installée et suivre rigoureusement les instructions, ça ne fonctionne pas.
vino ne fonctionne pas. Je n'ai pas réussi à l'activer sans passer par l'interface graphique (même en utilisant gsettings
, gconftool
, etc.). Si je le lance à la main via SSH, il affiche « Cannot open display: », voire « No protocole specified ».
x2go ne fonctionne pas, mais en plus, il réclame un algorithme assurant l'intégrité de la communication qui est déprécié (hmac-sha1). Rien de méchant (a priori, SHA-1 n'est pas dangereux quand il est utilisé dans un algorithme HMAC), mais c'est rigolo.
Mes collègues ont testé TeamViewer. C'est ce qui fonctionne le mieux, mais ça ne répond pas au besoin : on est directement connecté à la session, sans passer par l'écran de connexion. Comme TeamViewer est un logiciel privateur, je n'ai pas passé de temps dessus.
J'ai passé 4 h sur tout ça. Il m'a fallut 15 minutes pour accéder à la machine en présentiel malgré les restrictions et les procédures liées au Covid et en incluant le transport. 4 h = 240 m = le temps passé pour un accès distant pas fonctionnel = 16 accès en présentiel sans limite de durée. Parfois, il n'y a pas de réponse technique à un problème.
Résumé : si l'interface graphique d'Ubuntu se gèle pendant son installation dans une machine virtuelle KVM + virt-manager, soit tu la laisses se terminer en la surveillant avec iotop
sur l'hôte (quand il n'y a plus d'écritures, l'installation est terminée), soit tu affectes, à la machine virtuelle, un modèle de CPU « kvm64 » ou un modèle supporté par ton CPU réel / physique.
L'installation d'Ubuntu dans une machine virtuelle KVM (+ interface graphique virt-manager, donc libvirt) sur mes ordinateurs a jamais trop fonctionné.
Avec la version 18.10, l'installeur se gelait lors de la saisie du nom d'utilisateur. Le pointeur de la souris bougeait, mais l'interface graphique ne réagissait plus.
Avec la version 20.04, l'installeur se gèle aux trois quarts de la copie des fichiers. Le pointeur de la souris bouge, mais l'interface graphique ne réagit plus. L'heure n'avance plus. Le diaporama des fonctionnalités essentielles d'Ubuntu (lecteur multimédia, communauté, accessibilité, etc.) ne se déroule pas. Sur l'hôte, un iotop
montre que la machine virtuelle écrit toujours sur son disque dur. Si l'on attend la fin des écritures puis que l'on redémarre la machine virtuelle, le système Ubuntu installé fonctionne parfaitement. C'est donc uniquement un problème d'interface graphique gelé.
Dans virt-manager, je choisis bien « Ubuntu 18.04 LTS » (j'ai pas plus récent) comme système d'exploitation, car je sais que ça active / désactive des paramètres en douce et que ça conseille des valeurs plutôt sensées pour la quantité de RAM et autres. J'alloue deux cœurs CPU et 2 Go de RAM à la machine virtuelle. Allouer 4 Go de RAM (le reste demeure inchangé) change rien. J'utilise un disque dur VirtIO de 20 Go dynamique, rien de folichon.
Par le plus grand des hasards, j'ai trouvé une solution : il faut changer le modèle de CPU de la machine virtuelle. Par défaut, « copier la configuration du processeur de l'hôte » est coché dans la rubrique « Configuration » de l'item « Processeurs » dans les paramètres de la machine virtuelle. Mais, si l'architecture du CPU hôte n'est pas disponible, virt-manager va en choisir une autre lors du démarrage de la machine virtuelle. Sur mon ordinateur équipé d'un Intel Core i5-4200M (architecture Haswell), virt-manager choisit une architecture « Haswell-noTSX ». Sur mon ordinateur équipé d'un Intel Core i5-7300HQ (architecture Kaby Lake), virt-manager choisit une architecture « Skylake-client ». Dans les deux cas, l'interface graphique de l'installeur d'Ubuntu 20.04 se fige.
Dans les deux cas, choisir un modèle de CPU « kvm64 » ou « IvyBridge » (sur le i5-7300HQ) résout ce problème.
Hier, via mon emploi, j'ai découvert anaconda, une distribution python toute intégrée plutôt axée sur le calcul scientifique / la fouille de masses de données / les réseaux de neurones, etc. Elle vient avec sa propre version de python (et, comme elle la met prem's dans le PATH, cette version l'emporte sur celle du système…), son propre gestionnaire de paquets et d'environnements (conda), et des tas d'autres choses. Attention si tu veux utiliser miniconda (implémentation plus légère de conda) à la place d'anaconda : certains logiciels font la différence et refusent de s'exécuter…
Je me demande : dépôts apt, dépôts yum, snap, flatpak, appimage, PEAR, CPAN, PyPI, npm, yarn, CTAN, forge Puppet, Docker Hub, etc., etc. Et conda qui fait le même boulot que pip… Quand est-ce qu'on a foiré ?
Bien sûr, je comprends : diversité, absence de centralisation critique (je vais nuancer ce point), réponse à des besoins différents notamment en termes de temporalité (cycle de vie), d'acceptation des paquets, et de fonctionnalités.
Mais, quand même quoi… Ça nous fait revenir au principe "télécharger tel logiciel depuis ici, tel autre logiciel depuis là"… Comme sous winwin où il faut se rendre sur le site web de chaque éditeur (même s'il existe des embryons de réponse comme Ninite).
Les éditeurs de logiciels sont implicitement invités à publier dans tous les types de dépôts compatibles avec leur techno (distribution GNU/Linux, langage, etc.). Je pense au xkcd 927 sur les standards… C'est juste intenable, peu d'éditeurs vont s'amuser à ça, et surtout pas les petits…
Quand avons-nous foiré ?
Rappel : si une instruction blacklist <nom_module>
ajoutée dans /etc/modprobe.d/blacklist.conf
(ou autre fichier .conf dans le même dossier) n'empêche pas le chargement d'un module dans le noyau Linux, on peut utiliser l'instruction install <nom_module> /bin/true
. J'avais oublié.
Quelle différence ? Un module a un nom présentable (genre « uvcvideo ») et des noms techniques qui correspondent aux matériels pris en charge par le module (exemple : « usb:v0416pA91Addcdscdpic0Eisc01ip00in* » est la désignation technique d'un ensemble de caméras USB pris en charge par le module uvcvideo).
blacklist
a pour effet d'inhiber les noms techniques. Donc, quand Linux détecte un matériel, il cherche dans les modules, il ne trouve pas de nom qui correspond au matériel, donc il ne charge pas le module (pourtant présent sur le système), donc le matériel n'est pas activé / pris en charge. En revanche, si le module est désigné par son nom présentable par un autre module ou par l'administrateur système (modprobe <nom_module>
), alors il sera chargé.
install
permet de faire exécuter une commande au lieu de charger un module. Tout le temps. Même si le module est appelé par son nom présentable par l'adminsys ou par un autre module.
Commande pour vérifier que modprobe
a bien pris en compte une configuration déposée dans /etc/modprobe.d/
: modprobe --showconfig
. C'est très verbeux, donc il faut y aller à coup de grep
.
Il n'est pas forcément nécessaire de reconstruire l'initrd (avec update-initramfs -vuk <version_noyau>
) après l'exclusion d'un module. C'est utile uniquement si l'initrd est susceptible de charger ledit module, donc plutôt sur les modules de matériels (pas vboxnetflt, le module "réseau pont" de VirtualBox, par exemple) nécessaires au boot (pas uvcvideo pour une caméra USB, par exemple).
Il reste une semaine pour financer une série de vidéos documentaires dont chaque épisode d'une heure mettrait en avant une alternative (dite utopie) qui existe quelque part dans le monde. Des vidéos dont des entretiens permettent de se faire une idée du projet.
Série produite par les personnes de #Datagueule qui ont déjà eu recours au financement participatif pour leur film Démocraties(s) ?.
Je trouve l'idée excellente : prendre connaissance de ce qui se fait ailleurs, apprendre de ce qui fonctionne ou non, voir que des alternatives fonctionnent à grande échelle, découvrir des façons de faire qui, à titre individuel, nous correspondent mieux, etc.
Bien joué pour l'analyse du problème. :)
Le PC-P de @Lenny tout comme le mien ont une partition Ext4 chiffrée ! Or mon PC Fixe a une partition en clair et il faut savoir qu'une partoche Ext4 en claire permet des chemins de fichiers de 255 caractères tandis qu'une Ext4 chiffrée est limitée à 143 caractères ! Le voilà notre coupable...
Quel procédé utilises-tu pour chiffrer ta partition ext4 ?
Pour ma part, j'utilise dm_crypt+luks et je peux utiliser les 255 octets (oui, octets, pas caractères : si tu mets un caractère Unicode dans un nom de fichier, tu perds 2 octets alors qu'un seul caractère est affiché) autorisés par ext4 pour un nom de fichier. La longueur maximale du chemin d'un fichier permise par ext4 est de 4 096 octets. C'est logique que dm_crypt ne réduise pas cette limite d'ext4 car il se place au-dessous de tout système de fichiers.
J'en déduis que t'utilises probablement une surcouche cryptographique aux systèmes de fichiers comme EncFS ou eCryptfs. La limite que tu rencontres viendrait donc de cette surcouche cryptographique, pas du fait que tu utilises de la crypto (regarde, j'en fais et je conserve la limite de 255 octets).
Grâce à toi, j'ai découvert qu'ext4 propose le chiffrement natif. J'ai essayé viteuf : c'est bien bien bien le bazar. La taille maximale du nom d'un fichier est toujours de 255 caractères.
Résumé : ce shaarli est pour les noobs du bricolage dans mon genre. Si l'intensité lumineuse d'une ampoule LED fluctue avant de rendre l'âme prématurément, alors il y a très probablement un faux contact quelque part, soit à l'intérieur de la douille (entraînant l'oxydation des broches de la LED, ce qui, à terme, empêche le courant de passer), soit à l'extérieur de la douille, soit du côté du domino, soit…. Ce faux-contact est amplifié / réduit par l'action de la chaleur (d'où la fluctuation incompréhensible de l'intensité de l'ampoule). Il faut changer la douille ou le domino. Si tu dois changer la douille et que t'es aussi peu à l'aise que moi en bricolage, achètes une douille avec les fils pré-dénudés. N'oublie pas de désarmer le disjoncteur responsable du circuit. Le reste va bien se passer.
En août 2019, je change une ampoule dans ma salle de bain. Il s'agit d'une ampoule LED avec un culot GU5.3 (ampoule avec des broches de taille intermédiaire). Elle est placée dans un spot tout en métal et orientable encastré dans un faux plafond / plafond suspendu.
Pour changer l'ampoule d'un tel spot, il """"suffit"""" (en pratique, c'est bien galère…) de retirer la tige en métal qui se trouve sur la façade de l'ampoule (il faut presser les """"languettes" qui ressortent). Ça sert à rien de retirer le spot du plafond (car, au final, il faudra forcément jouer avec la tige sus-mentionnée). Je n'avais pas compris ça, donc j'avais tout démonté. Cela avait cassé (enfin, je croyais…) l'un des deux ressorts qui tiennent le spot plaqué contre le faux plafond depuis l'intérieur (le spot est attiré par la gravité, les ressorts font pression sur le Placo pour y résister). (Pour les curieux, c'est moi qui ai remis viteuf le ressort sur le spot avant de prendre la photo, mais il ne tient plus, il ne fait plus pression.)
En novembre 2019, pendant plusieurs jours l'intensité lumineuse de cette même ampoule fluctue : diminue, augmente, diminue longtemps, petit pic de retour à la normale, rechute, etc. Puis elle cesse de fonctionner. Une durée de vie de trois mois, c'est quand même très très court, même en tenant compte des astuces des fabricants pour en réduire la durée de vie (à ce sujet, voir le documentaire Prêt à jeter (voir mes notes)). D'autant que l'autre ampoule de la pièce fonctionne toujours, alors qu'elle a une durée d'utilisation égale à celle de l'ampoule défectueuse et de sa prédécesseure…
Je re-démonte le spot du plafond. L'une des broches de l'ampoule a glissé et n'est plus totalement enfoncée dans la douille. Je mets ça sur le compte du poids du spot (ben oui, il tient dans le plafond grâce à un seul ressort depuis août). Je remets tout en place. Ça re-foire quelques minutes après…
Rétrospectivement, il y avait des indices concernant l'origine du problème : le fait que tripoter la douille fasse s'allumer ou s'éteindre l'ampoule, le fait que la broche de l'ampoule qui glisse hors de la douille soit oxydée, etc. Mais, sur le coup, je ne percute pas et je décide d'abandonner : il me reste une ampoule fonctionnelle dans la pièce, ça me suffit amplement, hop, problème suivant.
Mi-mai 2020, pouf, le spot tombe sur le sol. Le seul ressort restant a faibli. Je décide de m'intéresser au problème car j'ai désormais un trou dans mon plafond (l'emplacement du spot) et je crains que la vapeur d'eau abîme le Placo dont la face intérieure ne doit pas être traitée pour résister à l'eau (la douche est à moins de 10 cm de ce spot). Comme à chaque fois que je comprends rien au monde qui m'entoure, je fais appel à professeur Johndescs en lui envoyant une série de clichés englobant tout le circuit, de l'ampoule au domino en passant par le spot et la douille.
Concernant le ressort qui a sauté en août 2019, il suffit de le réarmer. Sa tige externe doit être plaquée contre l'intérieur du spot. Sa tige interne doit être plaqué contre l'extérieur du spot. Bref, prendre exemple sur le ressort restant. J'étais convaincu qu'il manquait des pièces qui auraient sauté en même temps et que je n'aurai pas retrouvé, mais, non, ça juste fonctionne !
Concernant la fluctuation de l'intensité lumineuse / extinction impromptue de l'ampoule, son origine est très probablement un faux contact causé et amplifié par la chaleur. Sur les photos, Johndescs repère qu'un des plots du domino est un peu bruni. Il pense à un faux contact de ce côté-là et me préconise de tirer sèchement sur le câble vissé sur ce plot. Pas de chance, le câble ne me reste pas entre les mains, donc, a priori, le faux contact n'est pas ici.
Côté douille, on remarque un fil un peu dénudé (hou le coquinou !). En le tripotant, je peux l'enfoncer plus ou moins profond dans la douille, et dans certains cas, l'ampoule s'allume et reste allumée tant que je maintiens la position. OK, le faux contact est ici. La broche de l'ampoule qui est oxydée est justement en contact avec ce fil électrique. Tout s'explique. Les fils électriques étant soudés à l'intérieur de la douille, on ne peut pas les ré-ajuster nous-même, il faut remplacer la douille.
J'achète une douille GU5.3.
Je sais dénuder du câble réseau avec la pince dédiée, mais sans pince, je ne vois pas comment dénuder des fils électrique, sauf à utiliser au couteau. Et vu ma maîtrise, c'était plutôt mon doigt qui allait finir dénudé. Coup de chance, ils étaient pré-dénudés !
Y'a plus qu'à désarmer le disjoncteur du circuit lumineux, puis dévisser les deux fils de la douille côté domino puis insérer l'un des fils de la nouvelle douille (j'ai inséré un peu plus profond que le pré-découpage, genre 2 mm en plus, car ça se voyait qu'il manquait ça) puis visser le plot tout en maintenant fermement le fil, puis faire la même chose avec le deuxième fil. Si quelques filaments du fil n'entrent pas, ou pas totalement, ce n'est pas grave vu qu'il s'agit d'un fil qui va transporter 50 tout petits watts…
J'apprends deux choses :
Je remercie les gus qui ont posé l'électricité chez moi : tous les points lumineux de ce secteur (plusieurs pièces, donc) sont sur un même disjoncteur. La pièce où je dois intervenir n'ayant pas de fenêtre, et la lumière du jour qui arrive par rebond étant insuffisante, j'aurais bien aimé pouvoir profiter de la lumière artificielle de la pièce alentour… Mais non. Je n'ai pas de lampe-torche, donc j'ai bricolé au flash de mon ordinateur de poche. :D
Reste à ré-armer le disjoncteur puis à actionner l'interrupteur. Johndescs m'avait prévenu : si l'un des fils touche celui opposé, ça fera un court-circuit et le disjoncteur sautera, c'est le pire qui puisse t'arriver (ce qui m'avait motivé à agir : si le plus grand risque est celui-ci, ça va quoi). Hé bah même pas : ça fonctionne. \o/
Bientôt une semaine que ça chemar. J'ai changé la douille d'un point lumineux pour la première fois et je suis très fier de moi. \o/
J'ai voulu signaler leur problème DNS à la Banque Populaire et à la Caisse d'Épargne, mais impossible de leur envoyer un email.
Le serveur emails pour tous les domaines dont font partie les adresses emails techniques trouvées dans les bases de données publiques accessibles avec le protocole whois (et bientôt RDAP ?) est mail-in.bpce-it.fr.
Celui-ci refuse mes emails pour le motif suivant : « 550 #5.7.5 DKIM unauthenticated mail is prohibited. If you believe that this failure is in error, please refer to https://tools.ietf.org/html/rfc6376 or contact postmaster [à] bpce-it.fr for more information via alternate means. »
J'ai bien envoyé mon courriel via le seul serveur emails autorisé pour mon domaine.
Étrangement, un email envoyé par Stéphane depuis un domaine qui n'implémente pas DKIM passe très bien. Cela illustre que DKIM n'est pas obligatoire pour communiquer avec BPCE. Peut-être qu'une signature DKIM devient obligatoire quand la réputation de l'adresse IP ou du réseau du serveur emails émetteur est questionnable ? Mon serveur est hébergé chez OVH, émetteur de spam malgré lui, alors que celui de Stéphane est dans un réseau IP de bonne réputation.
Encore plus étrange : mes emails sont bien signés en suivant la norme DKIM. Peut-être y a-t-il un problème technique de mon côté ?
Je m'envoie un email à une autre adresse que je gère et qui met en œuvre la validation DKIM : à l'arrivée, les entêtes de l'email confirment qu'il comporte bien une signature DKIM et que celle-ci est valide : « Authentication-Results: viki.guiguishow.info; dkim=pass (3072-bit key; secure) header.d=[CENSURE] header.i=@[CENSURE] header.b="PGTxFJuT"; dkim-atps=neutral ».
Il existe des testeurs de serveur emails. J'en ai utilisé trois (plus que ça en vrai, mais certains ne fonctionnent plus) : https://www.mail-tester.com/ , auth-results [à] verifier.port25.com , et ping [à] stamper.itconsult.co.uk . Tous les trois confirment la présence et la validité d'une signature DKIM dans mes emails sortant. Il semble donc que le problème est du côté de BPCE.
De plus, j'ai configuré une politique ADSP souple, « dkim=all » qui signifie "normalement, tout courriel émanant de ce domaine sera signé, mais si ce n'est pas le cas, ne le jete pas à la corbeille, stp". Évidemment, elle a la valeur d'un conseil : le récepteur fait bien ce qu'il veut.
Pour signer les entêtes de mes emails sortants, mon serveur emails utilise une clé RSA 3072 bits. C'est la taille recommandée par l'ANSSI (document B1) pour mettre sérieusement en pratique de la cryptographie au long terme. Mais, c'est vrai que, pour signer des emails dans le cadre de la lutte anti-spam (c'est l'objet de DKIM), une clé de taille inférieure serait suffisante. Néanmoins, début 2018, le RFC 8301 a mis à jour le RFC de DKIM (6376) : « Signers SHOULD use RSA keys of at least 2048 bits. Verifiers MUST be able to validate signatures with keys ranging from 1024 bits to 4096 bits, and they MAY be able to validate signatures with larger keys. ».
Je conçois bien un problème à ce niveau-là : ma clé est rejetée en raison de sa taille, donc mon email est considéré comme étant non signé, donc, soit la réputation du réseau de mon serveur emails joue contre lui, soit BPCE-IT est intransigeant avec les domaines qui ont une politique ADSP fut-elle souple. Cette hypothèse a été confirmée par BPCE-IT : « […] en raison d’une limitation de notre produit actuel, nous ne pouvons pas vérifier de signature au-dessus de 2048 bits et il ne connait pas la notion de politique ADSP. Ainsi la signature 3072 bits est traitée en erreur […] ».
A priori, ce souci a été signalé à BPCE-IT par Stéphane, merci. :)
Après la publication de l'article Le problème DNS de la semaine par Banque Populaire, Stéphane et moi-même avons lu des témoignages sur Twitter relatant qu'un problème similaire serait en cours à la Caisse d'Épargne depuis, a priori, le même laps de temps : ici, là-bas, là, encore là, ici aussi, là-bas, et puis ici et enfin là.
Banque Populaire et Caisse d'Épargne faisant partie du même groupe, BPCE, ce n'est pas surprenant.
Nous avons déjà posé les définitions et exposé le contexte dans l'article sur le problème DNS à la Banque Populaire, donc passons directement à la résolution du nom www.caisse-epargne.fr à la main :
$ dig @d.nic.fr www.caisse-epargne.fr
[…]
;; AUTHORITY SECTION:
caisse-epargne.fr. 172800 IN NS ns1.gcetech.net.
caisse-epargne.fr. 172800 IN NS ns2.gcetech.net.
[…]
$ dig @91.135.176.225 www.caisse-epargne.fr
[…]
;; AUTHORITY SECTION:
www.caisse-epargne.fr. 86400 IN NS nslp2.gcetech.net.
www.caisse-epargne.fr. 86400 IN NS nslp1.gcetech.net.
[…]
$ dig @91.135.188.225 www.caisse-epargne.fr
[…]
;; AUTHORITY SECTION:
www.caisse-epargne.fr. 86400 IN NS nslp2.gcetech.net.
www.caisse-epargne.fr. 86400 IN NS nslp1.gcetech.net.
[…]
$ dig @91.135.177.240 www.caisse-epargne.fr
[…]
;; ANSWER SECTION:
www.caisse-epargne.fr. 120 IN A 91.135.178.85
[…]
$ dig @91.135.189.240 www.caisse-epargne.fr
[…]
;; ANSWER SECTION:
www.caisse-epargne.fr. 120 IN A 91.135.178.85
[…]
Constat ?
Jusque-là, le problème reste entier. Continuons à creuser.
Les serveurs DNS qui font autorité pour la zone www.caisse-epargne.fr, nslp1.gcetech.net. et nslp2.gcetech.net. , répondent NODATA (cette information n'existe pas dans le type demandé, mais des informations d'un autre type existent pour le nom demandé) aux requêtes DNS de types NS et SOA :
$ dig @91.135.177.240 SOA www.caisse-epargne.fr
[…]
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42171
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
[…]
;; AUTHORITY SECTION:
caisse-epargne.fr. 60 IN SOA P-SR1-IGTM1.big.caisse-epargne.fr. hostmaster.P-SR1-IGTM1.big.caisse-epargne.fr. 3338 10800 3600 604800 60
[…]
$ dig @91.135.189.240 SOA www.caisse-epargne.fr
[…]
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5107
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
[…]
;; AUTHORITY SECTION:
caisse-epargne.fr. 60 IN SOA P-SR1-IGTM1.big.caisse-epargne.fr. hostmaster.P-SR1-IGTM1.big.caisse-epargne.fr. 3338 10800 3600 604800 60
[…]
$ dig @91.135.177.240 NS www.caisse-epargne.fr
[…]
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18648
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
[…]
;; AUTHORITY SECTION:
caisse-epargne.fr. 60 IN SOA P-SR1-IGTM1.big.caisse-epargne.fr. hostmaster.P-SR1-IGTM1.big.caisse-epargne.fr. 3338 10800 3600 604800 60
[…]
$ dig @91.135.189.240 NS www.caisse-epargne.fr
[…]
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3758
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
[…]
;; AUTHORITY SECTION:
caisse-epargne.fr. 60 IN SOA P-SR1-IGTM1.big.caisse-epargne.fr. hostmaster.P-SR1-IGTM1.big.caisse-epargne.fr. 3338 10800 3600 604800 60
[…]
Cela est totalement contraire à la norme DNS et cela peut bloquer certaines implémentations de récursifs DNS (voire certaines versions d'une même implémentation), ce qui explique le côté aléatoire et partiel de la panne.
Mais, cette fois-ci, l'impact de ce choix technique est plus subtil :
$ dig @1.1.1.1 A www.caisse-epargne.fr
[…]
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 15150
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
[…]
$ dig @80.67.169.12 A www.caisse-epargne.fr
[…]
;; ANSWER SECTION:
www.caisse-epargne.fr. 120 IN A 91.135.178.85
[…]
;; Query time: 2302 msec
[…]
$ dig +short @80.67.169.12 version.bind chaos txt
"unbound 1.9.0"
$ dig @80.67.169.40 A www.caisse-epargne.fr
[…]
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
$ dig +short @80.67.169.40 version.bind chaos txt
"unbound 1.6.0"
Le comportement du service de résolution des noms de CloudFlare reste inchangé.
En revanche, si aucun des serveurs DNS récursifs du FAI FDN parvient à résoudre www.banquepopulaire.fr, l'un d'eux, un Unbound en version 1.9 parvient à résoudre le nom www.caisse-epargne.fr. On notera qu'il met environ 2 secondes pour ce faire, ce qui est très long et révélateur d'un problème. Le serveur Unbound en version 1.6 ne parvient pas à résoudre www.caisse-epargne.fr.
Cela explique pourquoi je n'ai pas perçu que la Caisse d'Épargne était également impactée quand j'ai diagnostiqué le problème de la Banque Populaire : mon Unbound local transmet toutes mes requêtes DNS aux deux serveurs DNS récursifs de FDN (afin de profiter de la mutualisation de cache, donc de réduire la charge sur les serveurs DNS qui font autorité de tous les services Internet que j'utilise) et comme l'un répond, j'accède sans problème au site web de la Caisse d'Épargne.
Quelle est donc cette implémentation de serveur de noms DNS qui accepte de charger une zone DNS dépourvue d'enregistrements de types SOA et NS ?
$ dig +short @nslp1.gcetech.net. version.bind chaos txt
"none"
$ dig +short @nslp2.gcetech.net. version.bind chaos txt
"none"
Ça ressemble quand même fortement à un BIND qu'on aurait configuré avec « version "none"; » au lieu de « version none; », mais rien permet de justifier cette affirmation. Comme à la Banque Populaire, il est très probable qu'une (ou plusieurs) middlebox, équilibreur de charge ou non, soit présente entre ces serveurs DNS et Internet et qu'elle soit responsable de cette panne partielle par altération des réponses du serveur ou filtrage de certaines requêtes.
Notons que la Caisse d'Épargne n'a pas fait la même erreur que la Banque Populaire : les serveurs DNS qui font autorité pour www.caisse-epargne.fr, nslp1.gcetech.net. et nslp2.gcetech.net. répondent en UDP et en TCP :
$ dig +tcp @91.135.177.240 A www.caisse-epargne.fr
[…]
;; ANSWER SECTION:
www.caisse-epargne.fr. 120 IN A 91.135.178.85
[…]
$ dig +tcp @91.135.177.240 NS www.caisse-epargne.fr
[…]
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61730
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
[…]
;; AUTHORITY SECTION:
caisse-epargne.fr. 60 IN SOA P-SR1-IGTM1.big.caisse-epargne.fr. hostmaster.P-SR1-IGTM1.big.caisse-epargne.fr. 3338 10800 3600 604800 60
[…]
$ dig +tcp @91.135.189.240 A www.caisse-epargne.fr
[…]
;; ANSWER SECTION:
www.caisse-epargne.fr. 120 IN A 91.135.178.85
[…]
$ dig +tcp @91.135.189.240 NS www.caisse-epargne.fr
[…]
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61788
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
[…]
;; AUTHORITY SECTION:
caisse-epargne.fr. 60 IN SOA P-SR1-IGTM1.big.caisse-epargne.fr. hostmaster.P-SR1-IGTM1.big.caisse-epargne.fr. 3338 10800 3600 604800 60
[…]
En revanche, les équipes techniques de la Caisse d'Épargne devraient réviser la syntaxe du champ « RNAME » d'un enregistrement DNS de type SOA. Il permet d'indiquer une adresse email permettant de signaler un problème. Dans le cas de la Caisse d'Épargne :
$ dig +short SOA caisse-epargne.fr
ns1.gcetech.net. postmaster.it-ce.fr. 2020052602 21600 3600 1209600 86400
$ dig @91.135.177.240 SOA www.caisse-epargne.fr
[…]
;; AUTHORITY SECTION:
caisse-epargne.fr. 60 IN SOA P-SR1-IGTM1.big.caisse-epargne.fr. hostmaster.P-SR1-IGTM1.big.caisse-epargne.fr. 3338 10800 3600 604800 60
[…]
// Selon la convention d'usage, l'adresse emails doit donc être hostmaster@P-SR1-IGTM1.big.caisse-epargne.fr
$ dig MX P-SR1-IGTM1.big.caisse-epargne.fr
[…]
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29793
[…]
$ dig A P-SR1-IGTM1.big.caisse-epargne.fr
[…]
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 2114
[…]
// Non. L'adresse doit être hostmaster.P-SR1-IGTM1 à big.caisse-epargne.fr (il aurait fallu l'indiquer en mettant un « \. » entre « hostmaster » et « P-SR1-IGTM1 ».
$ dig MX big.caisse-epargne.fr
[…]
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 8736
[…]
$ dig A big.caisse-epargne.fr
[…]
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 51961
[…]
// Non. L'adresse n'est quand même pas hostmaster.P-SR1-IGTM1.big à caisse-epargne.fr ?! (Et si oui, même remarque que ci-dessus)
$ dig +short MX caisse-epargne.fr
5 mail-in.bpce-it.fr.
$ telnet mail-in.bpce-it.fr. 25
Trying 91.135.189.237...
Connected to mail-in.bpce-it.fr.
Escape character is '^]'.
220 mail-in.bpce-it.fr ESMTP
EHLO test.guiguishow.info
250-mail-in.bpce-it.fr
250-8BITMIME
250-SIZE 28311552
250 STARTTLS
MAIL FROM:<[CENSURE]>
250 sender <[CENSURE]> ok
RCPT TO:<hostmaster [à] P-SR1-IGTM1.big.caisse-epargne.fr>
550 #5.1.0 Address rejected.
RCPT TO:<hostmaster.P-SR1-IGTM1 [à] big.caisse-epargne.fr>
250 recipient <hostmaster.P-SR1-IGTM1 [à] big.caisse-epargne.fr> ok
RCPT TO:<hostmaster.P-SR1-IGTM1.big [à] caisse-epargne.fr>
250 recipient <hostmaster.P-SR1-IGTM1.big [à] caisse-epargne.fr> ok
QUIT
221 mail-in.bpce-it.fr
Connection closed by foreign host.
La deuxième adresse, hostmaster.P-SR1-IGTM1 [à] big.caisse-epargne.fr , est invalide puisqu'aucun serveur d'emails est défini pour ce domaine (si l'on tente d'envoyer un email, le MTA émetteur remonte légitimement l'erreur suivante : « Host or domain name not found. Name service error for name=big.caisse-epargne.fr type=AAAA: Host not found »). Vu les élements, le contenu du champ « RNAME » devrait être « hostmaster\.P-SR1-IGTM1\.big.caisse-epargne.fr
». Ça a aucun rapport avec la panne partielle dont traite cet article, mais c'est tout de même un problème de configuration.
Alors, au final, quelle est l'origine du problème ?
Difficile à dire. On le saura jamais vraiment, toute entité (société commerciale, administration, association, personne) étant toujours très réticente à faire des retours sur ses erreurs / fautes / échecs.
Je pense qu'il y a une middlebox (ou plusieurs) entre Internet et les serveurs DNS qui font autorité pour la zone DNS www.caisse-epargne.fr qui, comme tout boîtier prétendument magique ‒ qui externalise de fait la réflexion ‒ souvent imposé au service informatique par la direction afin qu'elle puisse prétendre œuvrer pour la sécurité des clients sans investir ni comprendre / maîtriser la technique sous-jacente, doit forger des réponses DNS invalides (NODATA pour les types SOA et NS).
Néanmoins, ça n'explique pas l'intégralité du problème. Pourquoi la plupart des serveurs DNS récursifs de la planète parviennent à résoudre les noms de la Caisse d'Épargne ? Les différentes implémentations de qname-minimisation amplifient-elles le problème ? Aucune idée…
Merci à Stéphane Bortzmeyer pour son aide, son soutien ainsi que sa motivation pour faire remonter ces pannes à BPCE, notamment sur Twitter.
Depuis au moins jeudi 28 mai 2020 à 22 h 45 (UTC+2), impossible d'accéder à certains sites web du groupe Banque Populaire Caisse d'Épargne :
Qu'est-ce qui ne fonctionne pas, précisément ? La résolution des noms DNS. Mon navigateur web Mozilla Firefox affiche « Recherche de […] » puis « Hum, nous ne parvenons pas à trouver ce site. ».
Comme d'habitude, Twitter fournit des témoignages dont le plus savoureux relate :
Bonjour @BanquePopulaire impossible de se connecter avec l’application sur iPhone depuis hier soir et donc de déverrouiller ma carte bancaire... C’est un problème général?
À quel moment tu t'es dit que c'est génial de débloquer une carte bancaire avec un logiciel pour ordinateur de poche ?! Tout peut foirer ! Ton ordinateur de poche peut tomber en panne, ton opérateur de téléphonie mobile aussi, un opérateur Internet de transit idem, Banque Populaire également, etc. Ce choix d'une telle dépendance à une technologie est hallucinant.
J'ai mon accès à Internet fixe chez le Fournisseur d'Accès à Internet associatif FDN et j'utilise les serveurs DNS récursifs de ce dernier. Le problème est le même depuis un serveur OVH (en utilisant les serveurs DNS récursifs d'OVH). Le service de résolution des noms de CloudFlare parvient jamais à résoudre le nom. Celui de Google y parvient plutôt souvent, mais il y a encore des ratés. Depuis un accès à Internet Orange avec un dnsmasq
local, ça fonctionne difficilement ou pas du tout.
La transmission réseau entre FDN (ou OVH ou Orange) et le réseau Banque Populaire est OK : un mtr -T -P 443 91.135.183.174
montre ni incident réseau ni perte de paquets.
Le niveau applicatif est OK : un openssl s_client -connect 91.135.183.174:443 -crlf
permet de dialoguer en HTTPS avec l'un des serveurs de la Banque Populaire. Une mesure depuis le réseau RIPE Atlas confirme cela, voire la mesure numéro 25558553.
Enfin, ajouter une association IP pour les noms www.ibps.bpaca.banquepopulaire.fr et www.banquepopulaire.fr dans mon fichier /etc/hosts
rend ces sites web parfaitement fonctionnels. Attention : utiliser ce contournement uniquement pour des tests ! Si Banque Populaire change les adresses IP de ses services, la surcharge locale rendra inaccessibles les services.
On confirme donc un problème de résolution de certains des noms DNS de la Banque Populaire.
Néanmoins, mes mesures avec le réseau RIPE Atlas montre un faible taux d'échec de la résolution DNS : mesure numéro 25556510, mesure numéro 25556573 et mesure numéro 25556574.
Effectuons la résolution DNS à la main :
$ dig @d.nic.fr www.ibps.bpaca.banquepopulaire.fr
[…]
;; AUTHORITY SECTION:
banquepopulaire.fr. 172800 IN NS dns2.bpce.fr.
banquepopulaire.fr. 172800 IN NS dns1.bpce.fr.
;; ADDITIONAL SECTION:
dns1.bpce.fr. 172800 IN A 91.135.189.110
dns2.bpce.fr. 172800 IN A 91.135.177.110
[…]
$ dig @91.135.189.110 www.ibps.bpaca.banquepopulaire.fr
[…]
;; AUTHORITY SECTION:
www.ibps.bpaca.banquepopulaire.fr. 3600 IN NS
nsisp1.i-bp.banquepopulaire.fr.
;; ADDITIONAL SECTION:
nsisp1.i-bp.banquepopulaire.fr. 300 IN A 91.135.182.250
[…]
$ dig @91.135.177.110 www.ibps.bpaca.banquepopulaire.fr
[…]
;; AUTHORITY SECTION:
www.ibps.bpaca.banquepopulaire.fr. 3600 IN NS
nsisp1.i-bp.banquepopulaire.fr.
;; ADDITIONAL SECTION:
nsisp1.i-bp.banquepopulaire.fr. 300 IN A 91.135.182.250
[…]
$ dig @91.135.182.250 www.ibps.bpaca.banquepopulaire.fr
[…]
;; ANSWER SECTION:
www.ibps.bpaca.banquepopulaire.fr. 30 IN A 91.135.183.174
[…]
$ dig @91.135.189.110 www.banquepopulaire.fr
[…]
;; AUTHORITY SECTION:
www.banquepopulaire.fr. 3600 IN NS nsisp1.i-bp.banquepopulaire.fr.
;; ADDITIONAL SECTION:
nsisp1.i-bp.banquepopulaire.fr. 300 IN A 91.135.182.250
[…]
$ dig @91.135.177.110 www.banquepopulaire.fr
[…]
;; AUTHORITY SECTION:
www.banquepopulaire.fr. 3600 IN NS nsisp1.i-bp.banquepopulaire.fr.
;; ADDITIONAL SECTION:
nsisp1.i-bp.banquepopulaire.fr. 300 IN A 91.135.182.250
[…]
$ dig @91.135.182.250 www.banquepopulaire.fr
[…]
;; ANSWER SECTION:
www.banquepopulaire.fr. 30 IN A 91.135.183.180
www.banquepopulaire.fr. 30 IN A 91.135.183.180
[…]
$ dig @k.gtld-servers.net. groupebpce.com
[…]
;; AUTHORITY SECTION:
groupebpce.com. 172800 IN NS dns1.bpce.fr.
groupebpce.com. 172800 IN NS dns2.bpce.fr.
[…]
$ dig @91.135.189.110 groupebpce.com
[…]
;; ANSWER SECTION:
groupebpce.com. 3600 IN A 151.101.194.133
groupebpce.com. 3600 IN A 151.101.2.133
groupebpce.com. 3600 IN A 151.101.66.133
groupebpce.com. 3600 IN A 151.101.130.133
[…]
$ dig @91.135.177.110 groupebpce.com
[…]
;; ANSWER SECTION:
groupebpce.com. 3600 IN A 151.101.130.133
groupebpce.com. 3600 IN A 151.101.66.133
groupebpce.com. 3600 IN A 151.101.2.133
groupebpce.com. 3600 IN A 151.101.194.133
[…]
On constate trois choses :
Jusque-là, le problème reste entier. Continuons à creuser.
Le serveur qui fait autorité pour les zones www.ibps.*.banquepopulaire.fr et www.banquepopulaire.fr , nsisp1.i-bp.banquepopulaire.fr , répond négativement aux requêtes de types NS et SOA :
$ dig @91.135.182.250 SOA www.banquepopulaire.fr
[…]
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 17798
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
[…]
$ dig @91.135.182.250 NS www.banquepopulaire.fr
[…]
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 36129
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
[…]
$ dig @91.135.182.250 SOA www.ibps.bpaca.banquepopulaire.fr
[…]
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 31905
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
[…]
$ dig @91.135.182.250 NS www.ibps.bpaca.banquepopulaire.fr
[…]
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 17813
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
[…]
Cela est totalement contraire à la norme DNS et cela peut bloquer certaines implémentations de récursifs DNS (voire certaines versions d'une même implémentation), ce qui explique le côté aléatoire de la panne.
Les serveurs DNS dns1.bpce.fr et dns2.bpce.fr répondent aux requêtes de types NS et SOA pour la zone groupebpce.com, ce qui explique que le site web corporate fonctionne là où les autres sites web ne fonctionnent pas.
Le serveur DNS nsisp1.i-bp.banquepopulaire.fr ne répond pas aux requêtes DNS émises au-dessus du protocole TCP :
$ dig +tcp @91.135.182.250 A www.banquepopulaire.fr
;; Connection to 91.135.182.250#53(91.135.182.250) for www.banquepopulaire.fr failed: timed out.
;; Connection to 91.135.182.250#53(91.135.182.250) for www.banquepopulaire.fr failed: timed out.
; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> +tcp @91.135.182.250 A www.banquepopulaire.fr
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
;; Connection to 91.135.182.250#53(91.135.182.250) for www.banquepopulaire.fr failed: timed out.
C'est, là encore, totalement contraire à la norme DNS : tout serveur DNS doit être accessible sur udp/53 et tcp/53.
Cette absence de réponse aux requêtes de types SOA/NS posera encore plus de problèmes aux récursifs DNS qui implémentent la qname minimisation, un mécanisme qu'il faut activer car il participe à la préservation de la vie privée des utilisateurs d'un serveur DNS récursif. En effet, une divergence d'interprétation de la norme existe concernant la recherche des délégations. On rappelle au passage qu'une délégation DNS ne se voit pas à l'œil nu. Exemples : bpaca.banquepopulaire.fr n'est pas délégué par banquepopulaire.fr, ibps.bpaca.banquepopulaire.fr n'est pas non plus délégué par bpaca.banquepopulaire.fr. Bref : un point entre deux labels d'un nom de domaine ne marque pas forcément une délégation. Afin d'identifier les délégations, certaines implémentations, comme Unbound, effectuent des requêtes de type A (que le serveur DNS nsisp1.i-bp.banquepopulaire.fr accepte, pour rappel), d'autres des requêtes de type NS (qui sont refusées par nsisp1.i-bp.banquepopulaire.fr).
Concernant l'amplification du problème par certaines implémentations de qname minimisation dans les serveurs DNS récursifs , le mystère continue, car :
$ dig +short @80.67.169.40 version.bind chaos txt
"unbound 1.6.0"
$ dig +short @80.67.169.12 version.bind chaos txt
"unbound 1.9.0"
$ dig +short @::1 version.bind chaos txt
"unbound 1.9.0"
$ dig +short @80.67.169.12 www.ibps.bpaca.banquepopulaire.fr
;; connection timed out; no servers could be reached
$ dig @80.67.169.12 www.ibps.bpaca.banquepopulaire.fr
[…]
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 33639
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
[…]
$ dig +short @::1 www.ibps.bpaca.banquepopulaire.fr
91.135.183.174
En clair : une même version d'Unbound œuvrant sur le même réseau IP, deux comportements différents. Que j'active ou non la qname-minimisation sur mon Unbound local (sur mon accès à Internet fixe FDN, donc), ça fonctionne. Peu importe le type de qname-minimisation, souple ou stricte.
Même chose avec un BIND9.16 sur mon accès à Internet FDN : quelle que soit la configuration retenue pour la qname-minimisation (« strict » ou « relaxed »), ça fonctionne. J'ai réussi à obtenir un « SERVFAIL » en mode « relaxed », mais je n'arrive pas à le reproduire sur demande (même en redémarrant BIND, même en le stoppant+rallumant).
Dans le sens inverse, on peut exposer que le résolver de CloudFlare implémente la qname-minimisation (source) et que, justement, il ne parvient pas à résoudre les noms de la Banque Populaire sus-mentionnés.
Bref, on peut affirmer tout et son contraire.
Mais, pourquoi les sondes du réseau RIPE Atlas ne remontent-elles pas un taux d'échec de la résolution DNS plus élevé ? Concentration des serveurs DNS récursifs utilisés. Au sein d'un même réseau, celui d'Orange par exemple, tous les clients (au sens commercial du terme) vont utiliser le même serveur DNS récursif, celui d'Orange (ou celui de Google Public DNS ou celui de CloudFlare). Si le serveur DNS récursif parvient à résoudre le nom une fois, toutes les sondes Atlas situées dans ce réseau en bénéficieront le temps du TTL (durée de rétention de l'information dans le cache du serveur récursif, 30 secondes dans le cas présent). Rappelons que les serveurs DNS récursifs de certains réseaux, comme Free, sont connus pour ré-écrire les TTL jugés courts (les ignorer, donc), ce qui permet de limiter l'ampleur de l'effet "ça marche, ça marche plus, ça marche, etc.".
Les TTL courts amplifient l'aspect "ça marche, ça marche plus".
Alors, au final, quelle est l'origine du problème ?
Difficile à dire. On le saura jamais vraiment, toute entité (société commerciale, administration, association, personne) étant toujours très réticente à faire des retours sur ses erreurs / fautes / échecs.
Je pense qu'il y a une middlebox entre Internet et le serveur DNS qui fait autorité nsisp1.i-bp.banquepopulaire.fr qui, comme tout boîtier externalisé prétendument magique imposé au service informatique par la direction afin qu'elle puisse prétendre œuvrer pour la sécurité des clients sans investir ni comprendre / maîtriser la technique sous-jacente, doit bloquer certaines requêtes DNS de manière excessive (sur-blocage). Qu'est-ce qui me fait penser cela ? L'implémentation de serveur qui fait autorité est un BIND 9.11.5-P4 (dig @91.135.182.250 CH TXT version.bind
;) ). Ce logiciel refuse de charger une zone DNS dénuée de NS/SOA (« zone [CENSURE]/IN: has 0 SOA records […] zone [CENSURE]/IN: has no NS records […] zone [CENSURE]/IN: not loaded due to errors. »), donc, si l'on a des réponses, sauf pour les types NS et SOA, c'est probablement un intermédiaire entre nous et le serveur qui les vire.
Néanmoins, ça n'explique pas l'intégralité du problème. Pourquoi deux serveurs récursifs DNS avec la même version d'Unbound ne parviennent pas au même résultat ? Pourquoi la plupart des serveurs DNS récursifs de la planète parviennent à résoudre les noms de la Banque Populaire ? Les différentes implémentations de qname-minimisation amplifient-elles le problème ? Aucune idée…
La Banque Populaire est coutumière d'une configuration DNS défectueuse.
En 2015, le nom banquepopulaire.fr était délégué à deux serveurs de noms Orange Business Services (ex Oléane) qui n'étaient pas configurés pour ce nom (on nomme ça une lame delegation). Les deux autres serveurs DNS qui font autorité étaient internes au groupe BPCE et cessaient de répondre aux requêtes (UDP et TCP) au moins une fois par semaine, et notamment le dimanche matin entre 11 h et 12 h. Amusant, non ?
Comme ces derniers jours, il y avait des tweets (notamment celui-ci), mais ça n'a pas suffit. Stéphane Bortzmeyer et moi-même avons envoyé des emails à toutes les adresses BPCE pertinentes trouvées. Il a fallu deux mois avant d'avoir un acquittement (email acquitté le 24/08) et plusieurs mois pour que le problème soit corrigé…
Merci à Stéphane Bortzmeyer de m'avoir expliqué l'origine probable de cette panne partielle. L'outil dnsviz m'avait bien pointé l'absence de réponse aux requêtes de type SOA/NS de la part du serveur nsisp1.i-bp.banquepopulaire.fr , mais je ne l'ai pas interprété correctement.
Résumé : si t'as des dépôts couleur merde au fond de la cuvette de tes toilettes qui ne partent pas avec les produits ménagers habituels, utilise un détartrant pour salle de bain. Oui, ce shaarli est pour les noobs de la vie dans mon genre.
Je nettoie la cuvette de mes toilettes avec du vinaigre blanc / d'alcool à 8 % d'acidité. J'ai beau laisser agir (plus de trente minutes / une heure), j'ai beau frotter des dizaines de minutes avec le côté grattant d'une éponge, une brosse de toilettes et même avec une brosse à dents pour les recoins, il reste pas mal de dépôts couleur merde (forcément) au fond de la cuvette, notamment dans les recoins bien pénibles à nettoyer. On dirait une espèce de pâte, un chouïa élastique.
Quand je ne comprends pas le monde qui m'entoure, j'appelle professeur Johndescs à la rescousse. Qui m'explique que c'est très probablement du tartre qui dégagera si j'utilise un détartrant.
J'achète le premier détartrant venu. Non, pas celui pour la cafetière, le lave-vaiselle et autres appareils. Celui pour salle de bain, sanitaires, robinetterie, carrelage mural, baignoire, douche, lavabo, etc. Genre ça, là. Je démonte le pulvérisateur. Je verse environ la moitié du flacon qui contient 500 ml. J'attends un quart d'heure. J'essuie le fond de la cuvette avec du PQ. je tire la chasse. Hop, la cuvette est propre. Deux fois que je fais ça et que ça fonctionne impec'. C'était donc bien du tarte…
Du coup, il est aisé de répondre à la question « pourquoi j'ai jamais eu ça avant ? ». Parce que j'ai jamais résidé aussi longtemps dans une même habitation, donc le tartre n'a pas eu l'occasion de se déposer. Parce que le taux de calcaire dans l'eau varie en fonction de la localisation géographique et que j'ai jamais habité dans cette région française avant.