5571 links
  • GuiGui's Show

  • Home
  • Login
  • RSS Feed
  • Tag cloud
  • Picture wall
  • Daily
Links per page: 20 50 100
◄Older
page 68 / 279
Newer►
  • Comment utiliser SSH sur IPv6 ? - Antichesse (o ^ω^ o)

    @GuiGui j'ai rajouté les crochets qui manquaient suite à tes conseils disponibles ici. N'hésite pas à me dire si je me trompe.

    Les crochets ne s'utilisent pas avec les adresses du réseau fe80::/10. ^^

    Sun May 3 21:53:44 2020 - permalink -
    - https://cakeozolives.com/shaarli-antichesse/?AXuVyg#zap
  • De Debian GNU/Linux Stretch à Buster

    Comme à chaque passage à une nouvelle version de Debian GNU/Linux, voici un résumé de tout ce qui a foiré ou changé quand je suis passé à Buster.

    Résumé des points qui peuvent poser problème (triés par niveau de risque) : suites cryptographiques faibles (RSA / DHE < 2048 bits, ECDSA / ECDHE < 224 bits) non prises en charge par défaut par OpenSSL (débrayable) + TLS 1.2 par défaut avec OpenSSL (débrayable), fin de la prise en charge des certificats x509 utilisant SHA-1 par OpenSSL (débrayable) et GnuTLS (non négociable), AppArmor activé par défaut, et traduction auto iptables->nftables.


    Arborescence

    /bin, /lib et /sbin n'existent plus. Il reste /usr/{bin,lib,sbin}.

    Sur un système fraîchement installé, /bin, /lib et /sbin sont des liens symboliques. Sur un système mis à jour, rien change, sauf si l'on installe et utilise le paquet usrmerge.

    Attention donc aux scripts qui contiennent des chemins absolus vers des binaires : il n'y aura pas toujours un lien symbolique sur /bin, /lib et /sbin.


    Apache HTTPd + GnuTLS

    Après la mise à jour, Apache HTTPd ne démarre plus. sudo journalctl -x -u apache2 affiche :

    apachectl[6296]: AH00526: Syntax error on line 6 of /etc/apache2/mods-enabled/gnutls.conf:
    apachectl[6296]: Could not find socache provider 'dbm', please make sure that the provider name is valid and the appropriate module is loaded (maybe mod_socache_dbm.so?).

    GnuTLS active par défaut le cache partagé des sessions TLS. Il est stocké dans le backend DBM. Soit on désactive ce cache, soit on change de backend, soit, meilleure solution, on active le module correspondant avec a2enmod socache_dbm && systemctl restart apache2.


    AppArmor

    Généralités

    AppArmor est installé et activé par défaut, sauf si apt est configuré pour ne pas installer les paquets recommandés (car AppArmor est une recommandation du noyau, pas une dépendance).

    Je n'avais pas compris un truc : pour l'instant, l'utilisation d'AppArmor par chaque logiciel est basé sur le volontariat. Si un logiciel n'a pas de profil AppArmor, alors il n'est pas embêté. Actuellement, les profils sont fournis par les paquets apparmor, apparmor-profiles, apparmor-profiles-extra, par les logiciels volontaires (exemples : bind9, ntpd, haveged, tcpdump) et par les logiciels qui ne veulent pas se faire embêter (exemple : MariaDB livre un profil vide afin de désactiver AppArmor).

    Pour voir les profils chargés et les processus contraints à un instant T, il y a la commande aa-status.


    Problème avec BIND9

    Sur mes systèmes, le seul logiciel qui a été contraint à tort par AppArmor est bind9. Dans son journal, je lisais :

    named[551]: could not configure root hints from '/var/named/zones/defaultdb/db.root': permission denied
    named[551]: loading configuration: permission denied
    named[551]: general: error: dumping master file: /var/named/zones/slave/tmp-DwqA5s4Tm6: open: permission denied

    C'est normal : le profil livré avec BIND9 (/etc/apparmor.d/usr.sbin.named) ne prévoit pas l'utilisation de /var/named. Or, je mets la configuration du serveur dans /etc/bind et le contenu servi par le serveur dans /var/named, car ce contenu est normalisé (il est le même quel que soit le serveur DNS utilisé BIND9, NSD, PowerDNS, etc.). Comme on met le contenu servi par un serveur web dans /var/wwwet la configuration de ce serveur web dans /etc/apache2 ou /etc/nginx.

    Pour débloquer la situation, on crée un profil local qui surchargera le profil par défaut. Il se nomme /etc/apparmor.d/local/usr.sbin.named et son contenu est le suivant :

    # Site-specific additions and overrides for usr.sbin.named.
    # For more details, please see /etc/apparmor.d/local/README.
    /var/named/** r,
    /var/named/zones/slave/* rw,

    Il ne reste plus qu'à recharger la conf' d'AppArmor et à redémarrer BIND9 : systemctl reload apparmor.service && systemctl restart bind9.


    Journalisation

    Je déteste que tout soit consigné dans /var/log/syslog. J'aime bien avoir un journal pour chaque logiciel. Or, AppArmor tombe dans /var/log/syslog.

    Pour remédier à ça, je crée un fichier /etc/rsyslog.d/apparmor.conf qui contient :

    if $msg contains 'apparmor' then /var/log/apparmor.log
    & stop

    Je redémarre rsyslog : systemctl restart rsyslog (un reload ne suffit pas, de mémoire).

    Pour l'archivage, je crée un fichier /etc/logrotate.d/apparmor contenant :

    /var/log/apparmor.log
    {
            monthly
            missingok
            rotate 12
            compress
            delaycompress
            notifempty
            create 640 root adm
            sharedscripts
            olddir /var/log/archives/systeme
            postrotate
                    /usr/lib/rsyslog/rsyslog-rotate
            endscript
    }


    apt

    • apt vérifie désormais que la date des fichiers d'un dépôt n'est pas dans le futur. Une option de configuration permet de revenir au comportement antérieur ;

    • L'utilisation de dépôts non-authentifiés (absence de la clé OpenPGP, par exemple) émet désormais une erreur (qu'il faut contourner avec une option de configuration), plus un avertissement ;

    • apt prend en charge nativement https. Plus besoin du paquet apt-transport-https qui contient désormais uniquement de la doc' ;

    • La prise en charge des dépôts FTP est désactivée par défaut. Debian compte éteindre ses dépôts FTP… depuis novembre 2017. Une option de configuration permet d'activer la prise en charge de FTP par apt. En ce qui me concerne, je suis passé, à regret (le "tout sur HTTP" me pose un problème éthique, car ça rend le développement de nouveaux protocoles très compliqués en fermant le jeu), à HTTP.


    deluged / deluge

    Au démarrage de l'interface deluge-gtk, on doit démarrer le démon deluged puis s'y connecter. Or, là, il ne veut plus démarrer. Aucun message d'erreur.

    On le lance en ligne de commande :

    $ deluged
    […]
    [ERROR   ] 00:41:33 rpcserver:378 [('SSL routines', 'SSL_CTX_use_certificate', 'ee key too small')]

    Il existe un rapport de bug. La clé pour communiquer avec deluged ne respecte pas les critères de robustesse appliqués par défaut par OpenSSL dans Buster (voir ci-dessous).

    Solution ? rm ~/.config/deluge/ssl/*. Une nouvelle clé sera générée et l'on pourra lancer deluged comme avant.


    Dovecot

    • Dovecot ne génère plus lui-même ses paramètres Diffie-Hellman. La directive de configuration ssl_dh_parameters_length est invalide. Il faut désormais générer nous-même nos DH avec openssl dhparam et les fournir à Dovecot. Exemple : ssl_dh = </etc/dovecot/ssl/dh_4096.pem.

    • ssl_protocols est remplacé par ssl_min_protocol. Exemple : ssl_protocols = !SSLv3 devient ssl_min_protocol = TLSv1.

    • La compression TLS est désactivée par défaut (ssl_options = no_compression), ce qui est une bonne chose vu les attaques que la compression rend possibles (CRIME).


    dnssec-trigger

    J'utilise ce logiciel depuis huit ans. Jamais un souci, rien. Mais après le passage à Buster, il refuse de démarrer :

    dnssec-triggerd[1155]: [1581725206] unbound-control[31667:0] warning: control-enable is 'no' in the config file.
    dnssec-triggerd[1155]: [1581725206] unbound-control[31667:0] error: connect: Connection refused for 127.0.0.1 port 8953
    […]
    dnssec-triggerd[10688]: error: Error setting up SSL_CTX client cert
    dnssec-triggerd[10688]: 140194432980928:error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small:../ssl/ssl_rsa.c:310:
    dnssec-triggerd[10688]: [10688] warning: unbound-control exited with status 256, cmd: /usr/sbin/unbound-control forward 80.67.169.40 80.67.169.12
    dnssec-triggerd[10688]: Traceback (most recent call last):
    dnssec-triggerd[10688]:   File "/usr/lib/dnssec-trigger/dnssec-trigger-script", line 774, in <module>
    dnssec-triggerd[10688]:     main()
    dnssec-triggerd[10688]:   File "/usr/lib/dnssec-trigger/dnssec-trigger-script", line 761, in main
    dnssec-triggerd[10688]:     Application(sys.argv).run()
    dnssec-triggerd[10688]:   File "/usr/lib/dnssec-trigger/dnssec-trigger-script", line 472, in run
    dnssec-triggerd[10688]:     self.method()
    dnssec-triggerd[10688]:   File "/usr/lib/dnssec-trigger/dnssec-trigger-script", line 556, in run_setup
    dnssec-triggerd[10688]:     self._unbound_set_negative_cache_ttl(UNBOUND_MAX_NEG_CACHE_TTL)
    dnssec-triggerd[10688]:   File "/usr/lib/dnssec-trigger/dnssec-trigger-script", line 641, in _unbound_set_negative_cache_ttl
    dnssec-triggerd[10688]:     subprocess.check_call(CMD, stdout=DEVNULL, stderr=DEVNULL)
    dnssec-triggerd[10688]:   File "/usr/lib/python3.7/subprocess.py", line 347, in check_call
    dnssec-triggerd[10688]:     raise CalledProcessError(retcode, cmd)
    dnssec-triggerd[10688]: subprocess.CalledProcessError: Command '['unbound-control', 'set_option', 'cache-max-negative-ttl:', '5']' returned non-zero exit

    On trouve deux rapports de bug : #898969 et #919256. La clé pour communiquer avec Unbound ne respecte pas les critères de robustesse appliqués par défaut par OpenSSL dans Buster (voir ci-dessous).

    Je ne suis pas parvenu à résoudre ce problème en supprimant les clés actuelles et en en générant de nouvelles, du coup, j'ai bourriné :

    • killall dnssec-trigger-panel ;

    • sudo apt-get autoremove --purge dnssec-trigger unbound unbound-anchor ;

    • sudo find / -iname '*dnssec-trigger*' + supprimer ce qui est pertinent, notamment /etc/dnssec-trigger et /etc/NetworkManager/dispatcher.d/01-dnssec-trigger-hook ;

    • sudo apt-get install dnssec-trigger ;

    • sudo dnssec-trigger-control-setup -i ;

    • sudo systemctl restart unbound dnssec-triggerd


    EasyRSA / OpenVPN

    Plusieurs options de configuration ont été supprimées dans la version 2.4 d'OpenVPN (présente dans Debian depuis Stretch) comme tun-ipv6 et tls-remote. Ce n'est pas bloquant : OpenVPN émet un avertissement et utilise l'option de remplacement.

    D'autres options seront supprimées dans OpenVPN 2.5. ns-cert-type, par exemple. Ce ne sera pas bloquant : OpenVPN émettra un avertissement et utilisera l'option de remplacement. Il n'est déjà plus possible d'émettre des certificats x509 comportant cet attribut avec EasyRSA.


    ejabberd

    Comme à chaque mise à jour majeure de Debian, la configuration d'ejabberd change pas mal : des modules qui n'existent plus / sont dépréciés, des directives de configuration qui n'existent plus, etc. :

    [warning] <0.81.0>@ejabberd_config:emit_deprecation_warning:1436 Module mod_http_bind is deprecated, use mod_bosh instead
    [warning] <0.81.0>@ejabberd_pkix:opt_type:131 Option 's2s_certfile' is deprecated, use 'certfiles' instead
    [warning] <0.81.0>@ejabberd_c2s:listen_opt_type:984 Listening option 'certfile' for ejabberd_c2s is deprecated, use 'certfiles' global option 

    La nouvelle version empaquetée de la configuration apporte également des macros qui permettent de configurer TLS pour les échanges entre serveurs et pour les échanges avec un client (certfiles, DH_FILE, TLS_CIPHERS, TLS_OPTIONS, etc.). C'est très pratique puisque ça factorise la conf'.

    Vu que je modifie peu la configuration livrée (réduction d'un cran de la verbosité du journal (4 -> 3), domaine, certificat x509, paramètres DH, suites de chiffrement TLS, pas d'auth interne, et activation du module Message Archive Management), j'ai sauvegardé mon ancienne conf', j'ai pris celle livrée par le paquet et je l'ai modifiée.

    ÉDIT DU 21/06/2020 à 19 H 30 : 1) Vu qu'on remet la configuration à zéro, il faut bien penser à désactiver, à nouveau, l'interface web en commentant le port 5280 dans la section « listen ». Par défaut, ejabberd écoute le monde entier… Si l'on veut conserver l'interface web, on peut changer la ligne « ip » de ce module afin qu'il écoute uniquement en local. 2) Ça ne date pas de Buster, mais epmd, un composant erlang dont dépend ejabberd, écoute le monde entier sur le port tcp/4369. Ça sert à agréger plusieurs serveurs et à piloter le serveur avec ejabberd. J'ai écrit un article pour configurer epmd afin qu'il écoute uniquement en local car cela se fait du côté de systemd, pas (plus ?) depuis la configuration d'ejabberd, contrairement à ce que prétend la doc' d'ejabberd. FIN DE L'ÉDIT DU 21/06/2020 à 19 H 30.


    Firefox / Thunderbird

    (Ce point a aucun rapport avec Debian Buster, mais Buster est l'ocassion de faire un rappel.)

    DNS over HTTP (DOH) est en cours de généralisation. Il y a de bonnes raisons de ne pas vouloir utiliser DoH Pour le désactiver dans Firefox et dans Thunderbird (qui partage une grande partie de son code avec Firefox), on affecte la valeur « 5 » à la clé de configuration « network.trr.mode » dans « about:config » (ou menu « Édition » -> « Préférences » -> « Avancé » -> « Éditeur de configuration », pour Thunderbird). On peut aussi configurer cela plus finement comme l'expose l'article pointé.


    GnuPG

    Suite à l'attaque de 2019 contre les serveurs de clés consistant à saturer une clé de signatures, le projet GnuPG a choisi d'appliquer par défaut la politique "recevoir uniquement ses propres signatures depuis les serveurs de clés". Debian suit ce changement.

    Je trouve que c'est une idiotie. Lire cet avis.


    GnuTLS

    On passe de la version 3.5.X à la version 3.6.X. Le principal changement est que SHA-1 n'est plus un algorithme de hachage convenable quand il est utilisé dans le cadre d'une signature de certificat, donc sa prise en charge dans ce contexte a été anihilée à la compilation. Les outils de manipulation LDAP (ldap-utils), qui utilisent GnuTLS, foireront sur un certificat SHA-1, par exemple.


    hash-slinger

    hash-slinger n'est pas empaqueté dans Buster à cause d'une dépendance à python3-m2crypto non satisfaite.

    La version de hash-slinger qui utilise python2 que t'as pu installer avant de mettre à jour ton système pourrait ne pas fonctionner dans certains cas à cause de l'obsolescence de la bibliothèque TLS. Exemple :

    tlsa --verify --port 25  <serveur>
    Traceback (most recent call last):
      File "/usr/bin/tlsa", line 774, in <module>
        sslStartTLSConnect(connection, (str(address), int(args.port)), args.starttls)
      File "/usr/bin/tlsa", line 251, in sslStartTLSConnect
        ret = connection.connect_ssl()
      File "/usr/lib/python2.7/dist-packages/M2Crypto/SSL/Connection.py", line 293, in connect_ssl
        return m2.ssl_connect(self.ssl, self._timeout)
    M2Crypto.SSL.SSLError: wrong version number

    On remarque la présence d'autres bugs. Exemple :

    $ tlsa --create --usage 3 --selector 0 --mtype 1 --certificate mycertfile.pem <nom_machine>
    Could not verify local certificate: no start line (Expecting: CERTIFICATE).
    Traceback (most recent call last):
      File "/usr/bin/tlsa", line 889, in <module>
        genRecords(args.host, args.protocol, args.port, chain, args.output, args.usage, args.selector, args.mtype)
    NameError: name 'chain' is not defined

    Heu ? Osef de la chaîne de certificats, on veut un usage 3 (mettre dans le DNS le seul certificat du serveur). Si l'on regarde le code :

    chain = connection.get_peer_cert_chain()
    genRecords(args.host, args.protocol, args.port, chain, args.output, args.usage, args.selector, args.mtype)

    Heu ? Osef de récupérer le certificat auprès du pair c'est-à-dire du serveur puisqu'on le passe en paramètre (--certificate mycertfile.pem). C'est un bug connu.



    Mieux vaut utiliser la version du dépôt git officiel du projet. Néanmoins, elle utilise la version 3 de Python. Donc il faut installer le module M2Crypto (sinon on aura l'erreur ModuleNotFoundError: No module named 'M2Crypto').

    La compilation du module M2Crypto nécessite swig, donc on l'installe : sudo apt-get install swig.

    On installe le module M2Crypto pour Python 3 : sudo pip3 install m2crypto.

    On récupère hash-slinger : git clone https://github.com/letoams/hash-slinger.

    On l'installe : cd hash-slinger && sudo make install.


    ifupdown

    • Une interface VLAN marquée « allow-hotplug » monte en même temps que l'interface physique parente quand celle-ci est branchée ;

    • Le traitement des interfaces est désormais parallélisé. Attention aux scripts pre-up, post-up, etc.

    • On peut désormais appliquer une regex minimaliste sur le nom / l'adresse MAC / le type d'une interface (exemple : « /eth* ») et lui donner un surnom qu'on peut réutiliser par la suite (exemple : « /eth*/=foo »).


    iptables / ebtables / arptables

    iptables (iptables-nft de son vrai nom), ebtables (ebtables-nft) et arptables (arptables-nft) utilisent désormais le sous-système noyau nf_tables au lieu de xtables. Le but est de préparer la migration d'iptables (et co) vers nftables qui aura prétendument lieu dans la prochaine version stable de Debian (je n'y crois pas : la commande ip (remplaçante de ifconfig, route, vlan et d'autres) et la commande ss (remplaçante de netstat) ont plus de 10 ans, comme nftables, et il ne s'est rien passé malgré les menaces de déprécier ifconfig et compagnie).

    La syntaxe des règles iptables ne changedonc pas, grâce à iptables-nft (et compagnie) qui effectue la conversion en douce, mais il faudrait migrer vers nftables.



    Si l'on veut migrer, iptables-translate et iptables-restore-translate permettent de traduire les règles existantes. iptables-translate pour traduire une règle, iptables-restore-translate pour traduire un fichier de règles (obtenu avec iptables-save, par exemple). Attention : il n'y pas de contrôle de la syntaxe sur les éléments variants (nom d'une interface, nom d'une chaîne, nom d'une cible, etc.). Exemple :

    $ sudo iptables-translate -t nat -A POSTROUTINGE -o tun0 -j TOTO
    nft add rule ip nat POSTROUTINGE oifname "tun0" counter jump TOTO

    On notera également que certaines traductions ne sont pas proposées (je donne la traduction de cet exemple plus bas) :

    $ sudo iptables-translate -P FORWARD ACCEPT
    Translation not implemented
    nft 



    Voici ma procédure pour migrer d'iptables vers nftables à partir d'un système équipé de netfilter-persistent :

    sudo iptables-restore-translate -f /etc/iptables/rules.v4 > /tmp/nftables.conf.tmp
    sudo ip6tables-restore-translate -f /etc/iptables/rules.v6 >> /tmp/nftables.conf.tmp
    
    # Un script nftables commence par « #!/usr/sbin/nft -f »
    sed -i '1s&^&#!/usr/sbin/nft -f\n&' /tmp/nftables.conf.tmp
    
    # iptables-restore-translate crée les tables nat et mangle alors que je ne les utilise pas ou rarement.
    # Je les vire afin d'améliorer la visibilité 
    sed -i '/ip nat/d' /tmp/nftables.conf.tmp
    sed -i '/ip mangle/d' /tmp/nftables.conf.tmp
    
    # Vu que je vais temporairement être sans pare-feu (surtout s'il y a des règles cassées), je me déconnecte du réseau
    sudo ifdown eth0
    
    # Je vire toutes les règles (filtrage, NAT, etc.) IPv4 et IPv6 actuellement en place
    sudo nft flush ruleset
    
    # J'importe les règles au format nftables avec l'outil d'administration adéquat
    sudo nft -f /tmp/nftables.conf.tmp
    
    # Je vérifie que les règles sont en place
    sudo nft list ruleset
    
    # Puisque tout est OK, je me connecte au réseau
    sudo ifup eth0
    
    # Puisque tout est OK, je crée le fichier de configuration utilisé par l'unit systemd pour charger les règles
    # -s permet de ne pas inclure les compteurs (de paquets / octets) dans l'export
    # Oui, le format issu de la commande ip[6]tables-restore-translate aurait fonctionné, mais je voulais conserver le format du fichier /etc/nftables.conf
    sudo nft -s list ruleset | sudo tee /etc/nftables.conf
    
    # J'insère l'entête obligatoire pour un script nftables
    # + je purge toutes les règles de filtrage. Cela permet de partir sur un jeu de règles sain lors d'un start ou d'un restart
    sudo sed -i '1s&^&#!/usr/sbin/nft -f\n\nflush ruleset\n\n&' /etc/nftables.conf
    
    # J'active l'unit systemd nftables et je la démarre
    sudo systemctl enable nftables
    sudo systemctl start/restart nftables
    
    # Je veux pouvoir revenir facilement à iptables, donc je ne vais pas le désinstaller
    # donc j'empêche netfilter-persistent de charger les vieilles règles au démarrage
    sudo systemctl disable netfilter-persistent
    sudo systemctl mask netfilter-persistent



    ATTENTION :

    • Quand des règles ont été créées avec nftables dans une chaîne de type « ip[6] », ip[6]tables ne peut plus lire le contenu d'une table. Le message d'erreur suivant s'affiche : iptables v1.8.2 (nf_tables): table 'nat' is incompatible, use 'nft' tool.. C'est normal : il ne faut pas utiliser les commandes iptables-legacy / iptables-nft en même temps que nft, car elles utilisent des sous-systèmes différents du noyau ;

    • Comme avec netfilter-persistent, si des règles ne peuvent pas être appliquées, aucune alerte est levée. SystemD remonte aucune info, aucun code retour. Attention donc à ne pas se retrouver à poil.



    Commandes utiles :

    • Démarrer / arrêter le pare-feu : sudo systemctl start nftables / sudo systemctl stop nftables ;

    • Nettoyer les règles ajoutées temporairement à la mano : sudo systemctl restart nftables ;

    • Voir toutes les règles (filtrage, nat, mangle, arp, ebtables) IPv4 et IPv6 en vigueur : sudo nft list ruleset ;

    • Voir toutes les tables, les chaînes et les règles d'un protocole (IPv4, IPv6, etc.) : sudo nft list ruleset ip6 (ici, que les règles IPv6 ‒ je simplifie, ce n'est pas vrai, voir ci-dessous ‒) ;

    • Voir toutes les chaînes et les règles d'une table : sudo nft list table ip6 filter (ici, que les règles de filtrage IPv6) ;

    • Ajouter une règle à la fin d'une chaîne existante (oui, il faut utiliser les guillemets et les apostrophes dès qu'on veut insérer un commentaire contenant plusieurs mots) : sudo nft 'add rule ip filter INPUT iifname "eth0" udp dport 666-999 counter accept comment "Ceci est un commentaire de plusieurs mots"' (ajout d'une règle dans la chaîne nommée INPUT de la table filter du protocole ip autorisant les paquets UDP destinés aux ports entre 666 et 999 inclus qui entrent par l'interface eth0) ;

      • Insérer une règle au début d'une chaîne existante : nft insert rule ip filter INPUT iifname "eth0" udp dport 666-999 counter accept ;
    • Comme avec iptables, la case est importante : si le nom d'une table ou d'une chaîne est en majuscule, il faut respecter cela sinon on a un message d'erreur abscons : « Error: Could not process rule: No such file or directory » ;

    • Supprimer une règle à chaud (la logique est identique pour une chaîne et une table) :

      # Récupérer le « handle » (numérotation interne) d'une règle
      sudo nft -a list ruleset
      # Supprimer cette règle (ici une règle dans la chaîne nommée INPUT de la table nommée filter du protocole IPv4)
      sudo nft delete rule ip filter INPUT handle <handle>


    • Changer à chaud la politique par défaut d'une chaîne : sudo nft chain ip filter FORWARD { policy drop \; } (la politique par défaut de la chaîne nommée FORWARD de la table filter du protocole IPv4 est désormais drop (rejet silencieux) ;

    • Créer une table, une chaîne et une règle :

              sudo nft add table ip nat
      # type et hook : à quelle interface réseau et à quelle partie de la pile réseau veut-on brancher la chaîne ? Ça détermine les paquets reçus par la chaîne
      #   valeurs possibles : https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains#Base_chain_types
      #   On peut créer des chaînes persos, non-reliées à la pile réseau, qui recevront des paquets via d'autres chaînes (-j nom_chaîne)
      # policy : politique par défaut de la chaîne : que fait-on d'un paquet qui a matché aucune règle ?
      # priority : ordonner les chaînes d'un même type+hook entre elles (le nombre le plus élevé l'emporte)
      #   \ + positionnement dans le processus de filtrage : exemple < - 200 = le paquet sera transmis à la chaîne avant la mise en place du suivi de connexion
      #   valeurs possibles : https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains#Base_chain_priority
      sudo nft add chain ip nat POSTROUTING '{ type nat hook postrouting priority 100; policy accept; }'
      sudo nft add rule ip nat POSTROUTING oifname "tun0" counter masquerade
    • Du point précédent, on retient que le nom d'une table et d'une chaîne est totalement personnalisable. Avec iptables, la chaîne qui s'occupe du filtrage en sortie est forcément la chaîne nommée OUTPUT de la table nommée filter. Avec nftables, ça peut être la chaîne nommée « toto » de la table « LOL » :

      table ip LOL { # handle 82
          chain toto { # handle 1
              type filter hook output priority 0; policy drop;
              icmp type echo-request accept # handle 2
          }
      }



    iptables-restore-translate traduit un jeu de règles ligne par ligne, donc on ne profite pas des possibilités de factorisation de nftables :

    • Une unique règle qui s'applique à plusieurs interfaces réseau sans utiliser ipset : sudo nft add rule ip filter INPUT iifname {"tun0", "wlan0"} counter accept ;

    • Une unique règle qui s'applique à plusieurs adresses IP source ou destination sans utiliser ipset (destination dans cet exemple) : sudo nft add rule ip filter OUTPUT ip daddr {192.0.2.1, 198.18.0.0/15} counter accept ;

    • Une unique règle qui s'applique à plusieurs protocoles de la couche 4 : sudo nft add rule ip filter FORWARD ip protocol {tcp, udp} accept ;

    • Une unique règle qui s'applique à plusieurs ports d'un même protocole de couche 4 : sudo nft add rule ip filter INPUT udp dport {53, 5353} counter accept ;

    • Et si l'on veut autoriser un même port pour plusieurs protocoles comme autoriser, en une seule règle, le DNS (qui nécessite les ports udp/53 et tcp/53) ? Ce n'est pas vraiment prévu : le mot clé « dport » est relatif au mot clé (tcp ou udp). On peut ruser, mais c'est crade : sudo nft 'add rule inet filter INPUT ip protocol {tcp, udp} @th,16,16 53 counter accept comment "DNS udp et tcp"'. Attention : cela nécessite que le port de destination soit stocké au même emplacement dans l'entête des deux protocoles.



    nftables permet également d'appliquer une même règle en IPv4 et en IPv6. Cela se fait avec une table de type « inet ». Cela signifie que des règles concernant IPv4 peuvent se trouver dans une table de type inet ET dans une table de type ip (d'où sudo nft list ruleset ip6 n'affiche pas toutes les règles IPv6 mais toutes les tables de type ip6). Exemple pour autoriser SSH en entrée en IPv4 et en IPv6 :

    sudo nft add table inet filter
    sudo nft add chain inet filter INPUT '{ type filter hook input priority 0; policy drop; }'
    sudo nft add rule  inet filter INPUT tcp dport ssh counter accept

    Attention : à hook identique et à priorité égale ou même supérieure une chaîne de type inet passe avant une chaîne de type ip. Si la chaîne inet ne drop pas le paquet, la chaîne ip le verra passer, sinon non. Source. Cela peut poser problème. Exemple : virt-manager crée un réseau NATé pour les machines virtuelles. Pour ce faire, il utilise des chaînes de type / de la famille ip. J'effectue tout mon filtrage dans des chaînes de type inet dont la politique est de drop sauf ce qui va dans un VPN. Conclusion : la machine virtuelle n'aura pas d'IP (DHCP foiré) et ne pourra pas sortir sur Internet.

    Dans une chaîne de type inet, il est possible de filtrer uniquement IPv4 ou IPv6. Soit en utilisant une directive spécifique à un protocole (exemple : sudo nft add rule inet filter INPUT ip daddr 192.0.2.1/32 accept, soit en utilisant les mots-clés « meta nfproto ipv(4|6) » (exemple : sudo nft add rule inet filter OUTPUT meta nfproto ipv4 udp dport 666 reject with icmp type admin-prohibited).



    Documentations utiles :

    • nftables dans le wiki Debian ;

    • Doc' poussée sur les chaînes, hook, priorités, etc. sur le wiki nftables ;

    • Mots-clés de référence utilisables dans une règle sur le wiki nftables.


    logrotate / rsyslog

    Mes journaux consignés par rsyslog n'étaient plus archivés par logrotate. De plus, dans /etc/logrotate.d/rsyslog, je constate qu'on n'utilise plus invoke-rc.d rsyslog rotate > /dev/null, mais /usr/lib/rsyslog/rsyslog-rotate.

    Ces deux éléments sont liés : il y a un bug (l'unit systemd fait démarrer rsyslog sans PID, alors qu'on en a besoin pour invoke-rc.d) et Debian a mis en place le magnifique (ironie) script /usr/lib/rsyslog/rsyslog-rotate (résumé : si systemd est en cours d'utilisation, alors on utilise systemctl kill pour envoyer un signal à rsyslog, sinon on utilise invoke-rc.d).

    J'ai modifié toutes mes configurations logrotate afin d'utiliser /usr/lib/rsyslog/rsyslog-rotate dans l'action de post-rotate, même si ça ne me semble pas pérenne…


    man-db

    CRON me rapporte une erreur :

    /etc/cron.daily/man-db:
    /usr/bin/mandb: error while loading shared libraries: libgdbm.so.3: cannot open shared object file: No such file or directory
    run-parts: /etc/cron.daily/man-db exited with return code 127

    Regardons les bibliothèques de fonctions qui sont liées dynamiquement à man-db :

    $ ldd /usr/bin/mandb 
    linux-vdso.so.1 (0x00007ffeb36fe000)
    libmandb-2.7.6.1.so => /usr/lib/man-db/libmandb-2.7.6.1.so (0x00007fb4ffa8b000)
    libman-2.7.6.1.so => /usr/lib/man-db/libman-2.7.6.1.so (0x00007fb4ff868000)
    libgdbm.so.3 => /usr/lib/x86_64-linux-gnu/libgdbm.so.3 (0x00007fb4ff661000)
    libpipeline.so.1 => /usr/lib/x86_64-linux-gnu/libpipeline.so.1 (0x00007fb4ff453000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb4ff0b4000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb4fee9a000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fb4ffeb3000)

    Hum… Il y a bien libgdbm.so.3… qui n'existe plus au profit de libgdbm.so.6.

    """"Solution"""" ? apt-get install --reinstall man-db

    Merci pour le poisson.


    MariaDB

    MariaDB 10.3 ne s'est pas installé tout seul, j'ai dû le faire à la mano (sudo apt-get install mariadb-server). J'imagine que j'avais installé le paquet mariadb-server-10.1 quand j'étais sous Stretch au lieu du paquet mariadb-server…

    Durant l'installation, je lis mysql_install_db : Installation of system tables failed!. Dans le journal MariaDB (/var/log/mysql/…), je lis : Unable to lock ./ibdata1 error: 11.

    Hum… Fichier déjà ouvert. Donc : systemctl stop mariadb && mysql_install_db && systemctl start mariadb.


    MATE

    Durant la mise à jour, le texte de toute fenêtre déjà ouverte (ou ouverte après-coup) foire : flou, difficile à lire, etc. Les intitulés des menus sont parfois tronqués comme le menu « fichier » dans Pluma. Sur tout site web, les caractères sont remplacés par des carrés. Après vérification, ce n'est pas un changement de définition (1920x1080) ni de résolution (en DPI).

    On se dit qu'on va reboot. Depuis le menu MATE, ça ne fonctionne pas : je tombe sur un GNOME shell (qu'est-ce qu'il fout ici, celui-là ?!) qui me demande mon mot de passe comme si la session était verrouillée. Toute saisie est impossible. Le bouton arrêter / redémarrer en haut à droite de l'écran fait rien. Pas d'accès aux consoles (ctrl+alt+fx). On est parti pour un REISUB / BUSIER…

    Au redémarrage, tout est OK : les textes et les menus s'affichent correctement et l'extinction / le redémarrage via le menu MATE sont fonctionnels. Même chose pour les tty.

    Néanmoins, la sensibilité de la souris a été clairement abaissée. Mon pointeur se traîne… On corrige ça dans les paramètres.

    Je note aussi que, quand caja (explorateur de fichiers MATE) gueule « failed to activate device operation not permitted », ça signifie que je n'ai pas saisi la bonne passphrase pour déverrouiller un disque dur interne (le message qui s'affiche pour pareille boulette sur un disque dur externe n'a pas changé…).


    mumble

    Prise en charge des suites de chiffrement qui permettent la Perfect Forward Secrecy (en clair : utilisation de clés de chiffrement symétrique temporaires qui ne sont pas échangées entre le client et le serveur grâce aux algos DHE / ECDHE, ce qui fait que si la clé privée asymétrique est compromisse, les échanges passés restent secrets). Cool. \o/


    ntpd / tzdata

    Le paquet tzdata livre désormais un fichier qui annonce les secondes intercalaires (ça permet de les gérer). ntpd est configuré par défaut pour utiliser ce fichier (leapfile /usr/share/zoneinfo/leap-seconds.list). Avant, il fallait récupérer manuellement le fichier auprès du NIST (ou de l'IANA ou…) et configurer ntpd nous-même. Cool.

    Ça ne changera pas grand-chose puisque les serveurs NTP de strate 1 bien connus communiquent la seconde intercalaire via le protocole NTP lui-même.


    ntpdate

    Ce paquet ne fournit plus de hooks ifupdown permettant à ntpdate d'être exécuté à chaque fois qu'une connexion au réseau est établie. Il faut utiliser un démon NTP (ntpd, chrony, etc.) ou, au pire du pire, bidouiller ses propres scripts.

    C'est positif, ça posait souvent problème : synchronisation aléatoire, ça n'utilisait pas les serveurs NTP du réseau reçus en DHCP, etc.


    OpenDNSSEC

    Lors de son démarrage, ods-enforcerd consigne Token.cpp(482): Could not get the token flag dans son journal. Cela fait penser à ce bug, mais il est trop vieux pour ne pas avoir été corrigé dans Buster. De plus, un simple systemctl restart ods-enforcerd suffit à faire rentrer les choses dans l'ordre. Je pense à une race-condition au démarrage du serveur, car ça n'est pas reproduit après le deuxième redémarrage. À défaut d'une solution, je me note d'être vigilant à chaque redémarrage de mon serveur…

    J'ai découvert que, dans le cadre des DNS adapters (source), le signeur écoute sur les ports TCP et UDP 15354 de toutes les interfaces, et évidemment pas que sur localhost… Ce n'est pas ce que dit la documentation, mais c'est ce que je constate. Pour rattraper le coup, j'ai remplacé le bloc Listener dans /etc/opendnssec/conf.xml par celui-ci :

    <Listener>
            <Interface>
                    <Address>127.0.0.1</Address>
                    <Port>5353</Port>
            </Interface>
    </Listener>


    OpenSSH

    • Les variables d'environnement (y compris celles positionnées dans le fichier authorizedkeys) ne peuvent plus surcharger les variables « SSH* » de sshd ;

    • La journalisation de l'authentification est plus précise durant la phase de pré-auth et le format de certains messages a changé donc attention aux outils qui examinent les journaux SSH.


    OpenSSL

    Par défaut, c'est la version 1.2 ou supérieure du protocole TLS qui sera utilisée.

    Par défaut, les suites de chiffrement faibles sont désactivées. Adieu RSA / DHE avec des clés inférieures à 2048 bits et ECDSA / ECDHE < 224 bits. Adieu les certificats dont la signature repose sur SHA-1 pour en créer le condensat.

    Dans les deux cas, cela peut être contourné dans /etc/ssl/openssl.cnf en remplaçant :

    [system_default_sect]
    MinProtocol = TLSv1.2
    CipherString = DEFAULT@SECLEVEL=2

    Par :

    [system_default_sect]
    MinProtocol = None
    CipherString = DEFAULT

    Attention : les applications peuvent faire comme elles veulent. Exemples : wpa_supplicant accepte les certificats x509 dont l'algo de hachage avant signature est SHA-1. openssl s_client affiche un message « Verify return code: 68 (CA signature digest algorithm too weak) »


    PHP

    J'utilise le module PHP pour Apache HTTPd. Je suis quasiment sûr que le paquet libapache-mod-php (et non pas libapache-mod-php7.2) était installé. Pourtant, j'ai dû activer moi-même le module PHP 7.3 (version empaquetée dans Buster) à la main (a2endmod php7.3 && systemctl restart apache2). Au préalable, j'ai migré ma conf' PHP (php.ini) personnalisée de /etc/php/7.2/apache2 vers /etc/php/7.3/apache2 (ne pas faire un cp sinon on ne bénéficie pas des nouveautés…, préférer diff).


    Thunderbird

    La date et l'heure des emails s'affichaient au format anglais. Le paquet thunderbird-l10n-fr était bien installé. J'avais vérifié mes locales. J'avais tenté de lancer Thunderbird depuis un shell en précisant la locale juste avant. J'avais tenté de bidouiller mail.ui.display.dateformat.default et ses amies Sans succès.

    Depuis la mise à jour vers Buster, les dates et l'heure des emails sont au format français…


    ssmtp

    ssmtp n'est pas empaqueté dans Buster, mais il est présent dans testing et sid, donc, comme le T-800, il reviendra.


    xsane

    Depuis octobre 2018, xsane n'est plus maintenu (le site web officiel affiche « XSane (temporarily offline!) »).



    #Debian 9 à Debian 10 ; Debian 9 à 10

    Sun May 3 18:27:02 2020 - permalink -
    - http://shaarli.guiguishow.info/?Mfvd7A
  • Si session graphique difficile / impossible à ouvrir après migration de GNOME 3 vers MATE : rm ~/.xinitrc

    Avant, j'utilisais GNOME 2. Puis il a fallu passer à GNOME 3. Sauf que GNOME 3, shell ou non, ça ne me convient pas. MATE, un fork de GNOME 2 était disponible dans les paquets Debian (mais pas dans l'installeur). J'ai donc installé MATE à côté d'un GNOME 3.

    Bien plus tard, j'ai commencé à supprimer GNOME 3 sauf ce qui me plaisait : la calculette GNOME (gnome-calculator) a une interface qui me parle plus que celle de MATE (mate-calculator) en plus d'avoir un historique des opérations effectuées ; garder un nautilus (explorateur de fichiers de GNOME) permet d'avoir un explorateur de fichier de secours quand caja (idem, mais de MATE) se gèle totalement durant une copie sshfs, etc.

    À moment donné (je date ça de mon passage à Debian Stretch, mais je n'en suis pas sûr), ça part en live. Quand je saisis mon identifiant et mon mot de passe afin d'ouvrir ma session, si c'est les bons, les champs se grisent, l'affichage se fige (plus de souris) et rien se passe. Pour afficher l'environnement de bureau, je devais attendre un peu que MATE démarre, faire ctrl+alt+f2 puis ctrl+alt+f3 puis ctrl+alt+f2. Revenir sur ctrl+alt+f1, ça fermait brutalement la session et les champs identifiant et mot de passe étaient de nouveau éditables. L'environnement de bureau s'affichait dans ctrl+alt+f2… au lieu de l'habituel ctrl+alt+f7… qui était vide.

    C'était pénible, mais vu que je suis le seul utilisateur de l'ordinateur et que je l'éteins jamais (je fais du suspend-to-ram), je m'en fichais. Et puis essaye de décrire ce problème avec des mots-clés pour un moteur de recherche web, toi…

    Lors de mon passage à Debian Buster, j'ai voulu virer les derniers bouts de GNOME dont je ne me sers pas. Mais gdm3 (gestionnaire d'affichage de GNOME) dépend d'eux… Allons-y pour installer lightdm comme remplaçant de gdm3. Impossible d'ouvrir une session. J'ai le même problème d'affichage gelé mais mon astuce ctrl+alt+f2 puis ctrl+alt+f3 puis ctrl+alt+f2 ne fonctionne plus.

    C'est donc un problème commun à plusieurs gestionnaires d'affichage ou à plusieurs gestionnaires de sessions.

    Ne sachant pas trop quoi faire, je crée un compte utilisateur. J'arrive à ouvrir une session avec celui-ci. L'origine de mon problème est donc un fichier de configuration dans mon homedir.

    Je regarde viteuf le déroulement de l'ouverture d'une session graphique. L'interface de connexion ne me laisse pas choisir la session à ouvrir (et pour cause, j'ai un seul gestionnaire de session, mate-session). J'ai bien un lien symbolique ~/.xsession vers un fichier ~/.xinitrc. Je le mets de côté avec mv.

    Je peux ouvrir une session avec gdm3 sans utiliser une quelconque combine. Je peux également ouvrir une session avec lightdm. \o/

    Je ne sais plus ce que contenait le script .xinitrc, mais c'était très probablement des instructions spécifiques à GNOME.

    Je suis donc un récent utilisateur de lightdm.

    Sat May 2 17:17:42 2020 - permalink -
    - http://shaarli.guiguishow.info/?LpglKA
  • Regénérer sa config' xorg.conf, ça peut encore servir

    Sur ma machine perso et depuis sa mise en service, le serveur graphique X.Org me crache des tonnes d'erreurs dans ~/.local/share/xorg/Xorg.0.log. Toujours la même : « (EE) FBDEV(0): FBIOPUTCMAP: Device or resource busy ». En permanence, dès que je bouge ma souris. ÉDIT DU 12/10/2020 À 20 H 50 : La procédure ci-dessous permet également de résoudre la coulée permanente d'erreurs « (EE) modeset(0): present flip failed ». FIN DE L'ÉDIT.

    Le message d'erreur étant plutôt générique, je ne trouvais pas d'aide sur le web, donc j'avais laissé tomber. Je pensais à un problème de pilote graphique, de fonctionnalités non-supportées par ce dernier, quelque chose comme ça. Ce n'était pas gênant, car une rotation / nettoyage automatique du journal avait lieu, donc il consommait quelques Go à tout casser.

    J'ai mis à jour mon système Debian GNU/Linux à la version Buster. Ce problème continue. J'ai un peu craqué : mon modèle d'ordinateur date de 2012-2013, il est équipé d'un GPU Intel greffé sur le CPU. Le GPU le plus simple et compatible au monde, et ça continue de foirer en 2020 ?!

    Mon fichier de config' /etc/X11/xorg.conf date de 2014. Peut-être faut-il en générer une version actualisée ? Ouais, je sais : avec l'autoconfiguration Xorg, KMS et compagnie, on n'est plus censé devoir faire ça… sauf que ça a jamais vraiment fonctionné chez moi.

    Pour générer un nouveau fichier xorg.conf (adapté de ce tuto) :

    • Fermer ses logiciels / fichiers ;

    • Basculer en console tty avec ctrl+alt+F[1-6] et se connecter en root ;

    • Copier la conf' actuelle : cp /etc/X11/xorg.conf ~/xorg.conf.bak ;

    • Stopper le gestionnaire d'affichage (gdm, dans mon cas, même si, depuis, je suis passé à lightdm) : systemctl stop gdm3 ;

    • Générer la conf' : X -configure ;

    • Déplacer la conf' au bon endroit : cp xorg.conf /etc/X11/xorg.conf ;

    • Relancer le gestionnaire d'affichage : systemctl start gdm3.

    Hop, plus aucune erreur dans ~/.local/share/xorg/Xorg.0.log depuis plusieurs mois. \o/

    Sat May 2 15:56:08 2020 - permalink -
    - http://shaarli.guiguishow.info/?yUC8rQ
  • Comment utiliser SSH sur IPv6 ? - Antichesse (o ^ω^ o)

    Quelques remarques :

    • Ce principe de fonctionnement est valable pour tout protocole, pas seulement SSH. Ping une adresse du réseau fe80::/10 ? ping6 fe80::1%<nom_interface>. Netcat ? nc -u fe80::1%<nom_interface> 8112 ;

    • Il est préférable d'encadrer une IPv6 globale entre crochets. C'est même obligatoire pour les commandes où l'on précise un numéro de port en l'apposant à l'adresse IP (puisque le séparateur IP/port, « : », intervient également dans la représentation des adresses IPv6) et, d'une manière générale, dans toute commande où l'on appose quelque chose à la suite de l'adresse IP (genre avec rsync ou scp, il faut préciser la destination de la copie… avec « : »… donc, pour faire la différence entre la représentation d'une IPv6 et le séparateur, on utilise les crochets : scp test <identifiant>@[<adresse_IPv6>]:.) ;

    • Une adresse IPv6 fe80::/10 est spécifique à un même réseau niveau 2, à un même segment, à un même réseau local pour faire simple. Comme tous les réseaux niveaux 2 ont le même adressage (ce sera fe80::/10 que tu sois chez toi, au travail, chez des amis, en filaire ou en Wi-Fi ou…) et qu'une machine lambda est connectée à plusieurs réseaux en même temps (filaire, Wi-Fi, 4G, etc.), il faut préciser l'interface réseau qui sera utilisée pour l'émission, car l'algorithme de sélection de l'adresse IP source ne peut pas fonctionner. Une adresse locale au lien (fe80::/10) ne traverse pas un routeur (genre une box Internet), donc elles ne sont pas utilisables entre deux réseaux distincts. Une adresse fe80::/10 est soit tirée au sort (donc elle change avec le temps), soit dérivée à partir de l'adresse MAC de l'interface réseau (auquel cas, l'adresse fe80::/10 d'une interface réseau ne change pas avec le temps) ;

    • Les adresses fe80:/10 sont plutôt destinées à un usage technique interne aux protocoles autour d'IPv6 (routage, résolution MAC/IP, etc.). Je déconseille leur utilisation courante au niveau des applications (surtout si elles sont générées aléatoirement…), quitte à utiliser des adresses IPv6 """"privées""" (fc00::/7) pour adresser le serveur et le client. En faisant ainsi, il n'y a pas lieu de se plaindre que "pas le même comportement gnagna".
    Sat May 2 14:05:56 2020 - permalink -
    - https://cakeozolives.com/shaarli-antichesse/?AXuVyg
  • OpenDKIM + DNSSEC : « can't read SMFIC_EOH reply packet header: Success »

    Sur mon serveur d'emails, j'utilise OpenDKIM pour signer quelques entêtes de mes emails sortants et pour vérifier la signature des entrants dans un contexte anti-spam (il ne s'agit pas de garantir la confidentialité / l'authenticité / l'intégrité de l'échange). J'ai configuré OpenDKIM pour qu'il vérifie les signatures DNSSEC afin de garantir l'authenticité et l'intégrité des clés publiques DKIM récupérées dans le DNS. Ça sert à rien (déjà que DKIM c'est du vent…), mais bon, ça fait joli.



    Depuis bientôt 1 an (juin 2019), j'ai remarqué que la signature des emails entrants n'est plus vérifiée. J'avais constaté l'absence de l'entête « Authentication-Results » dans les emails. J'avais constaté que Postfix consigne ce qui suit pour chaque email reçu : « warning: milter inet:127.0.0.1:10028: can't read SMFIC_EOH reply packet header: Success ». Tant que je pouvais envoyer des emails et en recevoir, je m'en fichais.

    Il y a 3 mois, j'ai décidé d'étudier cela attentivement, car, à moment donné, il faut bien se sortir les doigts.



    Le message consigné par Postfix est trop générique : c'est le constat d'un milter défectueux, rien de plus.

    OpenDKIM consigne rien excepté exited with status 1, restarting à chaque email reçu ou presque. Le lancer à la main (systemctl stop opendkim && opendkim -f -vvv) ne le rend pas plus bavard.



    J'ai aucune idée. Dans ces moments-là, je reviens aux bases, j'essaye de me souvenir comment fonctionne précisément le logiciel incriminé, je relis la doc' relative à mon système d'exploitation, etc. La doc' Debian pour OpenDKIM est ici. Et la réponse s'y trouve sous forme d'un gros avertissement :

    The Debian unbound package installs a default configuration file at /etc/unbound/unbound.conf. Do not attempt to use this file unchanged with ResolverConfiguration! opendkim will just quietly shut down.
    
    The reason for the incompatibility is that the shipped unbound.conf includes an auto-trust-anchor-file setting, for which opendkim does not have the necessary permissions. Unfortunately, libunbound is rather fragile in this area. Prepare your own unbound.conf for opendkim and test carefully. 

    Une fois qu'on a connaissance de ça, une recherche sur le web avec de nouveaux mots-clés permet d'obtenir une confirmation : Question #293418 : Questions : opendkim package : Ubuntu.



    Je n'utilise pas /etc/unbound/unbound.conf, mais, dans ma configuration pour la bibliothèque Unbound, j'utilise bien auto-trust-anchor-file. Ce que je ne comprends pas, c'est que je stocke la clé publique de la racine DNS dans une arborescence dédiée à OpenDKIM : /var/lib/dkim/. C'est aussi là qu'est stockée la clé privée avec laquelle sont signés les emails. Ça devrait donc fonctionner.

    Pour une raison qui m'échappe totalement, l'utilisateur OpenDKIM n'était plus propriétaire ni du dossier /var/lib/dkim, ni de la clé publique de la racine DNS. La bibliothèque Unbound exécutée par OpenDKIM (uid:gid identique, donc) ne pouvait donc pas l'actualiser. J'ai corrigé ça de cette manière :

    chown opendkim:root /var/lib/dkim
    chmod 755 /var/lib/dkim
    chown opendkim:opendkim /var/lib/dkim/dnssec.root.key
    chmod 664 /var/lib/dkim/dnssec.root.key

    On redémarre OpenDKIM (systemctl restart opendkim) et c'est fini.

    Sat May 2 13:00:34 2020 - permalink -
    - http://shaarli.guiguishow.info/?R_X-_A
  • Utiliser DANE OPENPGPKEY

    DANE OPENPGPKEY, c'est utiliser le DNS, signé avec DNSSEC, pour récupérer une clé publique OpenPGP (pas pour en prouver l'authenticité, attention !). Pour les détails, voir l'article de tonton Bortz.

    J'avais déjà tenté d'utiliser DANE OPENPGPKEY quand j'en avais appris l'existence en 2016, mais je n'étais pas parvenu à forger l'enregistrement DNS qui le matérialise. Mais, cette fois-ci, je suis outillé.



    Pour créer un tel enregistrement, on va utiliser la suite logicielle hash-slinger (qui permet, également et entre autres, la manipulation des enregistrements DNS SSHFP et des enregistrements DNS DANE TLSA). Installons-le (il n'est pas dans les dépôts Debian GNU/Linux Buster à cause d'une dépendance à python33-m2crypto non-satisfaite) :

    $ sudo apt-get install swig
    $ sudo pip3 install m2crypto
    $ git clone https://github.com/letoams/hash-slinger
    $ cd hash-slinger && sudo make install



    La clé publique que l'on veut publier doit être présente dans le trousseau GnuPG courant. Voir mon tutoriel complet pour créer / gérer sa paire de clés OpenPGP.

    Créer l'enregistrement : openpgpkey --create <adresse_emails_de_l'identité_de_la_clé_OpenPGP>.



    Publier l'enregistrement dans la zone DNS concernée.

    On vérifie que l'enregistrement est correct :

    $ openpgpkey --verify <adresse_emails>
    All OPENPGPKEY records matched with content from the local keyring



    Pour tester la récupération, soit on tente depuis une autre machine (virtuelle), soit on utilise un compte utilisateur différent sur la même machine ou même un trousseau différent sur le même compte utilisateur. J'ai choisi cette troisième option.

    $ mkdir /tmp/testOPK
    $ export GNUPGHOME=/tmp/testOPK
    $ gpg -k # doit rien retourner puisque trousseau vide
    $ gpg --auto-key-locate dane --locate-keys <adresse_emails>

    Si la clé OpenPGP a plusieurs identités, seule l'identité qui correspond à l'adresse emails a été publiée et est donc récupérable. Les autres identités doivent être publiées chacune dans leur zone respective et être récupérée séparément.

    Les signatures de la clé ne sont pas publiées et ne sont pas récupérables. De toute façon, suite à l'attaque de 2019 des serveurs de clés OpenPGP par surcharge de signatures, les développeurs de GnuPG ont décidé de ne plus récupérer les signatures tierces sur les serveurs de clés. Donc, DANE ou serveur de clés = même résultat.



    Bien évidemment, DANE OPENPGPKEY est un moyen supplémentaire de récupérer une clé OpenPGP : serveurs de clés, téléchargement web, pièce jointe d'un email, etc. DANE OPENPGPKEY ne permet pas de garantir qu'il s'agit de la clé du correspondant avec lequel tu veux échanger. En effet, DNSSEC garanti que l'enregistrement DNS n'a pas été altéré durant son transport entre le serveur qui fait autorité sur le domaine du correspondant et le serveur DNS récursif qui effectue la validation. Rien dit qu'un attaquant n'a pas inséré sa clé OpenPGP dans l'enregistrement OPENPGPKEY du correspondant. Rien dit qu'un attaquant actif entre ton serveur DNS récursif et toi n'a pas modifié l'enregistrement DNS. Bref, comme d'habitude, il faut vérifier l'authenticité de la clé récupérée en contactant le correspondant sur un autre canal (de visu, téléphone, etc.) avant de signer la clé et de lui accorder une quelconque confiance.

    Fri May 1 23:54:31 2020 - permalink -
    - http://shaarli.guiguishow.info/?VIhbjQ
  • Mon premier couac DANE TLSA

    Résumé : si t'as configuré ton serveur d'emails Postfix pour qu'il prenne en compte les enregistrements DNS DANE TLSA et qu'un email n'est pas envoyé au motif d'erreur « Server certificate not verified », vérifie la validité de l'enregistrement TLSA associé au serveur emails du destinataire avec l'outil tlsa de la suite logicielle hash-slinger : il ne correspond très probablement pas au certificat x509 présenté par le serveur emails. Contacte l'hébergeur du serveur en utilisant whois -B <adresse_IP_du_serveur. On notera que le message d'erreur de Postfix n'est pas explicite, donc qu'il y a encore du boulot de ce côté-là avant une généralisation de DANE TLSA.



    DANE TLSA permet de stocker, dans le DNS signé avec DNSSEC, les certificats x509 afin d'obtenir une deuxième chaîne de validation et de combler ainsi les immenses lacunes conceptuelles du modèle de sécurité de la norme x509. Détails et utilisation concrète ici.

    Il y a quelques jours, j'ai rencontré, en production, mon premier pépin dont l'origine est DANE TLSA.



    J'envoie un email. Un jour après, pour comprendre une toute autre chose, je consulte le journal de Postfix, mon serveur d'emails. Par hasard (tail -f et nouvelle tentative d'envoi récente), j'y lis ceci :

    postfix/smtp[23743]: 235AB2AE: to=[CENSURE], relay=[CENSURE][[CENSURE]]:25, delay=82176, delays=82176/0.15/0.13/0, dsn=4.7.5, status=deferred (Server certificate not verified)

    Notons que si je n'avais pas consulté le journal, j'aurais quand même été informé du problème en recevant, après 5 jours (valeur par défaut du paramètre maximal_queue_lifetime de Postfix), un email présentant le problème émis par « Mail Delivery System / MAILER-DAEMON », c'est-à-dire Postfix lui-même.



    Je cherche à obtenir plus d'infos.

    Ajouter « -v » dans la colonne « command + args » des services « tlsmgr » et « smtp » dans master.cf (exemple : « tlsmgr unix - - y 1000? 1 tlsmgr -v ») + systemctl reload postfix rend Postfix plus causant mais cela m'apprend rien.

    Dans main.cf, je suis déjà en smtp_tls_loglevel = 1. En changer la valeur pour « 2 » et recharger Postfix ne m'en apprendra pas d'avantage.

    Rien permet de comprendre l'origine du problème, pas un seul indice. Un message d'erreur explicite serait le bienvenu avant une généralisation de DANE TLSA.



    Je connais les compétences des salariés de l'hébergeur emails de mon destinataire, donc je choisis de remettre en cause mon installation plutôt que la leur.

    Comme m'y incite le premier résultat d'une recherche du message d'erreur « Server certificate not verified » dans un moteur de recherche, je commence à creuser la politique de validation d'un certificat x509 appliquée par Postfix (paramètres smtp_tls_(verify|secure)_cert_match) : avec quoi compare-t-on le Common Name / SubjectAltName ? Avec le nom du serveur ? Avec le nom de domaine du destinataire ? Avec celui de l'hébergeur emails ? Ma recherche en ce sens donnera rien.



    Je réfléchis (enfin). Comme l'écrasante majorité des serveurs emails, le mien est configuré pour tenter un envoi en clair si l'envoi chiffré a été impossible (on nomme ça TLS / chiffrement opportuniste). Pourquoi mon serveur n'a pas agit comme ça cette fois-ci ?

    Il est configuré pour prendre en compte les enregistrements DNS TLSA : smtp_dns_support_level=dnssec + smtp_tls_security_level=dane (attention : les versions de TLS et les suites de chiffrement autorisées se définissent désormais dans smtp_tls_mandatory_protocols et smtp_tls_mandatory_ciphers !). Si l'hébergeur emails du destinataire a positionné un enregistrement TLSA, cela signifie qu'il veut qu'on échange avec lui de manière chiffrée, donc on n'essaye pas de communiquer en clair. DANE TLSA pallie à la principale limite du chiffrement opportuniste : sans TLSA, si le message d'initialisation du chiffrement, STARTTLS, est perdu ou volontairement stoppé par un méchant, alors la communication s'effectue sans chiffrement.



    Je vérifie la présence d'un enregistrement TLSA avec dig TLSA _25._tcp.<nom_du_smtp_distant_qui_est_mentionné_dans_relay_dans_le_journal_Postfix>. Il y en a bien un.

    J'utilise tlsa, un petit script de la collection hash-slinger (qui permet, également et entre autres, la manipulation des enregistrements DNS SSHFP et des enregistrements DNS DANE OpenPGP) pour vérifier la validité de cet enregistrement.

    Attention si tu utilises Debian GNU/Linux Buster : hash-slinger n'est pas empaqueté dans cette version à cause d'une dépendance à python3-m2crypto non satisfaite. La version de hash-slinger qui utilise python2 que t'as pu installer avant de mettre à jour ton système pourrait ne pas fonctionner dans certains cas à cause de l'obsolescence de la bibliothèque TLS (« M2Crypto.SSL.SSLError: wrong version number », c'est du vécu). Bref : sudo apt-get install swig && pip3 install m2crypto + installer hash-slinger depuis le dépôt git officiel (git clone + sudo make install).

    Je vérifie donc la validité de l'enregistrement TLSA positionné par l'hebergeur emails :

    $ tlsa --verify --port 25 <nom_du_smtp_distant_qui_est_mentionné_dans_relay_dans_le_journal_Postfix>
    FAIL (Usage 3 [DANE-EE]): Certificate offered by the server does not match the TLSA record ([CENSURE])

    Oups… Tout s'explique… Le certificat x509 présenté par le serveur emails ne correspond pas à l'enregistrement TLSA.



    Afin d'être sûr de moi, je calcule moi-même le RDATA de l'enregistrement DNS en fonction du certificat actuellement utilisé avec $ openssl s_client -connect [CENSURE]:25 -starttls smtp -showcerts < /dev/null 2> /dev/null | openssl x509 -pubkey | openssl rsa -pubin | head -n -1 | tail -n +2 | base64 -d | sha256sum et, oui, il ne correspond pas à celui mis en service. Pour les détails : l'enregistrement présent est un condensat SHA-256 (mtype = 1) de la clé publique (selector = 1) du seul certificat du serveur (usage = 3), d'où cet enchaînement de commandes publié sur le blog de Stéphane Bortzmeyer pour le synthétiser.



    Je contacte l'hébergeur emails. Comment ? whois -B <IP_du_serveur_emails>. D'une manière générale, ne pas oublier « -B » : cela permet d'obtenir des adresses emails autres que celle qui permet de signaler les abus. J'ai mis de côté d'autres paramètres bien utiles de la commande whois dans mon article Découvrons la RIPE database.

    En fin de matinée du premier jour ouvré suivant mon email, l'enregistrement DANE TLSA a été retiré. Fin du problème, mais c'est dommage d'avoir laissé tomber… Peut-être est-ce un repli stratégique pour réfléchir à un meilleur déploiement, avec supervision et tout et tout ?

    Thu Apr 30 13:04:20 2020 - permalink -
    - http://shaarli.guiguishow.info/?tQqSHw
  • Tout ça pour des chaussures…

    Résumé : comment j'ai passé 5 mois à cogiter sur l'achat de nouvelles chaussures à cause de blocages mentaux (plus cher = mieux ?, acheter toujours acheter…, quel modèle choisir ?, des chaussures, c'est des chaussures, quoi…). Il faut dire que c'était mon premier changement de modèle. Je publie ce shaarli pour les personnes dans ma situation. Si t'as des baskets qui prennent l'eau après trois semaines d'utilisation et dont les semelles se trouent à de multiples endroits après deux mois et sont totalement déchirées après six mois, ce n'est pas normal, change de marque / modèle, n'hésite pas à dépenser plus pour des semelles plus épaisses, c'est rentable sur le long terme : moins de temps passé à les renouveler + réduction de ton empreinte écologique + économie. Si l'apparence a aucune importance pour toi, si tu ne sais pas quel modèle choisir, si tu ne sais pas t'écouter (quel modèle me tente) ni te projeter (quel modèle me va bien), si le choix te paralyse, demande conseil aux gens que tu respectes, surtout s'ils portent des chaussures qui ne te parlent pas mais qui te paraissent pas trop-trop mal.



    Si l'on m'avait dit que j'écrirai un jour un shaarli ayant pour thèmatique les chaussures… Shit happens. Au-delà de chaussures, il est surtout là pour consigner mes blocages mentaux et mes contradictions, ce qui n'est pas inintéressant à archiver afin de visualiser, plus tard, les améliorations et les régressions.

    Je porte des fringues et des chaussures pour deux raisons : masquer mon corps et m'adapter aux conditions du terrain (température, pluie, sol irritant ‒ genre l'asphalte ou le sable ‒, chemin caillouteux, bris de verre, etc.). Forcément, j'ai jamais compris pourquoi ces éléments devaient être des éléments de distinction sociale (on notera que c'est bien pareil dans d'autres domaines : Kéké claque tout son fric pour avoir le "meilleur" tuning de voiture, JeanMi fait de même afin d'avoir le plus puissant ordinateur, etc.). Forcément, j'ai jamais compris le baratin sur l'apparence des fringues, ni la mode. Pour moi, le seul critère devrait être la fonctionnalité : est-ce que ce bout de tissu me protège mieux contre tel risque local ?

    Conséquence : cela fait plus de 15 ans que j'ai le même modèle de chaussures : des baskets basses noires de """"marque"""" Atemi qu'on trouve à la Halle aux chaussures pour 25 € (24,90 ou 24,99, je ne sais plus). Maman les avait choisies, affaire classée. Bon, j'avoue, y'a très longtemps, je me suis permis une énorme folie : changer de couleur. Le même modèle, mais en noir au lieu de blanc. Wouhou ! (Et je me souviens des propos des camarades de classe de sexe féminin pour me faire revenir au blanc en mode "ça ne te va pas, le noir".)



    Ça fait plus de 5 ans que j'avais un doute : je trouvais que ces chaussures s'usent super vite. Je ne fais pas de sport. Je me contente de déplacements en ville. Métro-boulot-magasins-dodo. Peut-être faudrait-il acheter un modèle plus coûteux "pour voir" ? J'hésite… J'ai été éduqué sur le modèle « ce n'est pas parce que c'est plus cher que ça répond à ton besoin : si ça se trouve, la différence de prix paye la marque et/ou une fonctionnalité dont tu n'as pas besoin ». Il faudrait choisir un nouveau modèle… Il faudrait étudier la question… Ça me fait chier. Ça me paralyse, donc je fais rien.

    Au fil des années, ce doute progresse… Quand même, elles durent vraiment pas longtemps, ces chaussures. J'en parle aux amis. « Non mais c'est normal des chaussures qui prennent l'eau, oui, même quand elles ont que quelques mois d'âge ». OK… J'affine mon diagnostic et j'en parle à quelques collègues : « elles durent deux mois, après y'a de gros trous partout dans la semelle ». On me répond (enfin ?) que « ce n'est pas normal, suis-je sûr de moi ? ». Cette fois-ci, je procède avec rigueur : je consigne la date d'achat dans mon agenda. Deux mois passent. Au moindre sol mouillé, à la moindre pluie, mes chaussures "neuves" sont des piscines municipales. J'en rachète. Idem deux mois après. C'est confirmé : durée de vie = 2 mois.

    Pour être précis : au bout de trois semaines / un mois, la semelle laisse passer l'eau, mais, ça va encore. Au bout de deux mois, la semelle a plusieurs trous d'une taille supérieure à une pièce de deux euros. À la moindre eau présente sur le sol, les chaussures se transforment en piscines. Au bout de six mois, la semelle est déchirée de partout (image), je marche à même le sol, ma peau se fait râper, etc.



    Ça me gonfle. Le prix, encore, ça va : je peux me permettre de claquer 25 € tous les 2 mois. C'est inutile, mais je peux me le permettre. L'impact écologique et le travail de gamins étrangers qu'un changement fréquent amplifie me dérangent beaucoup plus. Devoir me déplacer fréquemment, en transports en commun, dans la zone commerciale extérieure à la ville afin d'acheter de nouvelles chaussures, ça, c'est trop : c'est chiant, les transports en commun sont déplaisants au possible, c'est une perte de temps, etc.

    On tente un modèle de chaussures plus coûteux ? Pfff, ça fait chier… J'ai jamais choisi mes chaussures (ni mes fringues). Les personnes qui m'ont expliqué qu'il faut pas se prendre la tête, qu'il faut « juste » s'écouter : « est-ce que cette chaussure me tente ? Est-ce que je me vois bien les porter ? » : vous êtes sérieuses ? Je vois juste des chaussures. Aucune me tente. J'arrive pas à me projeter avec. Un rayonnage de chaussures me fait aucun effet. À part générer un profond ennui, bien entendu.

    Et puis, à quoi bon dépenser plus d'argent dans des chaussures si, au final, c'est la marque qui empoche la différence pendant que des gamins étrangers fabriquent les chaussures au moindre coût ? Je me dis qu'acheter des chaussures produites en France, ça me motiverait à me bouger. Les collègues me calment tout de suite : ça n'existe pas vraiment. Le Coq sportif externalise à l'étranger. Les baskets Venexan sont fabriquées en Italie (ce qui me rappelle la maltraitance des employés du cuir dans les régions italiennes), etc. Caruus, Ubac et compagnie vendent des baskets en matières qui m'ont l'air très perméables, ce qui ne répond pas à mon besoin (je chausse des baskets, qu'il fasse soleil ou qu'il pleuve), sans compter qu'il faut acheter via le web (j'vais y revenir).

    Des collègues se proposent de me faire découvrir des boutiques de pompes du centre-ville. Allons-y. J'ai droit à une formation accélérée sur chaussures de ville, chaussures de sport, running, etc. J'ai rien capté, j'ai rien retenu. Sauf qu'une chaussure en cuir bien foutue, ça fait la moitié d'une vie facile et que ça se fait réparer chez un cordonnier.

    Des chaussures de ville ont l'air pas si mal que ça… Sauf qu'elles m'explosent les talons quand je marche (l'impulsion remonte dans mes jambes, c'est très bizarre). Un modèle de baskets semble pas trop mal, mais il n'y a pas vraiment ma taille alors que j'ai un pied plus large que la moyenne au niveau de la jonction des métatarsiens et des phalanges. Il faut donc que la chaussure soit un peu flexible à cet endroit-là pour laisser paraître un bout d'os. J'aurai au moins découvert ça sur mon compte. Youpi…

    Ce qui devient sûr, c'est que je ne veux pas de chaussures de ville. Le cuir à entretenir (cirage, etc.), ça sera sans moi. Et ça fait quand même un p'tit air "je me la pète" qui ne me plaît pas. Des baskets, ça sera très bien. Ça passe partout (sauf dans les soirées habillées, mais j'y vais jamais). Ça ne fait pas chier. Quel modèle choisir ? Rebelote…

    Mon intérêt se dégonfle. Puis, je remarque les chaussures portées par deux collègues. Elles ne sont pas si mal… C'pas trop-trop mon truc, mais c'pas si mal. Je leur en parle. C'est des Timberland. On cherche sur le web : ça ressemble à des Chukka Bradstreet jaunes (mais ça n'en est pas, c'est le modèle équivalent d'il y a deux ans…). Ça fait baroudeur, me dit-on. Ça m'ira bien, me dit-on. Tu parles… À part sur Internet, j'ai baroudé nulle part ! C'est confortable me dit-on… Ouais, la vendeuse des chaussures de ville en cuir qui me défonçaient le talon m'a dit pareil… Y'a beaucoup de bullshit dans les mots employés pour présenter / vendre des chaussures (comme dans tout autre domaine).

    J'hésite. La couleur ne me plaît pas. Ça existe en noir, me dit-on, même si un peu de couleur ne me ferait pas de mal, me dit-on. Ai-je vraiment envie de chaussures qui, me dit-on, donnent une allure de baroudeur ? Ce n'est pas ce que je suis… Ai-je vraiment envie de dépenser plus de 100 € pour une paire de chaussures ? C'est hallucinant, comme chiffre. J'ai toujours eu des besoins simples… 100 €, ça symbolise quand même un autre standing, et c'est une autre image de toi que tu donnes…

    Je cogite des semaines et des semaines. Mes chaussures actuelles atteignent le stade « semelles totalement déchirées en plusieurs endroits, donc je marche à même le sol ». Soit je rachète les mêmes et, donc, je continue à perdre mon temps en déplacements et à avoir une empreinte écolo pourrie, soit j'achète les Timberland des collègues, soit j'achète un autre modèle… qu'il faut que je prenne la peine de dénicher, ce qui me démotive au plus haut point. Allons-y pour des Timberland.



    Reste à trouver un magasin qui en vende. Hors de question d'acheter sur le web. Arnaques. Enfer de la livraison. Coordonnées bancaires potentiellement enregistrées dans une base de données qui se fera pirater un jour. Galère pour retourner un produit. Difficulté pour choisir la bonne taille (j'ai eu raison : une Timberland qui me va c'est deux pointures au-dessus de l'habituelle !). Etc. Évidemment, il n'y a pas de magasin / revendeur référencé dans ma ville sur le site web officiel. Je fais le tour de plusieurs magasins du centre-ville : rien. Une collègue me dit qu'elle a acheté les siennes à Go Sport. Enrichir le groupe Casino, quelle belle perspective… Mais entre ça ou commander sur le web ou conserver mon modèle actuel de chaussures…

    Au final, Go Sport déstockait, donc plein de modèles de marques différentes étaient en promotion. J'ai donc acheté une paire de Timberland Bradstreet noires hautes (aucune idée de la déclinaison, ce n'était pas consigné sur l'étiquette) et une paire de Timberland Advendure alpine noires basses (idem). Au moins, ça fera été et hiver (les Bradstreet sont difficiles à supporter par forte chaleur, d'après mes essais). Total : 133 €. Quelles différences ? Les Advendure alpine sont totalement plates. Le talon des Bradstreet est légèrement surélevé par rapport à la pointe des pieds. Mais, surtout, les Bradstreet sont des """"taille"""" haute / tige haute, c'est-à-dire que la chaussure arrive au moins à la cheville voir la dépasse. Les Adventure alpine sont des """"taille"""" basse / tige basse, donc l'inverse : les chaussures n'arrivent pas la cheville.

    J'ai également acheté la paire de chaussures pas tout à fait à ma taille dans le magasin du centre-ville. Ça s'avère être des Clarks Stafford Park5 basses bleu marine. Vu le tissu et les trous, on est plutôt sur un modèle d'été. C'était aussi du déstockage, donc le prix était cassé, mais je ne m'en souviens plus. La critique est unanime : ça fait vieux. Je ne trouvais pas… Une fois qu'on me l'a dit et argumenté (forme, aspect jaunâtre de la semelle, etc.), ouais, en effet, ça fait chaussures de vieux…

    Entre les discussions entre collègues et l'achat, 5 mois se sont écoulés. Cinq mois de doutes, de "j'ai pas envie", de "ça va servir à rien", de "je ne sais pas quoi choisir", de "ça ne me ressemble pas" et de discussions en boucle. Si l'on regarde bien, en plus de me suggérer un modèle de chaussures en le portant, la principale qualité de mes collègues a été une capacité de projection ("ça t'irait bien") que je n'ai pas (par manque de confiance en moi ou parce que, vraiment, des fringues, ça ne me parle pas ?). Merci à eux pour leur persévérance. :)

    Reste à trouver le bon serrage des lacets. J'avais serré à fond, comme un fou, afin que mon pied ne bouge pas afin d'éviter les ampoules. Grave erreur : ça étouffe le pied et ça fait encore plus mal. Il faut pouvoir passer un peu moins d'un doigt entre l'arrière du pied et l'arrière de la chaussure. Au final, il m'a fallut deux semaines d'adaptation et deux mois de pansements quotidiens pour que mes pieds se fassent aux chaussures.



    Maintenant, ce que tout le monde veut savoir : est-ce que l'investissement est rentable ? Depuis le début de la dernière semaine d'août 2019, à l'exception de trois semaines / un mois, j'ai porté exclusivement mes Bradstreet. Après 7 mois, Les semelles ne prennent pas l'eau au contact du moindre sol mouillé. Elles ne sont pas trouées du tout. Après 7 mois d'utilisation, elles ne sont même pas au premier stade d'usure de mes anciennes chaussures. De mémoire, cette paire m'a coûté 80 €. 80 € c'est environ 3 fois 25 € (prix de mes anciennes chaussures). Si celles à 25 € ont d'énormes trous dans la semelle après deux mois, on s'attend à ce que les Timberland tiennent au moins six mois. C'est chose faite. Je suis donc satisfait. \o/

    Alors oui, les semelles extérieures sont râpées à plusieurs endroits et les semelles intérieures sont profondément déchirées au niveau des talons et des gros orteils (photo après trois mois d'utilisation quotidienne ; photo après sept mois). Le moment de m'équiper de semelles avec du """"gel"""" (élastomère thermoplastique) dont on me rebat les oreilles ?

    Au final, les chaussures à 25 € ne sont pas toutes nazes : mes pieds mettent à dure épreuve les semelles, il faut croire. Comme celles de mes Timberland sont plus épaisses et moins flexibles / souples, forcément qu'elles tiennent plus longtemps. Cela signifie également que je ne suis pas lié à une marque : n'importe quel modèle de chaussures avec des semelles épaisses me conviendra. Cela signifie aussi, qu'il est probable qu'il existe des chaussures à la semelle tout aussi épaisse / résistante pour un prix plus modique que celui des Timberland.

    Je prévois déjà mon prochain blocage. Ce sera lors du renouvellement, lorsque mes chaussures Timberland seront fichues. Les modèles que je possède actuellement n'existeront plus par effet de mode, ce qui signifie, qu'il faudra prendre le temps de chercher leur remplaçante… ou de copier à nouveau sur des gens de confiance.



    J'avais un problème d'usure similaire avec mes chaussons. Les derniers ont fait 10 mois. J'ai décidé d'en acheter des plus costauds et donc plus chers. Va pour des pantoufles en velours à 27,99 € chez Damart. Les semelles sont plus épaisses que sur mes anciens chaussons, donc ça devrait le faire. Il est encore trop tôt pour me prononcer : ça fait seulement 7 mois (dont 4 mois à temps complet) que je les porte. Le tissu des semelles intérieures s'est totalement déchiré, mais, contrairement aux modèles de pantoufles que je possédais avant, cela ne signifie pas que la semelle commence à de désintégrer et qu'elle va libérer de la """"mousse"""" un peu partout.



    Au final, qu'ai-je appris ?

    • Je note la difficulté pour acheter des pompes fabriquées en France avec des matières premières françaises. Difficile également d'acheter en dehors des grands groupes, mais je présume que mon choix arrêté pour des chaussures de la marque Timberland ainsi que celui de ne pas acheter sur le web ne sont pas étrangers à cette difficulté… Depuis ces achats, on m'a parlé de plusieurs friperies (fringues et chaussures d'occasion) de ma ville. Il faudra que j'aille y jeter un œil ;

    • Ne pas faire sécher ses chaussures avec un radiateur. Ça les déforme, donc elles prendront l'eau encore plus facilement. Mieux vaut disposer de plusieurs paires de chaussures (ça permet également de les laisser respirer / s'aérer après une bonne transpiration) ou, privilégier l'achat d'une paire de chaussures qui résistera à la flotte après 3 semaines d'utilisation ;

    • Ne te fais pas embobiner : tout vendeur te promettra confort, élégance et te vendra sa godasse comme un élément de baroudeur gnagnagna. De même, ne te fais pas avoir : de base, au moment où tu les essayes, des chaussures doivent te convenir, t'aller, ne pas te faire de mal. Ne te fais pas avoir avec des "elles vont s'adapter à votre pied" et autre baratin. Un vieux sage m'a donné ce conseil. Je ne l'ai pas suivi pour les Clarks au motif que, quand même, cette vieille dame tient une boutique respectable en plein centre-ville depuis plus de 20 ans… Mais non, le vieux sage avait raison : la chaussure ne s'adaptera pas, car elle n'est pas souple à l'endroit précis où j'en ai besoin ;

    • Utiliser un imperméabilisant pour chaussures. Mes Timberland étant en nubuck (c'est écrit sur la fiche produit), il me fait un imperméabilisant pour nubuck / daim. Je n'ai pas encore acheté cela, car je voulais constater la durée de vie de mes chaussures sans artifice. Tu peux aussi acheter des chaussures imperméables à base de Gore-Tex (Téflon-like) ;

    • Au début, je me moquais des chaussures équipées, en même temps, de lacet et d'une fermeture à glissière (fermeture éclair) : c'est pour ceux qui veulent la facilité sans l'assumer, blabla. Puis, j'ai réfléchi. J'ai l'impression qu'il y a deux variables importantes en matière de fermeture de chaussures : permettre l'entrée du pied dans la chaussure et serrer le pied afin que la chaussure tienne, ne se déplace pas et ne fasse pas mal. Quand on trouve, à tâtons, le réglage qui nous convient pour serrer le pied, on ne souhaite pas le perdre lorsqu'on enlève / met la chaussure. L'entrée du pied dans la chaussure peut être alors galère, même avec un chausse-pied. Puisqu'il y a deux contraintes, il faut deux variables pour les stocker, donc, en pratique, deux objets. Le serrage du pied en continu sera assuré par les lacets, le fait d'insérer / retirer le pied de la chaussure sera assuré par la fermeture à glissière. Pas idiot. En tout cas, c'est ma théorie personnelle ;

    • Chaussures hautes / """"taille"""" haute / tige haute : la chaussure arrive au moins à la cheville voir la dépasse. Inversement, chaussures basses / """"taille basse"""" tige basse : les chaussures n'arrivent pas la cheville. Notons qu'il y a plusieurs variétés de chaque. Genre une chaussure haute comme une Timberland Bradstreet a rien à voir avec une chaussure haute comme une botte Timberland.
    Wed Apr 29 17:21:15 2020 - permalink -
    - http://shaarli.guiguishow.info/?XiDFnQ
  • E: /usr/share/initramfs-tools/hooks/growroot failed with return 1. - update-initramfs: failed for /boot/initrd.img-4.19.0-8-amd64 with 1.

    Ce matin, je veux appliquer les mises à jour de sécurité sur mon système Debian GNU/Linux Buster et…

    Paramétrage de linux-image-4.19.0-8-amd64 (4.19.98-1+deb10u1) ...
    /etc/kernel/postinst.d/initramfs-tools:
    update-initramfs: Generating /boot/initrd.img-4.19.0-8-amd64
    E: /usr/share/initramfs-tools/hooks/growroot failed with return 1.
    update-initramfs: failed for /boot/initrd.img-4.19.0-8-amd64 with 1.
    run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
    dpkg: erreur de traitement du paquet linux-image-4.19.0-8-amd64 (--configure) :
     installed linux-image-4.19.0-8-amd64 package post-installation script subprocess returned error exit status 1
    Des erreurs ont été rencontrées pendant l'exécution :
     linux-image-4.19.0-8-amd64
    E: Sub-process /usr/bin/dpkg returned an error code (1)



    Lançons update-initramfs nous-même :

    # update-initramfs -vuk 4.19.0-8-amd64
    Calling hook growroot
    Adding binary /sbin/sfdisk
    Adding library-link /lib/x86_64-linux-gnu/libfdisk.so.1.1.0
    Adding library /lib/x86_64-linux-gnu/libfdisk.so.1.1.0
    Adding library-link /lib/x86_64-linux-gnu/libsmartcols.so.1.1.0
    Adding library /lib/x86_64-linux-gnu/libsmartcols.so.1.1.0
    Adding library-link /lib/x86_64-linux-gnu/libtinfo.so.6.1
    Adding library /lib/x86_64-linux-gnu/libtinfo.so.6.1
    E: /usr/share/initramfs-tools/hooks/growroot failed with return 1.



    Regardons /usr/share/initramfs-tools/hooks/growroot (premier script qui termine en erreur) :

    # cat /usr/share/initramfs-tools/hooks/growroot
    #!/bin/sh
    set -e
    
    PREREQS=""
    case $1 in
        prereqs) echo "${PREREQS}"; exit 0;;
    esac
    
    . /usr/share/initramfs-tools/hook-functions
    
    ##
    copy_exec /sbin/sfdisk /sbin
    copy_exec /usr/bin/growpart /sbin
    […]



    Ça échoue sur « copy_exec /usr/bin/growpart ».

    # ls -lh /usr/bin/growpart
    ls: impossible d'accéder à '/usr/bin/growpart': Aucun fichier ou dossier de ce type



    Intéressant. Il vient d'où, ce fichier ?

    $ apt-file search /usr/bin/growpart
    cloud-guest-utils: /usr/bin/growpart

    Du paquet logiciel cloud-guest-utils. Cloud-init est utilisé par mon fournisseur de machines virtuelles et, en effet, je l'ai viré de mon VPS (machine virtuelle) depuis quelques mois. Pourquoi ça n'a pas supprimé le hook initramfs ?


    $ apt-file search /usr/share/initramfs-tools/hooks/growroot
    cloud-initramfs-growroot: /usr/share/initramfs-tools/hooks/growroot



    Il est installé par un autre paquet logiciel. Peut-être que ce paquet est toujours installé ?

    # apt-cache policy cloud-initramfs-growroot
    cloud-initramfs-growroot:
      Installé : (aucun)
      Candidat : 0.18.debian7
    […]



    Non. Peut-être y a-t-il de la configuration résiduelle ?

    # dpkg -l | grep cloud-initramfs-growroot
    #

    Non.



    """"Solution"""" : apt-get install --no-install-recommend cloud-initramfs-growroot && apt-get autoremove --purge cloud-guest-utils cloud-image-utils cloud-initramfs-growroot cloud-utils genisoimage qemu-utils.

    Wed Apr 29 11:44:26 2020 - permalink -
    - http://shaarli.guiguishow.info/?im_Wlg
  • rivières de shaarlis - GuiGui's Show - Oros links - GuiGui's Show - Oros links - GuiGui's Show - Oros links

    @Oros :


    Pour http://kosmogonia.fr/ et https://switchy.o2switch.net:2083/ le wget fonctionne bien.

    Ils sont pourtant dans le même réseau (/24) que les shaarlis auxquels tu n'accèdes pas. Donc, ce n'est pas un problème de routage. Ce n'est très probablement pas un filtrage global à l'entrée du réseau d'o2switch (dans ce cas-là, on bloque /24 par /24, en général).
    Quand tu dis que tu n'arrives pas à accéder, ça veut dire quoi ? Est-ce que la poignée de main TCP s'effectue ou alors tu n'obtiens même pas de réponse à ton TCP SYN ?


    Pour 109.234.161.33, 109.234.161.21, kosmogonia.fr, switchy.o2switch.net, j'ai :

    Oui, c'est normal. Par défaut, l'implémentation GNU/Linux de traceroute bosse au-dessus d'UDP. o2switch bloque cela. J'ai le même résultat que toi. En revanche, traceroute -T -p 443 (TCP + port 443) fonctionne impec.

    Sun Apr 26 21:22:04 2020 - permalink -
    - https://www.ecirtam.net/links/?8jLZBg
  • rivières de shaarlis - GuiGui's Show - Oros links - GuiGui's Show - Oros links

    @Oros :


    Genre warriordudimanche.net ou lien.shazen.fr ne me retournent aucune réponse.

    T'arrives à wget http://kosmogonia.fr/ ou https://switchy.o2switch.net:2083/ depuis ton serveur ? Un traceroute / mtr / traceroute -T -p 443 ?
    J'ai voulu tester avec RIPE Atlas, mais il n'y a pas de sonde participante dans le réseau d'Edis.


    $ dig +short warriordudimanche.net
    109.234.161.33
    
    $ dig +short lien.shazen.fr
    109.234.161.21
    
    $ whois 109.234.161.33
    […]
    route:          109.234.161.0/24
    descr:          o2switch Internet Routing
    origin:         AS50474
    Sun Apr 26 19:59:03 2020 - permalink -
    - https://www.ecirtam.net/links/?L7coZg
  • [ NDLR : rivières de shaarlis ] vzdump(1) [ utiliser parallel gzip avec vzdump @ proxmox ] - GuiGui's Show - Liandri's Links. - GuiGui's Show - Oros links - GuiGui's Show - Oros links - GuiGui's Show - Liandri's Links.

    @Liandri :


    Du coup, si vous souhaitez un ajout ou retrait de la river, vous pouvez me contacter par mail ou Shaarli interposé, mais je me laisse le droit de validation finale. Point.

    C'est l'évidence même, donc OK pour moi.

    Sun Apr 26 18:37:43 2020 - permalink -
    - https://shaar.libox.fr/?grLcLg
  • rivières de shaarlis - GuiGui's Show - Oros links

    @Oros :


    Là où j'ai besoin d'aide c'est de trouver si dans le lot, il y en a où l'erreur était temporaire ou s'ils ont changé d'URL.

    Je m'en suis occupé.



    Au début, on a 208 shaarlis marqués invalides.



    Combien y a-t-il de domaines non associées avec une IPv6 ou une IPv4 ? Boucle for + commande `host'.

    • 130 domaines n'ont pas d'adresse v4/v6. Le domaine shaarli.fr, non renouvellé donc supprimé de fr., représente 85 URLs à lui seul ;

    • 78 en ont au moins une.



    Quel contenu est pointé par ces 78 URLs ? Allons-voir avec wget --quiet --max-redirect=0 --connect-timeout=10 --tries=1 -O - (un seul essai, on tente d'établir la connexion TCP durant 10 secs maximum, on refuse les redirections HTTP). Quand on a une réponse, on grep « pubDate » afin de nous assurer qu'il s'agit d'un flux RSS (et de voir la date du dernier shaarli publié).

    • 10 shaarlis sortent avec le code retour 0. C'était donc une erreur temporaire ;

    • 15 sortent en 4 : timeout TCP. Ça peut être dû à une IPv6 foireuse. On applique un wget -4 sur cette liste : on récupère aucun shaarli, donc c'est tout des shaarlis disparus ;

    • 11 sortent en 5 : erreur x509. On utilise wget --no-check-certificate. 9 URL passent en code retour 8. 2 URLs sont des shaarlis OK avec un certificat x509 invalides ;

    • 37 sortent en 8 : erreur HTTP. + les 9 URL du point précédent. 46 URL en tout. Ça peut être une redirection. On utilise wget sans interdire la redirection + grep 'Emplacement' | tail -n 1 pour choper l'URL de destination et l'ajouter à la liste.

      • On joue wget | grep 'erreur'. On a 16 URLs OK, 30 erreurs (404, 403, 410, 500).
        • J'ai regardé les URL en erreur, j'ai remonté la racine, j'ai essayé des sous-domaines comme shaarli ou links : les shaarlis n'existent plus, sauf dans 4 cas ;

        • Parmi les 16 URLS OK, seules 7 amènent à un flux RSS shaarli. Il s'agit principalement de redirections HTTP vers HTTPS ;
    • 5 présentent un résultat qui n'est pas du RSS. J'ai vérifié à la main : soit le site web entier n'existe plus, soit je n'ai pas trouvéé de lien vers le shaarli (abandon de shaarli probable).



    Au final, dans la liste https://github.com/Oros42/shaarlis_list/blob/master/shaarlis_HS.json , seuls les shaarlis suivants fonctionnent et peuvent être ajoutés à la rivière :

    • http://lien.shazen.fr/?do=rss

    • http://lienspersos.accessibilisation.net/shaarli/?do=rss (il est en double dans la liste « shaarlis_HS.json »)

    • http://shaarli.epha.se/?do=rss

    • https://j-mad.com/shaarli/?do=rss (il est présent en HTTP et en HTTPS dans la liste « shaarlis_HS.json », la redirection HTTP => HTTPS fait tomber le site HTTP dans code retour 8). Déjà présent dans « shaarlis.json », mais passage à HTTPS ;

    • https://jcfrog.com/shaarli41/?do=rss . (il est en double, HTTP et HTTPS dans « shaarlis_HS.json »). Déjà présent dans « shaarlis.json », mais passage à HTTPS ;

    • https://warriordudimanche.net/feed.php?rss/categorie015 OU https://warriordudimanche.net/feed/rss

    • https://shaarli.hoab.fr/

    • https://shaarli.yggz.org/?do=rss

    • https://jeekajoo.eu/links/?do=rss . Déjà présent dans « shaarlis.json », mais changement du nom de domaine ;

    • https://shaarli.librement-votre.fr/?do=rss

    • https://chabotsi.fr/links/?do=rss . Déjà présent dans « shaarlis.json ». On peut aussi virer son doublon dysfonctionnel « https://chabotsi.fr/links?do=rss » ;

    • https://e-jim.be/liens/?do=rss



    Les shaarlis suivants ont besoin d'un ajustement avant de rejoindre la rivière :

    • https://shaarli.base-jump.info/?do=rss . Soit on intègre la version HTTP à la rivière, soit le certificat x509 doit être corrigé (il ne couvre pas le nom de domaine) ;

    • https://links.yosko.net/?do=rss . Certificat x509 qui ne couvre pas le nom de domaine + IPv6 HS ;

    • https://shaarli.callmematthi.eu/?do=rss . Code HTTP 410 sur les flux (RSS et Atom). Probablement une erreur de config' ;

    • https://links.green-effect.fr/?do=rss . (il est en triple, HTTP, HTTPS, URL invalide dans « shaarlis_HS.json »). IPv6 HS. Dans « shaarlis.json », on peut virer son doublon inutile « http://links.green-effect.fr/?do=rss?do=rss » ;

    • https://web.amok.lu/shaarli/?do=rss . IPv6 HS ;

    • https://ban.netlib.re/shaarli/?do=rss . IPv6 capricieuse (ne fonctionnait pas en début d'aprem, fonctionne depuis le milieu d'aprem).
    Sun Apr 26 18:32:16 2020 - permalink -
    - https://www.ecirtam.net/links/?Q3cjSw
  • Suggestion d'ajouts aux rivières shaarli

    @Liandri @Oros :

    Puisqu'on en est à jeter des gens dans les rivières, je propose les candidats suivants :

    • Ban - https://ban.netlib.re/shaarli/ - https://ban.netlib.re/shaarli/?do=rss ;

    • Johndescs - https://jonathan.michalon.eu/shaarli/ - https://jonathan.michalon.eu/shaarli/?do=rss ;

    Ces personnes causent essentiellement d'informatique (systèmes et réseaux) et de bricolage.

    Sat Apr 25 20:25:08 2020 - permalink -
    - http://shaarli.guiguishow.info/?cFoiEQ
  • Shaarli Flux River - Le COZO est dans une river - Antichesse (o ^ω^ o)

    @Antichesse :


    Je subodore que tout le mérite revient à certains de vos postes qui sont d'une extrême qualitayyy, que dis-je d'une importance crousssiale !

    Ce qui m'a fait basculer, c'est très clairement ce tutoriel : Retirer ses chaussettes - Strawberry. Pour l'instant, je ne parviens pas à le mettre en œuvre, donc je suis tristesse.

    Bon, c'est un peu aussi pour les shaarlis qui causent d'informatique, particulièrement de technos relatives au développement. Je comprends pas tout, car ce n'est pas mon domaine, mais c'est le but : m'ouvrir l'esprit.


    Aller en voici quelques uns pour la gloire

    J'veux pas dire, mais deux shaarlis de la liste sont signés Animal alors que les autres ont un seul de leur shaarli dans la liste. #injustice. J'vous laisse voir ça entre vous, hein. :P


    @GuiGui merci pour ta recommandation ;)

    De rien. :)


    P.S : je suis d'accord vis-à-vis des PR sur GitHub, mieux vaut se monter un Gitea chez soi.

    Ou Gogs, qui a pour lui l'humour de son nom (peut-être s'agit-il d'une description réaliste du langage de programmation dans lequel il est codé ?).

    Sat Apr 25 20:08:03 2020 - permalink -
    - https://cakeozolives.com/shaarli-antichesse/?E6xijA
  • Utiliser les entêtes HTTP "de sécurité", c'pas d'la tarte - GuiGui's Show - Oros links - GuiGui's Show - Oros links - GuiGui's Show - Oros links

    @Oros :


    Ça c'est que ça doit merder au moment où me message de test est chiffré via GPG.

    Tristitude.


    Peut être qu'il y a un problème avec ta clé public.

    Ben non puisque j'ai le même problème quand j'essaye de recréer ton serveur. Si l'on suit ton raisonnement, ça signifierait que ta clé publique GPG est invalide, ce qui est impossible.


    ctrl+b pour afficher le panneau. Puis à la place de «Marque-pages» tu peux choisir «Check certificate».

    Uhuhu !


    Pas «un» mais «des» serveurs tiers.

    Ça n'invalide pas mon raisonnement. ^^


    Pour le 6h non car si t'as un certif Let's Encrypt qui est mis à jour, t'as un alerte assez longtemps.

    Très bon point. Il est valable avec toutes les autorités de certification, d'ailleurs.

    Sat Apr 25 20:00:24 2020 - permalink -
    - https://www.ecirtam.net/links/?Z5yjdQ
  • Réduire sa traçabilité bancaire - Petits liens en vrac... - GuiGui's Show - Oros links - GuiGui's Show - Oros links

    @Oros :


    Faut pas retirer de grosses coupure.

    Je suis bien d'accord, mais c'est chiant si ton objectif est de retirer une somme d'argent proche du montant max des retraits (c'est toi qui as écrit ça)


    En plus du fait que je connais le crochetage ^_^

    Les tutos de crochetage m'envoient du rêve, mais je n'ai pas la patience. :D

    Sat Apr 25 19:58:14 2020 - permalink -
    - https://www.ecirtam.net/links/?jJBcZQ
  • [ NDLR : rivières de shaarlis ] vzdump(1) [ utiliser parallel gzip avec vzdump @ proxmox ] - GuiGui's Show - Liandri's Links. - GuiGui's Show - Oros links - GuiGui's Show - Oros links

    @Oros :


    Et puis le mien permet de faire pause dans le rafraîchissement de la page :-)

    Haha. Best killer feature ever. :D


    C'est ce nombre élevé qui me fait chier à traiter à la main.

    Il me semble que tu marques les shaarlis HS dans un fichier séparé, donc ça ne devrait pas être gênant ?
    Comment peut-on aider sur cette problématique ?

    Sat Apr 25 19:55:11 2020 - permalink -
    - https://www.ecirtam.net/links/?quSlvQ
  • [ NDLR : rivières de shaarlis ] vzdump(1) [ utiliser parallel gzip avec vzdump @ proxmox ] - GuiGui's Show - Liandri's Links. - GuiGui's Show - Liandri's Links. - GuiGui's Show - Liandri's Links. - GuiGui's Show - Oros links

    @Oros :


    Du coup, c'est aussi arrivé chez moi https://ecirtam.net/shaarlirss/

    Youhou \o/ Merci.

    Sat Apr 25 19:54:23 2020 - permalink -
    - https://www.ecirtam.net/links/?tEQMtw
Links per page: 20 50 100
◄Older
page 68 / 279
Newer►
Mentions légales identiques à celles de mon blog | CC BY-SA 3.0

Shaarli - The personal, minimalist, super-fast, database free, bookmarking service by the Shaarli community