Cela fait environ dix ans que j'ai fait des choix de rangement de mes journaux informatiques (logs) sur mes serveurs personnels. Il est grand temps de faire un bilan et d'améliorer ce qui doit l'être.
Sur un système GNU/Linux, les journaux sont éclatés en fichiers par catégorie (facility) et par priorité. Un même message peut être consigné dans plusieurs fichiers.
Je pense que cette organisation en gros pâtés n'est pas intuitive ni optimale.
Ce que je fais :
Ça se fait facilement en rajoutant des fragments de configuration dans /etc/rsyslog.d. Ainsi, pour CRON, je crée un fichier /etc/rsyslog.d/cron.conf contenant cron.* -/var/log/cron.log.
De base, les journaux archivés (« .log.1 », « .log.2.gz », etc.) sont stockés à côté du journal courant. Du coup, /var/log devient rapidement un fouillis dans lequel je peine à m'y retrouver. C'est encore plus prononcé quand on a des obligations de conservation sur un temps long.
Ce que je fais : une arborescence séparée /var/log/archives/<nom_logiciel_ou_service>.
Cela suppose de surcharger tous les fragments de configuration déposés dans /etc/logrotate.d/ par des paquets logiciels. Pour éviter d'incessantes questions lors des mises à jour desdits paquets, j'utilise dpkg-divert. Exemple : dpkg-divert --add --rename --divert /etc/logrotate.d/apache2.dpkg-dist /etc/logrotate.d/apache2 qui ordonne de ranger le fichier /etc/logrotate.d/apache2 livré par un paquet dans /etc/logrotate.d/apache2.dpkg-dist. logrotate ignore les fichiers dont le nom termine par « .dpkg-dist ».
Tantôt des fichiers de configurations dans /etc/logrotate.d commençaient par la périodicité, tantôt par la durée de conservation, tantôt par… De plus, je n'utilisais pas les mêmes directives partout sans justification (ifempty, par ex.).
C'est galère pour chercher visuellement ou automatiquement des informations.
J'ai tout harmonisé au format : paramètres généraux puis paramètres du journal courant puis paramètres des archives puis scripts. Donc : périodicité, rotate, missingok, ifempty, create, olddir, compress, delaycompress, sharedcripts, postrotate.
Il y avait des divergences mineures entre mes serveurs persos pour un même journal. C'est corrigé.
Debian est passé de mysql à mariadb, donc les noms des journaux n'étaient plus parlants (ceci dit, la configuration demeure toujours dans /etc/mysql donc bon…), des directives rsyslog étaient devenues inutiles (elles ne capturaient et donc ne redirigeaient plus rien) et, c'est désormais rsyslog qui journalise tout (cf. /etc/mysql/mariadb.conf.d/50-server.cnf), donc le script postrotate dans la configuration de logrotate semble insuffisant, j'y ai rajouté /usr/lib/rsyslog/rsyslog-rotate.
Lors de l'activation de HTTP/2 sur ce site, je suis passé de php sous forme de module pour Apache httpd à php-fpm. Désormais, il y a un journal pour le gestionnaire (php-fpm) qui était pris en charge par logrotate via une configuration livrée avec le paquet, mais qui, du coup, n'archivait pas dans mon arborescence séparée ni pour une durée pour laquelle j'avais consentie.
L'ennui, c'est que le nom du journal, « php7.4-fpm.log », changera à la prochaine mise à jour majeure de Debian, car la version de php changera (7.3 -> 7.4 -> 8.2). Le fragment de configuration pour logrotate sera livré dans le paquet, mais ne contiendra pas mes directives. Configurer PHP-FPM pour envoyer son journal à rsyslog ne résout pas ce problème : l'arborescence de configuration dépend aussi de la version de PHP (/etc/php/<VERSION>/fpm/php-fpm.conf), donc elle sera effacée par la mise à jour. Vu le cycle de vie très rapide de php-fpm, l'objectif de ce nommage dépendant de la version est de pouvoir installer simultanément plusieurs versions de PHP sur un même système.
J'ai créé un fichier /etc/logrotate.d/php :
/var/log/php*-fpm.log {
[…]
postrotate
# Demander à la "bonne" version des php-fpm de réouvrir son journal
binname=$(find /usr/lib/php/ -iname 'php*-fpm-reopenlogs')
if test -x "$binname"
then
$binname;
fi
endscript
}
Hé oui, là encore, le binaire qui permet de dire à php-fpm de changer de journal dépend du numéro de version…
Mais, ça ne suffit pas : logrotate.conf inclut les fragments de conf' présents dans /etc/logrotate.d, dont php et php-X.Y-fpm. Logrotate consignera que deux fragments de conf' portent sur un même journal et terminera en erreur, pour ces deux fragments, donc le journal de php ne sera pas archivé et le script pas exécuté. Je crée donc un fichier /etc/cron.daily/php :
#!/bin/bash
# dpkg-divert une éventuelle nouvelle config suite màj majeure Debian
if test -f /etc/logrotate.d/php*-fpm
then
confpath=$(find /etc/logrotate.d/ -type f -name 'php*-fpm')
dpkg-divert --quiet --add --rename --divert "${confpath}.dpkg-dist" "$confpath"
fi
J'ai déjà expliqué ce point : je créais un journal par hôte virtuel, donc deux journaux par site web, un pour HTTP, l'autre pour HTTPS.
Ce distinguo ne m'a rien apporté en dix ans. Notamment car, par défaut, Apache httpd ne journalise pas les erreurs TLS. Je ne vais pas activer cela vu que j'en n'ai pas eu besoin et que ça risque de souvent biper à tort vu mon certificat x509 signé par une autorité de certification maison.
Shaarli consigne une erreur à chaque robot qui accède, sans définir le referer (la case n'existe alors pas dans le tableau $_SERVER), aux liens qui permettent de changer le nombre de liens par page. Et comme shaarli redéfinit error_reporting… Bref, dans index.php de shaarli, remplacer le error_reporting existant par : error_reporting(E_ALL^E_WARNING^E_NOTICE);.
La bibliothèque de fonctions de RSS-Bridge qui fait l'interface avec l'API de Twitter, TwitterClient, consigne des événements en mode debug ("je réutilise le token mise en cache", "je demande un nouveau token", etc.) qui atterrissent dans le journal des erreurs de l'hôte virtuel. Aucune condition autour de ces directives, donc pas d'autre moyen de les faire taire que de les commenter…
Un plugin de mon Wordpress, mon thème perso Wordpress et Shaarli généraient des erreurs pour des fonctions dépréciées, pour une syntaxe erronée (function_exists() attend le nom d'une fonction avec ses parenthèses ou entourée de guillements), etc. J'ai corrigé tout ça.
ejabberd consignait en permanence des erreurs TLS liées à mon certificat x509 autosigné. C'est inutile et ça conservait des données personnelles (l'essentiel de mes contacts ont un serveur Jabber perso donc le nom de domaine est une donnée personnelle). J'ai réduit la verbosité d'ejabberd (loglevel: 2 dans /etc/ejabberd/ejabberd.yml). Le reste était des messages au démarrage "tu charges tel module sans charger tel autre, c'est inhabituel". J'ai corrigé ça.
Lors de la définition de ma politique de journalisation, je me suis fait embarquer par la légende urbaine qui voudrait qu'on doit conserver le journal des accès à un serveur web pendant un an, idem pour un serveur emails ou de messagerie. La réalité est plus nuancée et dépend de l'usage et du contexte. J'ai tout détaillé dans un autre article. Au final, je ne suis pas concerné par les obligations légales de conservation de données de connexion.
De plus, par paresse intellectuelle et par peur du manque, je consignais des journaux techniques sur la même durée (un an) alors que ça n'a aucun intérêt. Consigner les journaux d'OpenDNSSEC durant un an quand la durée de vie de mes signatures est d'une semaine, ça n'a aucun intérêt (s'il y a une erreur, mes services seront inaccessibles dans la semaine). Consigner les transferts de zones DNS sur la même durée est tout aussi inutile, là encore en relation avec la durée d'expiration de mes zones sur mes serveurs DNS secondaires. Idem le journal de ntpd qui consigne rien après son démarrage… Etc.
Je me rassurais : la plupart de ces journaux ne comportent aucune donnée personnelle. Pour ceux qui en comportent, comme celui de mon serveur emails, ce n'était pas bien grave car, à part les spammeurs et les scanneurs de ports / TLS / etc., ça consignait ma correspondance… que je conserve de toute façon dans mon logiciel de messagerie.
Parfois, cette durée de conservation m'a été utile. Exemple ? Vérifier les paramètres pris en charge par les gros fournisseurs emails avant de renforcer mes configurations TLS. L'ennui, c'est que tout peut toujours être utile. Avoir un micro en permanence sur toi quand t'es chez ton employeur permettra de prouver ta bonne foi lors d'un contentieux… ou que t'es en tort. Surveiller ton/ta partenaire de cul permettra de détecter sa tromperie… ou la tienne. Fliquer toute la population augmente la probabilité de retrouver l'auteur d'une infraction… ou un dissident politique. C'est précisément le sens des arrêts de la CJUE sur la rétention des données de connexion : l'équilibre entre la préservation de la vie privée et les autres intérêts. Dans le cas d'usage que je cite, je pouvais très bien faire mon étude au fil de l'eau, avant de modifier mes paramètres TLS, en conservant uniquement mes résultats (tel fournisseur emails prend en charge uniquement TLS 1.0, par ex.). C'est un boulot régulier (avant chaque effacement du journal), c'est la seule contrainte.
Désormais, j'ai défini deux catégories de journaux :
weekly + rotate 1) ;weekly + rotate 5) afin d'être sûr qu'ils englobent un mois entier, de son 1er jour à son dernier (explication) ;weekly + rotate 4), soit un mois glissant ;monthly + rotate 5).Quand on veut réduire la durée de conservation de ses journaux, il faut penser à systemd-journald.
Sur un système Debian, journald s'interpose entre les logiciels et rsyslog, même quand c'est rsyslog qui ouvre la socket UNIX pour un logiciel (postfix, par ex.). Il reçoit donc tous les messages syslog. Or, par défaut, il implémente une politique basée sur l'occupation de l'espace disque (détails).
On peut réduire l'occupation disque maximale des journaux, mais je ne suis pas fan : en cas de pic d'activité (ou d'attaque), les journaux pertinents peuvent être écrasés par ceux du pic…
On peut désactiver partiellement journald (détails, dernière ligne), mais ce n'est pas à l'épreuve du temps vu que journald a des usages pertinents et qu'il est appelé à prendre une place centrale.
On peut faire un mix entre une politique d'occupation disque et une politique basée sur le temps (détails). En ce qui me concerne, j'ai configuré MaxRetentionSec=5week. Il s'agit, chez moi (cf. section précédente), de la durée maximale désirée des journaux qui transitent par message syslog (apache httpd et nginx écrivent eux-mêmes leurs journaux, idem pour apt et dpkg).
La plupart des fragments de configuration par défaut pour logrotate contiennent la directive notifempty, qui lui ordonnent de ne pas archiver les journaux, ni de supprimer les plus vieux, si le journal est vide.
On peut donc se retrouver avec des journaux, y compris contenant des données à caractère personnel, vieux de plusieurs années.
Solution : dpkg-divert + corriger la configuration de logrotate.
Dans la plupart des journaux, la date et l'heure d'un message sont exprimées dans un format difficilement exploitable comme « Jul 1 01:23:45 » ou « 01/Jul/2023:01:23:45 ».
Cela complique l'affichage simultané de plusieurs journaux dans l'ordre chronologique. On peut faire zcat $(ls -rv), mais bon, paye ta simplicité lors d'une urgence, et ça suppose que tous les journaux soient dans le même dossier. Surtout si les journaux englobent plusieurs mois : sort classera « Jul » (juillet) avant « Jun » (juin), par exemple, et selon le type de tri, il classera 10,11,12, etc. après 01 et avant 02… Oui, il est possible de préciser à sort de longs paramètres pour trier comme il faut, mais, là encore, paye ta simplicité…
De même, cela complique une recherche dans les journaux : « Jul 1 » (deux espaces) mais « Jul 10 » (une espace). Rien de grave, mais c'est pénible.
Le pompon, c'est la date+heure au milieu d'une ligne, notamment dans les journaux des serveurs web. Le journal est chronologique, donc la date est la clé du tri implicite, donc elle devrait être en début de ligne, en lieu et place de l'adresse IP qui est l'une des infos du message, pas une caractéristique de ce dernier comme l'est la date. Là encore, ça complique un tri avec sort.
Tout cela constitue l'une des raisons qui m'a fait reculer à chaque fois que j'ai réfléchi à la réduction de la durée de conservation de mes journaux : une durée de conservation de quelques semaines, un mois au max, est souvent la plus apropriée, mais en monthly + rotate 0, logrotate supprime le journal des derniers jours d'un mois dès le 1er jour du mois suivant (voir), donc on part sur rotate 1 donc 2 mois de conservation… De plus, descendre en dessous d'un mois, c'est choisir une périodicité quotidienne ou hebdomadaire, et donc devoir agréger plusieurs journaux pour obtenir une vision sur « quelques semaines - 1 mois », et donc se retrouver face au problème de tri énoncé ci-dessus…
Il existe deux ensembles de formats de date+heure faciles à manipuler : ISO 8601 et RFC 3339. Les arguments sont ici. Les deux normes ne sont pas équivalentes, certains formats communs aux deux normes, d'autres non, voir.
Comment les utiliser ?
D'après sa documentation, rsyslog permet d'utiliser le format « %Y-%M-%D %h:%m:%.6s%Z:%z », dérivé de « %Y-%M-%D %h:%m:%.3s%Z:%z » (seul le nombre de chiffres après la seconde change), qui est un format commun au RFC 3339 et à ISO 8601.
Pour l'utiliser dans tous les journaux dont rsyslog à la charge :
# echo '$ActionFileDefaultTemplate RSYSLOG_FileFormat' > /etc/rsyslog.d/0-dateformat.conf
# systemctl restart rsyslog
(Préfixer le nom du fichier par « 0 » permet qu'il soit le premier inclus dans /etc/rsyslog.conf. Sans cela, le format de date+heure des logiciels dont le fragment de config' rsyslog serait inclus avant resterait inchangé.)
Inventaire :
ejabberd ne permet pas de changer le format de ses journaux ni d'envoyer ses messages à syslog ;logger (voir). À chaque requête, un processus logger est lancé. Ça me paraît bien gourmand pour rien en comparaison d'une écriture dans une socket UNIX syslog… De plus, comme déjà dit ci-dessus, journald "interceptera" les messages syslog et procédera à une double journalisation, qui consommera de l'espace disque, et désactiver journald, même partiellement, est à contre-courant de l'histoire.Le format combined des journaux des accès, qui répond à mes autres besoins, est défini dans /etc/apache2/apache2.conf, il n'y a plus qu'à l'adapter à ce qu'on veut en se reposant sur la doc' ou en utilisant un exemple tout prêt.
Le format des journaux des erreurs et les formats possibles sont définis dans la doc'. On notera que le format des journaux des accès (ISO 8601) ne peut pas être repris dans le journal des erreurs. Le format qui s'en rapproche le plus est « %Y-%M-%D %h:%m:%.6s » qui, comme dit plus haut, ne fait partie ni d'ISO 8601, ni du RFC 3339, mais en est très proche et en présente les mêmes avantages.
Pour appliquer le format :
# Journaux des accès
echo 'LogFormat "%{%Y-%m-%dT%T}t %h %l %u \"%r\" %>s %O \"%{Referer}i\" \"%{User-agent}i\"" combined-with-iso8601' > /etc/apache2/conf-available/iso8601-log-format.conf
echo 'LogFormat "%{%Y-%m-%dT%T}t %v:%p %h %l %u \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined-with-iso8601' >> /etc/apache2/conf-available/iso8601-log-format.conf
a2enconf iso8601-log-format.conf
# Dans chaque hôte virtuel
CustomLog ${APACHE_LOG_DIR}/<vhost>/access.log combined-with-iso8601
# Pour other_vhosts_access.log
dpkg-divert --add --rename --divert /etc/apache2/conf-available/other-vhosts-access-log.conf.dpkg-dist /etc/apache2/conf-available/other-vhosts-access-log.conf
echo 'CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined-with-iso8601' > /etc/apache2/conf-available/other-vhosts-access-log.conf
# Journaux des erreurs
echo 'ErrorLogFormat "%{cu}t [%-m:%l] [pid %P:tid %T] %7F: %E: [remote\ %a] %M% ,\ referer:\ %{Referer}i"' >> /etc/apache2/conf-available/iso8601-log-format.conf
# Dans chaque hôte virtuel (oui, pas besoin de préciser le format, il est unique, sauf si on le surcharge dans un hôte virtuel)
ErrorLog ${APACHE_LOG_DIR}/<vhost>/error.log
# /var/log/apache2/error.log est défini dans /etc/apache2/apache2.conf, il n'y a rien à faire
(Je rappelle que le format des journaux des erreurs, globaux ou par hôte virtuel, ne peut pas être modifié, cf. ci-dessus.)
Le format combined des journaux des accès, qui correspond à mes autres besoins, est défini dans la doc', il n'y a plus qu'à l'adapter. Toutes les variables utilisables (TLS, communication avec le backend, etc.) ne sont pas mentionnées, il faut creuser ailleurs dans la doc' :(. En tout cas, on a la variable « $time_iso8601 » qui fait ce qu'on veut.
Mise en pratique :
Le journal global des accès est défini dans nginx.conf avant l'inclusion des confs situées dans conf.d/… donc il faut modifier nginx.conf, soit pour inverser cet ordre, soit pour ajouter nos directives directement dedans, ce que j'ai fait…
dpkg-divert --add --no-rename --divert /etc/nginx/nginx.conf.dpkg-dist /etc/nginx/nginx.conf
# Dans nginx.conf
log_format combined-with-iso8601 '$time_iso8601 $remote_addr - $remote_user "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log combined-with-iso8601;
# Dans chaque hôte virtuel
access_log /var/log/nginx/<vhost>/access.log combined-with-iso8601;Deleting or removing all emails from Postfix queue
To remove all mail from the queue, enter:
postsuper -d ALLTo remove all mails in the deferred queue, enter:
postsuper -d ALL deferred
postqueue -p pour voir la file d'attente.
#drop
Sur un système GNU/Linux, logrotate est l'outil qui permet d'archiver périodiquement les journaux, de les compresser, puis de les supprimer en fonction d'une durée de conservation ou d'un volume d'espace disque occupé.
Il y a quelques petits pièges et trucs à savoir. C'est ce que nous allons voir.
Le manuel de logrotate expose : « Log files are rotated count times before being removed ». logrotate conservera donc X journaux en sus du journal courant / actuel. rotate 0 : dès la périodicité atteinte, le journal actuel ne sera pas archivé, il sera supprimé. rotate 1 : un journal archivé sera conservé en sus de l'actuel. rotate 2 = deux journaux archivés en sus du journal courant. Etc.
Donc la couverte sera minimum X * périodicité, maximum X+1 * périodicité. Si la périodicité est mensuelle :
rotate 0 : le journal actuel sera effacé après un mois, donc tu gardes pile un mois d'historique, mais, dès le 1er jour du mois suivant, tu perds tout cet historique, y compris celui de la veille (dernier jour du mois précédent), donc la durée minimale de conservation est 0 ;rotate 1 : un journal actuel et un journal archivé, donc un message sera conservé deux mois au maximum (si elle a été consignée le premier jour du premier mois), et un mois au minimum (les entrées du 31e jour du mois X ne seront pas effacées le 1er jour du mois X+1) ;rotate 12 conserve 12 mois minimum, 13 mois maximum (au dernier jour du 13e mois, dans le journal « .log.12.gz », tu auras des données qui remontent jusqu'au 1er jour d'il y a 12 mois. Au 31 juillet 2023, tu as les messages du 1er juillet 2022).La période est glissante. logrotate calcule la périodicité depuis son dernier passage. Il calcule donc un jour, une semaine, un mois, etc. depuis son dernier passage, pas depuis le premier jour d'une semaine ou d'un mois. (Il conserve ses états dans /var/lib/logrotate/status.)
C'est pour ça que si, avec une périodicité hebdomadaire (par ex.), on veut conserver un mois entier, de son 1er jour jusqu'à son dernier, rotate 4 peut ne pas suffire. Exemple : juillet 2023 est sur 6 semaines, de la semaine 26 (01-02/07) à la semaine 31 (31/07). Avec rotate 4, si logrotate archive le journal le lundi à 0 h, alors les 1 et 2 juillets, qui seront stockés dans le journal « log.4.gz », qui deviendra « log.5.gz » ce soir-là, seront effacés. S'il archive le mercredi, alors rotate 4 est suffisant. Mais cela ne se prévoit pas : on peut forcer le passage de logrotate le 1er jour d'une semaine ou d'un mois à la main avec -f, mais, par suite, le système peut être arrêté ou logrotate peut ne pas être exécuté pour toute raison, etc. rotate 5 (qui conserve au max 6 semaines) semble plus adéquat.
De nos jours, ce n'est plus CRON qui exécute logrotate mais un timer systemd (/lib/systemd/system/logrotate.timer), ce qui explique qu'il est désormais exécuté à minuit pile.
(L'usage usuel de CRON prévoit un mécanisme de lissage : les tâches planifiées quotidiennes, hebdomadaires et mensuelles sont lancées à des heures différentes entre elles et entre deux systèmes. Ces heures sont définies automatiquement lors de l'installation du système, cf. /etc/crontab. Généralement, ça tombe dans les 6 h du mat'.)
logrotate ne supprime pas les vieux journaux au-delà de la périodicité configurée. Exemple : si tu passes de rotate 12 à rotate 1, les journaux existants nommés de « log.3.gz » à « log.12.gz » ne seront pas supprimés.
Le mode de fonctionnement nominal de logrotate, c'est de renommer (et donc déplacer tant qu'on reste sur un même système de fichiers, cf. man 2 rename ;) ) le journal courant vers le dossier des archives puis d'exécuter un script pour informer le logiciel qui écrit dedans de passer à un nouveau fichier.
Certains logiciels ne prévoient pas cette fonctionnalité. Pour éviter de les redémarrer, logrotate propose la directive de config' copytruncate : le journal courant est copié dans les archives puis il est vidé (cf. man 2 truncate).
Jusqu'à la mi-2018, un bug rendait inopérante une directive rotate 0 cumulée avec copytruncate : le journal courant était copié, mais pas effacé.
logrotate propose un mode debug (logrotate -d </chemin/vers/la/config>) qui permet de tester toute la conf' ou seulement un fragment.
Quand on utilise copytruncate + rotate 0, la sortie du mode debug contient des incohérences. Exemple : « weekly 0 = weekly (no old logs will be kept) […] copying /var/log/rotate 0 et donc que la copie doit être évitée.
J'ai testé : rotate 0 produit concrètement le même effet avec ou sans copytruncate. C'est uniquement l'affichage du mode debug qui est erroné.
En revanche, avec copytruncate, il existe toujours un bug lors de la suppression du vieux journal. En mode normal, avec rotate 0, logrotate renomme le journal courant « log.1 » puis le supprime. Normal. En copytruncate, il fait pareil, mais il supprime aussi le fichier « log.2.gz » s'il existe. Ça n'a pas de sens : ce journal doit être supprimé uniquement avec rotate 1, comme en mode normal. De même que « log.3.gz » sera supprimé par rotate 2, etc. D'ailleurs, « log.2.gz » est aussi supprimé avec rotate 1 + copytruncate… Bref, il y a un bug quand rotate 0 et copytruncate sont utilisées en même temps mais ça n'a pas d'incidence sauf si l'on réduit la durée de conservation de son journal (log.2.gz sera alors peut-être effacé alors qu'on ne le souhaite pas).
(J'arrive pas à croire que je ne l'ai pas shaarlié plus tôt, ce logiciel.)
Merci Alex.
En France, comme dans le reste de l'Union européenne (UE) et un peu partout ailleurs, les opérateurs de communications électroniques ouverts au public et les hébergeurs informatiques de contenus accessibles au public sont tenus de conserver certaines données durant un certain temps pour certaines finalités légales à tendance répressive (enquêtes pénales, renseignement, et droit de communication des administrations). On nomme ça la rétention des données de connexion. (Cette désignation est trompeuse puisque la conservation d'autres jeux de données est également obligatoire.) Le régime juridique des données de connexion est distinct de celui des interceptions (portant sur le contenu des communications) qui ne sera pas traité ici.
Durant les dix dernières années, ce cadre a évolué, donc je voulais faire le point. De plus, je me suis toujours demandé quelles obligations précises pèsent sur moi avec mon site web perso, mes serveurs emails et de messagerie instantanée persos, etc. Voyons ça.
Dernière mise à jour : avril 2026.
Plan :
2000 : la loi française 2000-719 codifie, dans la loi 86-1067 relative à la liberté de communication, l'obligation, pour les Fournisseurs d'accès à Internet (FAI), les hébergeurs, et les Fournisseurs de services Internet (FSI) de conserver les données permettant l'identification de l'auteur d'un contenu. On est donc avant le 11 septembre, le Patriot Act, blablabla, hein. ;)
2001 :
2011 : le décret 2011-219, précisant la LCEN, est, avec l'ancienne version du R10-13 du CPCE, la dernière définition du régime français avant le grand chamboulement. Il prévoit la conservation des données de connexion suivantes : données d'identité (nom, prénom, etc.), d'abonnement (adresse IP, numéro de téléphone, etc.), de facturation, de trafic (appels, SMS, donc fadettes, date+heure+durée de chaque communication, etc.), et de localisation (d'un smartphone, à la granularité de la couverture d'une zone par une antenne).
2013 : la Loi de programmation militaire, notamment son article 20, octroie, pour la première fois, l'accès aux données de connexion aux services de renseignement (au sens très large, il existe de nombreux « services de renseignement du second cercle »), et aux agents des ministères de l'économie et du budget (articles L246-1 et L246-2 du Code de la sécurité intérieure, CSI) pour la sécurité nationale, la sauvegarde des éléments essentiels du potentiel scientifique et économique de la France, ou la prévention du terrorisme, de la criminalité et de la délinquance organisées et de la reconstitution ou du maintien de groupements dissous (L241-2 CSI). En réalité, le L246-2 CSI parle d'« informations ou documents » et le L246-1 « des informations ou documents traités ou conservés » par les intermédiaires techniques, ce qui est susceptible de dépasser le cadre des données de connexion. L'accès est en différé (L246-1 CSI) ou en temps réel (L246-3 CSI).
2014-2022 : dans plusieurs arrêts, via plusieurs questions préjudicielles renvoyées par plusieurs juridictions nationales, la Cour de Justice de l'UE (CJUE) invalide la directive 2006/24/CE et précise les exigences découlant du droit de l'UE. Arrêts notables (il y en a d'autres) : Digital Rights Ireland (2014, communiqué de presse), Tele2 Sverige et Watson (2016, communiqué de presse), La Quadrature du net ‒ LQDN ‒ et Privacy International (2020, communiqué de presse), Prokuratuur (2021, communiqué de presse), Commissioner of the Garda Síochána (2022, communiqué de presse), et SpaceNet / Telekom Deutschland (2022, communiqué de presse).
La conservation préventive, généralisée et indifférenciée des données de connexion est une atteinte disproportionnée à la vie privée, même si lesdites données ne sont pas exploitées, dès lors qu'un ensemble de données est susceptible de permettre de tirer des conclusions très précises concernant la vie privée d'une personne. Par dérogation :
(SpaceNet) La CJUE se montre inflexible. Le régime allemand post-2015 prévoyait : conservation 4 semaines pour la localisation, 10 semaines pour le reste, dans les deux cas uniquement pour les infractions particulièrement graves, sous le contrôle préalable d'un juge, par un mécanisme de conservation rapide, avec un cahier des charges technique pesant sur les opérateurs, etc. Pourtant, la CJUE le retoque car, indépendamment de la durée de la conservation, de la nature des données conservées, de la quantité de données conservées, et des conditions d'accès, il était « susceptible de permettre de tirer des conclusions très précises concernant la vie privée d'une personne ». Conclusion : la modulation de la durée, de la quantité, etc. n'a aucune incidence sur le raisonnement de la CJUE. On retrouve ce point dans Prokuratuur.
Analyse par les commentateurs :
2015-2020 :
2020 : dans son arrêt Breyer contre Allemagne (résumé ici), la Cour Européenne des Droits de l'Homme (CEDH) valide la collecte de données d'identité des détenteurs d'une carte SIM prépayée : l'ingérence est nécessaire et proportionnée.
2021-2022 : le Conseil d'État (avril 2021), la Cour de cassation (juillet 2022) et le Conseil constitutionnel (décembre 2021, mai et juin 2022) ajustent, a minima et à contrecœur, le droit français au droit de l'UE. Il s'agit de neutraliser l'effet de la jurisprudence de la CJUE.
Conseil d'État :
Sur la conservation :
Pas d'utilisation des données de connexion pour les autres infractions (non-graves), à l'exception des données d'identité.
Sur l'accès par les services de renseignement :
Arrêts de la Cassation (juillet 2022) :
Quand ces arrêts ont été rendus, la loi avait déjà changé (en juillet 2021 et en mars 2022, cf. infra) ;
Théoriquement, après les arrêts CJUE, le Parquet (le procureur), qui est l'autorité de poursuite (en sus de ne pas être indépendant de l'exécutif), ne peut plus valider les demandes d'accès aux données de connexion des OPJ dans les enquêtes préliminaires ou de flagrance (qui constituent l'écrasante majorité des investigations). Dans les informations judiciaires (commissions rogatoires), c'est le juge d'instruction qui valide les demandes. S'il est indépendant (magistrat du siège), il n'est pas extérieur à l'enquête, donc la CJUE risque de tiquer. Néanmoins, dans l'attente d'une réforme, la Cour de cassation a jugé qu'il n'y aura pas de nullité de procédure sauf si le prévenu peut montrer, au juge du fond, un préjudice, c'est-à-dire que l'accès à ses données de connexion aurait été interdit s'il y avait eu un contrôle indépendant. Il s'agit de la déclinaison du principe juridique « pas de nullité sans grief ». Donc les magistrats peuvent toujours demander l'accès aux données de connexion. Il s'agit d'un contrôle a posteriori à longue échéance. « La Cour de cassation […] a fixé des conditions si strictes qu’aucune nullité ne pourra être prononcée. » (source, page 123) ;
La Cour tolère l'exploitation, par ricochet, par le mécanisme de la conservation rapide, des données de trafic et de localisation recueillies à des fins de sécurité nationale dans des affaires de criminalité grave qui n'en relèvent pas, et le repêchage de données de connexion obtenues illégalement, ce que la CJUE interdit. À la demande d'un prévenu, un juge du fond pourra prononcer la nullité des réquisitions si elles outrepassent la stricte nécessité, mais même remarque que ci-dessus, en pratique, ça n'arrivera pas, et, là encore, il s'agit d'un contrôle a posteriori longtemps après, ce qui n'est pas conforme à la jurisprudence de la CJUE ;
Elle restreint l'exploitation des données de trafic et de localisation à la criminalité grave (ou aux atteintes à la sécurité nationale, j'vais y revenir). Comme il n'en existe pas de définition, c'est au juge du fond de décider ce qui en relève en fonction de la nature de l'infraction, au regard de la nature des agissements, du préjudice, des circonstances des faits, de la peine encourue, etc. c'est-à-dire, in fine, de la nature de l'infraction et de la peine encourue d'un côté, et de l'appréciation des circonstances sur le fondement des principes de nécessité et de proportionnalité, de l'autre. Ces faisceaux d'indice n'ont pas (encore ?) été repris dans le Code de procédure pénale ;
2021 :
mai : dans son arrêt Big Brother Watch et autres contre Royaume-Uni (communiqué de presse), la CEDH dégage des critères pour valider une législation nationale implémentant une surveillance de masse ou des échanges avec des services de renseignement étrangers. En clair, à mes yeux : les digues ont sauté, il est loin le temps de Klass et autres c. Allemagne et de son paragraphe 41 sur menace de surveillance = entrave à la liberté de communication.
La CEDH a mis en œuvre son contrôle in concreto habituel : point d'impératif absolu (comme dans la démarche première de la CJUE en 2014), mais la recherche d'une insuffisance cumulée de garanties ;
D'abord, en matière de surveillance de masse :
Ensuite, sur l'échange avec des services de renseignement étrangers :
juillet : ajustement à la marge du régime français par l'article 17 de la loi renseignement 2 (loi 2021-998 relative à la prévention d’actes de terrorisme et au renseignement) qui modifie les articles L34-1 CPCE et 6 LCEN, puis par l'édiction des trois décrets français qui régissent actuellement la conservation des données de connexion : 2021-1361 pour les opérateurs au titre du CPCE, 2021-1362 pour les hébergeurs et les opérateurs au titre de la LCEN, et 2021-1363 pour la conservation des données de connexion et de localisation à des fins de prévention de la menace grave et actuelle contre la sécurité nationale. Avis de la CNIL sur le décret 2021-1361. Avis de la CNIL sur le décret 2021-1362.
Sécurité nationale : comme craint, le décret 2022-1327 a pris la suite du 2021-1363, puis le 2023-933, puis le 2024-901 puis le 2025-980.
Conservation :
Accès :
2022 :
mars : deuxième ajustement à la marge du régime français par l'article 12 de la loi 2022-299 visant à combattre le harcèlement scolaire, notamment pour palier les inconstitutionnalités (cf. supra). Ajout de l'article 60-1-2 du Code de procédure pénal, vers lequel renvoient les articles 60-1 et 60-2 (réquisition en enquête de flagrance), 77-1-1 et 77-1-2 (enquête préliminaire), et 99-3 et 99-4 (information judiciaire) du même Code, afin de restreindre l'accès aux données de connexion (hors identité civile) aux infractions les plus graves : crime ou délit >= 3 ans de taule ; identification de l'auteur d'un crime ou délit >= 1 ans de taule commis via un réseau de communication électronique ; à la demande de la victime sur son matériel, si la taule est encourue ; ou recherche d'une personne disparue ou la reconstitution d'un parcours criminel.
septembre : arrêt C-339/20 de la CJUE (communiqué de presse) : les infractions d'abus de marché ne peuvent faire l'objet d'une collecte généralisée et indifférenciée pendant un an des données de trafic (l'Autorité des marchés financiers, AMF, avait obtenu des données de connexion recueillies en enquête pénale). Cette QPJ a été posée par la Cour de cassation dans les pourvois 19-80.908 et 19-82.223, jugés en mai 2023.
2023 :
En juin, le Conseil d'État a rendu ses décisions sur les décrets de 2021 / 2022 :
D'abord, la décision CE 468361 sur le décret 2022-1327 (injonction à conserver les données de trafic et de localisation pour la sécurité nationale), attaqué par Free et des individus :
Ensuite, la décision CE 459724 sur les décrets 2021-1361 et 2021-1362 (la conservation en elle-même), attaqués par Free :
En 2023, le Sénat a procédé à une mission d'information « sur les modalités d'investigation recourant aux données de connexion dans le cadre des enquêtes pénales ». Des auditions ont eu lieu en juillet et septembre 2023 (source : agenda de la rapporteure). Un rapport a été produit en novembre. Mes notes ici. En gros :
2024 :
En février, la Cour de cassation rend son arrêt dans le pourvoi 23-81.061. Commentaire ici. La localisation en temps réel d'un téléphone (article 230-32 et 230-33 du Code de procédure pénal), en ce que, contrairement au suivi d'un véhicule par une balise GPS, elle fait intervenir les données de connexion, ce qui implique l'application de la directive e-Privacy et des arrêts CJUE, ne peut être ordonnée par un procureur car il est l'autorité de poursuite. La circonstance de l'intervention d'un juge d'instruction après l'enquête préliminaire, qui a pour effet de faire perdre la direction de l'enquête et l'opportunité de poursuite au procureur, est sans effet. La nullité de la géolocalisation nécessite de montrer qu'elle n'a pas été limitée à la criminalité grave ou qu'elle a excédé le strict nécessaire. À ce stade, il est seulement reproché à la chambre de l'instruction de la Cour d'appel de ne pas avoir recherché cela. Même pour des interceptions de communications sans que le JLD ni le juge d'instruction n'en ai été informé à brève échéance, le prévenu doit montrer en quoi ça porte atteinte à ses intérêts.
En avril, la CJUE a rendu son arrêt LQDN contre HADOPI (C-470/21) :
Questions en suspens : obtenir l'identité civile à partir de l'adresse IP source d'une connexion est-il possible si l'infraction présumée ne relève pas de la criminalité grave ? Et si c'est le seul moyen d'identifier l'auteur présumé d'une infraction ? Faut-il un contrôle préalable par une autorité indépendante ? Quelles infractions relèvent de la criminalité grave ? ;
La CJUE répond que la correspondance entre une IP source et une identité civile peut être sollicitée pour toutes les infractions pénales, pas juste la criminalité grave, sauf si, conformément à sa jurisprudence antérieure (cf. supra), cela est susceptible de permettre de tirer des conclusions précises sur la vie privée, de tracer l'activité, de profiler l'utilisateur (aka ingérence grave dans la vie privée). Sans trop de surprise étant donné que l'inverse induirait une impunité totale (je peine à croire que les opérateurs gardent l'historique des IP assignées pour leurs besoins propres) ;
Un contrôle préalable et indépendant est obligatoire uniquement en cas d'ingérence grave. Par défaut, ce n'est pas le cas de l'obtention de l'identité civile à partir d'une IP.
Le délit de contrefaçon peut être considéré, par la France, comme relevant de la criminalité grave au regard de l'atteinte à un intérêt fondamental de la société (lol). Inversement, la contravention de négligence caractérisée n'en fait pas partie (en même temps, c'est dans son type : contravention). Sans trop de surprise au regard de la répartition des compétences entre l'UE et ses États-Membres, la définition de la criminalité grave est donc renvoyée aux États. C'est un désaveu de l'Avocat général qui, dans ses premières conclusions (point 74), proposait de considérer qu'une telle définition devrait être autonome. Je ne conçois pas l'intérêt qu'aurait la France à considérer que le délit de contrefaçon relève de la criminalité grave puisque la CJUE a validé l'obtention d'une identité civile à partir d'une IP pour toutes les infractions.
Sur la conservation, ce qui avait fait monter la CJUE dans les tours dans ses précédents arrêts, c'était qu'elle était confrontée à des législations, notamment la nôtre, française, qui prévoyait aussi la conservation de la date+heure + durée + type + destinataire de chaque communication (point 81). Si la législation prévoit uniquement la conservation des IP sources, c'est bon. Sauf que la législation française prévoit toujours, en sus de la conservation des adresses IP source, la conservation des données de trafic précitées et de localisation pour la sécurité nationale. Réponse de la CJUE (points 83 à 89) : la loi doit préciser de manière claire et précise les modalités de conservation. Ces modalités doivent inclure : la conservation de chaque jeu de données doit être séparée et étanche ; la mise en relation / combinaison (ex. : identité civile <> IP) doit être réalisée par un procédé technique qui ne remet pas en cause l'étanchéité (gné ?) ; la fiabilité de l'étanchéité doit être contrôlée par une autre autorité publique que celle qui accède aux données (vache, encore une entité de plus…). Bref, c'est de la cosmétique… ;
Divers :
2025 :
Sources pour rédiger cette section :
Gros résumé à la truelle de la section précédente.
En droit français (il n'y a plus de législation européenne sur le sujet, uniquement e-privacy qui la permet par dérogation), la rétention des données de connexion est codifiée dans :
Lire la section « Qui est concerné ? » infra sur la répartition des types d'acteurs entre CPCE et LCEN.
Plus précisément, les intermédiaires techniques doivent conserver :
L'accès aux données de connexion est régit par trois régimes :
Pour les enquêtes pénales :
Pour les services de renseignement :
Plein d'administrations disposent d'un droit de communication initialement accordé au fisc (L81 à L102 AH du Livre des procédures fiscales) : douanes (article 65 quinquies du Code des douanes), AMF (L621-10-2 du Code monétaire et financier), DGCCRF et ADLC (L450-3-3 du Code du commerce), sécu dont CAF, CPAM, MSA, agents départementaux chargés du RSA (L114-19 à L114-21 du Code de la sécurité sociale), Pôle emploi (L5312-13-2 du Code du travail), URSSAF, inspection du travail (8113-5-2 du Code du travail), ANSSI (L2321-3 du Code de la défense), HADOPI (L331-14 du Code de la propriété intellectuelle), etc. Le L96 G du LPF est précisé par le décret 2023-674.
Attention : les renvois sont parfois très englobants. Exemples : l'accès aux relevés de comptes bancaires, ce n'est pas explicite, ce sont les articles L83 et L85 LPF qui portent sur les « administrations et entreprises publiques, établissements ou organismes contrôlés par l'autorité administrative » et sur les « les livres [comptables], les registres et les rapports dont la tenue est rendue obligatoire par le [Code du commerce] ainsi que tous documents relatifs à leur activité » (source : 1, point 9 ; 2) ; L'accès aux relevés téléphoniques (fadettes), c'est encore le L85 LPF, car il s'agit de pièces comptables / de facturation (sources : 1, 2, 3).
Ce droit porte sur plusieurs types de documents et données (relevé de compte bancaire, par ex.), dont les données de connexion. Rigolo : le Conseil constitutionnel aime rappeler que le droit de communication des données de connexion n'est pas assorti d'une exécution forcée, d'une contrainte, alors que, pour la HADOPI, par exemple, une contravention est prévue en cas de refus de répondre.
Toutes les administrations ne peuvent pas avoir accès aux données de connexion. Tel est le cas de la Sécu, de Pôle emploi, ou de la Haute autorité pour la transparence de la vie publie (HATVP) :
De même, toutes les administrations n'ont pas accès aux données de trafic et de localisation. Exemple : l'inspection du travail est limitée aux données permettant d'identifier l'auteur présumé de travail dissimulé (donc numéro de tél / adresse IP et identité civile), cf. 8113-5-2 du Code du travail.
Depuis 2018-2019, suite à des questions prioritaires de constitutionnalité et pour répondre au critère d'indépendance posé par la CJUE (l'autorité de poursuite ne peut pas être celle qui valide / contrôle l'accès aux données de connexion), l'AMF (2017-646/647 QPC), l'ADLC (2015-715 DC), et le fisc (2015-715 DC puis loi de finances pour 2021) demandent une autorisation préalable d'accéder aux données de connexion au Contrôleur des demandes de données de connexion (CDCD), c'est-à-dire un membre du Conseil d'État suppléé par un magistrat de la Cour de cassation (et inversement, par alternance). Voir ici et là.
Les autres administrations sont-elles soumises à un contrôle préalable ? La douane est soumise au contrôle du procureur, ce qui n'est pas conforme à la jurisprudence de la CJUE (mais c'est mieux que l'absence de contrôle d'avant la décision 2018-764 QPC).
Pour les données de trafic et de localisation, est-ce que les crimes, les délits graves et les « manquements graves » dont ces autorités ont la charge relèvent de la gravité délimitée par la CJUE ? L'AMF s'est fait retoquer là-dessus (cf. 2022 dans la section « Historique »). Quid de la lutte contre les entraves à la concurrence (ADLC) ?
De là, se faire communiquer, via une injonction de conservation rapide, les données de trafic ou de localisation que les opérateurs collectent dans le cadre de la sécurité nationale (cf. 2021 dans la section « Historique ») pour traiter des affaires qui n'en relèvent pas, tient-il la route ? A priori, la CJUE a dit non (sauf ce que les intermédiaires techniques détiennent pour leurs besoins, mais la Cour de cassation a dit oui (cf. 2022 dans la section « Historique »).
Conservation :
Accès :
A priori, c'est dans un cadre juridique suisse similaire à celui de la France que ProtonMail a mouchardé l'adresse IP, le modèle, et l'identifiant du terminal de militants français (source). Il s'agit bien de données de compte / d'abonnement et d'identification (source d'une connexion).
On notera que la France a utilisé une procédure de coopération dédiée à la criminalité grave pour une affaire qui n'en relève pas et que les autorités suisses ont laissé faire (car ce n'est pas leur boulot de vérifier si des faits relèvent ou non des conventions d'entraide).
Pour obtenir une collaboration, il faut une équivalence de l'infraction dans le droit suisse (je ne suis pas convaincu que ça freine les demandes puisque les autorités ne reprochent jamais d'être un mouvement social mais des infractions précises comme trouble à l'ordre public, destruction ou dégradation de bien, etc. qui existent dans toutes les législations…).
Comme le note Reflets, on peut déplorer le flou dans la communication de ProtonMail, qui a changé plusieurs pages de son site web depuis cette histoire. Lire aussi l'analyse d'Alex Archambault.
Mais, quoi qu'il en soit, et comme l'écrit très bien Reflets, il existera toujours une conservation et un accès aux données de connexion. Toutes les législations prévoient ça. La vertu des arrêts CJUE et des contentieux LQDN, FFDN, FDN, c'est d'avoir nettoyé les imprécisions et les excès.
Il ne sert à rien de rechercher du « no log », VPN, TOR, etc. Ça ne sera que temporaire. Ça se fera défoncer par les autorités. Tout au plus est-il possible de jouer sur la temporalité, l'absence de coopération judiciaire, etc., mais ça ne se fait pas en souscrivant simplement à un service, cela demande plus d'efforts.
Une fois que l'on a écrit tout ça, comment savoir dans quelle catégorie entre un service usuel genre un site web personnel, et les obligations qui s'imposent à nous ?
Pour rédiger cette section, je me suis appuyé sur le travail du feu groupe juridique de la FFDN (copie ici) et sur le travail de LQDN (copie ici). On notera qu'il s'agit de brouillons. Ils sont faux en cela qu'ils ne tiennent pas compte des décrets de 2021. Le premier écrit ne faisait pas consensus au sein du groupe de travail, notamment sur l'interprétation à retenir (celle, militante, de la CJUE, ou celle du droit français). Ce pan du droit est vraiment ardu.
Deux catégories d'intermédiaires techniques sont concernées :
Les deux régimes (CPCE et LCEN) se recoupent en partie, notamment sur les données à conserver.
Dans les deux cas, la prestation peut être gratuite ou payante, et le fournisseur peut être une personne morale ou physique, ça ne change pas l'existence de l'obligation.
La définition d'un hébergeur est plutôt claire : stockage de signaux, d'écrits, d'images, de sons ou de messages pour leur mise à dispo via des services de communication au public en ligne.
Mais qu'est-ce qu'un opérateur de communications électroniques ? Les définitions sont dans l'article L32 du CPCE mais rien n'est clair. En gros, ça regroupe les personnes qui :
Sachant qu'une communication électronique, c'est toute transmission de signes, signaux, écrits, d'images ou de son par voie électromagnétique et qu'un service de communications électroniques est une prestation qui consiste à fournir de telles communications. Pourquoi le vocable change en plein milieu pour « communication au public » ? Bonne question. En tout cas, pour définir les « fournisseurs de services de communication au public en ligne » renvoie, in fine, vers les B du IV et 1 et 2 du I de l'article 6 de la LCEN donc éditeurs, hébergeurs et FAI.
On retrouve les opérateurs réseaux (première définition), les services de voix sur IP (VOIP) comme SkypeOut (deuxième), les Fournisseurs d'Accès à Internet (troisième), les fournisseurs de hotspots Wi-Fi (quatrième), etc.
Les hébergeurs ne sont pas englobés dans la deuxième définition. Par défaut, les fournisseurs de messagerie électronique non plus (je vais y revenir).
La notion qui revient est le caractère public. Un réseau privé n'est pas concerné. (C'est d'ailleurs pour cela que plusieurs entités qui opèrent un réseau informatique à une échelle métropolitaine, par exemple, destiné à un nombre prévisible d'utilisateurs (les salariés et clients / usagers de ces entités, par exemple) prennent le statut juridique de Groupe Fermé d'Utilisateurs ‒ GFU ‒, pour s'éviter les contraintes précitées du CPCE.) L'accès à Internet fournit par un employeur à ses seuls salariés / agents n'est pas concerné. Les services non-publiés (intranet, correspondance privée) ne sont pas concernés.
J'ai un blog Wordpress et un shaarli. Il s'agit de services de communication au public en ligne (article 6, III, 2 de la LCEN) dont je suis l'éditeur (au sens de la loi sur la presse). À ce titre, mon hébergeur doit conserver des données sur moi.
Dans les deux cas, comme sur les réseaux sociaux, d'autres personnes peuvent écrire des articles ou des commentaires. La loi permet deux statuts : soit je suis éditeur (au sens de la loi sur la presse), soit hébergeur (au sens de la LCEN).
Si je modère mes commentaires a priori et à la mano, je suis éditeur de facto, car je choisis les contenus, j'ai le contrôle de ce qui est publié. Le Bon Coin a été reconnu hébergeur en 2014 car les annonces sont modérées par un logiciel (source).
A priori, si j'octroie des droits de publication à un nombre restreint de personnes que je choisis, je suis aussi éditeur, je choisis toujours le contenu, ce n'est pas le tout-venant qui peut publier sur mon site. On notera qu'en droit de la presse, il y a une cascade de responsabilités : l'éditeur (ou le dirlo de publication) sera poursuivi, à défaut ou au titre de complicité, les auteurs aussi, à défaut les imprimeurs, à défaut les diffuseurs, donc, a priori, un éditeur n'a pas obligation de consigner qui a écrit quoi (juste il morflera seul).
Les réseaux sociaux jouent sur les deux tableaux : ils se prétendent hébergeurs mais rendent visibles ou invisibles des contenus, les hiérarchisent, les font modérer selon une charte qui leur est propre par des travailleurs sous-payés (troisième point du 2e bloc), etc., ce qui semble constituer un rôle éditorial. Cependant, la question est loin d'être évidente à résorber, lire 1, 2, 3, 4.
Généralement, la consignation des données relatives aux auteurs de contenus (commentaires, articles, etc.) est effectuée par le site web lui-même, par son code, dans sa propre base de données.
Les requêtes de lecture / consultation d'un site web ne doivent pas faire l'objet d'une journalisation au nom d'une prétendue obligation légale qui n'existe pas. L'article 6 de la LCEN et le titre du décret 2021-1362 sont clairs : l'obligation vise uniquement les personnes qui ont contribué à la création d'un contenu.
Pages Jaunes, qui conservait un tel journal des consultations, s'est ramassée sur ce point en ce quelle n'était pas hébergeur de contenus tiers (cf. section 5 de la délibération 2011-203 de la CNIL qui est l'objet du jugement précité), donc qu'il n'y avait aucun contributeur de contenu à identifier, donc pas d'obligation légale, donc une conservation dénuée de base légale.
D'autres finalités peuvent conduire à journaliser les consultations / lectures / accès, cf. section « Journaux techniques » ci-dessous, mais pas la rétention des données de connexion.
Dans mon cas, j'ai fermé les commentaires sur mon blog (mais sinon Wordpress consigne le cœur des données qu'il est obligatoire de conserver), je n'ai plus publié de contributions extérieures depuis 2011 (et Wordpress ne consigne pas les informations nécessaires), et je suis le seul auteur sur mon shaarli. Je suis uniquement éditeur, donc j'ai rien à conserver au titre d'hébergeur.
Évidemment, mes sites web non-publiés (gestionnaire de ToDo, GLPI, agrégateur RSS, etc.), dont je suis le seul utilisateur, et qui font l'objet d'une restriction d'accès par identifiant+mdp ou par adresses IP, ne sont pas des services de communication au public en ligne, donc ils sont hors périmètre (usage strictement personnel).
Garder un journal des accès web pourrait également permettre de se disculper en cas de piratage qui conduirait à la publication d'un contenu illégal plutôt que d'en assumer la responsabilité éditoriale. D'un côté, il faut que l'attaquant publie sa prose via le web (sinon il ne sera pas journalisé par le serveur web, et à part ça, j'ai uniquement un accès SSH (qui ne consigne pas les actions) et la probabilité d'une attaque réussie diminue avec des logiciels maintenus à jour. D'un autre côté, un tel journal sera inexploitable car l'attaquant se dissimulera derrière des rebonds / intermédiaires, et le contenu, qui sera temporaire (car je m'en rendrais compte rapido) et qui ne relèvera pas de la diffamation / injure / harcèlement / appel à la haine / dénigrement / etc. mais plutôt d'actes rentables genre vente de Viagra, ne sera jamais poursuivi, donc l'occasion de dégainer le journal n'existera pas. Tout montre qu'un tel journal est inutile. Sans compter qu'un piratage doit faire partie des cas de force majeur ou équivalent ("j'ai mis en place des mesures de sécurité, elles ont été contournées, c'est pas d'chance").
J'ai jamais lu que des commentaires ou articles de blog constituent une fourniture de service de communications électroniques entraînant l'application du régime prévu par le CPCE. La directive-cadre européenne 2002/21/CE dispose même de l'inverse (cf. arrêt C‑193/18 de la CJUE, points 29 à 31).
Il s'agit de correspondance privée qui s'entend comme un nombre prévisible et déterminé de destinataires individualisés. Il y a donc une communauté d'intérêt entre l'expéditeur et les destinataires. Cela a été tranché par les juridictions, y compris pour le spam… C'est différent d'un site web ou d'un profil ouvert sur un réseau social auxquels tout le monde peut accéder sans restriction. Donc le statut d'hébergeur ne s'applique pas (puisqu'il n'y a pas mise à dispo via des services de communication au public en ligne).
A priori, les listes de diffusion, les MUC (discussion de groupe) Jabber, IRC, et tant d'autres entrent également dans ce cadre-là.
Attention : parfois, un même service peut relever de plusieurs statuts. Exemple : la publication web ouverte au public des archives d'une liste de discussion ou la mise à disposition au public de pièces jointes ou de calendriers par un webmail (type GMail) sortent du cadre de la correspondance privée, donc le statut d'hébergeur s'applique. J'ai rien de tout ça, donc je suis peinard.
Suis-je un opérateur de communications électroniques ? Auquel cas, la rétention à ce titre s'appliquerait, quand bien même celle à titre d'hébergeur ne s'applique pas. La question se pose pour de gros fournisseurs de messagerie, car si la correspondance est privée, le service en lui-même est ouvert au public (tout le monde peut ouvrir une adresse Outlook, par ex.).
La CJUE a tranché : GMail n'est pas un service de communications électroniques car sa fonction première n'est pas la transmission de signaux (cette charge est majoritairement portée par d'autres acteurs du réseau, quand bien même Google dispose de son propre réseau mondial), donc Google n'est pas un opérateur de communications électroniques, donc le CPCE ne concerne pas GMail. Les juridictions suisses ont tranché dans le même sens pour ProtonMail.
Comme le relève le Conseil d'État (note 48 pages 13 et suivante), la CJUE semble se contredire dans son arrêt LQDN de 2020, sauf à considérer que la différence entre SkypeOut (qui a été reconnu service de communications électroniques) et GMail est que SkypeOut assure, contre rémunération, la responsabilité de la transmission des communications en vertu d'accords passés avec des opérateurs télécoms là où GMail n'en fait rien, que l'essentiel du transport des emails est assumé par d'autres acteurs en best effort.
Sur la qualification juridique de GMail, on peut lire cet excellent historique.
Conclusion : je ne suis concerné ni par la LCEN, ni par le CPCE pour mes serveurs emails et de messagerie instantanée.
De toute façon, j'utilise les fonctionnalités « smtpd_sender_login_maps » + « smtpd_sender_restrictions = […],reject_sender_login_mismatch,[…] » de Postfix qui permet d'associer une adresse d'expéditeur à un identifiant+mdp. Donc, si, du temps où mon serveur emails hébergeait aussi une partie de ma famille (ce qui n'est plus le cas, j'en suis le seul usager), les autorités avaient débarqué pour me demander qui a émis tel email à telle date, etc., tant qu'elles me donnaient l'adresse de l'expéditeur de l'email litigieux, je pouvais dire avec certitude, et sans journal, qui en était l'auteur (sauf en cas de vol de l'identifiant+mdp, mais bon…).
Cf. les décrets 2021-1361 (pour les opérateurs au titre du CPCE), 2021-1362 (pour les hébergeurs et les opérateurs au titre de la LCEN) et 2021-1363 (pour la conservation des données de connexion et de localisation à des fins de prévention de la menace grave et actuelle pesant sur la sécurité nationale), ainsi que l'arrêt 459724 du Conseil d'État (CE) qui précise de nombreux points, dont le fait qu'on conserve uniquement ce que l'on collecte dans le cadre normal de l'activité (cf. « 2023 » dans la section « Historique » supra) aka ne pas avoir toutes les données n'est pas un problème (en n'avoir aucune, en revanche…, cf. supra).
Pour la participation à l'identification de l'auteur d'un contenu (LCEN), cinq jeux de données sont prévus :
Facturation. Type de paiement, référence du paiement, montant, date et heure (et lieu si transaction physique). Conservation : 1 ans après la fin du contrat ;
Informations techniques sur un terminal ou la source d'une connexion. Conservation : 1 an à compter de la connexion ou de l'utilisation du terminal ou la création d'un contenu.
Il en va de même pour identifier l'auteur d'une communication (CPCE), à quelques variantes près : il faut conserver également le numéro de téléphone appelant (RTC, par ex.), le numéro d'identification du terminal (CE : « données relatives aux connexions internet fixes par wi-fi ». Je comprends adresse MAC) ; les caractéristiques techniques (CE : « données collectées par l'opérateur pour effectuer et justifier la facturation de l'abonné et gérer son réseau, tels que le sens de l'appel, le type d'appel, le rôle de l'abonné, le type de communication ou le volume de données échangées »), date, heure et durée de chaque communication ; les données relatives aux services complémentaires utilisés (CE : « services complémentaires à la fourniture de communication par internet ou par téléphonie, tels que, notamment, les renvois d'appels ou le recours à un commutateur téléphonique privé ») ; les données techniques relatives au terminal et à la connexion (le 4e jeu de données ci-dessus) du destinataire ; et la localisation des communications par téléphone mobile.
Comme le relève Alexandre Archambault, la législation dit que tu peux conserver uniquement ce que tu manipules pour ton usage propre (cf. article 8 du décret 2021-1362, par ex.), mais l'article 39-3 du CPCE et l'article 6, VI de la LCEN prévoient des peines de prison et d'amende pour non conservation…
J'ai toujours interprété ça comme une manière de sanctionner une intention délibérée d'entraver les services enquêteurs : si t'as aucune donnée, c'est louche, s'il t'en manque certaines, ça passe. Exemples : il n'y a pas de facturation dans le cadre d'une prestation gratuite genre devenir auteur sur mon site web ; il n'y a pas de mécanisme de vérification du mdp pour un commentateur de blog ; il est techniquement impossible de fournir les données techniques du terminal du destinataire s'il n'est pas chez le même opérateur ; un hébergeur de machines virtuelles ne peut pas journaliser les modifications de contenus de son client à cause de la démarcation technique (mais il détient les jeux de données 1 à 3) ; etc. L'arrêt 459724 du CE me conforte dans cette interprétation.
De même, si l'on regarde bien, des outils comme Wordpress ou shaarli ne collectent pas toutes les informations exigées d'un hébergeur : date et lieu de naissance d'un commentateur ? Nature, date et heure d'une opération sur les contenus d'un shaarli ? Etc. Wordpress ne permet même pas de supprimer automatiquement au bout d'un an les données personnelles des auteurs de commentaires (son outil « Effacer les données », en sus de ne pas répondre au besoin ‒ il est conçu pour les demandes RGPD ‒, laisse intacte l'adresse IP, seuls le pseudo et l'adresse emails sont effacés).
Je ne peux m'empêcher de penser que c'est à cause de ça qu'il y a une légende urbaine sur une prétendue obligation de conserver le journal des accès à un serveur web ou le journal d'un serveur emails pendant un an. Démystification : 1, décision du CE contre Pages Jaunes, et explications ci-dessus.
En effet, le cœur des informations exigées (identifiant du contenu, adresse IP de l'auteur, protocole, nature de l'opération, date et heure) peuvent apparaître dans le journal des accès d'un serveur web (l'identifiant du contenu et la nature de l'opération peuvent être précisés dans l'URL, genre, pour shaarli : « POST /?edit_link=20230709_204855 »). Un conseil d'avocat sur le vif consistant à recommander cette journalisation permet d'être agnostique du type de site web utilisé et de ses capacités de journalisation, et donc de protéger le client dans le plus de cas possibles (objectif d'un avocat). Sachant que tout dépend de la question posée, du contexte présenté à l'avocat, etc., ça me paraît crédible.
Bien évidemment qu'on conserve des journaux informatiques, y compris ceux contenant les consultations de contenus, pour d'autres motifs qu'une obligation légale, tels que l'identification et le diagnostic d'un incident ou la sécurisation d'un système (détecter une compromission, parer automatiquement une attaque, etc.).
Mais cela ne peut pas être fait sous couvert de l'obligation légale présentée dans ce shaarli, il faut distinguer les finalités et la base légale, adapter la durée de conservation, etc., et, si les journaux consignent des données personnelles (comme une adresse IP), il faut les anonymiser (selon la finalité, genre vaut mieux anonymiser après l'usage du journal par fail2ban, par ex., sauf à prendre tout intérêt ;) ).
Évidemment, le RGPD s'applique aux journaux contenant des données personnelles.
S'ils répondent aux obligations présentées dans ce shaarli, pour les éléments demandés, alors la base légale est l'obligation légale, la finalité et la durée de conservation sont précisées dans les décrets, etc. Il n'y a plus qu'à y appliquer le reste du RGPD (sécurisation, traçabilité des accès, information, ne pas divulguer tout et n'importe quoi même dans le cadre d'une décision de justice, etc.).
En revanche, si les obligations présentées ci-dessus ne t'incombent pas ou si tu souhaites journaliser plus d'éléments ou pour une durée supérieure à celle prévue par la législation ou en faire un autre usage que ceux prévus par la législation, il faut une base légale et une finalité en adéquation, une nécessité, etc. Ex. : faire des stats d'audience à partir d'un journal des accès d'un serveur web reposera très probablement sur l'intérêt légitime, et la durée de conservation (avant anonymisation) sera proportionnée à cette finalité. Un journal technique pour détecter les attaques et les compromissions reposera probablement sur l'intérêt légitime (idem). Etc.
Dernière mise à jour : avril 2026.
J'aime beaucoup la présentation du protocole et le retour d'expérience (les embûches rencontrées et les contournements mis en œuvre genre les recruteurs qui redirigent vers un site web maison d'où un vivier d'offres limité, les recruteurs qui posent des questions imprévisibles, etc.).
Je ne suis pas surpris :
J'ignorais que :
Chiffres :
Il reste plusieurs biais dans la méthodologie :
Je ne suis pas d'accord pour affirmer qu'un premier entretien coûte rien aux sociétés commerciales. C'est une organisation et du temps supplémentaire pour étudier la candidature de manière plus approfondie, donc du fric.
Cela fait 10 ans que mes seules adresses emails personnelles sont liées à mes noms de domaine personnels, et que j'héberge et administre moi-même mes serveurs emails. \o/
Au global sur dix ans, ça tourne sans trop de douleur ni d'entretien. Mais, attention, cela dépend très fortement de l'usage.
En effet, tout administrateur d'un serveur emails doit s'atteler à deux problématiques : le spam entrant, et l'acceptation collective des emails qu'il envoie (émails sortants).
Je n'ai pas d'antispam, pas même de greylisting. Cela exige organisation et rigueur permanentes. Je communique ma véritable adresse uniquement à des gens de confiance et je file une adresse générique ‒ un alias ‒ ou une version suffixée par un délimiteur / tag aux autres, surtout aux sociétés commerciales, aux windowsiens et aux listes de discussion archivées sur le web. (Les alias et les délimiteurs sont également très pratiques pour tracer la revente / fuite d'une adresse emails et pour trier ses emails ‒ on peut ignorer l'adresse d'expédition et/ou elle peut changer en cours de route, ça n'a pas d'incidence sur le tri opéré sur l'adresse de destination, c'est-à-dire l'alias / le délimiteur ‒.) Mon seul regret est de ne pas avoir filé une telle adresse à plus de gens, par faiblesse. Heureusement, je comptabilise une unique conséquence fâcheuse. Bref, rigueur et ténacité. De plus, je n'ai pas besoin d'être contacté par le tout-venant, ce qui simplifie grandement la problématique.
L'acceptation collective se divise en deux : la norme et l'arbitraire. C’est essentiellement l'usage (volumétrie, contenu, destinataires) qui fait passer un serveur emails de l'une à l'autre de ces catégories.
J'ai mis en place toutes les techniques normalisées et informelles : le nom d'hôte EHLO (durant le dialogue SMTP) est déclaré dans le DNS, les adresses IPv4 et IPv6 pointées par ce nom sont celles de mon serveur, et j'ai configuré un reverse (PTR) pour chacune ; SPF ; DKIM ; ADSP ; DMARC ; TLS (avec un certificat auto-signé) + DNSSEC + DANE TLSA, etc. Pour un petit serveur emails (faible volumétrie), tout cela n'est pas obligatoire : DMARC et DKIM sont rarement imposés (GMail impose SPF ou DKIM), ADSP et DANE TLSA encore moins. C'est un investissement notable, mais quand c'est en place, ça ne coûte pas de temps de maintenance.
Surtout, les adresses IP du serveur emails doivent avoir une excellente réputation, c'est-à-dire ne pas traîner dans des listes de blocage (ce qui n'est pas le cas d'OVH, par ex.). SPF, DKIM, ADSP, DANE, etc. servent à rien si tes IP sont tricardes. Donc, il vaut mieux héberger son serveur emails chez un petit prestataire car plus c'est confidentiel, plus ça diminue la probabilité d'avoir des serveurs voisins spammeurs ou mal configurés. En IPv6, le blocage se fait par réseau de taille /64, donc pour ne pas être pénalisé par le comportement d'un voisin de réseau, il faut que l'hébergeur attribue au moins un /64 à ton serveur emails.
Comme tout cela ne suffit pas pour contrer le spam, il y a l'arbitraire. Des réseaux entiers, notamment ceux résidentiels, et des hébergeurs sont bloqués, temporairement ou non, car ils sont considérés comme des spammeurs notoires. Il existe des formalités administratives spécifiques à chaque fournisseur (ex. : Microsoft SNDS et JMRP) que j'ai toujours refusées d'accomplir (les normes, c'pas pour les chiens). Des mots-clés légitimes dans le corps d'un email sont bloqués. Des liens et des PJ légitimes et sans virus sont bloqués. La cadence de fournisseurs de liste de discussion légitimes est freinée. Sitôt qu'on grossit, à peu près tous les fournisseurs emails d'envergure cassent les pieds. Microsoft et GMail sont souvent cités mais c'est également la corvée avec Orange (qui limite la cadence autant que GMail) ou SFR Business (rejet arbitraire en fonction du contenu) ou…
Beaucoup attribuent une intention malveillante aux gros fournisseurs emails : ils voudraient fermer le marché, maintenir un oligopole afin de rendre captifs les usagers de l'email et exploiter toujours plus leur vie privée (GMail analyse le contenu des emails, La Poste ou ProtonMail modifient celui des emails sortants afin d'ajouter leur pub). C'est vrai, bien sûr, mais il ne faut pas expliquer par la malveillance ce que l'on peut expliquer par l'incompétence : à grande échelle, le spam est difficile à juguler et il est possible que les gros fournisseurs emails agissent pour le Plus Grand Bien (tm), mais leur part de marché, donc l'absence de contre-pouvoir, leur permet des prises de position cavalières qui, de fait, ne sont pas remises en question en interne. Une sorte de "ça marche / ça fait le job, je cherche pas plus loin, je réfléchis pas collectif / global" prononcé par un géant. Le poids des acteurs, voilà le cœur du problème, comme bien souvent. La concentration est néfaste. Et de ça, nous tous sommes responsables (absence de formation, laisser-aller vers la facilité, etc.).
Quand j'écris qu'un serveur emails perso tourne sans douleur ni entretien, c'est donc fonction de l'investissement technique initial sus-relaté, du fait que je suis un utilisateur avancé (alias, délimiteur, etc.), que je n'ai pas une quasi-obligation de recevoir les emails du premier venu, que j'émets un très faible volume d'emails (pas d'emails transactionnels ni de listes de discussion, etc.), que je converse plutôt avec des initiés (donc j'évite de fait les pénibles genre Orange, Microsoft Hotmail / Outlook, etc.), etc. Mon constat n'est pas transposable à des organismes (association, société commerciale, administration, peu importe) qui, eux, ont vocation à être ouverts au public, qui peuvent émettre un volume conséquent d’emails légitimes, qui ont des utilisateurs lambda donc peu formés, peu rigoureux, mais exigeants, etc.
Il y a bientôt un an, cet article a beaucoup circulé. Il dit vrai, bien entendu. Mais il manque des nuances que j'ai tenté d'apporter ici. Sans compter la prédominance erronée de l'analyse économique : à l'échelle de Microsoft / Orange / Google, etc., une analyse bayésienne coûte rien, mais sur un grand volume et une diversité d’usagers, elle est inefficace (beaucoup de faux-positifs), notamment car son apprentissage dépend de chaque usager et de sa bonne volonté et foi. Je partage partiellement son avis sur les bandeaux cookies : beaucoup de traitements de données persos étaient illicites depuis longtemps. Ils ne devaient pas perdurer, mais, plutôt que de changer de modèle économique, les acteurs continuent leurs pratiques crades en essayant d’obtenir un consentement vicié, tel le premier charo venu. Les traitements devraient reposer sur des bases légales plus saines, et le consentement devrait être l'exception, pas un prétexte pour dégainer n'importe quel traitement. La seule chose blâmable est la faiblesse des régulateurs.
En fonction de l'usage, un serveur emails perso est encore vivable.
P.-S. : il y a une différence entre l'offre gratuite de Microsoft (Hotmail / Live / Outlook) et les autres (Office 365, etc.). Mon serveur s'est toujours fait écourter quand je contacte des utilisateurs d'Outlook, et l'année écoulée n'a pas fait exception, mais, comme d'habitude, j'ai reçu des réponses de deux des trois destinataires professionnels dont le nom de domaine est porté par les serveurs emails de Microsoft (aucune idée si le troisième a voulu me répondre, mais, je le suppose, demande de devis, tout ça).
Quand on a un certificat auto-signé ou signé par une autorité de certification maison :
For example, the following RRset requests that no certificates be issued for the FQDN "nocerts.example.com" by any Issuer.
nocerts.example.com CAA 0 issue ";"
CAA utilise l'aspect arborescent du DNS donc une autorisation vaut pour le domaine visé et ses sous-domaines. ;)
J'ai déménagé mon serveur perso (pas celui qui héberge ce site web). Retour d'expérience.
Initialement, ce serveur était hébergé chez moi, sur un Raspberry Pi puis sur un OLinuXino, et raccordé proprement au réseau (condition pour avoir un serveur emails fonctionnel) avec le VPN d'un FAI associatif.
Quand ces ordinateurs ont rendu l'âme (avant les cartes SD, comme quoi), j'avais une contrainte personnelle de forte mobilité. J'ai donc hébergé ce serveur avec les autres auprès d'associations auxquelles je contribuais techniquement et financièrement, ARN et Grifon.
Début 2019, par démotivation et désespoir, j'ai quitté le monde associatif. Comme il est inconvenant de faire porter une charge de travail (héberger mon serveur) sur des bénévoles sans contribuer réellement (ne serait-ce qu'à la prise de décision), j'ai déménagé au plus simple : OVH. Ça fait le boulot pour pas cher. C'était censé être temporaire. Mais la flemme s'est installée.
Mon problème est simple : mes emails arrivent de moins en moins jusqu'à leurs destinataires. Quand j'étais auto-hébergé ou chez des assos, seuls quelques fournisseurs emails hégémoniques donc casse-couilles me rejetaient comme Microsoft. À l'inverse, ces derniers mois, je suis tricard, temporairement ou non, chez pas mal d'autres fournisseurs : Infomaniak, Octopuce (qui utilise Spamhaus), SFR (ceci dit, même les serveurs de Gandi se font rejeter), FDN (qui utilise Spamhaus sur ses anciennes listes de discussion), etc.
Deux explications :
MilkyWAN : je leur ai posé deux questions techniques (modèle d'hyperviseur et existence d'un VNC) en septembre 2022, pas de réponse. J'ai bien reçu l'accusé de réception émis par leur formulaire web.
FirstHeberg (anciennement FreeHeberg) :
Ikoula :
PulseHeberg :
Ligne Web Services (LWS) :
OuiHeberg :
OMGSERV :
ONETSolutions :
Chiffres d'affaires 2021 :
Source : societe.com.
J'ai choisi FirstHeberg.
Concernant le port tcp/25 (email), il est bloqué uniquement en sortie et en IPv4. Mes justificatifs caviardés (j'ai conservé les seules infos légalement obligatoires, cf. ci-dessus) ont été acceptés. Contrairement à ce que prétend le site web, le port tcp/587 n'est pas bloqué.
L'espace client ne permet pas de définir un reverse IPv6, mais une demande d'assistance permet de l'obtenir.
L'assistance est plutôt réactive et les réponses sont plutôt de qualité.
Évidemment, tout n'est pas parfait :
On verra comment ça se passe à la longue.
Mon système Debian GNU/Linux est chiffré en intégralité (sauf /boot, même si GRUB permet de s'en passer).
Même procédure que d'habitude. J'ai rencontré aucun des problèmes mentionnés. Ni partition mal copiée ni difficulté pour monter les partitions fraîchement copiées.
J'ai changé la phrase de passe du conteneur chiffré (cryptsetup luksAddKey /dev/sdX + cryptsetup luksRemoveKey /dev/sdX). J'en ai profité pour passer sans encombre à la version 2 de LUKS (cryptsetup convert --type luks2 /dev/sdX) et à l'algo de dérivation de clé argon2id (cryptsetup luksConvertKey --pbkdf argon2id /dev/sdX).
Prenant en compte la panne du VNC (cf. ci-dessus), j'ai mis en place un système me permettant de saisir la phrase de passe de mon système chiffré via SSH.
Avant de se reposer sur la validation DNSSEC, il faut avoir confiance envers les serveurs DNS récursifs (resolver) que l'on utilise et sur la sécurité du chemin réseau qui nous sépare de lui.
C'est pour ça que, par défaut, le stub-resolver DNS de la libc ne demande pas la validation DNSSEC et retire le bit qui indique qu'une réponse est validée. Pour marquer notre confiance envers les récursifs que l'on utilise (et surtout celle envers le chemin qui nous sépare d'eux), il faut ajouter options trust-ad dans /etc/resolv.conf.
L'utilisation des enregistrements DNS de type SSHFP par le client SSH repose dessus. Sans la validation, il affiche (avec « -v ») : « found 1 insecure fingerprints in DNS ».
Vache, ça fait des années que le comportement du stub-resolver a changé et que je ne m'en étais pas rendu compte. :O
Le système de mon serveur personnel (pas celui qui héberge ce site web) est totalement chiffré (/boot est une partition indépendante même si GRUB permet de s'en passer). Au démarrage, je saisis la phrase de passe depuis le VNC proposé par l'hébergeur.
Très récemment, j'ai changé d'hébergeur. Avant mon déménagement, son VNC a été dysfonctionnel pendant quasiment une semaine. Ça a été le déclic : comment faire si je dois redémarrer mon serveur pendant une panne ou une maintenance du VNC de mon hébergeur ? Autant une panne du VNC de mon ancien hébergeur me semblait improbable ou très limitée dans le temps au nom du « too big to fail », autant une panne longue de mon nouvel hébergeur me paraît crédible. Donc il m'appartient de concevoir un plan B. (On pourra aussi argumenter qu'une connexion SSH directe sera toujours plus sécurisée que le VNC over HTTPS de l'hébergeur par la simple disparition de l'intermédiaire.)
Il est possible de demander à l'initrd de se connecter au réseau, de proposer un accès SSH (avec l'implémentation minimaliste dropbear) et un terminal (implémentation minimaliste busybox) qui permettent d'ouvrir le conteneur LUKS. J'avais lu ça chez Aeris il y a quelques années, mais on va adapter un peu.
apt install dropbear-initramfs ;Ajouter sa clé publique SSH dans /etc/dropbear-initramfs/authorized_keys. L'auth par mot de passe est impossible (cela garantit la sécurité du serveur contre la force brute en cas de redémarrage inattendu suite à un plantage ou à une maintenance côté hébergeur) ;
Créer un fichier /etc/initramfs-tools/conf.d/ip. Format : « IP=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>:<ntp0-ip> » (via) ;
IP=192.0.2.42::192.0.2.1:255.255.255.0::eth0:off ;Reconstruire les initrd : update-initramfs -uk all ;
On fabrique un enregistrement DNS de type SSHFP ou une entrée pour le fichier known_hosts (cela permettra d'authentifier la machine, d'être sûr qu'on causera au bon serveur SSH qui aura booté sur l'initrd). Dans les deux cas, ça nécessite de convertir la clé privée du serveur depuis le format dropbear vers une clé publique au format openssh (attention : depuis OpenSSH 8.7, il ne peut y avoir qu'un seul enregistrement SSHFP par nom, donc une seule paire de clés pour l'initrd et le système…) :
ssh-keygen -y -f /dev/stdin <<< $(dropbearconvert dropbear openssh /etc/dropbear-initramfs/dropbear_rsa_host_key -). Ajouter la sortie au fichier known_hosts de la machine qui accédera au serveur ;ssh-keygen -r <FQDN> -f /dev/stdin <<<$(ssh-keygen -y -f /dev/stdin 2>/dev/null <<<$(dropbearconvert dropbear openssh /etc/dropbear-initramfs/dropbear_rsa_host_key -)).reboot le serveur ;dropbear n'implémente pas toute la crypto moderne, donc, si comme moi tu blindes ta conf' client SSH, il faudra réduire tes prétentions. Cela peut se faire avec une entrée dédiée dans .ssh/config ;ssh root@<serveur> doit fonctionner ;
Comme nous le dit le prompt, il suffit d'utiliser la commande cryptroot-unlock. Après la saisie de la phrase de passe, le système démarrera :
~ # cryptroot-unlock
Please unlock disk sda2_crypt:
cryptsetup: sda2_crypt set up successfully
~ # Connection to 192.0.2.42 closed by remote host.
Connection to 192.0.2.42 closed.
Cela fait plus de 10 ans que j'utilise DNSSEC sur mes noms de domaine personnels. \o/
À l'époque, info. était signé mais la soumission de délégations signées n'était pas ouverte (ou pas disponible chez mon bureau d'enregistrement ‒ Gandi ‒), donc j'utilisais le registre DLV de l'ISC, et BIND ne gérait pas entièrement les clés DNSSEC ni leur renouvellement automatique (source). :D
Je gère moi-même l'hébergement de mes zones DNS (avec BIND9 et NSD) et DNSSEC (avec OpenDNSSEC).
Au global, de nos jours, c'est une affaire qui tourne sans douleur. Ça n'a pas toujours été le cas :
Visualiser / lister les prochains roulements (renouvellements) de clés DNSSEC planifiés par OpenDNSSEC : ods-enforcer rollover list.
Forcer le renouvellement / roulement / rollover des clés (en cas de compromission, par ex.) : ods-enforcer key rollover --zone <nom_zone>. On peut limiter à un type de clé (KSK ou ZSK) en ajoutant --keytype <KSK|ZSK>.
Depuis le 5 juillet dernier, des épisodes inédits du jeu télévisé La Carte aux trésors sont diffusés les mercredis soirs. \o/
La disponibilité d'une semaine du replay est abusée, mais, comme d'hab, torrent est notre ami. :)
(ÉDIT DU 12/07/2023 : aujourd'hui, la dispo court jusqu'au 04/08/2023. FIN DE L'ÉDIT.)
Pour regarder en direct : yt-dlp -o - 'https://www.france.tv/france-3/direct.html' | vlc -.
systemd-journald est conçu pour archiver puis supprimer les vieux journaux (logs) selon une politique d'occupation de l'espace de stockage. Détails ici.
Parfois, on a besoin de conserver un journal un certain temps, ni plus, ni moins. Exemple ? L'obligation de conservation des données de connexion qui, en France, pèse sur les opérateurs de communications et les hébergeurs. Elles doivent être conservées 1 an. En dessous, l'opérateur / l'hébergeur ne remplit pas son obligation. Au-delà, le traitement est illégal au regard du RGPD car dénué de base légale (l'obligation légale court pour 1 an, pas plus).
Exemple moins pertinent : avec un volumineux système de stockage, on se retrouve avec 4 Go de journaux qui peuvent donc remonter loin et être pénibles à exploiter. Mais dans ce cas, on préférera affiner la valeur des paramètres de journald.
Pour une politique temporelle de conservation, journald propose le paramètre MaxRetentionSec. Source. Délai après lequel un journal contenant des entrées plus vieilles que ce délai sera supprimé. Par défaut, sa valeur est 0 afin de mettre en œuvre uniquement une politique de conservation basée sur l'occupation disque.
Il faut également configurer MaxFileSec. Un journal ne peut pas stocker des entrées au-delà de cette durée (1 mois par défaut). Un nouveau journal sera créé (et, l'ancien, archivé, donc supprimable). Il faut la positionner à « 1day ». Ainsi, lors de la suppression d'un journal archivé, après 1 an, seules les entrées d'il y a 366 jours seront supprimées. De même, seules les entrées du jour seront dans le journal courant, le reste sera archivé. Sans ce paramètre, soit journald supprimera le 12e mois (improbable), soit il conservera 1 an et 1 mois. Dans les deux cas, ça ne répond pas au besoin.
(Cette réflexion est basée sur le fait, qu'à priori, journald efface un journal en entier, pas les entrées d'un journal qui ont dépassé la date de péremption. Sa doc' consigne, pour le paramètre MaxFileSec : « However, to ensure that not too much data is lost at once when old journal files are deleted, it might make sense to change this value from the default of one month. ». Et le manuel de journalctl, pour l'action rotate, consigne : « Journal file rotation has the effect that all currently active journal files are marked as archived and renamed, so that they are never written to in future ».)
Conséquence logique : il faudra également modifier la valeur de SystemMaxFiles, car il y aura jusqu'à 1 an de journaux archivés chaque jour. Et il faudra désactiver la politique de conservation fondée sur l'occupation de l'espace de stockage (cf) sinon journald pourra supprimer des journaux récents si l'espace de stockage vient à manquer.
On peut aussi désactiver totalement ou partiellement journald (Storage). Il continuera à transmettre les journaux à rsyslog (par défaut sous Debian), et on pourra les traiter à l'ancienne avec logrotate.
systemd-journald est conçu pour archiver puis supprimer les vieux journaux (logs) selon une politique d'occupation de l'espace de stockage. Pour une politique basée sur le temps, lire ici.
Par défaut, il prend le minimum entre 10 % de la taille du système de fichiers (SystemMaxUse) et 85 % (SystemKeepFree), dans la limite de 4 Go soit min( min(10 % ; 4 Go) ; min(85 % ; 4 Go) ). 85 % car SystemKeepFree calcule ce qui doit rester libre, alors que SystemMaxUse calcule la taille maximale du journal. Les deux ne sont pas comparables directement, donc on harmonise : si 15 % doivent rester libre, 85 % peuvent être occupés et se comparent aux 10 % de SystemMaxUse.
Si la valeur de SystemKeepFree est dépassée dès le démarrage de journald, alors le plafond sera l'espace restant.
Évidemment, si tu sépares / et /var dans des systèmes de fichiers différents, journald prend en compte la taille de /var.
SystemMaxFileSize définit la taille maximale d'un fichier journal. Par défaut, 1/8e de SystemMaxUse. SystemMaxFiles définit le nombre parallèle de journaux. 100 par défaut.
L'occupation du stockage se mesure avec :
journalctl --disk-usageet/ou
du -hs /var/log/journalet/ou, en version prise de tête inutile :
journalctl -u systemd-journald -o json | jq 'select(.JOURNAL_PATH | test("/var/log/journal"))' 2>/dev/null | jq -s '.[-1].CURRENT_USE_PRETTY'.
Sur tous mes systèmes Debian GNU/Linux 11 (bullseye), SystemKeepFree est calculé automatiquement pour 5 % du système de fichiers, pas 15 % comme le dit la doc'.
On peut voir ça avec :
journalctl -u systemd-journald -xet/ou
journalctl -u systemd-journald -o json | jq 'select(.JOURNAL_PATH | test("/var/log/journal"))' 2>/dev/null | jq -s '.[-1] | .MAX_USE_PRETTY,.DISK_KEEP_FREE_PRETTY'.Le manuel (man) livré par Debian dit 15 %. La configuration n'est pas surchargée dans aucun des chemins donnés par la doc' de journald (on peut également vérifier avec systemd-analyze cat-config systemd/journald.conf | grep -e 'SystemMaxUse' -e 'SystemKeepFree'). Donc, a priori, Debian change ça à la compilation. 5 %, ce n'est pas déconnant, ça correspond à l'espace réservé pour root sur un système de fichiers ext, mais ça serait mieux de l'annoncer.
Sur l'un de mes systèmes Debian GNU/Linux, une station de travail, journald dépasse la limite qu'il cale sur SystemMaxUse. Toutes les commandes permettant de mesurer l'occupation disque le montrent, y compris du.
Dès son démarrage, il consigne que le journal dépasse la limite, mais ne prend aucune action correctrice.
Lors du démarrage, il restait, et il reste 40 % de libre sur le système de fichiers /var, donc on n'est pas dans l'hypothèse d'un dépassement de SystemKeepFree (et, toute façon, la limite a été calée sur SystemMaxUse).
J'ai 8 fichiers journaux dont 7 archives, donc il ne s'agit pas d'un unique journal courant volumineux impossible à supprimer (seuls les archives peuvent l'être). Sa taille, comme celle des journaux archivés est inférieure à SystemMaxFileSize.
Après un journalctl --rotate, qui demande d'archiver les journaux courants, je repasse sous la limite. Donc, a priori, journald s'impose la limite au moment de l'archivage, donc la limite est SystemMaxUse + SystemMaxFileSize (source), soit, par défaut, SystemMaxUse + (1/8)*SystemMaxUse.
Je constate également qu'il y a deux journaux dans /var/log/journal : system et user-1000. Et, d'après mes observations sur mon système, chaque fragment (archive + courant) peut grossir jusqu'à 1/8e de SystemMaxFileSize, donc, forcément, ça peut dépasser SystemMaxUse
Merci Johndescs du coup de main pour démêler tout ça.
Firefox me gonfle à bloquer des téléchargements avec le motif « Fichier non téléchargé : risque de sécurité potentiel ».
about:config, dom.block_download_insecure => false.
C'est censé gueuler lors d'un téléchargement en HTTP (sans TLS), mais ça semble aussi dépendre de la source : un .deb depuis les serveurs de Debian, ça couine ; le même .deb depuis mon serveur perso, toujours en HTTP, ça passe.
Ça ne fait que le énième paramètre Firefox à changer…
Une administration a un mois pour informer la CADA de la suite qu'elle va donner à une demande d'avis dans le cadre d'une communication de documents.
Dans son rapport d'activité 2021, la CADA consigne que le taux de réponse des administrations s'élève à 61,5 %, constant sur les 5 dernières années. Parmi ces réponses, 69,6 % des administrations ont fait part de leur intention de suivre au moins partiellement l'avis de la CADA, en baisse constante depuis 5 ans.
On notera que ce même article prévoit que la CADA rende son avis sous un mois. Ça n'a jamais été le cas pour moi. Le même rapport d'activité consigne un délai moyen annuel de traitement d'une demande d'avis de 82 jours en 2021.
Il est possible de demander la communication d'un certain nombre de documents détenus par une administration française. Si cette dernière s'y oppose (explicitement ou implicitement après un mois sans réponse), il est possible de saisir, dans les deux mois, une autorité administrative indépendante, la CADA, d'une demande d'avis (qui est un pré-requis pour contester le refus de l'administration au contentieux). Lire toutes les notes concernant cette procédure.
La CADA contacte alors l'administration visée afin qu'elle produise des observations (pourquoi a-t-elle refusé ?). Ces observations destinées à la CADA sont des documents administratifs… communicables (sous réserve des habituelles réserves ‒ vie privée, secrets des affaires, fiscal, défense, etc. ‒). Pré-requis : la CADA doit avoir rendu son avis (sinon, documents relatifs à une décision en cours d'élaboration, donc pas communicables). C'est le journaliste Marc Rees qui me l'avait appris (je ne trouve plus le tweet ou l'article NextInpact original, mais il y a ce tweet plus récent).
Il y a deux parties qui échangent (CADA et administration). À qui demander ? Est-il seulement possible d'adresser une demande de communication de docs à la CADA ? Oui ! Il est même possible de saisir la CADA contre un refus de communication de la CADA. :D Pour m'en assurer, j'ai cherché (et trouvé) des avis dans la base des avis de la CADA.
La CADA a répondu à ma demande de communication en me transmettant les observations produites par l'administration.
À titre d'inspiration, voici ma demande adressée à la CADA par email :
Sujet : Demande de communication de documents détenus par la CADA
Bonjour,
Je demande à la CADA de me communiquer une copie des documents suivants :
- Tous les échanges (email, courrier, etc.), toute la correspondance bidirectionnelle, entre la CADA et <CENSURE> intervenus dans le cadre de ma demande d'avis numéro <CENSURE> adressée à la CADA le <CENSURE> via son formulaire de saisine en ligne (avis rendu le <CENSURE> qui m'a été transmis le <CENSURE>). Pour les éventuels courriers postaux envoyés par la CADA, vous y joindrez toute preuve de dépôt La Poste (affranchissement, suivi LRAR, tampon La Poste, etc.) ;
L'existence de ces échanges est attestée dans le corps de l'avis rendu par la CADA, cf. PJ 1 (« en réponse à la demande qui lui a été adressée », « ce que fait valoir le président de <CENSURE> », « le président de <CENSURE> […] lui a indiqué », etc.).
Conformément à l’article L311-9, 3° du CRPA, je vous demande de m’adresser ces documents par courrier électronique à l’adresse <CENSURE>.
Cordialement.