Aller au contenu

Configurer correctement Docker

Mise à jour :

logo docker

Docker est aujourd’hui un outil incontournable dans le monde de la conteneurisation, permettant aux développeurs et aux administrateurs systèmes de déployer des applications de manière efficace. Cependant, une installation et une utilisation incorrecte ou une configuration négligée peut mener à des failles de sécurité ou à des inefficacités qui peuvent compromettre l’ensemble de votre infrastructure.

Docker propose de nombreuses fonctionnalités qui, lorsqu’elles sont correctement configurées, peuvent significativement réduire les risques et augmenter la stabilité de vos systèmes. Nous aborderons les étapes clés telles que la création d’une partition dédiée, la gestion des namespaces utilisateur et la désactivation des privilèges excessifs, entre autres. L’objectif est de vous fournir une base solide sur laquelle construire des environnements conteneurisés sûrs et efficaces, tout en évitant les pièges courants que rencontrent de nombreux utilisateurs.

Suivre ces pratiques vous permettra non seulement de sécuriser vos applications, mais également d’optimiser leur fonctionnement et leur déploiement, garantissant ainsi une exploitation plus sereine de vos ressources.

Créer une partition dédiée pour Docker

L’une des bonnes pratiques essentielles pour optimiser la gestion de l’espace disque et renforcer la sécurité de votre environnement Docker consiste à créer une partition dédiée pour le répertoire /var/lib/docker. Ce répertoire contient toutes les données de Docker, y compris les images, les conteneurs, les volumes et les configurations. En isolant ces données dans une partition spécifique, vous améliorez la gestion des ressources et évitez que Docker ne consomme tout l’espace disponible sur le disque principal, ce qui pourrait entraîner des interruptions de service ou d’autres problèmes opérationnels.

Contrôle

Pour vérifier si le répertoire Docker est déjà monté sur une partition dédiée, vous pouvez utiliser la commande suivante :

Terminal window
sudo mountpoint -- "$(docker info -f '{{ .DockerRootDir }}')"

Cette commande permet de vérifier si le répertoire Docker est un point de montage distinct ou s’il est intégré à la partition principale. Si Docker n’est pas sur une partition séparée, il est recommandé de procéder à cette configuration pour une meilleure gestion de l’espace disque.

Remède

Si Docker n’est pas déjà configuré pour utiliser une partition dédiée, voici les étapes pour le faire :

  1. Créer une nouvelle partition sur votre disque ou utiliser un disque secondaire.

  2. Formater la partition avec un système de fichiers approprié, tel que ext4 :

    Terminal window
    sudo mkfs.ext4 /dev/sdX1
  3. Monter la partition dans le répertoire /var/lib/docker :

    Terminal window
    sudo mount /dev/sdX1 /var/lib/docker
  4. Mettre à jour le fichier /etc/fstab pour monter automatiquement la partition au démarrage :

    Terminal window
    echo '/dev/sdX1 /var/lib/docker ext4 defaults 0 2' | sudo tee -a /etc/fstab

En appliquant cette configuration, vous garantissez que Docker dispose de l’espace nécessaire pour fonctionner correctement, tout en évitant les risques liés à une saturation du disque principal. Cela améliore la stabilité et la fiabilité de votre environnement Docker.## Désactiver les communications entre conteneur

Désactiver les communications entre conteneurs

Par défaut, Docker permet aux conteneurs de communiquer entre eux sur un même hôte, ce qui peut poser des problèmes de sécurité en facilitant les interactions non souhaitées ou l’espionnage entre conteneurs. Pour renforcer l’isolation et réduire les vecteurs d’attaque, il est recommandé de désactiver ces communications par défaut.

Contrôle

Pour vérifier si les communications entre conteneurs sont actuellement activées, vous pouvez exécuter la commande suivante :

Terminal window
docker network ls --quiet | xargs docker network inspect --format '{{ .Name }}: {{ .Options }}' |grep enable_icc:true

Cette commande inspecte les réseaux Docker et affiche ceux où l’option enable_icc est activée, indiquant que les communications inter-conteneurs sont possibles.

Remède

Si vous constatez que les communications sont activées et que vous souhaitez les désactiver, vous pouvez configurer Docker pour empêcher ces interactions par défaut. Pour ce faire, il suffit de modifier le fichier de configuration de Docker.

  1. Modifier le fichier daemon.json pour désactiver l’ICC (Inter-Container Communication) :

    Terminal window
    sudo vi /etc/docker/daemon.json

    Ajoutez ou modifiez la ligne suivante :

    {
    "icc": false
    }
  2. Redémarrer le service Docker pour appliquer les modifications :

    Terminal window
    sudo systemctl restart docker

