Mémo – Docker

Quelques notes sur l’utilisation de docker.

Je ne vais pas détailler ici ce qu’est docker ni à quoi ça peut servir, il y a suffisamment d’articles sur le net. Pour faire simple, docker est un système de gestion de conteneurs.

Dockerfile

Un Dockerfile est un fichier d’instructions permettant de créer une image. Il doit toujours s’appeler Dockerfile.

Image

Les images sont les briques de bases de docker, on peut voir une image comme un instantané d’un système avec sa configuration et ses applications. C’est à partir de ces images que sont créés les conteneurs, mais une image peut aussi servir de base pour une autre image (comme dans le Dockerfile ci-dessus).

Conteneur

C’est principalement ça qu’on manipule, un conteneur est une branche exécutable d’une image. Les bonnes pratiquent veulent qu’un conteneur soit jetable à tout moment sans perte de données, dit autrement, un conteneur ne devrait rien contenir d’autre que ses programmes. Tout ce qui est données (par exemple les pages d’un site web et le contenu de sa base de données) devraient être en dehors du conteneur, par exemple dans des volumes.

Volume

On vient de dire qu’un conteneur doit être jetable, il faut donc enregistrer les données dans un endroit persistant, on peut le faire de plusieurs manières, les plus courantes sont :

  • un conteneur dédié : c’est un conteneur qui n’aura comme but que d’accueillir les données d’autres conteneurs, évidement ce conteneur ne sera pas à jeter
  • un dossier (ou un fichier) de l’hôte : il sera monté dans le conteneur
  • un « data volume » : c’est un dossier particulier, créé au démarrage du conteneur mais qui est conservé à la destruction du conteneur
  • un mixte de tout ou partie des 3 : par exemple un conteneur dédié dans lequel on a mappé un dossier de l’hôte

Une bonne pratique consiste à utiliser un conteneur dédié, car ça offre quelques facilités

  • partage des données entre conteneurs
  • déplacement des conteneurs et de leurs données vers un autre serveur

Commande

Il existe de nombreuses interfaces pour manipuler les conteneurs, mais il est préférable de commencer par utiliser les commandes car dans la plupart des cas c’est :

  • plus rapide
  • plus fiable
  • plus simple
  • plus reproductible
  • plus facile à expliquer

Ci dessous les commandes courantes, pour la liste complète : Docker CLI

Les valeurs entre <> sont à adapter (sans les chevrons)

nb : la plupart des commandes disposent d’options, vous pouvez les obtenir avec :

Image

Conteneur

Exemple de commandes

Poodle et SHA1

Juste un article lié à l’actualité (Poodle &co) et sur les mesures à prendre sur nos serveurs SSL/TLS.

SHA-1 : datant de 1996, encore considéré comme fiable, cette fonction de hash, largement utilisée pour signer des certificats, et plein d’autres choses, va être dépréciée. Google et Microsoft ont en effet annoncé qu’ils allaient progressivement refuser les certificats signés avec SHA-1 dans leurs navigateurs respectifs et recommandent d’utiliser SHA256.

=>c’est une bonne nouvelle pour notre sécurité, non pas parce que SHA256 est plus fiable que SHA-1, mais parce que ça va obliger de nombreuses autorités de certifications à renouveler leurs certificats d’autorités et les administrateurs à faire de même pour leurs certificats serveurs.

Je vous laisse chercher pourquoi ce surcroit de travail devrait être une bonne chose …

Poodle : datant de 1996 lui aussi, SSLv3 vient probablement de casser sa pipe, une faille protocolaire permet de déchiffrer tout ou partie d’une connexion HTTPS. Comme la faille concerne le protocole et pas une implémentation, la correction est assez simple, il suffit de désactiver la prise en charge de SSLv3.

C’est une très bonne nouvelle, on va enfin pouvoir se débarrasser d’Internet Explorer 6 (ce dernier ne prend pas en charge le TLS).

Vivement qu’on trouve une faille dans TLS1 afin de faire sauter les versions 7 et 8, voir même 9 et 10 (puisque que TLS 1.1 et 1.2 y sont désactivés par défaut)

Certificats en SHA256

Google et Microsoft ont annoncé qu’ils allaient progressivement refuser les certificats signés avec SHA1 dans leurs navigateurs respectifs et recommandent d’utiliser SHA256.

Les certificats déjà publiés ne devraient pour la plupart pas être concernés, mais si vous avez un certificat à générer à partir de maintenant, il vaut mieux directement le signer en SHA256.

Vérifiez bien que votre autorité de certification a fait de même avec ses chaines de certifications!

Par défaut, OpenSSL utilise SHA-1 pour générer une demande de certificat (CSR), pour utiliser SHA256 il suffit d’ajouter default_md = sha256 dans la section appropriée du fichier de configuration ([ ca ] et/ou [ req ] selon l’usage), ou d’ajouter -sha256 dans la ligne de commande.

Poodle

Pas besoin de détailler, il est temps de débrancher les ancêtres.

La suite indique comment faire pour quelques logiciels serveur de qualité :

Nginx

Configuration avec une bonne compatibilité :

Le dernier cipher permet la compatibilité avec IE 8 sur XP, n’hésitez pas à le supprimer.

Pour plus de sécurité on peut générer une clef de session plus forte :

On l’utilise avec la directive :

Si le site est uniquement en HTTPS, on peut l’indiquer aux navigateurs compatibles via l’entête HSTS , ainsi ils ne tenteront plus (pendant la durée indiquée) d’accéder à votre site en HTTP :

Apache2

Configuration avec une bonne compatibilité :

Pour l’HSTS :

Postfix

Dovecot