Technical report

Sur cette page seront répertoriés, pour des raisons de transparence, des détails techniques internes à l'association en relation avec nos services.

(Cette page sera restructurée lorsque notre temps nous le permettra)

État des services

Notre infrastructure est encore très récente et il nous faudra du temps pour la stabiliser et éliminer ses potentiels bugs.

Nous vous prions de faire preuve de tolérance sur nos débuts et de signaler tout bug via notre formulaire de contact.

Toute interruption de service d'une durée supérieure à 10 minutes sera planifiée et annoncée dans un premier temps sur Mastodon.

Interne

  • Serveur mail (envoi, réception) : OK
  • Nextcloud (agenda) : OK

Services libres d'accès

  • Proxy DoH : OK

  • Raccourcisseur de liens : OK

  • Schémas : OK

  • Nitter : OK (phase de développement)

Services adhérent

  • Espace adhérent et gestion des emails/alias : OK

  • Service Git : OK

Hébergement

Du 25 janvier au 25 juillet 2019, nous étions hébergés chez OVH SAS avec l'offre VPS SSD 1 à 3.59 euros TTC (article expliquant ce choix).

Depuis le 25 juillet 2019, nous sommes gracieusement hébergés chez Proxgroup pour une durée indéterminée.

Nous avons aussi fait acquisition d'un nom de domaine (42l.fr) pour une durée d'un an depuis le 25 janvier 2019 auprès d'OVH.

Requêtes et obligations légales