En désactivant les communications entre conteneurs, vous renforcez l’isolation de vos services, ce qui limite les risques d’interaction non désirée et augmente la sécurité globale de votre environnement Docker.

Activer le support des namespaces utilisateur

Le support des namespaces utilisateur est une fonctionnalité de sécurité importante qui permet de mapper les utilisateurs et groupes à l’intérieur des conteneurs à des utilisateurs non privilégiés sur l’hôte. Cela réduit considérablement les risques en cas de compromission d’un conteneur, car même si un processus parvient à s’échapper du conteneur, il aura des privilèges limités sur l’hôte.

Contrôle

Pour vérifier si le support des namespaces utilisateur est activé, vous pouvez consulter la configuration actuelle de Docker avec la commande suivante :

Terminal window
docker info | grep "userns"

Si le retour de la commande indique que le userns n’est pas configuré, cela signifie que les namespaces utilisateur ne sont pas activés.

Remède

Pour activer les namespaces utilisateur, suivez ces étapes :

  1. Modifier le fichier daemon.json de Docker :

    Terminal window
    sudo vi /etc/docker/daemon.json

    Ajoutez la configuration suivante pour activer les namespaces utilisateur :

    {
    "userns-remap": "default"
    }
  2. Créer un utilisateur dédié pour le remappage (optionnel mais recommandé) : Par défaut, Docker crée automatiquement un utilisateur pour le remappage, mais vous pouvez en spécifier un spécifique pour un meilleur contrôle :

    Terminal window
    sudo usermod --add-subuids 100000-165536 --add-subgids 100000-165536 dockremap
  3. Redémarrer Docker pour appliquer la nouvelle configuration :

    Terminal window
    sudo systemctl restart docker

Avec cette configuration, les processus à l’intérieur des conteneurs seront isolés avec des privilèges réduits, augmentant ainsi la sécurité globale de votre système en minimisant les risques d’élévation de privilèges en cas de compromission.

Désactiver l’élévation de privilège

L’élévation de privilège est une fonctionnalité qui permet à un processus à l’intérieur d’un conteneur de s’exécuter avec des privilèges plus élevés que ceux qui lui ont été initialement attribués. Cette capacité peut être exploitée pour compromettre l’intégrité de l’hôte, surtout si un conteneur est compromis. Pour renforcer la sécurité de votre environnement Docker, il est essentiel de désactiver cette possibilité.

Contrôle

Pour vérifier si l’élévation de privilège est activée pour vos conteneurs, vous pouvez utiliser la commande suivante pour inspecter les capacités des conteneurs :

Terminal window
docker inspect --format '{{ .HostConfig.Privileged }}' <container_id>

Cette commande retournera “true” si le conteneur est actuellement configuré avec des privilèges élevés.

Remède

Si vous identifiez des conteneurs avec des privilèges élevés, il est recommandé de les reconfigurer pour fonctionner sans cette option. Voici comment vous pouvez désactiver cette fonctionnalité lors de la création d’un conteneur :

  1. Lancer un conteneur sans privilèges :

    Terminal window
    docker run --rm -it --cap-drop ALL --security-opt no-new-privileges ubuntu

    Cette commande exécute un conteneur en supprimant toutes les capacités supplémentaires (--cap-drop ALL) et en désactivant la possibilité d’acquérir de nouveaux privilèges (--security-opt no-new-privileges).

  2. Modifier les conteneurs existants pour s’assurer qu’ils ne tournent pas avec des privilèges élevés : Si vous avez des conteneurs déjà en cours d’exécution avec des privilèges élevés, vous devrez arrêter ces conteneurs et les redémarrer avec les options de sécurité appropriées.

  3. Configurer Docker pour interdire par défaut l’élévation de privilège : Vous pouvez également configurer Docker pour appliquer cette politique de manière globale en modifiant le fichier daemon.json :

    {
    "no-new-privileges": true
    }

    Redémarrez Docker après avoir apporté cette modification pour qu’elle prenne effet :

    Terminal window
    sudo systemctl restart docker

En désactivant l’élévation de privilège, vous limitez les risques d’attaques qui pourraient exploiter cette fonctionnalité pour compromettre l’intégrité de votre hôte. Cette mesure proactive est un pas important vers un environnement Docker plus sécurisé.

