[{"content":" Bienvenue # Bienvenue sur ce blog par Marc JESTIN,\nprestataire de services indépendant et libre.\nPour faire appel à mes services, rendez-vous sur\nhttps://php2.marcjestin.fr/fr/contact.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/","section":"","summary":"Bienvenue # Bienvenue sur ce blog par Marc JESTIN,\nprestataire de services indépendant et libre.\nPour faire appel à mes services, rendez-vous sur\nhttps://php2.marcjestin.fr/fr/contact.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","title":"","type":"page"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/areas/","section":"Areas","summary":"","title":"Areas","type":"areas"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"Bonjour,\nCe jour, je me rends sur un site web pour m\u0026rsquo;informer et chercher une réponse technique, comme à l\u0026rsquo;accoutumée, quand tout à coup !\nLa « sécurité » a bon dos !\nPréambule # La plupart des applications que vous utilisez sur vos ordiphones, voitures, bracelets, colliers, sonettes, cafetières, aspirateurs, cuvettes de chiotte, etc. sont connectées 24 heures sur 24 à des tonnes de serveurs qui téléchargent, stockent et dupliquent des quantités faramineuses de données.\nLes ordiphones, et derrière eux une armée d\u0026rsquo;autres produits comparables ; Les applications en tant que services et tout un tas d\u0026rsquo;autres concepts « modernes », « innovants » et « disruptifs » ont gagné !\nPour compléter ce tableau déjà bien peu reluisant, tout ce beau monde se « protège » avec CloudFlare.com. Entendez, lisez et voyez CloudFlare Incorporated, dont le sigle NASDAQ, NET, ne se gêne pas pour afficher les ambitions.\nLe « marketing de la bêtise et de la fainéantise » a le vent en poupe.\nTous ses indicateurs sont au vert.\nCette approche sordide qui consiste à se servir du fait que la plupart des humain·e·s sont des faibles d\u0026rsquo;esprit qui cherchent surtout à ne jamais avoir à faire le moindre effort.\n« Si c\u0026rsquo;est du tout cuit et du prémâché, c\u0026rsquo;est parfait !\nS\u0026rsquo;il faut réfléchir et penser par soi-même, c\u0026rsquo;est… mission impossible.\nOu alors le résultat est plus fumeux que fameux. »\nLe plan fonctionne « du feu de Dieu » ! 1\nSachez-le, CloudFlare Inc. et leurs alter-egos ne sont pas là pour plaisanter ni pour vos beaux yeux. Quoiqu\u0026rsquo;ils disent, cela a tout autant de valeur que le fameux « Don\u0026rsquo;t be evil » : celle que vous accordez à ces jolis mots.\nEn attendant, la réalité des faits est implacable.\nC\u0026rsquo;est fait. Mission accomplie. Un travail net et sans bavure : vous êtes non seulement dépendants·e·s, sous emprise, mais aussi sous contrôle et sous surveillance. 24 heures sur 24.\nVous avez mis la Gestapo dans votre poche.\nDe votre plein gré.\nEt vous n\u0026rsquo;avez aucun moyen de la faire sortir du produit dont vous croyez être « propriétaires ».\nPour ma part, je me passerai de ce site, comme de beaucoup d\u0026rsquo;autres choses.\nJe me sens bien plus en « sécurité » et je crois bien mieux protéger la « sécurité » des autres comme cela.\nAu passage, cela m\u0026rsquo;évite de financer directement ou indirectement l\u0026rsquo;effort de guerre et de puissance impériale qui ne respecte pas le droit qu\u0026rsquo;elle entend imposer aux autres de qui vous savez.\nMais pourquoi cela peut-il fonctionner aussi bien et aussi facilement ?\nJe me le demande plus.\nJ\u0026rsquo;ai compris certaines choses depuis belle heurette.\nParlons de sécurité # Parlons maintenant un peu de sécurité, puisque c\u0026rsquo;était l\u0026rsquo;objet.\nNon, ce n\u0026rsquo;est pas de sécurité qu\u0026rsquo;il s\u0026rsquo;agit # Un agent de sécurité qui me demande de baisser ma garde pour lui permettre d\u0026rsquo;assurer SA sécurité n\u0026rsquo;est pas un bon système. Jamais. Il faudrait être fou pour le penser plus.\nAu passage, les responsables de la sécurité des systèmes d\u0026rsquo;information apprécieront le « Si vous n\u0026rsquo;êtes pas autorisé·e à régler les paramètres réseau, essayez un autre réseau. ». 🤣\nMes données ont tant de fois fuité # Mes données personnelles ont fuité tellement de fois déjà via ces « grands maîtres » de la sécurité et ceux qui font appel à ces mêmes solutions de sécurité pré-mâchées que j\u0026rsquo;ai du mal à croire qu\u0026rsquo;ils sont à même de faire les meilleurs choix.\nEn réalité, ils n\u0026rsquo;en ont pas besoin # Les sachants sachent que les solutions de sécurité abouties, y compris celles de CloudFlare Incorporated, n\u0026rsquo;ont pas besoin d\u0026rsquo;exécuter des scripts ni d\u0026rsquo;accéder à l\u0026rsquo;intérieur de nos navigateurs web pour bien faire leur travail.\nOn peut faire de la sécurité proprement # Il est toujours possible de faire de la sécurité proprement et sans vassaliser une région du monde à une autre.\nCertes, cela demande de l\u0026rsquo;intelligence, de la compétence et de la détermination. Trois qualités que vous ne trouverez pas en grande quantité chez ces gens qui se font payer très cher en prétendant être des expert·e·s de quelque-chose et qui, à l\u0026rsquo;arrivée, ne font que copier-coller bêtement des recettes toutes prêtes, bien souvent sans en avoir tout compris.\nEt nous n\u0026rsquo;avons pas commencé à parler de valeurs ni d\u0026rsquo;intégrité…\nMoi, qui repense à ce grand maître du développement libre que j'ai croisé récemment, qui fait partie officiellement depuis 1998 d'une des communautés que je respecte le plus qui… communique avec une adresse de courriel Gmail… Au plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nÉpilogue # Je ne dis pas dans quel domaine le site intervient ni de qui il s\u0026rsquo;agit, mais sachez que cela rend la forfaiture encore plus abjecte et minable. Quand on prétend tenir le rôle que cette entreprise tient, on se respecte un minimum.\nJe ne peux donc pas vous dire que l\u0026rsquo;entreprise propriétaire du site en question prétend former vos développeurs et vos brillants responsables sécurité… Et donc je ne le dirai pas.\nBotus et mouche cousue !\nExpression choisie pour rappeler que la manipulation des « masses laborieuses » n\u0026rsquo;est pas un phénomène nouveau dans l\u0026rsquo;histoire de l\u0026rsquo;Humanité.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/posts/cloudflare-de-plus-en-plus-intrusif-la-gestapo-chez-vous-et-avec-vous-24-heures-sur-24/","section":"Posts","summary":"Bonjour,\nCe jour, je me rends sur un site web pour m’informer et chercher une réponse technique, comme à l’accoutumée, quand tout à coup !\nLa « sécurité » a bon dos !\nPréambule # La plupart des applications que vous utilisez sur vos ordiphones, voitures, bracelets, colliers, sonettes, cafetières, aspirateurs, cuvettes de chiotte, etc. sont connectées 24 heures sur 24 à des tonnes de serveurs qui téléchargent, stockent et dupliquent des quantités faramineuses de données.\n","title":"CloudFlare de plus en plus intrusif : la Gestapo chez vous et avec vous 24 heures sur 24","type":"posts"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/tags/donn%C3%A9es-personnelles/","section":"Tags","summary":"","title":"Données Personnelles","type":"tags"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/categories/enjeux/","section":"Categories","summary":"","title":"Enjeux","type":"categories"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/areas/informatique-et-technologies-num%C3%A9riques/","section":"Areas","summary":"","title":"Informatique Et Technologies Numériques","type":"areas"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/tags/libert%C3%A9/","section":"Tags","summary":"","title":"Liberté","type":"tags"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/tags/s%C3%A9curit%C3%A9/","section":"Tags","summary":"","title":"Sécurité","type":"tags"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/tags/surveillance/","section":"Tags","summary":"","title":"Surveillance","type":"tags"},{"content":"","date":"14 mai 2026","externalUrl":null,"permalink":"/fr/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/categories/anecdotes/","section":"Categories","summary":"","title":"Anecdotes","type":"categories"},{"content":"Bonjour,\nAujourd\u0026rsquo;hui, comme cela faisait un moment que je voyais des échecs de tentatives de connexion d\u0026rsquo;un groupe d\u0026rsquo;adresses suspect sur les journaux (logs) de mon serveur de messagerie Postfix / Dovecot, je suis passé voir les logs de l\u0026rsquo;outil de protection Fail2Ban.\nJ\u0026rsquo;ai vu passer une belle brochette d\u0026rsquo;adresses qui étaient retirées du bannissement temporaire :\n1 2 3 4 5 6 7 8 9 10 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.84/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.44/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.181/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.174/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.62/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.66/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.142/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.49/32 […] # et pas mal d\u0026#39;autres… Et un peu plus loin, des tentatives de connexion depuis ce même réseau qui continuaient tranquillement comme si de rien n\u0026rsquo;était :\n1 2 3 4 5 6 2026-05-12 xx:xx:xx WARN: 81.30.98.207 matched rule id xxx (warning: unknown[81.30.98.207]: SASL LOGIN authentication failed: (reason unavailable), sasl_username=xxxxxx) 2026-05-12 xx:xx:xx WARN: xxx more attempts in the next xxx seconds until 81.30.98.207/32 is banned 2026-05-12 xx:xx:xx WARN: 81.30.98.194 matched rule id xxx (warning: unknown[81.30.98.194]: SASL LOGIN authentication failed: (reason unavailable), sasl_username=xxxxxx) 2026-05-12 xx:xx:xx WARN: xxx more attempts in the next xxx seconds until 81.30.98.194/32 is banned […] # La liste est tout aussi longue… Le SASL Login authentication failed signifie qu\u0026rsquo;ils essaient de se connecter à des comptes utilisateurs sur le serveur, tout simplement. 1\nNous avons là des petits malins qui se sont adaptés aux outils de protection. Ils font de la force brute lente et distribuée.\nL\u0026rsquo;attaque par force brute (brute force attack), c\u0026rsquo;est le fait de tenter de se connecter et de répéter inlassablement l\u0026rsquo;opération. Les pirates utilisent généralement des listes d\u0026rsquo;identifiants et de mots de passes connus ou des dictionnaires pour finir, parfois, par réussir à se connecter.\nLa force brute lente et distribuée est une variante plus ingénieuse. Elle consiste à le faire à l\u0026rsquo;aide d\u0026rsquo;un groupe d\u0026rsquo;adresses sources et en respectant des intervalles entre chaque tentative depuis chacune des adresses.\nComme chaque IP ne tente sa chance qu\u0026rsquo;une ou deux fois toutes les quelques minutes, elle reste bien en dessous du seuil de xxx tentatives en xxx secondes.\nSi l\u0026rsquo;algorithme est sophistiqué, il est capable de déduire nos paramétrages de protection assez rapidement. Il peut alors se caler pour « passer sous le radar » et continuer son petit bonhomme de chemin jusqu\u0026rsquo;à, peut-être, un jour, réussir à casser un code d\u0026rsquo;accès à un compte.\nIci, ils font l\u0026rsquo;erreur de faire tourner l\u0026rsquo;algorithme sur un plage d\u0026rsquo;adresses IP facilement identifiable, ce qui a attiré mon attention.\nContrairement à pas mal d\u0026rsquo;autres adresses qui sont déjà « brulées » (inscrites dans les différents registres de veille que mes outils de sécurité utilisent automatiquement), ces adresses semblent ne pas avoir été déjà identifiées.\nJ\u0026rsquo;ai donc ajouté ce réseau manuellement dans la liste des réseaux bannis (bloqués) sur mon serveur.\nJ\u0026rsquo;en ai profité pour durcir considérablement les règles du « jeu » par rapport aux paramètres par défaut de Fail2Ban.\nCela va réduire considérablement le remplissage de mes logs.\nLa sécurité informatique est active bien plus que passive : notre stratégie n\u0026rsquo;est réellement efficiente que si nous avons le temps et les ressources pour surveiller les événements et nous y adapter.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nSASL = Simple Authentication and Security Layer, couche d\u0026rsquo;authentification et de sécurité simple.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/posts/attaque-par-force-brute-lente-distribuee-12-mai-2026/","section":"Posts","summary":"Bonjour,\nAujourd’hui, comme cela faisait un moment que je voyais des échecs de tentatives de connexion d’un groupe d’adresses suspect sur les journaux (logs) de mon serveur de messagerie Postfix / Dovecot, je suis passé voir les logs de l’outil de protection Fail2Ban.\nJ’ai vu passer une belle brochette d’adresses qui étaient retirées du bannissement temporaire :\n1 2 3 4 5 6 7 8 9 10 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.84/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.44/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.181/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.174/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.62/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.66/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.142/32 2026-05-12 xx:xx:xx INFO: Unbanning 81.30.98.49/32 […] # et pas mal d'autres… Et un peu plus loin, des tentatives de connexion depuis ce même réseau qui continuaient tranquillement comme si de rien n’était :\n","title":"Attaque par force brute lente distribuée, 12 mai 2026","type":"posts"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/ci-cd/","section":"Tags","summary":"","title":"Ci-Cd","type":"tags"},{"content":"Bonjour,\nIl est possible de désactiver IP v6 définitivement sur une machine qui n\u0026rsquo;en a pas besoin.\nAttention aux conséquences possibles sur certains services qui essaient de s\u0026rsquo;en servir !\nDésactiver ipv6 # Pour désactiver ipv6 (ip v6) dans une distribution Debian, il suffit d\u0026rsquo;éditer le fichier etc/sysctl.conf et d\u0026rsquo;ajouter ces lignes :\n1 2 3 4 5 net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.lo.disable_ipv6=1 net.ipv6.conf.all.autoconf=0 net.ipv6.conf.default.autoconf=0 La commande sysctl -p applique les paramètres immédiatement.\nRevenir à l\u0026rsquo;état par défaut # Pour revenir à l\u0026rsquo;état par défaut, nous pouvons :\nretirer ces lignes ou commenter ces lignes puis effectuer un sysctl -p.\nVérifier le statut en cours # La commande sysctl -a permet d\u0026rsquo;afficher les paramètres du système.\nNous pouvons affiner notre recherche avec\n1 2 3 4 5 sysctl -a |grep disable_ipv6 sysctl -a |grep ipv6 |grep autoconf sysctl -a |grep all.disable_ipv6 sysctl -a |grep default.disable_ipv6 # etc. Au plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/posts/comment-desactiver-ipv6-sur-une-debian/","section":"Posts","summary":"Bonjour,\nIl est possible de désactiver IP v6 définitivement sur une machine qui n’en a pas besoin.\nAttention aux conséquences possibles sur certains services qui essaient de s’en servir !\nDésactiver ipv6 # Pour désactiver ipv6 (ip v6) dans une distribution Debian, il suffit d’éditer le fichier etc/sysctl.conf et d’ajouter ces lignes :\n1 2 3 4 5 net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.lo.disable_ipv6=1 net.ipv6.conf.all.autoconf=0 net.ipv6.conf.default.autoconf=0 La commande sysctl -p applique les paramètres immédiatement.\n","title":"Comment désactiver ipv6 sur une Debian","type":"posts"},{"content":"Bonjour,\nLorsque nous travaillons sur des projets de développement, nous apprécions pouvoir compter sur notre gestionnaire de dépôt pour réaliser des opérations automatiquement lorsque se produisent certains événements.\nC\u0026rsquo;est le cas ici pour moi lorsque je commit mes modifications dans ce blog Hugo : un script exécute la compilation et transfère les modifications sur le serveur sans que j\u0026rsquo;aie à m\u0026rsquo;en préoccuper.\nNous parlons ici bien sûr des crochets client (côté machine de développement).\nHistoriquement, et par défaut, nous créons des crochets (hooks) dans le dossier hooks caché dans les méandres du dossier .git.\nDeux inconvénients à cela :\nla plupart des EDI ne nous donnent pas accès facilement à ce dossier (pour nous protéger) ; les fichiers de crochets sont dans un espace non suivi par le gestionnaire de versions. Je présente ici une méthode simple et pratique pour gérer les crochets gits client.\nCréation des crochets (hooks) git dans un dossier du projet # Nous pouvons créer un dossier hooks dans la racine de notre projet et y créer et éditer nos scripts.\nSans oublier bien sûr de les rendre exécutables avec le chmod u+x qui va bien. Pour indiquer à git d\u0026rsquo;utiliser ce dossier en lieu et place du dossier par défaut .git/hooks dans le projet en cours, nous utilisons la commande\n1 git config --local core.hooksPath hooks L\u0026rsquo;argument --local est généralement omis car c\u0026rsquo;est le comportement par défaut. Dorénavant, sans que nous ayons besoin de « bidouiller » comme avant la version 2.9 de git, et sauf mention contraire dans gitignore, nos crochets git (hooks) sont sauvegardés et versionnés avec le reste de notre projet.\nNiveaux local, global et system # Il est possible de définir des crochets git\nau niveau local comme nous venons de le voir ; au niveau global et au niveau system (sous réserve de disposer des privilèges associés) Il est possible d\u0026rsquo;indiquer un chemin absolu ou relatif.\nNous pouvons ainsi adopter la même convention pour tous nos projets, avec la variante immédiate de la commande au niveau projet :\n1 git config --global core.hooksPath hooks git ira voir dans le dossier hooks du dépôt dans lequel nous nous trouvons lorsque nous l\u0026rsquo;exécutons.\nQuels sont les fichiers impactés ? # Même si nous n\u0026rsquo;avons pas besoin de les éditer, il est bon de savoir où ils sont par défaut dans Debian et Linux généralement :\nlocal : .git/config ; global : ~/.gitconfig et system : /etc/gitconfig. Ces fichiers sont créés si nécessaire (ils n\u0026rsquo;existent pas s\u0026rsquo;il n\u0026rsquo;y a rien à mettre dedans).\nVérifier la configuration qui s\u0026rsquo;applique # La commande simple et laconique qui retourne le paramètre qui s\u0026rsquo;applique est :\n1 git config --get core.hooksPath Nous obtenons plus d\u0026rsquo;informations avec :\n1 git config --list --show-origin | grep core.hookspath Si plusieurs paramètres existent, ils sont listés ; les niveaux sont indiqués lisiblement via les chemins des fichiers. Exemple :\n1 2 3 file:/etc/gitconfig core.hookspath=/usr/local/share/git-core/hooks file:/home/user/.gitconfig core.hookspath=/home/user/globalhooks file:.git/config core.hookspath=hooks =\u0026gt; C\u0026rsquo;est hooks (défini dans le cadre du projet) qui s\u0026rsquo;applique ici.\nDans un tel cas, cela vaut sûrement la peine d\u0026rsquo;aller voir ce qu\u0026rsquo;il y a aux niveaux global et system pour savoir si nous avons intérêt à reprendre tout ou partie de ce qui est prévu là-bas au niveau du projet. Supprimer un paramétrage personnalisé # Pour revenir à l\u0026rsquo;état par défaut de git, ou pour supprimer sélectivement un des paramètres, nous disposons des commandes :\n1 2 3 4 5 6 # niveau dépôt git config --local --unset core.hooksPath # niveau global git config --global --unset core.hooksPath # niveau system git config --system --unset core.hooksPath Quel niveau s\u0026rsquo;applique ? # Le niveau le plus proche l\u0026rsquo;emporte : Local \u0026gt; Global \u0026gt; System \u0026gt; Default.\nSi nous avons défini un paramètre au niveau d\u0026rsquo;un dépôt (local), c\u0026rsquo;est celui-ci qui s\u0026rsquo;applique.\nSinon, le paramètre au niveau global et ainsi de suite.\nEn l\u0026rsquo;absence de paramétrage spécifique, c\u0026rsquo;est la valeur par défaut qui s\u0026rsquo;applique : .git/hooks dans le dépôt en cours.\nDésactiver les crochets (hooks) # En cas de besoin, il suffit d\u0026rsquo;indiquer le dossier /dev/null.\nCeci peut être utile lorsque nous voulons exécuter une commande précise sans déclencher les scripts qui devraient en principe être exécutés :\n1 git -c core.hooksPath=/dev/null ... Au plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nDocumentation officielle : https://git-scm.com/docs/git-config#Documentation/git-config.txt-corehooksPath.\n","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/posts/comment-mieux-gerer-les-crochets-hooks-git-et-les-integrer-aux-suivis-de-versions-du-depot/","section":"Posts","summary":"Bonjour,\nLorsque nous travaillons sur des projets de développement, nous apprécions pouvoir compter sur notre gestionnaire de dépôt pour réaliser des opérations automatiquement lorsque se produisent certains événements.\nC’est le cas ici pour moi lorsque je commit mes modifications dans ce blog Hugo : un script exécute la compilation et transfère les modifications sur le serveur sans que j’aie à m’en préoccuper.\nNous parlons ici bien sûr des crochets client (côté machine de développement).\n","title":"Comment mieux gérer les crochets (hooks) git et les intégrer aux suivis de versions du dépôt","type":"posts"},{"content":"Bonjour,\nDocker est pratique pour monter des projets pour le plaisir d\u0026rsquo;apprendre, de tester, d\u0026rsquo;approfondir, etc.\nIl arrive souvent que nous ayons besoin de faire du ménage.\nVoici un petit pense-bête.\nFaire l\u0026rsquo;inventaire des données persistantes # Bien souvent, nous créons des données dans des dossiers du système hôte.\nIl convient d\u0026rsquo;en maintenir un inventaire à jour et de veiller à les sauvegarder et / ou supprimer lorsque nous en avons terminé.\nTracer les éventuelles modifications périphériques # Avons-nous créé ou modifié des fichiers ou des configurations périphériques ?\nSi oui, et si nous avons travaillé comme il faut, nous avons tracé ces modifications.\nC\u0026rsquo;est le moment de vérifier tout cela de manière à ne pas laisser traîner des choses.\nC\u0026rsquo;est beaucoup plus compliqué si nous avons\nutilisé des « outils miracles » qui ne nous disent pas tout ce qu\u0026rsquo;ils font ou suivi tous les conseils qu\u0026rsquo;une IA nous a donnés sans prendre de notes structurées ni de recul… Le risque ? Un exemple au hasard : oublier de supprimer des tâches cron qui peuvent perturber le bon fonctionnement d\u0026rsquo;autres services.\nArrêter et supprimer les conteneurs # Pour arrêter et supprimer les conteneurs, nous nous plaçons dans le dossier du projet et utilisons, avec ou sans options,\n1 docker compose down Sous réserve d\u0026rsquo;avoir bien vérifié que nous les avons sauvegardés si besoin et que nous ne nous en servons plus, nous pouvons supprimer les volumes et les images associés avec ces options :\n--volumes (-v) supprime les volumes ; --rmi all supprime les images. Vérifier l\u0026rsquo;état du système # Les commandes simples pour lister les conteneurs, les volumes et les réseaux ne font jamais de mal.\n1 2 3 docker ps -a docker volume ls docker network ls S\u0026rsquo;il reste quelque-chose qui ne devrait pas être là, nous le ciblons spécifiquement avec des commandes de suppression, par exemple :\n1 2 3 docker rm \u0026lt;ID_ou_NOM_DU_CONTENEUR\u0026gt; docker volume rm \u0026lt;NOM_DU_VOLUME\u0026gt; docker network rm \u0026lt;NOM_DU_RESEAU\u0026gt; Sauvegarder et / ou supprimer l\u0026rsquo;infrastructure hôte # Une fois le nettoyage vérifié côté Docker,\nnous archivons ou pas, puis nous supprimons les fichiers de configuration (docker-compose.yml et autres) et le dossier associé au projet. Au plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/posts/comment-purger-un-ensemble-de-services-stack-docker/","section":"Posts","summary":"Bonjour,\nDocker est pratique pour monter des projets pour le plaisir d’apprendre, de tester, d’approfondir, etc.\nIl arrive souvent que nous ayons besoin de faire du ménage.\nVoici un petit pense-bête.\nFaire l’inventaire des données persistantes # Bien souvent, nous créons des données dans des dossiers du système hôte.\nIl convient d’en maintenir un inventaire à jour et de veiller à les sauvegarder et / ou supprimer lorsque nous en avons terminé.\n","title":"Comment purger un ensemble de services (stack) Docker","type":"posts"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/courriel/","section":"Tags","summary":"","title":"Courriel","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/crochet/","section":"Tags","summary":"","title":"Crochet","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/debian/","section":"Tags","summary":"","title":"Debian","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/default/","section":"Tags","summary":"","title":"Default","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/d%C3%A9truire/","section":"Tags","summary":"","title":"Détruire","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/categories/devops/","section":"Categories","summary":"","title":"DevOps","type":"categories"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/dossier/","section":"Tags","summary":"","title":"Dossier","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/effacer/","section":"Tags","summary":"","title":"Effacer","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/%C3%A9teindre/","section":"Tags","summary":"","title":"Éteindre","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/fail2ban/","section":"Tags","summary":"","title":"Fail2ban","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/git/","section":"Tags","summary":"","title":"Git","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/global/","section":"Tags","summary":"","title":"Global","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/hook/","section":"Tags","summary":"","title":"Hook","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/ip/","section":"Tags","summary":"","title":"Ip","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/ipv4/","section":"Tags","summary":"","title":"Ipv4","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/ipv6/","section":"Tags","summary":"","title":"Ipv6","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/liste-grise/","section":"Tags","summary":"","title":"Liste Grise","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/local/","section":"Tags","summary":"","title":"Local","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/mailcow/","section":"Tags","summary":"","title":"Mailcow","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/messagerie-%C3%A9lectronique/","section":"Tags","summary":"","title":"Messagerie Électronique","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/microsoft/","section":"Tags","summary":"","title":"Microsoft","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/postfix/","section":"Tags","summary":"","title":"Postfix","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/purger/","section":"Tags","summary":"","title":"Purger","type":"tags"},{"content":"Bonjour,\nPour que notre serveur de messagerie soit correctement traité par les serveurs de Microsoft, nous devons signer les contrats SNDS (Smart Network Data Services) et JMRP (Junk Mail Reporting Partner Program) de Microsoft en nous rendant sur leur serveur https://postmaster.live.com/snds/JMRP.aspx?wa=wsignin1.0.\nPas de bol : le courriel de vérification d\u0026rsquo;adresse envoyé par leur serveur ressemble trop à du spam.\nPremière mauvaise nouvelle # Pour commencer, nous devons créer un compte Microsoft.\nAh bon, il faut créer un compte Microsoft pour simplement pouvoir déclarer son serveur de messagerie et quelques informations, informations que nous ne devrions pas à avoir besoin d\u0026rsquo;aller saisir manuellement.\nLa démence narcissique n\u0026rsquo;a pas de limite chez ces gens-là…\nDont acte, essayons de « jouer le jeu », puisqu\u0026rsquo;on nous dit qu\u0026rsquo;il faut le faire.\nJe décide de prendre mon courage à deux mains et de créer un compte Microsoft pour que mon tout nouveau serveur de messagerie ne soit pas trop pénalisé par d\u0026rsquo;autres décisions arbitraires, puériles et imbéciles.\nLe courriel de vérification d\u0026rsquo;adresse n\u0026rsquo;arrive pas # Lorsque je renseigne une adresse de courriel pour créer ce compte, je ne reçois pas le courriel avec le code de confirmation après quelques minutes.\nJe me rends alors dans le tableau de bord de mon outil anti-spam, pour découvrir que le courriel de Microsoft a été détecté comme du spam potentiel. Et pas qu\u0026rsquo;un peu !\n1 2 3 4 5 6 7 8 9 FUZZY_DENIED (7.885743) [1:c7f2556fdf:0.56:txt] WHITELIST_SPF_DKIM (-3) [microsoft.com:d:+,microsoft.com:s:+] RBL_SENDERSCORE_REPUT_4 (2) [52.101.46.92:from] BAD_REP_POLICIES (2) DWL_DNSWL_LOW (-1) [microsoft.com:dkim] MID_RHS_NOT_FQDN (0.5) MIME_GOOD (-0.1) [multipart/alternative,text/plain] MX_GOOD (-0.01) [] IP_REPUTATION_HAM (-0.005001) [asn: 8075(0.00), country: US(-0.01), ip: 52.101.46.92(0.00)] Pour résumer,\nLes éléments clefs de vérification sont bons (SPF, DKIM) mais Trop d\u0026rsquo;éléments entraînent une suspicion forte de spam : Le message ressemble à des modèles très courants dans les courriels de spam ou d\u0026rsquo;arnaques ; Il est très bref et propose un lien suspect ; l\u0026rsquo;adresse IP de Microsoft a servi à l\u0026rsquo;envoi de courriels qui ont été signalés. En conséquence, l\u0026rsquo;outil anti-spam de Mailcow, Rspamd, attribue un score de 8,27 à ce message, ce qui est très élevé. (Plus le score est élevé dans les valeurs positives, plus la probabilité que ce soit du spam est importante.)\nLe message passe en « liste grise » (grey list).\nMon serveur effectue un « refus temporaire » (soft reject) : il rejette le message et indique au serveur émetteur d\u0026rsquo;attendre un peu et d\u0026rsquo;essayer à nouveau un peu plus tard.\nUn comportement de (mauvais) spammeur dans les minutes qui suivent… # Le serveur de Microsoft ne réalise pas d\u0026rsquo;autres tentatives pour déposer son message dans mon serveur de messagerie dans les 10 minutes qui suivent.\nCela ressemble à un comportement des mauvais programmes de spammeurs et c\u0026rsquo;est justement ce comportement qui justifie l\u0026rsquo;utilisation des listes grises (grey lists) dans Rspamd : L\u0026rsquo;outil anti-spam considère que les spammeurs ne vont pas repasser. C\u0026rsquo;est partiellement vrai (et donc globalement faux), mais peu importe…\nLe second courriel a un score bien plus raisonnable # Faute de nouvelles au bout de 10 minutes, je prends les devants.\nComme j\u0026rsquo;ai horreur de perdre mon temps, je modifie mes seuils dans Rspamd afin que le message soit accepté même avec un score aussi élevé.\nPour rien. Comme nous allons le voir.\nEnsuite, je clique sur le bouton renvoyer un code (resend code) pour demander l\u0026rsquo;envoi d\u0026rsquo;un nouveau message avec le code tant désiré.\nL\u0026rsquo;analyse du second courriel présente meilleure figure :\n1 2 3 4 5 6 7 8 9 WHITELIST_SPF_DKIM (-3) [microsoft.com:d:+,microsoft.com:s:+] BAD_REP_POLICIES (2) RBL_SENDERSCORE_REPUT_6 (1) [52.101.62.95:from] DWL_DNSWL_LOW (-1) [microsoft.com:dkim] MID_RHS_NOT_FQDN (0.5) MIME_GOOD (-0.1) [multipart/alternative,text/plain] MX_GOOD (-0.01) [] IP_REPUTATION_HAM (-0.005001) [asn: 8075(0.00), country: US(-0.01), ip: 52.101.62.95(0.00)] … Score global : − 0,62.\nMême avec des critères stricts, il passe.\n… qui s\u0026rsquo;avère être potentiellement une bonne pratique… # Autre bonne nouvelle, les serveurs de Microsoft ont finalement refait une tentative 12 minutes et 10 secondes ou 16 minutes et 19 secondes plus tard.\nPourquoi ou ? Parce-que j\u0026rsquo;ignore lequel des deux correspond à ma seconde demande.\nC\u0026rsquo;est une bonne pratique en général : si le serveur de réception demande un délai, autant attendre patiemment quelques minutes pour lui laisser le temps de revenir à un état plus stable.\nSi c\u0026rsquo;est volontaire, et dans le cas général, ce peut être une bonne pratique.\n… mais pas vraiment en fait ! # Malheureusement, l\u0026rsquo;adresse IP qui envoie les tentatives est rarement la même chez Microsoft. Ils utilisent une ferme de serveurs sur une grande plage d\u0026rsquo;adresses IP. Le serveur en réception ne peut donc pas faire le lien avec son rejet précédent. Au risque que le nouveau message, considéré comme tout beau tout nouveau, reçoive le même traitement et ainsi de suite à l\u0026rsquo;infini !\nDans le cas particulier d\u0026rsquo;un envoi de code de confirmation, attendre aussi longtemps n\u0026rsquo;est plus une bonne pratique. À moins de l\u0026rsquo;expliciter clairement à l\u0026rsquo;utilisateur, ce qui n\u0026rsquo;est pas le cas ici. Dans le cas contraire, l\u0026rsquo;utilisateur va immanquablement cliquer, et cliquer encore. Créant ainsi autant de cycles infernaux que de tentatives.\nBref, si j\u0026rsquo;étais l\u0026rsquo;enseignant en charge de l\u0026rsquo;élève Microsoft, il ne validerait pas son UV UI/UX avec ça ! 1\nAnalyses # Contrôler pour mieux gérer # Peu de choses sont sûres et certaines, fiables et viables, bien conçues et bien menées dans ce monde.\nUne des choses dont je suis sûr, c\u0026rsquo;est qu\u0026rsquo;il vaut largement mieux disposer\nd\u0026rsquo;un maximum de sources d\u0026rsquo;informations fiables et des manettes pour contrôler nous-mêmes. Prendre patience et s\u0026rsquo;adapter # C\u0026rsquo;est avec la force de l\u0026rsquo;expérience que l\u0026rsquo;on arrive à forger une compétence et la capacité à gérer toutes les situations qui se présentent à nous.\nCette expérience nous apprend la patience.\nBien souvent, nous devons subir les mauvais comportements :\nde ceux·celles qui savent qu\u0026rsquo;ils agissent mal mais également ce ceux·celles qui croient bien agir (mais, en réalité, agissent mal). Nous devons nous adapter continuellement, dans la mesure du raisonnable.\nMaîtriser et perfectionner nos outils # Beaucoup de choses laissent à désirer dans la liste des critères et des coefficients par défaut dans l\u0026rsquo;implémentation de Rspamd proposée dans Mailcow. Il n\u0026rsquo;est pas innocent dans ce scénario d\u0026rsquo;échec.\nJe perfectionnerai tout cela avec des paramètres que je crois plus pertinents.\nÉpilogue # Pour finir, voici à quoi j\u0026rsquo;ai eu droit un peu plus tard dans le processus de confirmation de la création de mon compte :\nJe ne pourrai pas aller plus loin.\nPas tout de suite.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nLe contenu du courriel # Le contenu du courriel n\u0026rsquo;a rien de très suspect, à vrai dire…\nJe n\u0026rsquo;adhère pas du tout à ces analyses à la Madame IRMA que les outils anti-spam se sentent obligés de proposer sans pour autant garantir qu\u0026rsquo;ils font du bon travail.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 --=**********************== Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Microsoft account Verify your email address To finish setting up your Microsoft account, we just need to make sure this email address is yours. To verify your email address use this security code: xxxxxx If you didn\u0026#39;t request this code, you can safely ignore this email. Someone else might have typed your email address by mistake. Thanks, The Microsoft account team Privacy Statement: https://go.microsoft.com/fwlink/?LinkId=521839 Microsoft Corporation, One Microsoft Way, Redmond, WA 98052 --=**********************== Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 7bit \u0026lt;!DOCTYPE html PUBLIC \u0026#34;-//W3C//DTD XHTML 1.0 Transitional//EN\u0026#34; \u0026#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\u0026#34;\u0026gt; \u0026lt;html xmlns=\u0026#34;http://www.w3.org/1999/xhtml\u0026#34; dir=\u0026#34;ltr\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;style type=\u0026#34;text/css\u0026#34;\u0026gt; .link:link, .link:active, .link:visited { color:#2672ec !important; text-decoration:none !important; } .link:hover { color:#4284ee !important; text-decoration:none !important; } \u0026lt;/style\u0026gt; \u0026lt;title\u0026gt;\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;table dir=\u0026#34;ltr\u0026#34;\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td id=\u0026#34;i1\u0026#34; style=\u0026#34;padding:0; font-family:\u0026#39;Segoe UI Semibold\u0026#39;, \u0026#39;Segoe UI Bold\u0026#39;, \u0026#39;Segoe UI\u0026#39;, \u0026#39;Helvetica Neue Medium\u0026#39;, Arial, sans-serif; font-size:17px; color:#707070;\u0026#34;\u0026gt;Microsoft account\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td id=\u0026#34;i2\u0026#34; style=\u0026#34;padding:0; font-family:\u0026#39;Segoe UI Light\u0026#39;, \u0026#39;Segoe UI\u0026#39;, \u0026#39;Helvetica Neue Medium\u0026#39;, Arial, sans-serif; font-size:41px; color:#2672ec;\u0026#34;\u0026gt;Verify your email address\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td id=\u0026#34;i4\u0026#34; style=\u0026#34;padding:0; padding-top:25px; font-family:\u0026#39;Segoe UI\u0026#39;, Tahoma, Verdana, Arial, sans-serif; font-size:14px; color:#2a2a2a;\u0026#34;\u0026gt;To finish setting up your Microsoft account, we just need to make sure this email address is yours.\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td style=\u0026#34;padding:0; padding-top:25px; font-family:\u0026#39;Segoe UI\u0026#39;, Tahoma, Verdana, Arial, sans-serif; font-size:14px; color:#2a2a2a;\u0026#34;\u0026gt;To verify your email address use this security code: \u0026lt;span style=\u0026#34;font-family:\u0026#39;Segoe UI Bold\u0026#39;, \u0026#39;Segoe UI Semibold\u0026#39;, \u0026#39;Segoe UI\u0026#39;, \u0026#39;Helvetica Neue Medium\u0026#39;, Arial, sans-serif; font-size:14px; font-weight:bold; color:#2a2a2a;\u0026#34;\u0026gt;xxxxxx\u0026lt;/span\u0026gt;\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td id=\u0026#34;i6\u0026#34; style=\u0026#34;padding:0; padding-top:25px; font-family:\u0026#39;Segoe UI\u0026#39;, Tahoma, Verdana, Arial, sans-serif; font-size:14px; color:#2a2a2a;\u0026#34;\u0026gt;If you didn\u0026#39;t request this code, you can safely ignore this email. Someone else might have typed your email address by mistake.\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td style=\u0026#34;padding:0; padding-top:25px; font-family:\u0026#39;Segoe UI\u0026#39;, Tahoma, Verdana, Arial, sans-serif; font-size:14px; color:#2a2a2a;\u0026#34;\u0026gt;Thanks,\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td id=\u0026#34;i8\u0026#34; style=\u0026#34;padding:0; font-family:\u0026#39;Segoe UI\u0026#39;, Tahoma, Verdana, Arial, sans-serif; font-size:14px; color:#2a2a2a;\u0026#34;\u0026gt;The Microsoft account team\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;div lang=\u0026#34;en\u0026#34; style=\u0026#34;margin-top:20px;margin-bottom:10px;\u0026#34;\u0026gt;\u0026lt;a class=\u0026#34;link\u0026#34; href=\u0026#34;https://go.microsoft.com/fwlink/?LinkId=521839\u0026#34;\u0026gt;Privacy Statement\u0026lt;/a\u0026gt;\u0026lt;div style=\u0026#34;margin-top:10px;\u0026#34;\u0026gt;Microsoft Corporation, One Microsoft Way, Redmond, WA 98052\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; --=**********************==-- Unité de Valeur eXpérience Utilisateur (User eXperience) / Interface Utilisateur (User Interface)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/posts/quand-le-serveur-d-incription-a-la-politique-antispam-de-microsoft-envoie-du-spam-potentiel-et-se-comporte-comme-les-spammeurs/","section":"Posts","summary":"Bonjour,\nPour que notre serveur de messagerie soit correctement traité par les serveurs de Microsoft, nous devons signer les contrats SNDS (Smart Network Data Services) et JMRP (Junk Mail Reporting Partner Program) de Microsoft en nous rendant sur leur serveur https://postmaster.live.com/snds/JMRP.aspx?wa=wsignin1.0.\nPas de bol : le courriel de vérification d’adresse envoyé par leur serveur ressemble trop à du spam.\nPremière mauvaise nouvelle # Pour commencer, nous devons créer un compte Microsoft.\n","title":"Quand le serveur d'inscription à la gestion antispam de Microsoft envoie du spam potentiel et se comporte comme un spammeur","type":"posts"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/refus-temporaire/","section":"Tags","summary":"","title":"Refus Temporaire","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/rspamd/","section":"Tags","summary":"","title":"Rspamd","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/serveur/","section":"Tags","summary":"","title":"Serveur","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/services/","section":"Tags","summary":"","title":"Services","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/spam/","section":"Tags","summary":"","title":"Spam","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/stack/","section":"Tags","summary":"","title":"Stack","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/suivi-des-versions/","section":"Tags","summary":"","title":"Suivi Des Versions","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/supprimer/","section":"Tags","summary":"","title":"Supprimer","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/sysctl/","section":"Tags","summary":"","title":"Sysctl","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/tags/system/","section":"Tags","summary":"","title":"System","type":"tags"},{"content":"","date":"12 mai 2026","externalUrl":null,"permalink":"/fr/categories/tutoriels/","section":"Categories","summary":"","title":"Tutoriels","type":"categories"},{"content":"","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/tags/administration/","section":"Tags","summary":"","title":"Administration","type":"tags"},{"content":"","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/tags/lien/","section":"Tags","summary":"","title":"Lien","type":"tags"},{"content":"","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/tags/mot-de-passe/","section":"Tags","summary":"","title":"Mot De Passe","type":"tags"},{"content":"","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/tags/nginx-proxy-manager/","section":"Tags","summary":"","title":"Nginx Proxy Manager","type":"tags"},{"content":"","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/tags/npm/","section":"Tags","summary":"","title":"Npm","type":"tags"},{"content":"","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/tags/openssl/","section":"Tags","summary":"","title":"Openssl","type":"tags"},{"content":"","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/tags/protection/","section":"Tags","summary":"","title":"Protection","type":"tags"},{"content":"Bonjour,\nNous pouvons protéger sélectivement des liens (ou dossiers) avec NPM (Nginx Proxy Manager).\nQuand j\u0026rsquo;écris nous pouvons, je pense en réalité nous devrions très très fort lorsqu\u0026rsquo;il s\u0026rsquo;agit de liens d\u0026rsquo;accès à des niveaux de privilèges dans les sites ou applications que nous déployons. Les opportunités ne manquent pas d\u0026rsquo;utiliser ce type d\u0026rsquo;outil pour protéger nos serveurs, ne passons pas à côté.\nJ\u0026rsquo;illustre mon propos avec l\u0026rsquo;accès à l\u0026rsquo;administration et à l\u0026rsquo;administration de domaines dans Mailcow, un serveur de messagerie Internet très complet.\nParamétrage avancé dans Nginx Proxy Manager # Cette configuration nécessite de rentrer en paramétrage avancé, c\u0026rsquo;est-à-dire d\u0026rsquo;ajouter des lignes de code dans une zone qui apparaît dans l\u0026rsquo;interface graphique lorsque nous cliquons sur la roue crantée, visible à droite quel que soit l\u0026rsquo;onglet en cours.\nNous avons alors accès à l\u0026rsquo;espace Custom Nginx Configuration:\nConfiguration pour protéger un dossier admin # Voici une première configuration simple :\n1 2 3 4 5 6 location /admin { auth_basic \u0026#34;Protected\u0026#34;; auth_basic_user_file /data/access.auth/admin; proxy_set_header Authorization \u0026#34;\u0026#34;; include conf.d/include/proxy.conf; } C\u0026rsquo;est très simple, et nous nous servons de l\u0026rsquo;include de NPM (nous n\u0026rsquo;avons pas à créer ce fichier). 1\nNote : Attention, dans cette configuration, tous les liens commençant par /admin seront inclus dans la règle comme par exemple /administration, /administrer-un-medicament, etc. On peut être plus spécifique avec location = /admin ou encore location ~ ^/admin$…\nLa ligne proxy_set_header Authorization \u0026quot;\u0026quot;; est importante : elle évite que le proxy envoie les éléments d\u0026rsquo;authentification à l\u0026rsquo;application. 2\nProtection de deux liens # Nous pouvons étendre ce principe avec deux « dossiers » pour protéger par exemple\nl\u0026rsquo;administration de Mailcow (/admin) et l\u0026rsquo;administration de domaines dans Mailcow (/domainadmin). 1 2 3 4 5 6 location ~ ^/(admin|domainadmin) { auth_basic \u0026#34;Protected\u0026#34;; auth_basic_user_file /data/access.auth/admin; proxy_set_header Authorization \u0026#34;\u0026#34;; include conf.d/include/proxy.conf; } Autorisation d\u0026rsquo;une ou plusieurs plage(s) d\u0026rsquo;adresses IP # Durcissement # Nous pouvons « blinder » la sécurité en n\u0026rsquo;autorisant qu\u0026rsquo;une ou plusieurs adresse(s) IP à se connecter avec authentification.\nC\u0026rsquo;est cette approche que je recommande, quitte à devoir « ouvrir » des plages larges. On limite les risques.\nLa consigne à utiliser est satisfy all. C\u0026rsquo;est la consigne par défaut, mais je trouve préférable de l\u0026rsquo;écrire explicitement lorsque nous l\u0026rsquo;utilisons.\n1 2 3 4 5 6 7 8 9 10 location ~ ^/(admin|domainadmin) { satisfy all; allow 192.168.1.0/24; allow 10.0.0.0/8; deny all; auth_basic \u0026#34;Protected\u0026#34;; auth_basic_user_file /data/access.auth/admin; proxy_set_header Authorization \u0026#34;\u0026#34;; include conf.d/include/proxy.conf; } Assouplissement # Nous pouvons, au contraire, assouplir la règle et autoriser une ou plusieurs adresse(s) à passer sans montrer patte blanche, c\u0026rsquo;est-à-dire sans avoir besoin de saisir un identifiant et mot de passe de protection.\nLa consigne est satisfy any (en lieu et place de satisfy all).\nCette approche n\u0026rsquo;est pas celle que je recommande dans la mesure où un attaquant qui réussirait à passer par une adresse autorisée aurait « porte ouverte » sans avoir besoin de connaître une paire d\u0026rsquo;identifiant et de mot de passe valide.\nPuisque nous avons défini ces paires, autant nous en servir. Tout le temps, sérieusement.\nRappels au sujet de la protection par le proxy (ou le serveur) # Cette protection est un premier niveau de sécurité : Elle empêche d\u0026rsquo;accéder aux pages de connexion.\nElle très utile et fortement recommandée pour limiter les possibilités d\u0026rsquo;attaque sur des accès critiques. L\u0026rsquo;administration en fait évidemment partie. L\u0026rsquo;attaquant ne peut même pas essayer des combinaisons d\u0026rsquo;identifiants et mots de passe au niveau de l\u0026rsquo;application.\nUtilisation par plusieurs personnes # Nous pouvons définir autant d\u0026rsquo;identifiants et de mots de passe que nous souhaitons.\nComme d\u0026rsquo;autres niveaux de sécurité s\u0026rsquo;ajoutent — parmi lesquels l\u0026rsquo;authentification de l\u0026rsquo;application elle-même —, nous pouvons nous accorder un petit relâchement en ne définissant qu\u0026rsquo;un compte commun pour plusieurs personnes.\nDans l\u0026rsquo;exemple que j\u0026rsquo;ai pris avec Mailcow, nous pouvons gérer\nun identifiant pour l\u0026rsquo;accès à l\u0026rsquo;administration, et un pour l\u0026rsquo;accès à l\u0026rsquo;administration des domaines. Nous pouvons alors séparer les deux dossiers ainsi :\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 location ^~ /admin { satisfy all; allow 192.168.1.0/24; deny all; auth_basic \u0026#34;Protected\u0026#34;; auth_basic_user_file /data/access.auth/admin_mailcow; proxy_set_header Authorization \u0026#34;\u0026#34;; include conf.d/include/proxy.conf; } location ^~ /domainadmin { satisfy all; allow 192.168.1.0/24; allow 10.0.0.0/8; deny all; auth_basic \u0026#34;Protected\u0026#34;; auth_basic_user_file /data/access.auth/admin_domains; proxy_set_header Authorization \u0026#34;\u0026#34;; include conf.d/include/proxy.conf; } Comment remplir le fichier des identifiants et mots de passe # Les fichiers ./data/access.auth/[…] de mes exemples sont à créer, tout comme le dossier ./data/access.auth (avec des noms de votre choix). J\u0026rsquo;ai choisi access.auth pour qu\u0026rsquo;il apparaisse à côté du dossier access utilisé par l\u0026rsquo;interface graphique NPM.\nPour générer les hash des mots de passe, nous pouvons utiliser openssl avec cette syntaxe :\n1 openssl passwd -6 \u0026#39;Le_Mot.De@Passe\u0026gt;Que!Tout[Le#Monde+Aime%Saisirµ1000\u0026amp;Fois\u0026#39; Note : Le -6 signifie que nous utilisons l\u0026rsquo;algorithme SHA-512.\nIl suffit ensuite de coller le hash du mot de passe après l\u0026rsquo;identifiant et : comme par exemple :\n1 admin_mailcow:$6$zUV7UtqsGW4Nuf38$9MKI9HZztEK4J0yyiXetf1DmjtibC8rKuGYdahq1XwuLJcekCkUDu9gr3mCcD79YUxtT4XL8G4PPqoNl6lIOV/ Nous pouvons ajouter autant de paires identifiant / mot de passe que nécessaire : une ligne par paire.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nFichier présent dans /etc/nginx/conf.d/include/proxy.conf dans l\u0026rsquo;image Docker jc21/nginx-proxy-manager gérée par Jamie CURNOW.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nComme le trafic passe en clair entre le proxy et le serveur, n\u0026rsquo;importe qui peut accéder aux secrets. L\u0026rsquo;encodage Base64 utilisé n\u0026rsquo;offre aucune protection. N\u0026rsquo;importe qui peut le décoder très simplement. Essayez avec echo \u0026quot;TCdlbmNvZGFnZSBuJ2VzdCBwYXMgbGUgY2hpZmZyZW1lbnQuwqA=\u0026quot; | base64 -d; echo \u0026quot;\u0026quot; ! 😉\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/posts/proteger-selectivement-des-liens-avec-npm-nginx-proxy-manager/","section":"Posts","summary":"Bonjour,\nNous pouvons protéger sélectivement des liens (ou dossiers) avec NPM (Nginx Proxy Manager).\nQuand j’écris nous pouvons, je pense en réalité nous devrions très très fort lorsqu’il s’agit de liens d’accès à des niveaux de privilèges dans les sites ou applications que nous déployons. Les opportunités ne manquent pas d’utiliser ce type d’outil pour protéger nos serveurs, ne passons pas à côté.\nJ’illustre mon propos avec l’accès à l’administration et à l’administration de domaines dans Mailcow, un serveur de messagerie Internet très complet.\n","title":"Protéger sélectivement des liens avec NPM (Nginx Proxy Manager)","type":"posts"},{"content":"","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/tags/regex/","section":"Tags","summary":"","title":"Regex","type":"tags"},{"content":"","date":"11 mai 2026","externalUrl":null,"permalink":"/fr/categories/s%C3%A9curit%C3%A9/","section":"Categories","summary":"","title":"Sécurité","type":"categories"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/acl/","section":"Tags","summary":"","title":"Acl","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/cache/","section":"Tags","summary":"","title":"Cache","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/certificat/","section":"Tags","summary":"","title":"Certificat","type":"tags"},{"content":"Bonjour,\nAlors que je tentais de créer un nouveau service dans NPM (Nginx Proxy Manager) ce vendredi soir, tout a bloqué des suites d\u0026rsquo;un incident sur les serveurs de production de lets\u0026rsquo; Encrypt 1.\nAprès que leur service soit rétabli, j\u0026rsquo;ai voulu reprendre mon travail normalement et là, patatras !\nPlus rien ne fonctionnait comme il faut.\nJ\u0026rsquo;ai dû ouvrir le capot et rentrer dans le moteur pour rétablir le bon fonctionnement de mon système :\nsupprimer les certificats créés après la panne dans les dossiers archive, sans oublier les liens dans live ; supprimer leurs fichiers de configuration dans renewal ; rentrer dans la base database.sqlite pour vérifier les tables et supprimer les enregistrements orphelins ou mal configurés. Pour accéder à la base de données sqlite, j\u0026rsquo;ai utilisé un sqlite3 installé sur le serveur hôte car le conteneur n\u0026rsquo;en proposait pas.\nPour mémoire, voici quelques commandes utiles à connaître une fois dans la base via sqlite3 database.sqlite :\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .headers on .mode columns -- Lister les hosts SELECT id, domain_names, certificate_id, is_deleted FROM proxy_host; -- Si besoin, uniquement les hosts actifs SELECT id, domain_names, certificate_id FROM proxy_host WHERE is_deleted = 0; -- Ou cibler un host en particulier SELECT id, domain_names, is_deleted FROM proxy_host WHERE id = 666; -- Lister les certificats SELECT id, nice_name, domain_names, expires_on FROM certificate; -- Suppressions sélectives DELETE FROM proxy_host WHERE id = 666; DELETE FROM certificate WHERE id = 666; -- Quitter sqlite .exit Addendum : 9 mai 2026 # Je pensais avoir tout mis au propre en « purgeant » tout ce que je pouvais trouver d\u0026rsquo;incohérent et postérieur au plantage de Let's Encrypt, que nenni !\nJe m\u0026rsquo;aperçois que les indices de host et des noms de dossiers pour le stockage des certificats sont décalés.\nQuand NPM crée un certificat en l\u0026rsquo;identifiant #666 dans l\u0026rsquo;interface, il crée un dossier npm-667.\nOn peut vivre comme ça, mais c\u0026rsquo;est franchement pénible.\nComme je ne connais pas suffisamment l\u0026rsquo;intérieur de l\u0026rsquo;engin, je suis coincé pour le moment.\nLa seule solution viable que je vois à l\u0026rsquo;horizon va être de refaire une installation propre et de tout remettre en place ex nihilo.\nAvis aux développeurs·ses # Quand on travaille sur des processus multi-tâches couches basses, on peut effectivement laisser chacun faire sa popote dans son coin, mais le « best effort » n\u0026rsquo;est pas suffisant pour bien faire. À un moment donné, il faut contrôler et resynchroniser tous ses petits. C\u0026rsquo;est mieux.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nVoir Let\u0026rsquo;s Encrypt empêtré dans le syndrome de la maintenance du vendredi soir.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/posts/comment-l-incident-lets-encrypt-m-a-oblige-a-aller-grenouiller-dans-la-base-sqlite-de-mon-npm-nginx-proxy-manager/","section":"Posts","summary":"Bonjour,\nAlors que je tentais de créer un nouveau service dans NPM (Nginx Proxy Manager) ce vendredi soir, tout a bloqué des suites d’un incident sur les serveurs de production de lets’ Encrypt 1.\nAprès que leur service soit rétabli, j’ai voulu reprendre mon travail normalement et là, patatras !\nPlus rien ne fonctionnait comme il faut.\nJ’ai dû ouvrir le capot et rentrer dans le moteur pour rétablir le bon fonctionnement de mon système :\n","title":"Comment l'incident de Let's Encrypt m'a obligé à aller grenouiller dans la base sqlite de mon NPM (Nginx Proxy Manager)","type":"posts"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/tags/deletion/","section":"Tags","summary":"","title":"Deletion","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/d%C3%A9ploiement/","section":"Tags","summary":"","title":"Déploiement","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/tags/deployment/","section":"Tags","summary":"","title":"Deployment","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/areas/digital-tech-and-computer-science/","section":"Areas","summary":"","title":"Digital Tech and Computer Science","type":"areas"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/droits/","section":"Tags","summary":"","title":"Droits","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/getfacl/","section":"Tags","summary":"","title":"Getfacl","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/tags/group/","section":"Tags","summary":"","title":"Group","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/groupe/","section":"Tags","summary":"","title":"Groupe","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/tags/hardening/","section":"Tags","summary":"","title":"Hardening","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/incident/","section":"Tags","summary":"","title":"Incident","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/categories/journal/","section":"Categories","summary":"","title":"Journal","type":"categories"},{"content":"Bonjour,\nIl nous arrive bien souvent de devoir intervenir dans des dossiers où plusieurs utilisateurs se télescopent.\nC\u0026rsquo;est le cas par exemple si nous souhaitons effacer des caches écrits par des composants du serveur web.\nNous nous heurtons alors à des problèmes de propriété et de droits associés.\nNous disposons de « mauvaises bonnes solutions » comme par exemple\nintégrer notre utilisateur à un groupe (dont il ne fait pas réellement partie, en réalité) ; ajouter une règle sudo sur mesure (qui finit bien souvent en règle trop générale, qui crée une superbe faille de sécurité). La gestion des ACL dans Debian permet de gérer cela très simplement.\nLes ACL (Access Control List) # Les ACL (Listes de contrôle d\u0026rsquo;accès, Access Control Lists) sont une extension des permissions classiques de Linux (Propriétaire / Groupe / Autres).\nElles permettent d\u0026rsquo;ajouter des droits sur mesure pour plusieurs utilisateurs ou groupes sur un même dossier.\nLes ACL permettent de :\ndonner des accès rwx à un autre utilisateur ou groupe sans changer le propriétaire du dossier ou du fichier et de définir la règle qui s\u0026rsquo;appliquera à tous les futurs fichiers d\u0026rsquo;un dossier par la suite. C\u0026rsquo;est un outil très utile pour faire cohabiter proprement nos utilisateurs et nos groupes sans pour autant lier les uns aux autres ni accorder trop de droits aux uns ou aux autres.\nMes flux de travail basés sur rsync # J\u0026rsquo;utilise beaucoup de flux de travail simples et efficaces basés sur rsync pour mettre à jour des serveurs.\nrsync dépose les fichiers sur le serveur via mon utilisateur sans privilège particulier.\nTout se passe bien tant que je n\u0026rsquo;ai pas besoin d\u0026rsquo;intervenir sur des dossiers ou fichiers dont mon utilisateur n\u0026rsquo;est pas propriétaire.\nC\u0026rsquo;est un peu plus compliqué si je veux supprimer le cache écrit par un composant de mon serveur, par exemple, avec :\n1 ssh mon-alias-ssh \u0026#34;rm -rf /var/www/html/var/cache/*\u0026#34; La solution : Les ACL (Access Control Lists) # Les ACL permettent d\u0026rsquo;ajouter des règles au cas par cas dans notre structure de dossiers sur le serveur.\nL\u0026rsquo;idée, très simple, est de dire au système :\n« Peu importe qui crée un fichier ici, les utilisateurs user et www-data ont tous deux tous les droits dessus. »\nNous travaillons en mode administrateur (root ou autre) pour la mise en place.\nNous associons les droits aux dossiers et fichiers existants :\n1 setfacl -R -m u:www-data:rwx,u:user:rwx /chemin/vers/notre/site/var Nous définissons des droits par défaut pour tous les futurs fichiers et dossiers qui seront créés à l\u0026rsquo;intérieur des dossiers :\n1 setfacl -dR -m u:www-data:rwx,u:user:rwx /chemin/vers/notre/site/var Résultat # Quand mon moteur de modèles de page (Twig pour ne pas le nommer) génère un fichier de cache, ce fichier reçoit, en plus des droits habituels, des attributs liés aux ACL.\nCeci permet à mon utilisateur user de vider ce cache créé par mon moteur de modèles de pages (avec le compte www-data) sans pour autant\nfaire partie du groupe correspondant ni bénéficier de privilèges que je ne veux pas lui donner. Mon script de déploiement et / ou de nettoyage automatique peut réaliser toutes les tâches que je souhaite sans bloquer sur des erreurs.\nVoilà là une technique simple, propre et robuste pour garder un serveur bien organisé sans pour autant mélanger les torchons et les serviettes ni sacrifier la sécurité.\nComment savoir si des ACL sont actives ? # Lorsque nous effectuons un ls -l, nous pouvons observer un petit signe + juste après les droits traditionnels. Par exemple :\n1 2 3 ls -l drwxrwxr-x+ 2 user www-data 4096 May 9 10:30 var Le + indique qu\u0026rsquo;une liste ACL est attachée à ce dossier.\nPour en consulter le détail, nous utilisons la commande getfacl :\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 getfacl /chemin/vers/notre/site/var # file: var/ # owner: user # group: www-data user::rwx user:www-data:rwx user:user:rwx group::rwx mask::rwx other::r-x default:user::rwx default:user:www-data:rwx default:user:user:rwx default:group::rwx default:mask::rwx default:other::r-x Avertissements # Les règles associées aux droits habituels s\u0026rsquo;appliquent toujours pour les dossiers et fichiers et pour les utilisateurs et groupes qui ne sont pas désignés dans les ACL.\nUne fois les ACL mises en place, certains comportements que nous connaissons dans le monde d\u0026rsquo;avant peuvent changer dans l\u0026rsquo;interprétation des commandes chmod et des droits habituels (Propriétaire / Groupe / Autres).\nJe ne rentre volontairement pas dans le détail ici.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/posts/les-acl-pour-une-gestion-avancee-des-droits-sur-les-dossiers-et-fichiers-dans-debian/","section":"Posts","summary":"Bonjour,\nIl nous arrive bien souvent de devoir intervenir dans des dossiers où plusieurs utilisateurs se télescopent.\nC’est le cas par exemple si nous souhaitons effacer des caches écrits par des composants du serveur web.\nNous nous heurtons alors à des problèmes de propriété et de droits associés.\nNous disposons de « mauvaises bonnes solutions » comme par exemple\nintégrer notre utilisateur à un groupe (dont il ne fait pas réellement partie, en réalité) ; ajouter une règle sudo sur mesure (qui finit bien souvent en règle trop générale, qui crée une superbe faille de sécurité). La gestion des ACL dans Debian permet de gérer cela très simplement.\n","title":"Les ACL pour une gestion avancée des droits sur les dossiers et fichiers dans Debian","type":"posts"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/letsencrypt/","section":"Tags","summary":"","title":"Letsencrypt","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/maintenance/","section":"Tags","summary":"","title":"Maintenance","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/permissions/","section":"Tags","summary":"","title":"Permissions","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/php/","section":"Tags","summary":"","title":"Php","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/r%C3%A9paration/","section":"Tags","summary":"","title":"Réparation","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/tags/rights/","section":"Tags","summary":"","title":"Rights","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/rsync/","section":"Tags","summary":"","title":"Rsync","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/tags/self-hosting/","section":"Tags","summary":"","title":"Self-Hosting","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/tags/server/","section":"Tags","summary":"","title":"Server","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/setfacl/","section":"Tags","summary":"","title":"Setfacl","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/sqlite/","section":"Tags","summary":"","title":"Sqlite","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/ssl/","section":"Tags","summary":"","title":"Ssl","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/suppression/","section":"Tags","summary":"","title":"Suppression","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/tls/","section":"Tags","summary":"","title":"Tls","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/categories/tutorials/","section":"Categories","summary":"","title":"Tutorials","type":"categories"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/en/tags/user/","section":"Tags","summary":"","title":"User","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/utilisateur/","section":"Tags","summary":"","title":"Utilisateur","type":"tags"},{"content":"","date":"9 mai 2026","externalUrl":null,"permalink":"/fr/tags/www-data/","section":"Tags","summary":"","title":"Www-Data","type":"tags"},{"content":"","date":"8 mai 2026","externalUrl":null,"permalink":"/en/tags/certificate/","section":"Tags","summary":"","title":"Certificate","type":"tags"},{"content":"Bonjour,\nBonnes pratiques de sécurité # Une machine sécurisée est une machine dans laquelle n\u0026rsquo;importe qui ne peut pas faire n\u0026rsquo;importe quoi.\nUne machine sécurisée est une machine dans laquelle il faut se connecter à un compte qui bénéficie de privilèges élevés pour effectuer des tâches d\u0026rsquo;administration.\nCe peut être le compte root lui-même ou d\u0026rsquo;autres comptes, mais ce ne devrait pas être n\u0026rsquo;importe quel compte utilisateur, même si c\u0026rsquo;est le propriétaire de la machine.\nC\u0026rsquo;est le comportement par défaut de Debian, et, spoiler, ce n\u0026rsquo;est pas un hasard : dans Debian, si vous faites cette erreur-là, c\u0026rsquo;est de votre plein gré…\nPrécaution importante # Avant de désactiver ou désinstaller sudo, nous devons nous assurer que nous pouvons accéder au compte root\nau travers de la commande 1 su - ou directement via une connexion, directe ou indirecte, à la machine. 1 Désactiver sudo # La commande à utiliser avec les privilèges (et donc de préférence le compte) root pour modifier les paramètres de sudo est :\n1 visudo Elle permet d\u0026rsquo;aller modifier le fichier de configuration pour commenter les lignes suivantes pour :\nretirer les privilèges au groupe sudo ; ne plus charger le fichier des sudoers. 1 2 3 4 5 # Allow members of group sudo to execute any command # %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on \u0026#34;@include\u0026#34; directives: # @includedir /etc/sudoers.d Nous profitons de notre visite pour nous assurer que ce fichier ne contient pas de lignes qui accordent des privilèges sudo à d\u0026rsquo;autres comptes ou groupes que ceux que nous souhaitons.\nNous pouvons également supprimer le contenu du dossier /etc/sudoers.d (et surtout pas le fichier /etc/sudoers).\nDésinstaller sudo # Par précaution, nous pouvons aller plus loin dans le durcissement de notre machine en retirant sudo.\nIl suffit de désinstaller le paquet associé à sudo :\n1 apt purge sudo À propos des commandes de « substitution » # Pour mémoire,\nsu = Substitute user (exécuter en tant qu\u0026rsquo;un autre utilisateur) et sudo = Substitute user do (exécuter en tant qu\u0026rsquo;un autre utilisateur) sont très proches. La différence se situe dans le mot de passe qui est demandé :\nsu : celui du compte ciblé ; sudo : celui du compte demandeur. Le fait que le compte root soit associé à la commande lorsqu\u0026rsquo;on ne précise pas l\u0026rsquo;utilisateur de « substitution » ne doit pas nous faire oublier qu\u0026rsquo;elles ont des usages plus larges.\nPour cette raison, il est généralement préférable de laisser sudo, comme su, sur une machine.\nIl nous arrive de les retirer, après audit, dans le cadre de durcissements exigeants.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nAttention, je ne recommande pas d\u0026rsquo;activer un accès direct au compte root via SSH ou d\u0026rsquo;autres protocoles équivalents.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/posts/comment-desactiver-sudo-dans-debian/","section":"Posts","summary":"Bonjour,\nBonnes pratiques de sécurité # Une machine sécurisée est une machine dans laquelle n’importe qui ne peut pas faire n’importe quoi.\nUne machine sécurisée est une machine dans laquelle il faut se connecter à un compte qui bénéficie de privilèges élevés pour effectuer des tâches d’administration.\nCe peut être le compte root lui-même ou d’autres comptes, mais ce ne devrait pas être n’importe quel compte utilisateur, même si c’est le propriétaire de la machine.\n","title":"Comment désactiver sudo dans Debian","type":"posts"},{"content":"Bonjour,\nBonnes pratiques de sécurité # Une machine sécurisée est une machine dans laquelle n\u0026rsquo;importe qui ne peut pas faire n\u0026rsquo;importe quoi.\nUne machine sécurisée est une machine dans laquelle il faut se connecter à un compte qui bénéficie de privilèges élevés pour effectuer des tâches d\u0026rsquo;administration.\nCe peut être le compte root lui-même ou d\u0026rsquo;autres comptes, mais ce ne devrait pas être n\u0026rsquo;importe quel compte utilisateur, même si c\u0026rsquo;est le propriétaire de la machine.\nC\u0026rsquo;est le comportement par défaut de Debian, et, spoiler, ce n\u0026rsquo;est pas un hasard : dans Debian, si vous faites cette erreur-là, c\u0026rsquo;est de votre plein gré…\nCommunication et vérifications préalables # Avant d\u0026rsquo;effectuer ces modifications, nous en parlons avec l\u0026rsquo;utilisateur concerné.\nNous effectuons un audit pour nous assurer que des données ou des tâches importantes ne sont pas actuellement gérées via son compte utilisateur.\nNous transférons les tâches ou données liées à l\u0026rsquo;administration sur un compte dédié à l\u0026rsquo;administration.\nComment retirer les privilèges sudo à un utilisateur # Pour retirer des privilèges sudo à un utilisateur, il suffit de le retirer du groupe sudo.\n1 deluser user sudo Nous allons également vérifier via la commande visudo que nous n\u0026rsquo;avons pas de ligne du type\n1 user ALL=(ALL:ALL) ALL dans le fichier de configuration de sudo.\nNous ne devrions voir que\n1 root ALL=(ALL:ALL) ALL ou, éventuellement, des comptes (ou des groupes de comptes) spécialement dédiés à l\u0026rsquo;administration et utilisés uniquement comme tels.\nComment vérifier qu\u0026rsquo;un utilisateur n\u0026rsquo;a plus les privilèges sudo # Pour vérifier que tout s\u0026rsquo;est bien passé,\ncôté utilisateur, nous tentons d\u0026rsquo;effectuer une commande avec sudo. 1 2 3 user@debian:~$ sudo ls [sudo] Mot de passe de user : user n\u0026#39;est pas dans le fichier sudoers. côté administrateur, nous contrôlons que le groupe sudo n\u0026rsquo;est plus dans la liste de cet utilisateur avec la commande : 1 groups user Fermer la session utilisateur ouverte # Pour que les modifications prennent effet, il faut fermer la session utilisateur.\nEn principe nous ne devrions pas avoir à le faire en tant qu\u0026rsquo;administrateur, puisque nous communiquons clairement et lisiblement avec l\u0026rsquo;utilisateur.\nMessage système de rappel / avertissement # Nous pouvons envoyer un message via :\n1 echo \u0026#34;Fermeture de votre session dans [à compléter]\u0026#34; | write user mais attention : nous ne sommes pas sûrs que ce message sera effectivement vu.\nJe le redis donc clairement : nous communiquons avec l\u0026rsquo;utilisateur et nous assurons qu\u0026rsquo;il a bien compris.\nEn principe, si nous faisons bien notre travail, l\u0026rsquo;utilisateur se déconnecte et se reconnecte de lui-même quand nous le lui indiquons.\nCommandes pour fermer la session / les processus utilisateur # Voici toutefois les commandes qui peuvent nous être utiles si besoin.\nLa commande de fermeture de session :\n1 loginctl terminate-user user Pour vérifier qu\u0026rsquo;un utilisateur n\u0026rsquo;a plus de processus actif :\n1 pgrep -u user Si l\u0026rsquo;utilisateur a des processus bloqués, nous pouvons effectuer un\n1 pkill -u user Au plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/posts/comment-retirer-les-droits-sudo-a-un-utilisateur-dans-debian/","section":"Posts","summary":"Bonjour,\nBonnes pratiques de sécurité # Une machine sécurisée est une machine dans laquelle n’importe qui ne peut pas faire n’importe quoi.\nUne machine sécurisée est une machine dans laquelle il faut se connecter à un compte qui bénéficie de privilèges élevés pour effectuer des tâches d’administration.\nCe peut être le compte root lui-même ou d’autres comptes, mais ce ne devrait pas être n’importe quel compte utilisateur, même si c’est le propriétaire de la machine.\n","title":"Comment retirer les droits sudo à un utilisateur dans Debian","type":"posts"},{"content":"","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/tags/deluser/","section":"Tags","summary":"","title":"Deluser","type":"tags"},{"content":"","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/tags/durcissement/","section":"Tags","summary":"","title":"Durcissement","type":"tags"},{"content":"Bonjour,\nAlors que je m’apprêtais à déployer un nouveau service pour visualiser mes statistiques de trafic, j\u0026rsquo;ai cru un temps que j\u0026rsquo;avais cassé ma configuration NPM (Nginx Proxy Manager). En effet, j\u0026rsquo;obtenais des erreurs (peu loquaces) et, quand je vérifiais dans le dossier ad hoc, je ne voyais pas de nouveau dossier pour la clef et le certificat que je tentais d\u0026rsquo;obtenir.\nC\u0026rsquo;est en me rendant dans les logs du conteneur Docker que j\u0026rsquo;ai compris que le problème ne venait pas de moi.\n1 2 3 4 5 6 7 [5/8/2026] [7:27:32 PM] [SSL ] › ℹ info Requesting LetsEncrypt certificates for […].marcjestin.fr [5/8/2026] [7:27:32 PM] [SSL ] › ℹ info Command: certbot […].marcjestin.fr [5/8/2026] [7:27:33 PM] [Nginx ] › ℹ info Reloading Nginx [5/8/2026] [7:27:33 PM] [Express ] › ⚠ warning Saving debug log to /data/logs/letsencrypt.log An unexpected error occurred: The service is down for maintenance or had an internal error. Check https://letsencrypt.status.io/ for more details. Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /data/logs/letsencrypt.log or re-run Certbot with -v for more details. Et la confirmation sur https://letsencrypt.status.io/ :\nC\u0026rsquo;est bien la première fois que je rencontre le problème.\nLe petit détail qui m\u0026rsquo;a beaucoup amusé quand je me suis rendu sur la page de suivi proposée, c\u0026rsquo;est qu\u0026rsquo;une maintenance programmée a été effectuée sur les mêmes ressources très peu de temps avant l\u0026rsquo;incident (voir capture ci-dessous).\nIl y a fort à parier que les deux sont liés.\nMême si j\u0026rsquo;ai bien conscience que la maintenance a eu lieu le matin à San Francisco où siège l\u0026rsquo;ISRG, c\u0026rsquo;est l\u0026rsquo;occasion de rappeler que\nle meilleur moment pour planifier une maintenance n\u0026rsquo;est pas le vendredi en fin de journée, juste avant de partir en week-end.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/posts/lets-encrypt-empetre-dans-le-syndrome-de-la-maintenance-du-vendredi-soir/","section":"Posts","summary":"Bonjour,\nAlors que je m’apprêtais à déployer un nouveau service pour visualiser mes statistiques de trafic, j’ai cru un temps que j’avais cassé ma configuration NPM (Nginx Proxy Manager). En effet, j’obtenais des erreurs (peu loquaces) et, quand je vérifiais dans le dossier ad hoc, je ne voyais pas de nouveau dossier pour la clef et le certificat que je tentais d’obtenir.\nC’est en me rendant dans les logs du conteneur Docker que j’ai compris que le problème ne venait pas de moi.\n","title":"Let's Encrypt empêtré dans le syndrome de la maintenance du vendredi soir","type":"posts"},{"content":"","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/tags/loginctl/","section":"Tags","summary":"","title":"Loginctl","type":"tags"},{"content":"","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/tags/pkill/","section":"Tags","summary":"","title":"Pkill","type":"tags"},{"content":"","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/tags/root/","section":"Tags","summary":"","title":"Root","type":"tags"},{"content":"","date":"8 mai 2026","externalUrl":null,"permalink":"/en/tags/security/","section":"Tags","summary":"","title":"Security","type":"tags"},{"content":"","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/tags/su/","section":"Tags","summary":"","title":"Su","type":"tags"},{"content":"","date":"8 mai 2026","externalUrl":null,"permalink":"/fr/tags/sudo/","section":"Tags","summary":"","title":"Sudo","type":"tags"},{"content":"","date":"6 mai 2026","externalUrl":null,"permalink":"/fr/tags/auto-h%C3%A9bergement/","section":"Tags","summary":"","title":"Auto-Hébergement","type":"tags"},{"content":"","date":"6 mai 2026","externalUrl":null,"permalink":"/fr/tags/disable/","section":"Tags","summary":"","title":"Disable","type":"tags"},{"content":"Bonjour,\nUn serveur doit être disponible 24 heures sur 24 et ne doit évidemment pas se mettre en veille, surtout si nous ne disposons pas d\u0026rsquo;outils pour le « réveiller ».\nPar défaut ou suite à l\u0026rsquo;installation de certains paquets, une distribution Debian peut conserver des réglages d\u0026rsquo;économie d\u0026rsquo;énergie. Résultat : notre machine « s\u0026rsquo;endort » après une période d\u0026rsquo;inactivité et nous ne pouvons plus y accéder à distance. 1\nC\u0026rsquo;est le cas notamment pour des systèmes installés dans une version Desktop (= avec le gestionnaire de bureau, type GNOME ou autre).\nC\u0026rsquo;est ballot quand il s\u0026rsquo;agit d\u0026rsquo;un serveur, n\u0026rsquo;est-ce pas ?\nVoici comment empêcher la mise en veille au niveau système.\nNous ne nous servons que de la ligne de commande. 2\nLa configuration classique par l\u0026rsquo;interface graphique ne suffit pas (et peut être trompeuse) # Sur Debian, la gestion de l\u0026rsquo;énergie est multi-couche.\nDésactiver la mise en veille dans une interface graphique ou via un simple script ne suffit pas toujours, car plusieurs services peuvent déclencher un événement suspend :\nLes cibles systemd qui orchestrent la transition vers les états de sommeil. systemd-logind qui réagit aux événements matériels (bouton power, bouton de réinitialisation, inactivité…). Pour une machine de production, nous pouvons mettre en place le masking des outils de mise en veille pour les rendre inaccessibles même au système.\nMasquer les services de mise en veille # Plutôt que de simplement désactiver (disable) les services associés à la mise en veille, nous les masquons (mask) pour empêcher l\u0026rsquo;accès.\nNous utilisons la commande mask (plutôt que disable). Elle crée un lien symbolique vers /dev/null, ce qui rend impossible l\u0026rsquo;activation du service, même si un autre processus le demande.\nPour ce faire, nous exécutons : 3\n1 systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target systemd-suspend.service systemd-hibernate.service systemd-hybrid-sleep.service systemd-suspend-then-hibernate.service Pour confirmer que les cibles sont bien verrouillées :\n1 systemctl list-unit-files | grep -E \u0026#39;sleep|suspend|hibernate\u0026#39; Exemple de sortie :\n1 2 3 4 5 6 7 8 9 10 11 systemd-hibernate-clear.service static - systemd-hibernate-resume.service static - systemd-hibernate.service masked enabled systemd-hybrid-sleep.service masked enabled systemd-suspend-then-hibernate.service masked enabled systemd-suspend.service masked enabled hibernate.target masked enabled hybrid-sleep.target masked enabled sleep.target masked enabled suspend-then-hibernate.target masked enabled suspend.target masked enabled Configurer systemd-logind # Même si les cibles sont masquées et donc inaccessibles, nous pouvons configurer le gestionnaire de sessions (systemd-logind = login daemon) pour qu\u0026rsquo;il n\u0026rsquo;essaie pas d\u0026rsquo;interpréter les signaux d\u0026rsquo;inactivité ou les boutons physiques… Deux précautions valent mieux qu\u0026rsquo;une.\nNous éditons le fichier de configuration :\n1 nano /etc/systemd/logind.conf Nous modifions et / ou décommentons les lignes suivantes pour forcer l\u0026rsquo;état ignore :\n1 2 3 4 5 6 [Login] HandlePowerKey=ignore HandleSuspendKey=ignore HandleHibernateKey=ignore LidSwitchIgnoreInhibited=no IdleAction=ignore Nous redémarrons le service pour appliquer les changements :\n1 systemctl restart systemd-logind Analyser les journaux # Deux commandes peuvent être utiles pour auditer les logs du serveur :\nPour consulter les événements de systemd-logind :\n1 journalctl -u systemd-logind --since \u0026#34;1 hour ago\u0026#34; Pour les changement d\u0026rsquo;états ACPI au niveau du noyau :\n1 journalctl -k | grep -i \u0026#34;ACPI: PM\u0026#34; Cette commande permet de voir si le noyau a effectivement préparé un passage en état S3 (veille en RAM) ou S4 (hibernation).\nConclusion # En combinant le masquage des cibles systemd et la neutralisation des actions dans logind.conf, nous éliminons tout risque de mise en veille accidentelle de notre serveur Debian. 4\nC\u0026rsquo;est une étape de durcissement (hardening) à laquelle il vaut mieux veiller AVANT d\u0026rsquo;être dans la mouise.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nLa veille est généralement de type ACPI S3 = l\u0026rsquo;ordinateur reste allumé en attente pour conserver la RAM active dans son état au moment de la mise en veille pour un redémarrage beaucoup plus rapide que ACPI S4.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEn principe, on n\u0026rsquo;installe pas d\u0026rsquo;interface graphique sur un serveur, mais il est vrai que cela peut être pratique en auto-hébergement.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nToutes les commandes de cet article nécessitent d\u0026rsquo;avoir le privilège root. Je fais partie de ceux qui ne recommandent pas l\u0026rsquo;utilisation du sudo. Et qui savent pourquoi.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSi tant est que nous avons bien sûr veillé à ne pas avoir de veilles paramétrées au niveau UEFI (ex BIOS) sur la machine, bien sûr.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"6 mai 2026","externalUrl":null,"permalink":"/fr/posts/empecher-la-mise-en-veille-sur-un-serveur-debian/","section":"Posts","summary":"Bonjour,\nUn serveur doit être disponible 24 heures sur 24 et ne doit évidemment pas se mettre en veille, surtout si nous ne disposons pas d’outils pour le « réveiller ».\nPar défaut ou suite à l’installation de certains paquets, une distribution Debian peut conserver des réglages d’économie d’énergie. Résultat : notre machine « s’endort » après une période d’inactivité et nous ne pouvons plus y accéder à distance. 1\nC’est le cas notamment pour des systèmes installés dans une version Desktop (= avec le gestionnaire de bureau, type GNOME ou autre).\n","title":"Empêcher la mise en veille sur un serveur Debian","type":"posts"},{"content":"","date":"6 mai 2026","externalUrl":null,"permalink":"/fr/tags/mask/","section":"Tags","summary":"","title":"Mask","type":"tags"},{"content":"","date":"6 mai 2026","externalUrl":null,"permalink":"/fr/tags/systemd/","section":"Tags","summary":"","title":"Systemd","type":"tags"},{"content":"","date":"6 mai 2026","externalUrl":null,"permalink":"/fr/tags/systemd-logind/","section":"Tags","summary":"","title":"Systemd-Logind","type":"tags"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/fr/tags/dokploy/","section":"Tags","summary":"","title":"Dokploy","type":"tags"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/en/tags/email/","section":"Tags","summary":"","title":"Email","type":"tags"},{"content":"Bonjour,\nJe peux maintenant l\u0026rsquo;annoncer officiellement : j\u0026rsquo;ai franchi le Rubicon de l\u0026rsquo;auto-hébergement : le fait d\u0026rsquo;héberger ses serveur(s) et/ou service(s) Internet chez soi pour TOUS mes outils Internet.\nDepuis plusieurs années, j\u0026rsquo;expérimentais et testais différentes solutions pour héberger des services sur des serveurs dédiés ou directement chez moi. Quelques-un·e·s de mes client·e·s ont eu l\u0026rsquo;occasion de s\u0026rsquo;en servir.\nJe relançais le dossier régulièrement à l\u0026rsquo;approche de la date anniversaire de mon contrat d\u0026rsquo;hébergement pour le courriel et les serveurs web.\nJ\u0026rsquo;ai saisi l\u0026rsquo;opportunité cette année.\nInfrastructure technique # J\u0026rsquo;utilise une machine sous Linux Debian sur laquelle je m\u0026rsquo;appuie sur des services Docker.\nJe me sers du proxy inverse NPM (Nginx Proxy Manager).\nPour la messagerie électronique, j\u0026rsquo;utilise Mailcow.J\u0026rsquo;ai choisi d\u0026rsquo;utiliser cet outil « packagé » même si, en général, je préfère rester le plus indépendant possible.\nDes motivations à changer # Parmi les motivations clefs, voici les plus stratégiques :\nRecouvrer plus de liberté pour installer tout ce que je souhaite sans être bridé par une stratégie décidée par d\u0026rsquo;autres ni limité par la technologie, qui n\u0026rsquo;évolue plus véritablement et qui se repose sur ses lauriers. Disposer de fonctionnalités qui étaient parfois bridées, à tort, selon moi, par l\u0026rsquo;hébergeur. pouvoir déployer des services modernes à haute valeur ajoutée ; ne plus pénaliser les utilisateurs·trices du réseau Tor qui me font l\u0026rsquo;honneur de leur visite (dont moi-même) ; aller vers une vision de l\u0026rsquo;Internet qui me convient mieux ; et plus largement du monde. Tout cela peut paraître bien abstrait d\u0026rsquo;autant que je ne souhaite pas dévoiler tous les points qui me gênaient dans la situation précédente mais, croyez-moi, cela se traduisait par des choses extrêmement concrètes.\nDéjà de grandes satisfactions # Je me sens déjà bien plus léger et j\u0026rsquo;ai déjà trouvé de nombreuses raisons d\u0026rsquo;être satisfait de mon choix.\nPour commencer je me sens mieux d\u0026rsquo;avoir enfin tourné le dos à des pratiques commerciales qui vont à l\u0026rsquo;encontre de ma vision du monde.\nDe même pour des approches technologiques et techniques et des choix structurels que j\u0026rsquo;estime profondément ineptes et irréfléchis. Des tas d\u0026rsquo;autres existent dans le nouveau monde, mais je peux choisir de ne pas y souscrire. Jusqu\u0026rsquo;à présent, je devais subir en rongeant mon frein.\nUn exemple : le remplissage des zones DNS avec des tas d\u0026rsquo;enregistrements que je n\u0026rsquo;avais jamais demandés et dont je ne me suis jamais servi. Ajoutez un développement sans doute de très mauvaise facture de l\u0026rsquo;interface de gestion, et je me retrouvais régulièrement avec des messages « ce site ralentit votre navigateur » et des délais d\u0026rsquo;attente inacceptables pour effectuer des opérations très simples.\nJ\u0026rsquo;ai déjà rencontré d\u0026rsquo;immenses joies et satisfactions en me confrontant à différents outils que je ne pouvais pas réellement tester sans passer le cap d\u0026rsquo;un serveur dédié (les tester hors ligne n\u0026rsquo;est pas du tout la même chose).\nElle était déjà bien plus avancée que celle de la plupart des gens, j\u0026rsquo;ai encore pu perfectionner ma stratégie de gestion des courriers électroniques.\nDorénavant, je dispose librement :\nd\u0026rsquo;un catch-all (voiture-balais, ramasse tout ce qui reste) ; de nombreux services : Rspamd pour la protection contre le spam ; ClamAV pour l\u0026rsquo;antivirus ; Sieve de Dovecot pour les traitements automatisés et un outil de gestion intégré, simple d\u0026rsquo;utilisation et rempli de choses utiles pour faciliter la vie d\u0026rsquo;un gestionnaire. Des promesses et des espoirs # Cette migration est pour moi l\u0026rsquo;occasion d\u0026rsquo;effectuer un grand saut technologique qui devenait indispensable.\nJ\u0026rsquo;ai pu la faire sans engager des frais, bien au contraire puisque je me retire la charge d\u0026rsquo;un hébergement externe.\nJe peux maintenant envisager d\u0026rsquo;étendre ou de développer l\u0026rsquo;outil très largement. Les possibilités sont innombrables, même si je sais que je ne pourrai pas tout faire : la machine que j\u0026rsquo;utilise n\u0026rsquo;est pas toute jeune et certaines applications comme MongoDB exigent des choses dont je ne dispose pas.\nTrop facile # Bien sûr, je pouvais faire (et je faisais) déjà de belles choses. J\u0026rsquo;avais déjà réalisé ce saut plusieurs fois sans concrétiser la bascule.\nIl n\u0026rsquo;a pas été difficile pour moi de passer ce cap.\nVoilà, c\u0026rsquo;est fait…\nVieux motard que j\u0026rsquo;aimais.\nNote # J\u0026rsquo;avais d\u0026rsquo;abord décidé de me servir d\u0026rsquo;un outil comme Coolify et Dokploy. Après plusieurs essais dans ce sens, je pense que ces outils ne sont suffisamment aboutis et sérieux pour moi.\nJ\u0026rsquo;aime les valeurs sûres sans surprise. Je préfère maîtriser ce que je fais quand je fais quelque-chose. Au plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","date":"5 mai 2026","externalUrl":null,"permalink":"/fr/posts/enfin-libre/","section":"Posts","summary":"Bonjour,\nJe peux maintenant l’annoncer officiellement : j’ai franchi le Rubicon de l’auto-hébergement : le fait d’héberger ses serveur(s) et/ou service(s) Internet chez soi pour TOUS mes outils Internet.\nDepuis plusieurs années, j’expérimentais et testais différentes solutions pour héberger des services sur des serveurs dédiés ou directement chez moi. Quelques-un·e·s de mes client·e·s ont eu l’occasion de s’en servir.\nJe relançais le dossier régulièrement à l’approche de la date anniversaire de mon contrat d’hébergement pour le courriel et les serveurs web.\n","title":"Enfin libre","type":"posts"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/fr/tags/f%C3%A9divers/","section":"Tags","summary":"","title":"Fédivers","type":"tags"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/en/tags/fediverse/","section":"Tags","summary":"","title":"Fediverse","type":"tags"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/fr/tags/glitch-soc/","section":"Tags","summary":"","title":"Glitch-Soc","type":"tags"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/fr/tags/h%C3%A9bergement/","section":"Tags","summary":"","title":"Hébergement","type":"tags"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/en/tags/hosting/","section":"Tags","summary":"","title":"Hosting","type":"tags"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/fr/tags/mastodon/","section":"Tags","summary":"","title":"Mastodon","type":"tags"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/en/areas/towards-a-healthy-peaceful-and-serene-life/","section":"Areas","summary":"","title":"Towards a Healthy, Peaceful, and Serene Life","type":"areas"},{"content":"Bonjour,\nHier et la nuit dernière, j\u0026rsquo;ai installé une instance Mastodon glitch-soc sur mon serveur.\nCe ne fut pas de tout repos, mais j\u0026rsquo;ai fini par y arriver.\nJ\u0026rsquo;en ai profité pour apprendre et pour dénicher quelques défauts sinon bogues de Dokploy.\nApprendre et savoir faire # Je n\u0026rsquo;ai déployé cet outil que pour savoir le faire.\nVoilà, c\u0026rsquo;est fait !\nNous n\u0026rsquo;avons pas la même vision du monde numérique # Cela fait un bon moment déjà que je m\u0026rsquo;étonne de choix réalisés dans la conception de Mastodon.\nLorsque j\u0026rsquo;ai réalisé mon installation, j\u0026rsquo;ai testé une installation « personnelle » (sans ouvrir aux inscriptions de tiers).\nCertain·e·s me diront que c\u0026rsquo;est logique, et moi j\u0026rsquo;affirme le contraire : dans ce mode, l\u0026rsquo;outil ne propose pas de générer deux comptes, un pour l\u0026rsquo;administration, l\u0026rsquo;autre pour la communication (l\u0026rsquo;utilisation à proprement parler).\nTout d\u0026rsquo;abord, je trouve cela contraire à des principes de conception d\u0026rsquo;interfaces utilisateur. On ne conçoit pas une interface d\u0026rsquo;administration comme on conçoit une interface d\u0026rsquo;utilisation. Et, surtout, on ne mélange pas les deux, contrairement à ce que j\u0026rsquo;ai pu observer.\nPlus important, c\u0026rsquo;est contraire à toutes mes règles et bonnes pratiques en matière de sécurité. Quels que soient les projets sur lesquels je travaille, je dispose au minimum de deux comptes séparés et sans aucune passerelle entre les deux (voir mes articles au sujet de sudo 1, par exemple).\nJ\u0026rsquo;évite autant que faire ce peut de me connecter avec des privilèges élevés, et je cloisonne (j\u0026rsquo;utilise Qubes OS, les connaisseur·se·s comprendront).\nUn point de plus dans ma longue liste des choses « que je n\u0026rsquo;aurais pas faites comme cela », donc.\nVeni, vidi, abii # J\u0026rsquo;ai profité d\u0026rsquo;avoir l\u0026rsquo;outil sous le coude pour parcourir un peu ce qu\u0026rsquo;on trouve dans le Fédivers.\nCela m\u0026rsquo;a inspiré cette réflexion :\n« Je suis venu, j\u0026rsquo;ai vu, je suis reparti. » — Marc JESTIN\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nhttps://blog.marcjestin.fr/fr/?q=sudo.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"5 mai 2026","externalUrl":null,"permalink":"/fr/posts/veni-vidi-abii/","section":"Posts","summary":"Bonjour,\nHier et la nuit dernière, j’ai installé une instance Mastodon glitch-soc sur mon serveur.\nCe ne fut pas de tout repos, mais j’ai fini par y arriver.\nJ’en ai profité pour apprendre et pour dénicher quelques défauts sinon bogues de Dokploy.\nApprendre et savoir faire # Je n’ai déployé cet outil que pour savoir le faire.\nVoilà, c’est fait !\n","title":"Veni, vidi, abii","type":"posts"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/fr/areas/vers-une-vie-saine-paisible-et-sereine/","section":"Areas","summary":"","title":"Vers Une Vie Saine, Paisible Et Sereine","type":"areas"},{"content":"","date":"5 mai 2026","externalUrl":null,"permalink":"/fr/tags/web/","section":"Tags","summary":"","title":"Web","type":"tags"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/fr/areas/bien-%C3%AAtre-et-%C3%A9ducation-du-chien/","section":"Areas","summary":"","title":"Bien-Être Et Éducation Du Chien","type":"areas"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/en/categories/case-studies/","section":"Categories","summary":"","title":"Case Studies","type":"categories"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/fr/tags/chiens/","section":"Tags","summary":"","title":"Chiens","type":"tags"},{"content":"Bonjour,\nOrion et moi avons de nouveau croisé cette dame avec son chien au trouble de comportement évident.\nLe chien n\u0026rsquo;est pas le seul à présenter des troubles du comportement, je le crains…\nPremières agressions # Ce chien a déjà foncé vers Orion en mode agression plusieurs fois.\nLa première fois que cela est arrivé, nous jouions paisiblement Orion et moi, comme nous en avons l\u0026rsquo;habitude, pendant notre balade sur un chemin entre les champs. Je lançais la balle et Orion allait la chercher. Ce chien est arrivé de nulle part derrière nous en courant à toute allure. Il a foncé droit vers Orion et l\u0026rsquo;a agressé une première fois.\nÀ aucun moment je n\u0026rsquo;ai pas entendu le moindre rappel d\u0026rsquo;un humain.\nL\u0026rsquo;agression maladive # Chez ce chien, le trouble du comportement prend une forme plutôt étrange : Il fonce vers l\u0026rsquo;autre chien en aboyant de manière agressive et fait mine de vouloir mordre. Fort heureusement, il s\u0026rsquo;arrête et, me semble-t-il, ne mord pas son vis-à-vis. Pour le moment, et avec Orion qui se comporte bien, et qui esquive, tout du moins…\nJe me retourne, je vois une personne au loin. Le chien s\u0026rsquo;en retourne. Dont acte.\nJe pensais, benoîtement, que la personne aurait pris la précaution de rappeler son chien et de l\u0026rsquo;attacher pour éviter qu\u0026rsquo;il recommence.\nQue nenni.\nQuelques instants plus tard, rebelote !\nL\u0026rsquo;adaptation pénible # Comme je dis souvent :\nSi tu fais une erreur une fois, ce n\u0026rsquo;est pas grave.\nSi tu recommences, c\u0026rsquo;est que tu es vraiment con.\nJe m\u0026rsquo;applique ce principe simple et je range la balle. Orion est très déçu, le pauvre, mais c\u0026rsquo;est la meilleure chose à faire pour espérer être tranquilles. Mon bébé adorable et adoré, qui n\u0026rsquo;a rien à se reprocher, lui, se retrouve ainsi doublement pénalisé ; d\u0026rsquo;abord par les agressions désagréables de ce chien, puis par le fait qu\u0026rsquo;on le prive de son jeu favori avec son papa préféré.\nNotre objectif prioritaire est de continuer notre balade paisiblement sans emmerder personne et, si possible, sans qu\u0026rsquo;on nous emmerde. Nous nous exécutons.\nLa consternation # Pour des raisons dont je ne me souviens plus, sans doute parce-que j\u0026rsquo;ai laissé Orion faire ses petites affaires, la dame arrive à notre hauteur. 1\nJe note qu\u0026rsquo;elle ne me salue pas ni ne présente des excuses pour le comportement de son chien.\nJe lui dis calmement :\n« — Madame, votre chien a agressé le mien deux fois. Vous feriez mieux de l\u0026rsquo;attacher. S\u0026rsquo;il recommence, je serai obligé de m\u0026rsquo;en occuper. »\nEt là, à ma grande surprise, cette dame nie les faits et s\u0026rsquo;en prend à moi comme si j\u0026rsquo;avais commis un crime de lèse-majesté.\nS\u0026rsquo;ensuit une altercation où elle se comporte comme tous les imbéciles narcissiques qui veulent absolument avoir raison alors que tout leur donne tort.\nJe finis par lui demander de s\u0026rsquo;éloigner et me laisser tranquille, ou plus exactement l\u0026rsquo;envoyer chier.\nL\u0026rsquo;analogie avec ces chiens déséquilibrés et hargneux qui aboient comme des dingues m\u0026rsquo;apparaît si évidente que je ne peux pas ne pas la partager avec vous ici.\nL\u0026rsquo;arrogance imbécile # Je ne vais pas développer ici tous les événements qui se sont succédés, cela n\u0026rsquo;a pas grande importance à mes yeux.\nNotons toutefois ce détail plus qu\u0026rsquo;amusant : la première fois où nous avons recroisé cette dame et son chien sur ce chemin après ce premier épisode très désagréable, elle s\u0026rsquo;est permise de me dire sur un ton hautain et désagréable que je devais attacher Orion.\nCe alors qu\u0026rsquo;Orion marchait tranquillement devant moi.\nLes personnes qui nous connaissent, Orion et moi, savent à quel point cette requête est ridicule et profondément débile. 🤣\nOrion est excellemment éduqué et n\u0026rsquo;a jamais fait de tort ni dérangé personne.\nContrairement à son chien, et à elle, donc.\nLes conséquences pour mon bébé Orion # Orion, qui est toujours très attentif, l\u0026rsquo;est encore plus et regarde plus souvent derrière nous depuis ces événements tragiques, notamment aux abords des endroits où ce chien l\u0026rsquo;a agressé.\nIl a eu deux ou trois comportements inquiets ou irrités en présence de chiens du même type.\nJe veille bien sûr à le guider et l\u0026rsquo;aider par des mots d\u0026rsquo;explication et des indications. Cela l\u0026rsquo;aide à mieux maîtriser ses émotions, à mieux gérer les situations, et à progresser dans ses analyses et comportements.\nUn processus auto-destructeur # Ce dimanche, vers 18 heures 30, nous partons pour notre longue balade par ce même chemin agricole entre les champs.\nJe vois arriver au loin face à nous un chien de ce type et deux personnes qui se baladent.\nD\u0026rsquo;abord, la personne semble rappeler son chien, et je me dis qu\u0026rsquo;elle va l\u0026rsquo;attacher.\nQue nenni.\nOrion, qui reconnaît les intéressés ralentit et se colle à moi. Je dois l\u0026rsquo;encourager à avancer. 2\nOrion et moi marchons paisiblement sur le bas-côté du chemin (de la largeur d\u0026rsquo;une petite route), les personnes arrivent en face de l\u0026rsquo;autre côté.\nSubitement, alors qu\u0026rsquo;il arrive à notre hauteur, le chien se rue à nouveau sur Orion juste à mes pieds devant moi.\nIl manifeste toujours ce même trouble de comportement que j\u0026rsquo;ai décrit plus haut. Pas par derrière ni par surprise comme les fois précédentes, mais c\u0026rsquo;est toujours aussi inacceptable et préoccupant pour son état de santé mentale.\nLa dame est accompagnée d\u0026rsquo;une autre dame.\nJe me dis : « Au moins, comme cela, une autre personne a vu le problème. Peut-être même que cette autre dame, charmante et très courtoise par ailleurs, pourra ouvrir les yeux à son ‹ amie › ».\nDe nouveau, et comme à chaque fois, la dame ne rappelle pas son chien ni ne le corrige.\nJe regarde la dame du chien en passant, silencieux : j\u0026rsquo;attends des excuses.\nJe reçois alors une preuve incontestable des troubles profonds de cette dame.\nJ\u0026rsquo;en suis même très étonné, vu le contexte et la présence d\u0026rsquo;une tierce personne à côté d\u0026rsquo;elle.\n« CONNARD ! » 3\nme jette t-elle comme une demeurée ou une personne sous l\u0026rsquo;emprise de psychotropes qui serait dans une crise de démence non contrôlée.\nVoilà qui ne me réconcilie pas avec ces choses que vous appelez encore humains et que je classe, moi, dans d\u0026rsquo;autres catégories de spécimens biologiques ou d\u0026rsquo;agrégats de matières organiques…\nJe ne peux que lui faire la remarque, cinglante mais objectivement réaliste :\n« — Bravo, le même comportement [agressif] débile que votre chien ! »\nConclusions # Une attitude impeccable # Première chose, je n\u0026rsquo;ai pas eu besoin de gérer ni de me préoccuper du comportement d\u0026rsquo;Orion.\nIl a été, est, et restera un très bon chien.\nJe lui avais donné des consignes claires bien avant l\u0026rsquo;altercation, qu\u0026rsquo;il a respectées.\nIl n\u0026rsquo;a donc pas répondu à l\u0026rsquo;agression et il a su faire sa vie paisiblement pendant l\u0026rsquo;ensemble des événements sans que j\u0026rsquo;ai à m\u0026rsquo;en soucier.\nIl vole bien au-delà du nid des coucous.\nDe ces deux coucous-là en particulier, comme de beaucoup d\u0026rsquo;autres.\nRien à attendre d\u0026rsquo;eux·elles # Ces personnes sont déconnectées de la réalité. Elles s\u0026rsquo;auto-conditionnent, s\u0026rsquo;auto-hallucinent et s\u0026rsquo;auto-emportent dans leur propre tourbillon de dégénérescences cognitives et comportementales.\nTous ces symptômes sont une partie visible d\u0026rsquo;un immense DE PROFUNDIS : Un grand vide où leur âme perdue erre sans jamais en sortir.\nTrès concrètement :\nils·elles ne rééduquent pas leur chien, ou très mal ; ils·elles n\u0026rsquo;ont pas conscience du niveau d\u0026rsquo;anxiété et de stress dans lequel leur pauvre chien vit ; ils·elles ne prennent pas conscience de la gravité de l\u0026rsquo;état de leur chien, ni du leur. J\u0026rsquo;affirme qu\u0026rsquo;ils·elles maltraitent gravement leur chien (et ceux des autres, soi dit en passant, par son intermédiaire).\nAlors, pour ce qui est\nde réaliser à quel point ils·elles se comportent mal vis-à-vis des autres ou de prendre des mesures adéquates (ici, simplement attacher leur chien pour éviter qu\u0026rsquo;il agresse le nôtre), il n\u0026rsquo;y a rien à attendre d\u0026rsquo;eux·elles.\nCes gens vivent dans le déni de réalité et dans l\u0026rsquo;irresponsabilité les plus profonds et irrémédiables, je le crains.\nQue pouvons-nous faire ? # Bien faire pour notre chien # La première des choses à faire, c\u0026rsquo;est de veiller à surtout, surtout ne pas leur ressembler.\nNous veillons à la bonne éducation et au bon comportement de notre compagnon.\nEt plus encore pour notre chien # La deuxième, c\u0026rsquo;est d\u0026rsquo;élever le niveau pour notre chien.\nNous préparons notre chien plus qu\u0026rsquo;il ne le faudrait.\nNous le préparons plus qu\u0026rsquo;il serait nécessaire dans un monde sain, car le monde est ce qu\u0026rsquo;il est.\nAinsi, notre chien gère mieux et vit mieux ces situations. Ils est moins affecté par le fait de devoir vivre dans un monde rempli de « champignons » 4, chiens et humains, de ce genre.\nJ\u0026rsquo;appelle cela sur-éduquer le chien.\nIl en a grand besoin, car il n\u0026rsquo;a pas tous les outils dont (les meilleurs d\u0026rsquo;entre) nous disposons pour analyser les situations et prendre les meilleures options. Ce d\u0026rsquo;autant plus qu\u0026rsquo;il dispose de peu de marges de manœuvre.\nProtéger et préserver notre chien # La troisième, c\u0026rsquo;est de continuer à vivre le plus longtemps possible le plus loin possible de tous ces êtres, humains et chiens, toxiques, malsains et clairement méprisables.\nCeci nous permet de protéger et de préserver notre chien, et nous-mêmes par la même occasion.\nNous évitons les situations à risques ou pénibles pour notre chien.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nNotes pour les humains # Postures face aux pervers narcissiques # De nombreuses personnes sont victimes de diverses formes de perversion narcissique qui les font nager dans un DE PROFUNDIS de délires et d\u0026rsquo;hallucinations. Tout ceci les conduit à ne pas voir clairement la réalité des faits et à devenir toxiques pour elles-mêmes, pour leurs proches — ici leur chien par exemple —, et pour les autres.\nFace à elles, nous pouvons être\n— de préférence — courtois, tout en restant le plus inerte et silencieux possible ; narquois·e·s et joueur·se·s ou, parfois, silencieux·ses sans courtoisie (on ne salue plus), et dans de rares cas très graves, très désagréables. Contre-mesures d\u0026rsquo;autodéfense active # Lorsque nous sommes désagréables et donc vulgaires, ce n\u0026rsquo;est pas sous le coup de la colère ou de la frustration, mais bien une manœuvre volontaire.\nNous utilisons des termes très durs et très forts lorsque nous sommes contraint·e·s de recadrer certaines personnes.\nC\u0026rsquo;est, bien souvent, le seul moyen de se faire etendre et « respecter » par ces personnes.\nFaute d\u0026rsquo;obtenir une amélioration de leur comportement — chose rarissime voire impossible chez chez gens-là —, cela permet de les éloigner.\nIl faut malheureusement parfois se mettre au diapason de la médiocrité pour obtenir un semblant de « résultat ».\nNotre seul but est de tenir les nuisibles aussi éloigné·e·s que possible et d\u0026rsquo;éviter de perdre notre temps dans des joutes verbales qui n\u0026rsquo;ont aucune chance d\u0026rsquo;aboutir à un quelconque progrès : quand la faiblesse d\u0026rsquo;esprit dépasse certains seuils, il n\u0026rsquo;est pas possible de progresser.\nNous avons beaucoup mieux à faire de nos vies.\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\nFaites-moi penser à faire en sorte de ne pas croiser ce genre de personnes et de ne pas leur adresser la parole. J\u0026rsquo;oublie encore, à mon âge, parfois, à quel point c\u0026rsquo;est désagréable et totalement improductif.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nJe n\u0026rsquo;ai pas forcément réfléchi ce choix. J\u0026rsquo;aurais peut-être pu éviter ce nouvel incident à Orion. Sans doute, même. D\u0026rsquo;autant que je connais les solutions. La dernière fois que nous nous étions croisés dans le même contexte sur ce chemin, le « chien débile » n\u0026rsquo;avait pas agressé Orion. Je me suis dit dans le moment que ça allait bien se passer.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCette dame avait déjà manifesté ce genre de trouble du comportement plusieurs fois lors d\u0026rsquo;autres croisements. Ces autres fois, le chien s\u0026rsquo;était tenu à distance, et n\u0026rsquo;avait pas agressé Orion. Impossible de ne pas faire le rapprochement entre le manque criant d\u0026rsquo;éducation de cette dame et les problèmes de son chien. Les deux se montrent agressifs sans autre cause ni motivation que leurs propres délires personnels…\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nExpression que j\u0026rsquo;emprunte au célèbre Petit Prince, bien sûr.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"4 mai 2026","externalUrl":null,"permalink":"/fr/posts/de-profundis/","section":"Posts","summary":"Bonjour,\nOrion et moi avons de nouveau croisé cette dame avec son chien au trouble de comportement évident.\nLe chien n’est pas le seul à présenter des troubles du comportement, je le crains…\nPremières agressions # Ce chien a déjà foncé vers Orion en mode agression plusieurs fois.\nLa première fois que cela est arrivé, nous jouions paisiblement Orion et moi, comme nous en avons l’habitude, pendant notre balade sur un chemin entre les champs. Je lançais la balle et Orion allait la chercher. Ce chien est arrivé de nulle part derrière nous en courant à toute allure. Il a foncé droit vers Orion et l’a agressé une première fois.\n","title":"De Profundis","type":"posts"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/fr/tags/devops/","section":"Tags","summary":"","title":"Devops","type":"tags"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/en/areas/dog-well-being-and-education/","section":"Areas","summary":"","title":"Dog Well-Being and Education","type":"areas"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/en/tags/dogs/","section":"Tags","summary":"","title":"Dogs","type":"tags"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/en/tags/education/","section":"Tags","summary":"","title":"Education","type":"tags"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/fr/tags/%C3%A9ducation/","section":"Tags","summary":"","title":"Éducation","type":"tags"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/fr/tags/gitea/","section":"Tags","summary":"","title":"Gitea","type":"tags"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/en/tags/livingtogether/","section":"Tags","summary":"","title":"LivingTogether","type":"tags"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/fr/tags/vivreensemble/","section":"Tags","summary":"","title":"VivreEnsemble","type":"tags"},{"content":"","date":"4 mai 2026","externalUrl":null,"permalink":"/fr/tags/webhook/","section":"Tags","summary":"","title":"Webhook","type":"tags"},{"content":"Bonjour,\nJ\u0026rsquo;ai un peu galéré pour faire tourner mon flux de travail (workflow) pour automatiser les mises à jour automatiques de ce blog lorsque je publie (push) la branche main de mon dépôt sur mon serveur gitea.\nLe défi : Automatiser le déploiement # L\u0026rsquo;objectif était simple : utiliser les Gitea Actions pour que chaque git push déclenche automatiquement la mise à jour du conteneur de mon site sur mon instance Dokploy.\nSur le papier, il suffit d\u0026rsquo;un simple curl pour appeler l\u0026rsquo;URL du Webhook fourni par Dokploy. En réalité, ce fut un véritable exercice de « débogage à l\u0026rsquo;aveugle ».\nSymptômes : « Tous les indicateurs sont au vert, mais rien ne bouge » # Le premier diagnostic était déroutant :\nLe suivi des Actions Gitea affichait un beau succès (Pastille verte). L\u0026rsquo;interface de Dokploy, elle, restait désespérément muette : aucune trace de nouveau déploiement. C\u0026rsquo;est ici qu\u0026rsquo;intervient la règle d\u0026rsquo;or du DevOps : Ne jamais faire confiance à un code de sortie 0 sans vérifier le corps de la réponse.\nLe diagnostic : À la chasse au \u0026ldquo;Branch Not Match\u0026rdquo; # En passant le curl en mode verbeux et en capturant la réponse du serveur, le coupable a fini par se montrer : {\u0026quot;message\u0026quot;:\u0026quot;Branch Not Match\u0026quot;}\nDokploy recevait bien l\u0026rsquo;appel, mais il le rejetait car il n\u0026rsquo;arrivait pas à identifier de quelle branche parlait le webhook. Le problème venait de plusieurs facteurs combinés :\nLa redirection fantôme (301) : Mon instance étant derrière un reverse-proxy, l\u0026rsquo;URL HTTP était redirigée vers HTTPS. Sans l\u0026rsquo;option -L, curl s\u0026rsquo;arrêtait à la redirection sans transmettre les données. Le manque d\u0026rsquo;identité : Gitea n\u0026rsquo;envoie pas les mêmes en-têtes (headers) que GitHub. Dokploy, ne voyant pas l\u0026rsquo;étiquette familière, ignorait les paramètres de la requête. La solution : Un appel « blindé » # Pour résoudre ce conflit de communication, il a fallu « forcer » la négociation entre le client et l\u0026rsquo;API de Dokploy en ajoutant des éléments cruciaux dans le workflow Gitea :\nLe suivi de redirection (-L) : Pour suivre le passage du HTTP au HTTPS. L\u0026rsquo;en-tête de contenu (Content-Type: application/json) : Pour confirmer le format des données. L\u0026rsquo;en-tête d\u0026rsquo;événement (X-Gitea-Event: push) : Pour que Dokploy sache qu\u0026rsquo;il doit traiter l\u0026rsquo;appel comme une action Git. Le corps de la requête (-d) : Pour spécifier explicitement la branche (main). Le code final du workflow Gitea # Voici à quoi ressemble l\u0026rsquo;appel qui a finalement débloqué la situation dans mon .gitea/workflows/deploy.yaml :\n1 2 3 4 5 6 - name: Trigger Dokploy Webhook run: | curl -L -X POST \u0026#34;${{ secrets.DOKPLOY_DEPLOY_WEB_HOOK }}\u0026#34; \\ -H \u0026#34;Content-Type: application/json\u0026#34; \\ -H \u0026#34;X-Gitea-Event: push\u0026#34; \\ -d \u0026#39;{\u0026#34;ref\u0026#34;: \u0026#34;refs/heads/main\u0026#34;}\u0026#39; Ce bogue (issue) est documenté ici : https://github.com/Dokploy/dokploy/issues/2149\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","date":"4 mai 2026","externalUrl":null,"permalink":"/fr/posts/webhooks-cicd-quand-dokploy-et-gitea-refusent-de-se-parler/","section":"Posts","summary":"Bonjour,\nJ’ai un peu galéré pour faire tourner mon flux de travail (workflow) pour automatiser les mises à jour automatiques de ce blog lorsque je publie (push) la branche main de mon dépôt sur mon serveur gitea.\nLe défi : Automatiser le déploiement # L’objectif était simple : utiliser les Gitea Actions pour que chaque git push déclenche automatiquement la mise à jour du conteneur de mon site sur mon instance Dokploy.\n","title":"Webhooks \u0026 CI/CD : Quand Dokploy et Gitea refusent de se parler","type":"posts"},{"content":"","date":"3 mai 2026","externalUrl":null,"permalink":"/fr/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":"","date":"3 mai 2026","externalUrl":null,"permalink":"/fr/tags/caddy/","section":"Tags","summary":"","title":"Caddy","type":"tags"},{"content":"","date":"3 mai 2026","externalUrl":null,"permalink":"/fr/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":"Bonjour et bienvenue dans ce nouveau blog.\nJ\u0026rsquo;ai choisi d\u0026rsquo;utiliser le moteur de gestion de contenus et générateur de sites statiques Hugo associé à Caddy.\nLe tout est déployé dans une infrastructure Docker gérée avec Dokploy. Caddy n\u0026rsquo;est donc ici utilisé que pour le rendu rapide de pages statiques.\nLe proxy inverse (reverse proxy) du serveur est Traefik.\nJe n\u0026rsquo;ai pas encore réussi à faire tourner mes gitea actions correctement pour la mise à jour automatique lorsque je commit, mais cela ne saurait tarder. 😉\nAddendum (04/05/2026) # C\u0026rsquo;est bon pour le flux de travail (workflow) gitea \u0026ndash;\u0026gt; runner docker \u0026ndash;\u0026gt; recompilation (rebuild) dans le conteneur du site. Une petite procédure a été nécessaire pour forcer l\u0026rsquo;appel (POST) à passer les bons paramètres (le nœud du problème était la négociation entre le client (curl) et l\u0026rsquo;API côté Dokploy).\nAddendum 2 (04/05/2026) # Tout ça pour ça ! J\u0026rsquo;ai finalement décidé de remettre en place un flux de travail beaucoup plus simple qui compile le site sur ma machine de travail et télécharge les fichiers du site directement sur le serveur. C\u0026rsquo;est beaucoup plus simple et efficient.\nComme j\u0026rsquo;aime ! 😉\nAu plaisir,\nMarc JESTIN\nhttps://marcjestin.fr\n","date":"3 mai 2026","externalUrl":null,"permalink":"/fr/posts/mon-premier-article/","section":"Posts","summary":"Bonjour et bienvenue dans ce nouveau blog.\nJ’ai choisi d’utiliser le moteur de gestion de contenus et générateur de sites statiques Hugo associé à Caddy.\nLe tout est déployé dans une infrastructure Docker gérée avec Dokploy. Caddy n’est donc ici utilisé que pour le rendu rapide de pages statiques.\nLe proxy inverse (reverse proxy) du serveur est Traefik.\nJe n’ai pas encore réussi à faire tourner mes gitea actions correctement pour la mise à jour automatique lorsque je commit, mais cela ne saurait tarder. 😉\n","title":"Mon Premier Article","type":"posts"},{"content":"","date":"3 mai 2026","externalUrl":null,"permalink":"/fr/tags/traefik/","section":"Tags","summary":"","title":"Traefik","type":"tags"}]