Cette section listera toutes les requêtes concernant les données personnelles de nos utilisateurs (ex: divulgation d'informations, blocage ou suppression de comptes) auxquelles nous avons dû répondre pour des raisons légales.

Nous nous limiterons cependant aux informations que nous sommes légalement autorisés à publier.

À ce jour, l'association 42l n'a reçu aucune requête correspondant à ces critères.

Données personnelles et chiffrement

Nous essayons d'anonymiser le plus possible toutes les données de nos adhérents.

  • Les noms d'utilisateur sont stockées sous forme de hash cryptographique.

  • Les mots de passe sont hachés par bcrypt (avec un coût de 10, que nous augmenterons dès que disposerons d'un serveur plus performant)

  • Les adresses email sont stockés de deux manières : sous forme de hash cryptographique (afin de permettre aux utilisateurs de récupérer leur mot de passe) et par chiffrement asymétrique avec une clé publique RSA (afin que nous puissions envoyer les confirmations d'adhésion ainsi que des newsletters aux utilisateurs ayant explicitement accepté d'en recevoir). La clé privée n'est pas stockée sur le serveur.

Service mail

  • Les adresses email entrées par nos adhérents à travers le système de gestion des emails sont, pour des raisons purement techniques, stockées en clair. (Si vous recevez un email de votre adresse @42l.fr, nous avons besoin de connaître votre adresse email afin de vous délivrer le mail).
  • Les mots de passe des comptes email créés sur notre plateforme sont stockés en SHA512-CRYPT.
  • Faute de pauvreté des protocoles IMAP/POP/SMTP, vos emails sont stockés en clair dans notre volume Docker. Chiffrer vos emails impliquerait de stocker la clé sur le serveur, ce qui n'aurait pas grand intérêt. Nous vous incitons à utiliser PGP.

Toutes les opérations impliquant des fonctions de hachage utilisent au moins un sel statique stocké sur le serveur. Les mots de passe utilisent le sel dynamique de bcrypt.

Service Liens

  • Les liens entrés dans le raccourcisseur de liens ainsi que le texte personnalisé entré par l'utilisateur sont stockés dans nos serveur pour une durée indéfinie ; de même pour le compteur de clics.
  • Toute demande de suppression de données est à nous adresser au travers de notre page de contact.

Service Git

  • Les dépôts des utilisateurs et leur contenu sont stockés sur nos serveurs et peuvent être supprimés via l'interface du service.
  • Cela inclut aussi les issues, les contenus des commits, les pages de wiki, etc.

Gestion de l'association

L'association 42l utilise un CMS libre (licence AGPLv3) de gestion d'association nommé Garradin, principalement maintenu par BohwaZ.

Pour des raisons de sécurité, l'instance de Garradin est installée sur un serveur local n'ayant aucune connexion avec le serveur hébergeant nos services.

Sauvegarde de données

Nous travaillons sur la mise en place d'un rsync régulier sur les volumes Docker contenant des données personnelles et des fichiers de configuration.

Configuration des services

Cette section détaille la configuration déployée sur l'hôte. Pour des raisons de sécurité, les noms internes des conteneurs et des services donnés dans ce document peuvent ne pas correspondre aux noms réels.

Quelques informations manquent encore, veuillez nous en excuser et n'hésitez pas à nous solliciter pour toute question.

Système par défaut

Le serveur tourne sous Debian Buster.

Considérez que nous disposons de tous les paquets préinstallés sur une installation minimale.

Sécurité

Le compte root est désactivé. Seul un compte utilisateur est autorisé à se connecter via SSH.

Une clé est requise pour la connexion via SSH.

Les ports ouverts sont protégés par des dispostifs anti-spam pour lutter contre le déni de service et les attaques par force brute.

Nous essayons de nous plier aux standards de sécurité avec SSLLabs, CryptCheck et en incorporant des headers supplémentaires dans nos réponses HTTP.

Des mises à jour automatiques sont effectuées sur une base régulière à l'aide de unattended-upgrades.

Divers paramètres altérés dans la configuration

  • Modification des résolveurs DNS par défaut pour Docker (Google -> FDN)
  • Modification des résolveurs DNS de fallback par défaut dans systemd (Google -> FDN)

Certificat & DNS

Autorité : Let's Encrypt

DNSSEC est activé sur notre domaine.

Nous utilisons des enregistrements SSHFP afin de nous assurer de l'authenticité de la clé publique SSH de notre serveur.

Nous utilisons un certificat wildcard.

Il est renouvelé périodiquement et automatiquement avec l'image certbot/dns-ovh, qui utilise l'API d'OVH pour authentifier le nom de domaine.

Docker

Images
Images téléchargées et utilisées si besoin
  • certbot/dns-ovh : Utilisée pour renouveler périodiquement notre certificat TLS
Images de base
  • debian:buster-slim (~101MB)
  • nitter (97.5MB)
  • alpine (~5MB)
  • tvial/docker-mailserver (~523MB)
  • postgres:alpine (~70MB)
  • tomcat:9-jre8-alpine (~108MB)
  • crazymax/fail2ban (~113MB)
  • nextcloud:apache (~676MB)
  • gitea/gitea (102MB)
Images "faites maison"
  • nginx-proxy (~6MB), basée sur alpine avec le paquet nginx installé dessus, plus léger que l'image nginx:alpine
  • docker-mailserver-fixed (~625MB), une version de tvial/docker-mailserver adaptée à nos besoins (modification de certains paramètres de configuration, ajout de paquets et mises à jour) afin de permettre l'interaction entre ce conteneur et le site web, depuis lequel les adhérents gèrent leurs comptes email. Cette image utilise une panoplie d'outils libres, notamment postfix et dovecot.
  • site-web (115MB), basée sur debian:buster-slim, fait tourner Rocket avec quelques paquets supplémentaires pour assurer la connexion avec le conteneur de mails.
  • schemas (197MB), basée sur tomcat:9-jre8-alpine et le dockerfile fjudith/draw.io auquel nous avons retiré le support TLS, puisque nous utilisons le service à travers un reverse proxy. Cette image est plus légère que l'image officielle.
  • nitter (97.5MB): une simple image debian:buster-slim avec l'installation des paquets openssl et libsqlite3-0 pour les besoins de l'instance.
  • rs-short (108MB): image debian:buster-slim avec l'installation du paquet libsqlite3-0 pour les besoins de l'instance.
Conteneurs actifs
Description des conteneurs
  • Reverse proxy nginx : Reçoit et redirige toutes les requêtes HTTP/S
  • Site principal : Le site "vitrine", comprend l'espace adhérent
  • BDD PostgreSQL : Stocke les adhérents inscrits sur le site
  • Fail2ban : Protège le serveur des usages malintentionnés de nos services.
  • Service mail : Gère les emails de tous les utilisateurs
  • Proxy DoH : Redirige les requêtes DoH vers les résolveurs ouverts de FDN
  • Service Liens : Instance de rs-short
  • Schémas : Logiciel de génération de schémas
  • Nitter : "Front-end vie privée" pour Twitter
  • Git : Instance de Gitea
  • Nextcloud : Nous sert uniquement à tenir l'agenda de l'association pour le moment
NomSous-domaineRAM moyenneImage
Reverse proxy nginx*.42l.fr3 Monginx-proxy
Site principal42l.fr, www.42l.fr5 Mosite-web
BDD PostgreSQL-8 Mopostgres:alpine
Fail2ban-20 Mocrazymax/fail2ban
Service mailmail.42l.fr250 Modocker-mailserver-fixed
Proxy DoHdoh.42l.fr24 Modebian:buster-slim
Cache DoH-53 Modebian:buster-slim
Service Lienss.42l.fr8 Mors-short
Schémasdraw.42l.fr120 Moschemas
Nitternitter.42l.fr45 Monitter
Gitgit.42l.fr45 Mogitea/gitea
Nextcloudnextcloud.42l.fr130 Monextcloud:apache
Informations complémentaires
  • Proxy DoH : Nous utilisons rust-doh pour faire fonctionner ce service. Il tourne sur debian:buster-slim.
  • Cache DoH : Nous utilisons edgedns (par le même auteur que rust-doh) pour mettre en cache les réponses aux requêtes DNS reçues par FDN.
  • Schémas : Nous avons forcé l'utilisation du mode hors-ligne du logiciel depuis notre reverse proxy afin d'empêcher le logiciel d'effectuer des requêtes externes vers les serveurs des GAFAM et de JGraph.

Clés APT de confiance

Paquets installés

  • rsync
  • unattended-upgrades
  • fish
  • vim
  • tmux
  • git
  • htop
  • ncdu
  • psmisc
  • docker-ce
  • docker-compose
  • dnsutils