Activation de l’audit sur les fichiers Docker

L’audit des fichiers et répertoires liés à Docker est une mesure de sécurité essentielle pour surveiller et analyser toute activité suspecte dans votre environnement conteneurisé. En mettant en place un système d’audit, vous pouvez détecter et réagir rapidement à des comportements anormaux ou non autorisés, ce qui contribue à renforcer la sécurité de votre infrastructure.

Contrôle

Pour vérifier si l’audit est déjà activé sur vos fichiers Docker, vous pouvez inspecter les règles d’audit actuelles en utilisant la commande suivante :

Terminal window
sudo auditctl -l | grep docker

Cette commande liste toutes les règles d’audit appliquées à Docker. Si aucune règle spécifique n’est affichée pour Docker, cela signifie que l’audit n’est pas encore configuré pour ces fichiers.

Remède

Si l’audit n’est pas activé, voici comment vous pouvez le mettre en place pour surveiller les fichiers Docker critiques :

  1. Ajouter une règle d’audit pour le répertoire Docker : Pour surveiller les modifications apportées au répertoire /var/lib/docker, ajoutez la règle suivante :

    Terminal window
    cat <<EOF | sudo tee -a /etc/audit/rules.d/audit.rules
    -w /usr/bin/dockerd -k docker
    -w /etc/docker -p rwxa -k docker
    -w /etc/default/docker -p rwxa -k docker
    -w /etc/docker/daemon.json -p rwxa -k docker
    -w /var/lib/docker -p rwxa -k docker
    -w /usr/lib/systemd/system/docker.service -p rwxa -k docker
    -w /usr/lib/systemd/system/docker.socket -p rwxa -k docker
    -w /usr/bin/docker-runc -p rwxa -k docker
    -w /usr/bin/docker-containerd -p rwxa -k docker
    -w /usr/bin/containerd -p rwxa -k docker
    EOF
    sudo /sbin/service auditd restart
  2. Surveiller les événements d’audit : Une fois les règles mises en place, vous pouvez surveiller les événements audités avec la commande suivante :

    Terminal window
    sudo ausearch -k docker_audit

En activant l’audit sur les fichiers Docker, vous pouvez rapidement identifier toute tentative de modification non autorisée ou activité suspecte dans votre environnement conteneurisé. Cela constitue une couche supplémentaire de sécurité, vous permettant de maintenir une surveillance continue et proactive sur vos ressources Docker.

Activation du Live Restore

Le Live Restore est une fonctionnalité de Docker qui permet aux conteneurs de continuer à fonctionner même si le daemon Docker s’arrête ou est redémarré. Cela évite les interruptions de service inutiles et garantit une meilleure disponibilité des applications conteneurisées. Activer cette option est indispensable pour les environnements de production où la continuité du service est primordiale.

Contrôle

Pour vérifier si le Live Restore est activé, vous pouvez consulter la configuration actuelle de Docker avec la commande suivante :

Terminal window
docker info | grep "Live Restore Enabled"

Si le retour est “false”, le Live Restore n’est pas activé.

Remède

Si le Live Restore n’est pas encore activé, voici les étapes pour le configurer :

  1. Modifier le fichier daemon.json : Ouvrez le fichier de configuration de Docker situé dans /etc/docker/daemon.json et ajoutez ou modifiez la ligne suivante pour activer le Live Restore :

    {
    "live-restore": true
    }
  2. Redémarrer le daemon Docker : Une fois le fichier configuré, redémarrez le daemon Docker pour que la modification prenne effet :

    Terminal window
    sudo systemctl restart docker
  3. Vérifier l’activation : Après le redémarrage, utilisez à nouveau la commande de contrôle pour vérifier que le Live Restore est bien activé.

En activant le Live Restore, vous minimisez les risques d’interruption des services en cas de redémarrage du daemon Docker, ce qui est particulièrement bénéfique dans les environnements de production où la haute disponibilité est indispensable.

Conclusion

En suivant ces bonnes pratiques pour configurer Docker, vous renforcez non seulement la sécurité de vos environnements conteneurisés, mais vous optimisez également leur performance et leur stabilité. Que ce soit en isolant les conteneurs avec des partitions dédiées, en désactivant les communications inter-conteneurs, en configurant les namespaces utilisateur, ou en activant des fonctionnalités essentielles comme le Live Restore, chaque étape contribue à construire une infrastructure Docker robuste et résiliente. En appliquant ces conseils, vous minimisez les risques et maximisez la fiabilité de vos déploiements Docker.