Avant de se reposer sur la validation DNSSEC, il faut avoir confiance envers les serveurs DNS récursifs (resolver) que l'on utilise et sur la sécurité du chemin réseau qui nous sépare de lui.
C'est pour ça que, par défaut, le stub-resolver DNS de la libc ne demande pas la validation DNSSEC et retire le bit qui indique qu'une réponse est validée. Pour marquer notre confiance envers les récursifs que l'on utilise (et surtout celle envers le chemin qui nous sépare d'eux), il faut ajouter options trust-ad
dans /etc/resolv.conf
.
L'utilisation des enregistrements DNS de type SSHFP par le client SSH repose dessus. Sans la validation, il affiche (avec « -v ») : « found 1 insecure fingerprints in DNS ».
Vache, ça fait des années que le comportement du stub-resolver a changé et que je ne m'en étais pas rendu compte. :O
Le système de mon serveur personnel (pas celui qui héberge ce site web) est totalement chiffré (/boot est une partition indépendante même si GRUB permet de s'en passer). Au démarrage, je saisis la phrase de passe depuis le VNC proposé par l'hébergeur.
Très récemment, j'ai changé d'hébergeur. Avant mon déménagement, son VNC a été dysfonctionnel pendant quasiment une semaine. Ça a été le déclic : comment faire si je dois redémarrer mon serveur pendant une panne ou une maintenance du VNC de mon hébergeur ? Autant une panne du VNC de mon ancien hébergeur me semblait improbable ou très limitée dans le temps au nom du « too big to fail », autant une panne longue de mon nouvel hébergeur me paraît crédible. Donc il m'appartient de concevoir un plan B. (On pourra aussi argumenter qu'une connexion SSH directe sera toujours plus sécurisée que le VNC over HTTPS de l'hébergeur par la simple disparition de l'intermédiaire.)
Il est possible de demander à l'initrd de se connecter au réseau, de proposer un accès SSH (avec l'implémentation minimaliste dropbear
) et un terminal (implémentation minimaliste busybox
) qui permettent d'ouvrir le conteneur LUKS. J'avais lu ça chez Aeris il y a quelques années, mais on va adapter un peu.
apt install dropbear-initramfs
;Ajouter sa clé publique SSH dans /etc/dropbear-initramfs/authorized_keys
. L'auth par mot de passe est impossible (cela garantit la sécurité du serveur contre la force brute en cas de redémarrage inattendu suite à un plantage ou à une maintenance côté hébergeur) ;
Créer un fichier /etc/initramfs-tools/conf.d/ip
. Format : « IP=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>:<ntp0-ip>
» (via) ;
IP=192.0.2.42::192.0.2.1:255.255.255.0::eth0:off
;Reconstruire les initrd : update-initramfs -uk all
;
On fabrique un enregistrement DNS de type SSHFP ou une entrée pour le fichier known_hosts
(cela permettra d'authentifier la machine, d'être sûr qu'on causera au bon serveur SSH qui aura booté sur l'initrd). Dans les deux cas, ça nécessite de convertir la clé privée du serveur depuis le format dropbear vers une clé publique au format openssh (attention : depuis OpenSSH 8.7, il ne peut y avoir qu'un seul enregistrement SSHFP par nom, donc une seule paire de clés pour l'initrd et le système…) :
ssh-keygen -y -f /dev/stdin <<< $(dropbearconvert dropbear openssh /etc/dropbear-initramfs/dropbear_rsa_host_key -)
. Ajouter la sortie au fichier known_hosts
de la machine qui accédera au serveur ;ssh-keygen -r <FQDN> -f /dev/stdin <<<$(ssh-keygen -y -f /dev/stdin 2>/dev/null <<<$(dropbearconvert dropbear openssh /etc/dropbear-initramfs/dropbear_rsa_host_key -))
.reboot
le serveur ;dropbear
n'implémente pas toute la crypto moderne, donc, si comme moi tu blindes ta conf' client SSH, il faudra réduire tes prétentions. Cela peut se faire avec une entrée dédiée dans .ssh/config
;ssh root@<serveur>
doit fonctionner ;
Comme nous le dit le prompt, il suffit d'utiliser la commande cryptroot-unlock
. Après la saisie de la phrase de passe, le système démarrera :
~ # cryptroot-unlock
Please unlock disk sda2_crypt:
cryptsetup: sda2_crypt set up successfully
~ # Connection to 192.0.2.42 closed by remote host.
Connection to 192.0.2.42 closed.
Cela fait plus de 10 ans que j'utilise DNSSEC sur mes noms de domaine personnels. \o/
À l'époque, info. était signé mais la soumission de délégations signées n'était pas ouverte (ou pas disponible chez mon bureau d'enregistrement ‒ Gandi ‒), donc j'utilisais le registre DLV de l'ISC, et BIND ne gérait pas entièrement les clés DNSSEC ni leur renouvellement automatique (source). :D
Je gère moi-même l'hébergement de mes zones DNS (avec BIND9 et NSD) et DNSSEC (avec OpenDNSSEC).
Au global, de nos jours, c'est une affaire qui tourne sans douleur. Ça n'a pas toujours été le cas :
Visualiser / lister les prochains roulements (renouvellements) de clés DNSSEC planifiés par OpenDNSSEC : ods-enforcer rollover list
.
Forcer le renouvellement / roulement / rollover des clés (en cas de compromission, par ex.) : ods-enforcer key rollover --zone <nom_zone>
. On peut limiter à un type de clé (KSK ou ZSK) en ajoutant --keytype <KSK|ZSK>
.
Depuis le 5 juillet dernier, des épisodes inédits du jeu télévisé La Carte aux trésors sont diffusés les mercredis soirs. \o/
La disponibilité d'une semaine du replay est abusée, mais, comme d'hab, torrent est notre ami. :)
(ÉDIT DU 12/07/2023 : aujourd'hui, la dispo court jusqu'au 04/08/2023. FIN DE L'ÉDIT.)
Pour regarder en direct : yt-dlp -o - 'https://www.france.tv/france-3/direct.html' | vlc -
.
systemd-journald est conçu pour archiver puis supprimer les vieux journaux (logs) selon une politique d'occupation de l'espace de stockage. Détails ici.
Parfois, on a besoin de conserver un journal un certain temps, ni plus, ni moins. Exemple ? L'obligation de conservation des données de connexion qui, en France, pèse sur les opérateurs de communications et les hébergeurs. Elles doivent être conservées 1 an. En dessous, l'opérateur / l'hébergeur ne remplit pas son obligation. Au-delà, le traitement est illégal au regard du RGPD car dénué de base légale (l'obligation légale court pour 1 an, pas plus).
Exemple moins pertinent : avec un volumineux système de stockage, on se retrouve avec 4 Go de journaux qui peuvent donc remonter loin et être pénibles à exploiter. Mais dans ce cas, on préférera affiner la valeur des paramètres de journald.
Pour une politique temporelle de conservation, journald propose le paramètre MaxRetentionSec. Source. Délai après lequel un journal contenant des entrées plus vieilles que ce délai sera supprimé. Par défaut, sa valeur est 0 afin de mettre en œuvre uniquement une politique de conservation basée sur l'occupation disque.
Il faut également configurer MaxFileSec. Un journal ne peut pas stocker des entrées au-delà de cette durée (1 mois par défaut). Un nouveau journal sera créé (et, l'ancien, archivé, donc supprimable). Il faut la positionner à « 1day ». Ainsi, lors de la suppression d'un journal archivé, après 1 an, seules les entrées d'il y a 366 jours seront supprimées. De même, seules les entrées du jour seront dans le journal courant, le reste sera archivé. Sans ce paramètre, soit journald supprimera le 12e mois (improbable), soit il conservera 1 an et 1 mois. Dans les deux cas, ça ne répond pas au besoin.
(Cette réflexion est basée sur le fait, qu'à priori, journald efface un journal en entier, pas les entrées d'un journal qui ont dépassé la date de péremption. Sa doc' consigne, pour le paramètre MaxFileSec : « However, to ensure that not too much data is lost at once when old journal files are deleted, it might make sense to change this value from the default of one month. ». Et le manuel de journalctl
, pour l'action rotate, consigne : « Journal file rotation has the effect that all currently active journal files are marked as archived and renamed, so that they are never written to in future ».)
Conséquence logique : il faudra également modifier la valeur de SystemMaxFiles, car il y aura jusqu'à 1 an de journaux archivés chaque jour. Et il faudra désactiver la politique de conservation fondée sur l'occupation de l'espace de stockage (cf) sinon journald pourra supprimer des journaux récents si l'espace de stockage vient à manquer.
On peut aussi désactiver totalement ou partiellement journald (Storage). Il continuera à transmettre les journaux à rsyslog
(par défaut sous Debian), et on pourra les traiter à l'ancienne avec logrotate
.
systemd-journald est conçu pour archiver puis supprimer les vieux journaux (logs) selon une politique d'occupation de l'espace de stockage. Pour une politique basée sur le temps, lire ici.
Par défaut, il prend le minimum entre 10 % de la taille du système de fichiers (SystemMaxUse) et 85 % (SystemKeepFree), dans la limite de 4 Go soit min( min(10 % ; 4 Go) ; min(85 % ; 4 Go) ). 85 % car SystemKeepFree calcule ce qui doit rester libre, alors que SystemMaxUse calcule la taille maximale du journal. Les deux ne sont pas comparables directement, donc on harmonise : si 15 % doivent rester libre, 85 % peuvent être occupés et se comparent aux 10 % de SystemMaxUse.
Si la valeur de SystemKeepFree est dépassée dès le démarrage de journald, alors le plafond sera l'espace restant.
Évidemment, si tu sépares / et /var dans des systèmes de fichiers différents, journald prend en compte la taille de /var.
SystemMaxFileSize définit la taille maximale d'un fichier journal. Par défaut, 1/8e de SystemMaxUse. SystemMaxFiles définit le nombre parallèle de journaux. 100 par défaut.
L'occupation du stockage se mesure avec :
journalctl --disk-usage
et/ou
du -hs /var/log/journal
et/ou, en version prise de tête inutile :
journalctl -u systemd-journald -o json | jq 'select(.JOURNAL_PATH | test("/var/log/journal"))' 2>/dev/null | jq -s '.[-1].CURRENT_USE_PRETTY'
.
Sur tous mes systèmes Debian GNU/Linux 11 (bullseye), SystemKeepFree est calculé automatiquement pour 5 % du système de fichiers, pas 15 % comme le dit la doc'.
On peut voir ça avec :
journalctl -u systemd-journald -x
et/ou
journalctl -u systemd-journald -o json | jq 'select(.JOURNAL_PATH | test("/var/log/journal"))' 2>/dev/null | jq -s '.[-1] | .MAX_USE_PRETTY,.DISK_KEEP_FREE_PRETTY'
.Le manuel (man
) livré par Debian dit 15 %. La configuration n'est pas surchargée dans aucun des chemins donnés par la doc' de journald (on peut également vérifier avec systemd-analyze cat-config systemd/journald.conf | grep -e 'SystemMaxUse' -e 'SystemKeepFree'
). Donc, a priori, Debian change ça à la compilation. 5 %, ce n'est pas déconnant, ça correspond à l'espace réservé pour root sur un système de fichiers ext, mais ça serait mieux de l'annoncer.
Sur l'un de mes systèmes Debian GNU/Linux, une station de travail, journald dépasse la limite qu'il cale sur SystemMaxUse. Toutes les commandes permettant de mesurer l'occupation disque le montrent, y compris du
.
Dès son démarrage, il consigne que le journal dépasse la limite, mais ne prend aucune action correctrice.
Lors du démarrage, il restait, et il reste 40 % de libre sur le système de fichiers /var, donc on n'est pas dans l'hypothèse d'un dépassement de SystemKeepFree (et, toute façon, la limite a été calée sur SystemMaxUse).
J'ai 8 fichiers journaux dont 7 archives, donc il ne s'agit pas d'un unique journal courant volumineux impossible à supprimer (seuls les archives peuvent l'être). Sa taille, comme celle des journaux archivés est inférieure à SystemMaxFileSize.
Après un journalctl --rotate
, qui demande d'archiver les journaux courants, je repasse sous la limite. Donc, a priori, journald s'impose la limite au moment de l'archivage, donc la limite est SystemMaxUse + SystemMaxFileSize (source), soit, par défaut, SystemMaxUse + (1/8)*SystemMaxUse.
Je constate également qu'il y a deux journaux dans /var/log/journal : system et user-1000. Et, d'après mes observations sur mon système, chaque fragment (archive + courant) peut grossir jusqu'à 1/8e de SystemMaxFileSize, donc, forcément, ça peut dépasser SystemMaxUse
Merci Johndescs du coup de main pour démêler tout ça.
Firefox me gonfle à bloquer des téléchargements avec le motif « Fichier non téléchargé : risque de sécurité potentiel ».
about:config
, dom.block_download_insecure
=> false.
C'est censé gueuler lors d'un téléchargement en HTTP (sans TLS), mais ça semble aussi dépendre de la source : un .deb depuis les serveurs de Debian, ça couine ; le même .deb depuis mon serveur perso, toujours en HTTP, ça passe.
Ça ne fait que le énième paramètre Firefox à changer…
Une administration a un mois pour informer la CADA de la suite qu'elle va donner à une demande d'avis dans le cadre d'une communication de documents.
Dans son rapport d'activité 2021, la CADA consigne que le taux de réponse des administrations s'élève à 61,5 %, constant sur les 5 dernières années. Parmi ces réponses, 69,6 % des administrations ont fait part de leur intention de suivre au moins partiellement l'avis de la CADA, en baisse constante depuis 5 ans.
On notera que ce même article prévoit que la CADA rende son avis sous un mois. Ça n'a jamais été le cas pour moi. Le même rapport d'activité consigne un délai moyen annuel de traitement d'une demande d'avis de 82 jours en 2021.
Il est possible de demander la communication d'un certain nombre de documents détenus par une administration française. Si cette dernière s'y oppose (explicitement ou implicitement après un mois sans réponse), il est possible de saisir, dans les deux mois, une autorité administrative indépendante, la CADA, d'une demande d'avis (qui est un pré-requis pour contester le refus de l'administration au contentieux). Lire toutes les notes concernant cette procédure.
La CADA contacte alors l'administration visée afin qu'elle produise des observations (pourquoi a-t-elle refusé ?). Ces observations destinées à la CADA sont des documents administratifs… communicables (sous réserve des habituelles réserves ‒ vie privée, secrets des affaires, fiscal, défense, etc. ‒). Pré-requis : la CADA doit avoir rendu son avis (sinon, documents relatifs à une décision en cours d'élaboration, donc pas communicables). C'est le journaliste Marc Rees qui me l'avait appris (je ne trouve plus le tweet ou l'article NextInpact original, mais il y a ce tweet plus récent).
Il y a deux parties qui échangent (CADA et administration). À qui demander ? Est-il seulement possible d'adresser une demande de communication de docs à la CADA ? Oui ! Il est même possible de saisir la CADA contre un refus de communication de la CADA. :D Pour m'en assurer, j'ai cherché (et trouvé) des avis dans la base des avis de la CADA.
La CADA a répondu à ma demande de communication en me transmettant les observations produites par l'administration.
À titre d'inspiration, voici ma demande adressée à la CADA par email :
Sujet : Demande de communication de documents détenus par la CADA
Bonjour,
Je demande à la CADA de me communiquer une copie des documents suivants :
- Tous les échanges (email, courrier, etc.), toute la correspondance bidirectionnelle, entre la CADA et <CENSURE> intervenus dans le cadre de ma demande d'avis numéro <CENSURE> adressée à la CADA le <CENSURE> via son formulaire de saisine en ligne (avis rendu le <CENSURE> qui m'a été transmis le <CENSURE>). Pour les éventuels courriers postaux envoyés par la CADA, vous y joindrez toute preuve de dépôt La Poste (affranchissement, suivi LRAR, tampon La Poste, etc.) ;
L'existence de ces échanges est attestée dans le corps de l'avis rendu par la CADA, cf. PJ 1 (« en réponse à la demande qui lui a été adressée », « ce que fait valoir le président de <CENSURE> », « le président de <CENSURE> […] lui a indiqué », etc.).
Conformément à l’article L311-9, 3° du CRPA, je vous demande de m’adresser ces documents par courrier électronique à l’adresse <CENSURE>.
Cordialement.
Ce tuto reste d'actualité.
Je n'avais pas renouvelé mes clés DKIM depuis 2016. C'est fait. Ça prend moins de 15 minutes par serveur, et encore, en traînant.
Malgré un rejet dû à cela en 2020, je suis resté sur une taille de clé RSA de 3072 bits. La norme (RFC 8301 qui met à jour le RFC 6376) dit que les expéditeurs devraient utiliser une clé RSA d'au moins 2048 bits et que les destinataires doivent savoir valider une taille de clé RSA comprise entre 1024 bits et 4096 bits. Pas d'avancées cryptographiques et pas d'actualisation du référentiel de l'ANSSI, donc je ne vois pas l'intérêt de passer à la taille supérieure.
ÉDIT DU 30/12/2023 : consécutivement à une pièce jointe trop lourde, le serveur emails d'une administration m'a renvoyé mon email. Les entêtes ajoutés par lui montraient une erreur de validation de ma signature DKIM au motif d'une clé trop grosse (sans que ça soit l'origine de mon problème). J'ai décidé de passer à une clé RSA de 2048 bits. DKIM ne sert déjà à rien, ni dans la lutte contre le spam, ni pour l'acceptation d'un petit serveur par les géants de l'email, je ne vais pas en plus me mettre des bâtons dans les roues. Dommage. FIN DE L'ÉDIT DU 30/12/2023.
Liste non exhaustive triée par préférence.
Ma préférence va à kdig
, le dig
de l'implémentation DNS Knot, car il donne des informations techniques sur la négociation TLS et le dialogue HTTP (status, etc.). Paquet knot-dnsutils
dans Debian GNU/Linux.
DoT avec vérification du certificat x509 : kdig @ns1.fdn.fr +tls +tls-ca=/etc/ssl/certs/ca-certificates.crt AAAA shaarli.guiguishow.info
.
DoH avec vérif' du cert' x509 : kdig @ns1.fdn.fr +https +tls-ca=/etc/ssl/certs/ca-certificates.crt AAAA shaarli.guiguishow.info
.
À partir de sa version empaquetée dans la version 12 (bookworm) de Debian GNU/Linux (paquet bind9-dnsutils), dig
, l'outil de l'implémentation DNS BIND prend en charge DoT et DoH, mais il file aucune info sur la session TLS et les messages HTTP.
DoT avec vérif du cert' x509 : dig @ns1.fdn.fr +tls +tls-ca=/etc/ssl/certs/ca-certificates.crt AAAA shaarli.guiguishow.info
.
DoH avec vérif : dig @ns1.fdn.fr +https +tls-ca=/etc/ssl/certs/ca-certificates.crt AAAA shaarli.guiguishow.info
.
Développé en python par Bortz. Dépôt git. Tutoriel. Il n'est plus maintenu (source : échange privé avec Bortz).
La sortie est brute de décoffrage. Outil plus pour s'amuser qu'autre chose et qui ne file aucune info sur la session TLS et les messages HTTPS. Vérif' du cert' x509 effectuée de base.
DoT avec vérif' : ./remoh.py -t ns1.fdn.fr shaarli.guiguishow.info AAAA
.
DoH avec vérif' : ./remoh.py https://ns1.fdn.fr/dns-query shaarli.guiguishow.info AAAA
.
Je note les options --check
et --mandatory-level
qui testent la conformité d'un serveur DoT / DoH avec les RFC, les bonnes pratiques, etc.
La sortie est minimaliste : pas d'info, ni sur TLS, ni sur HTTPS ni sur le DNS lui-même. Codé en Rust, donc cargo
télécharge la moitié de l'Internet (317 Mo pour un binaire de 14 Mo). En revanche, a priori, la vérification du cert' x509 est effectuée de base, sans option supplémentaire, en se reposant sur OpenSSL.
DoT avec vérif' : ./dog -S @ns1.fdn.fr shaarli.guiguishow.info AAAA
DoH avec vérif' : /dog -H @https://ns1.fdn.fr/dns-query shaarli.guiguishow.info AAAA
Évidemment, toute la partie TLS peut être testée avec openssl et gnutls.
openssl s_client -connect ns1.fdn.fr:853
gnutls-cli ns1.fdn.fr:853
.
DoT = DNS over TLS (lire).
DoH = DNS over HTTPS (lire).
Explication en vidéo 1. Explication vidéo 2.
Dans les deux cas, on chiffre et on authentifie le trafic DNS entre une machine (stub resolver) / un serveur récursif local (genre Pi-hole) et un serveur récursif sur Internet.
Le but ? Si l'on utilise un serveur DNS récursif (resolver) différent de celui de son FAI afin d'échapper à différents types de filtrage (judiciaire, administratif, technique, etc.), le FAI peut voir et censurer ce trafic DNS. Donc on le chiffre et on l'authentifie (je ne parle pas d'authentifier la donnée, ça c'est le boulot de DNSSEC). (Évidemment, le FAI pourra bloquer l'adresse IP d'un récursif DoT / DoH ou en fonction du SNI… et on passera alors à Encrypted SNI, etc., etc.)
Un stub resolver (la libc de GNU/Linux, par exemple) ne sait pas utiliser DoT / DoH.
Certains logiciels savent les utiliser (Firefox, par ex.), mais alors seuls eux en bénéficient, le trafic DNS des autres logiciels reste en clair.
Comment utiliser DoT ou DoH pour tous les logiciels d'une machine ? En demandant au stub resolver (la libc de GNU/Linux) de les transférer à un intermédiaire qui, d'un côté, cause DNS, et de l'autre, DoT / DoH. Mais lequel ? (Le transfert s'effectue en mettant l'adresse IP de l'intermédiaire, y compris ::1 / 127.0.0.1 dans /etc/resolv.conf.)
systemd-resolved implémente DoT mais je souhaite éviter cette pieuvre.
(Ou tout autre serveur DNS récursif installé localement.)
Config' à mettre dans /etc/unbound/unbound.conf.d/forward.conf
(par exemple) :
server:
tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt # magasin des certificats racines, apt install ca-certificates
forward-zone:
name: "."
forward-tls-upstream: yes # activation DoT
forward-addr: 2001:910:800::40@853#ns1.fdn.fr # syntaxe : <IP>@<PORT>#<NOM> (le nom sera comparé avec ceux présentés par le serveur dans son certificat x509)
forward-addr: 2001:910:800::12@853#ns0.fdn.fr
Tout comme tonton Bortz, j'ai d'abord rencontré une erreur dans la vérification du certificat x509 : « error: ssl handshake failed crypto error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed ». openssl s_client
et gnutls-cli
validaient le certificat avec le même magasin de certificats. Puis Unbound est tombé en marche tout seul… Je l'ai réinstallé en supprimant /etc/ounbound et en vérifiant qu'il n'avait rien laissé dans /var, et ça fonctionne encore avec la conf' ci-dessus… Ce n'est pas un problème de Subject / Subjet Alternative Name, ni un problème de certificat intermédiaire non-fourni dans l'échange TLS, ni… J'ai aucune piste sérieuse.
Dans le cadre de tests de charge simulant un usage courant, je voulais que les requêtes DNS de mon système soient transférées à un récursif DNS sans mise en cache local des réponses. Or, Unbound pratique une telle mise en cache.
Tonton Bortz m'a signalé deux options censées désactiver la mise en cache dans Unbound :
rrset-cache-size: 0
msg-cache-size: 0
Mais il n'a pas testé et le manuel d'Unbound ne dit pas explicitement que ça désactive toute forme de cache. Donc ça ne me convient pas : un test doit se faire sur des bases saines.
Bortz m'a parlé de Stubby. Il est empaqueté dans Debian GNU/Linux (paquet du même nom).
Dans /etc/stubby/stubby.yml
, on s'assure d'avoir :
dns_transport_list:
- GETDNS_TRANSPORT_TLS
Et dans « upstream_recursive_servers: », on choisit ou on ajoute ses serveurs. Exemple :
upstream_recursive_servers:
- address_data: 2001:910:800::40
tls_auth_name: "ns1.fdn.fr"
- address_data: 2001:910:800::12
tls_auth_name: "ns0.fdn.fr"
C'est du YAML donc gaffe à bien respecter l'indentation.
On peut aussi pratiquer l'épinglage (le pinning) afin de s'assurer que la clé privée du serveur en face ne changera pas en douce, mais pour moi, il s'agit d'une surenchère inutile.
Je vais en parler pour DoH. Il suffit de remplacer le schéma « https:// » par « tls:// » dans le paramètre « -u » pour transmettre les requêtes DNS via DoT.
Stubby n'implémente pas DoH.
Le projet Adguard (équivalent à uBlock Origin, mais, d'après mes notes de 2016, il était ouvert à la publicité dite acceptable) propose dnsproxy. Source.
Attention : dans les dépôts Debian, c'est un tout autre logiciel qui est empaqueté sous le même nom.
On télécharge. On décompresse le binaire dans /usr/local/sbin
.
On l'utilise (il est possible de passer un fichier de configuration YAML avec --config-path
) :
sudo dnsproxy -l ::1 -l 127.0.0.1 -p 53 -u https://ns1.fdn.fr/dns-query -u https://ns0.fdn.fr/dns-query --all-servers -b [2001:910:800::40]:53 -b [2001:910:800::12]:53
Écouter sur localhost, en IPv6 et en IPv4, sur le port 53. Transférer les requêtes DNS en alternance aux serveurs ns1.fdn.fr et ns0.fr. Les noms ns(1|0).fdn.fr seront résolus en clair en utilisant les serveurs 2001:910:800::40 et 2001:910:800::12 (qui sont ns(1|0).fdn.fr).
Pour gérer dnsproxy, j'ai créé l'unit systemd suivante dans /etc/systemd/system/dnsproxy.service
:
[Unit]
Description=Proxy DoH
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/sbin/dnsproxy -l ::1 -l 127.0.0.1 -p 53 -u https://ns1.fdn.fr/dns-query -u https://ns0.fdn.fr/dns-query -b [2001:910:800::40]:53 -b [2001:910:800::12]:53
RemainAfterExit=no
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
Si Unbound refuse de résoudre des noms (même s'il est configuré pour transférer toutes les requêtes à un autre serveur DNS récursif) en consignant « error: failed to read /var/lib/unbound/root.key » dans syslog, il suffit de lancer sudo unbound-anchor -vv
. :-
J'avais configuré mes serveurs web pour écrire des journaux (accès et erreurs) par virtualhost, au sens littéral, donc deux pour l'accès HTTP à un site web, deux autres pour l'accès HTTPS au même site web.
Cette granularité m'a jamais servi en plus de dix ans. Dans mes différents emplois, nous ne faisions pas la distinction, et nous n'avons jamais regretté un manque d'information ou une difficulté à la retrouver.
Même théoriquement, je ne vois pas l'intérêt de journaliser différemment les requêtes en fonction de la couche de chiffrement. Les erreurs liées à la configuration TLS seront consignées dans l'error.log général (nginx) ou dans le premier virtualhost HTTPS avec parfois une indication dans l'error.log général (Apache httpd).
Donc, désormais, hop, deux journaux par site web (access.log, error.log), plus de discrimination en fonction de la présence ou non du chiffrement.
De même, je stockais la configuration de chaque virtualhost dans un fichier différent. Donc, un pour HTTP, un pour HTTPS (pour un même site web). Évidemment, j'incluais les directives de configuration communes depuis un fichier de config' tiers.
Là encore, ça ne m'a jamais servi, ça ne se faisait pas dans les emplois que j'ai occupés, et je n'en vois pas l'intérêt. Dans quel cas voudrais-je désactiver HTTPS sur un site web sans désactiver HTTP (ou inversement) ? Aucune idée. Si je le veux absolument, je pourrais toujours mettre un virtualhost en commentaire. C'est un poil plus chronophage que la suppression d'un lien symbolique (avec ou sans a2dissite
), mais ça cette échelle-là, compter sert à rien.
Donc, désormais, hop, un fichier de configuration par site web contenant un virtualhost HTTP et un HTTPS.
Le sujet est l'effet de contagion de la GPL, pas de faire ce qu'on « veut avec du code source libre pour le rendre propriétaire ». On parle donc d'un sous-ensemble, d'un cas minoritaire.
Payer ne résout pas le problème en cela que ça ne lève pas la contrainte posée par la GPL. Payer n'est utile dans le cas qui nous intéresse que si le code d'origine est sous une double licence privatrice, donc qu'on est sortis de la GPL et de sa contagion, donc du sujet. Mon « tu es essentiellement hors-sujet » vient de là.
De plus, si l'on prend la définition de « libre » du HV (en tout cas ce que j'en comprends de ses articles sur la GPL), la GPL a bien posé une restriction à la liberté de réutilisation du logiciel libre (qui est l'une de ses caractéristiques) puisque, dans un cas de contagion, le ré-utilisateur est marron si le code original n'est pas sous une double licence (ce qui est le cas majoritaire, peu de logiciels libres sont diffusés sous une double licence).
Jusque-là, comme lors de ma dernière intervention, je ne prends pas position, j'expose ce que j'ai compris des termes du débat.
Je suis dubitatif sur l'aspect moral de payer pour s'affranchir d'une contrainte au motif que ça contribuera indirectement au logiciel. Ça me rappelle toutes les compensations bidonnes (carbone, volet civil d'une affaire pénale, pour la perte accidentelle d'un proche, épargne salariale / partage de la valeur, etc.). L'argent résout-il tous les problèmes ? Sans compter que rien ne dit que les contributions payantes seront intégrées à la version communautaire (mais on espère que les devs pourront coder d'autres fonctionnalités avec l'argent reçu, youpi). Et que dire de payer pour pouvoir diffuser son travail dérivé.
Tu es essentiellement hors-sujet. LHV fait référence à l'effet contaminant / contagieux de la GPL (si un programme diffusé dépend, combine ou étend un ou plusieurs codes sous GPL alors ce programme doit être sous GPL), et estime que ça restreint certaines réutilisations, alors que sa définition du concept de liberté se rapproche plus de la WTFPL : n'importe qui devrait pouvoir réutiliser du code libre pour n'importe quel usage, sans conditions.
As we’ll consider below, it might be impossible to use reCAPTCHA legally under EU law, but no data protection authority has said this.
Si, si, des APD ont clairement estimé que reCAPTCHA n'est pas conforme au RGPD, notamment dans des mises en demeure. Idem pour hCAPTCHA (arrêt CJUE Schrems II, raisonnement ici).
L'auteur connaît au moins l'une des mises en demeure de la CNIL sur le sujet, donc j'imagine qu'il voudrait qu'une APD dise que reCAPTCHA est illégal en tout temps et en tout lieu. Or, au moins en droit français, une autorité administrative ne peut pas prescrire des interdictions d'ordre général, mais elle doit examiner la conformité au cas par cas. C'est au responsable de traitement (et à son DPO) de décliner des lignes directrices ou une décision de justice ou celle d'une autorité administrative pour vérifier si ses traitements de données personnelles sont conformes au RGPD à travers le temps (il y a un travail de suivi).
Après tout, tu peux légalement faire télécharger aux visiteurs de ton site web une police de caractères depuis les serveurs de Google Fonts si tu installes un reverse proxy bien configuré au milieu (ceci dit, tu iras plus vite en hébergeant ladite police en local, avec les autres fichiers de ton site web). Tu peux légalement utiliser Google Analytics sous la même condition technique (mais tes stats vont perdre tout intérêt). Tu peux légalement stocker les données chiffrées de tes clients sur du stockage à froid ricain type mamazone S3. Etc. L'enjeu, c'est les conditions de mise en œuvre.
Par simplification, on fait parfois des raccourcis comme d'affirmer que Google Analytics est illégal, car les moyens de l'utiliser légalement détruisent complètement son intérêt, donc on sait d'avance qu'environ personne s'y aventurera, donc on peut directement affirmer que son utilisation est illégale. Mais il n'est pas toujours possible d'exclure tous les cas d'utilisation d'un produit / service.
Exemple. À l'heure actuelle, les conditions d'utilisation de reCAPTCHA précisent qu'il collecte beaucoup plus de données techniques identifiantes que ce qui est nécessaire pour la sécurisation d'un formulaire web. Donc son utilisation doit reposer sur le consentement du visiteur. Or, le RGPD dispose que le refus de consentir ne doit pas entraîner de préjudice. Donc il faudrait autoriser l'envoi du formulaire web protégé à tout visiteur qui refuserait de consentir… dont les robots. Ou basculer sur une deuxième procédure de vérification. Dans les deux cas, l'intérêt d'utiliser reCAPTCHA tombe. Tant que Google ne changera pas le fonctionnement interne de reCAPTCHA, ce raisonnement demeurera intact. Et ça, c'est pour un seul grief, il reste le deuxième, le fait que des données personnelles (ne serait-ce que l'adresse IP pour télécharger le CAPTCHA) sont envoyées à une société commerciale ricaine sans garanties suffisantes (arrêt Schrems II de la CJUE, toujours). Vu les données techniques récoltées par reCAPTCHA pour son fonctionnement, il n'est pas certain qu'intercaler un reverse proxy qui supprime les données persos permette son fonctionnement. Donc il n'est pas faux d'affirmer que reCAPTCHA n'est pas conforme au RGPD. Et encore moins qu'il vaut mieux dépenser de l'énergie à s'en passer plutôt que d'essayer de le tordre, ainsi que le RGPD, dans l'espoir que ça fasse le boulot.
Autant j'arrive à comprendre les autres points autant celui-ci je n'y parviens pas. À quel moment rendre des sources libres peut-il empêcher leur emploi ?
@Timo tu aurais un exemple à me donner ?
Il s'agit de l'éternel débat autour de la GPL. Comme d'hab, tout dépend du sens que l'on donne au mot « libre ». La liberté, est-ce faire tout ce que je veux, de la manière dont je l'entends, y compris au détriment d'autrui ou est-ce plus subtile, comme choisir son carcan, etc. ?
Bug toujours présent dans la version 102.12 de Thunderbird packagée dans Debian 11. Pour SMTP, mais aussi pour IMAP.
Sérieusement… :(