79 votes

Uncomplicated Firewall (UFW) ne bloque rien lors de l'utilisation de Docker

C'est la première fois que je configure un serveur Ubuntu (14.04 LTS) et j'ai des difficultés à configurer le pare-feu (UFW).

J'ai seulement besoin ssh y http alors je fais ça :

sudo ufw disable

sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp

sudo ufw enable
sudo reboot

Mais je peux toujours me connecter aux bases de données sur d'autres ports de cette machine. . Une idée sur ce que je fais mal ?

EDITAR Ces bases de données sont sur des conteneurs Docker. Est-ce que cela pourrait être lié ? Est-ce qu'il outrepasse ma configuration ufw ?

EDIT2 : sortie de sudo ufw status verbose

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)

2voto

mkubaczyk Points 129

Utilisation de /etc/docker/daemon.json avec du contenu

{
  "iptables": false
}

peut sembler être une solution mais cela ne fonctionne que jusqu'au prochain redémarrage . Après cela, vous pouvez remarquer qu'aucun de vos conteneurs n'a accès à Internet et que vous ne pouvez pas, par exemple, envoyer un ping à un site Web. Il peut s'agir d'un comportement indésirable.

Il en va de même pour lier un conteneur à une IP spécifique. Il se peut que vous ne souhaitiez pas le faire. L'option ultime est de créer un conteneur et de le placer derrière l'UFW, quoi qu'il arrive. et comment vous créez ce conteneur, donc il y a une solution :

Après avoir créé /etc/docker/daemon.json fichier, invoquer :

sed -i -e 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
ufw reload

donc vous configurez la politique de transfert par défaut dans UFW pour accepter et utiliser :

iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE

Si vous êtes sur le point d'utiliser docker-compose, alors l'IP de la commande ci-dessus doit être remplacée par l'IP du réseau que docker-compose crée en l'exécutant avec docker-compose up .

J'ai décrit le problème et la solution de manière plus complète dans cet article

J'espère que cela vous aidera !

2voto

TmTron Points 376

MISE À JOUR 10.2021

Lorsque nous n'utilisons qu'un seul numéro de port, docker utilisera un port éphémère voir ports docker-compose

Spécifiez uniquement le port du conteneur (un port hôte éphémère est choisi pour le port hôte).

Je pensais que ma réponse initiale avait fonctionné, car je ne pouvais pas me connecter au port 1234 attendu.
Ne faites donc pas cela - suivez les conseils donnés dans les autres réponses.
Je ne supprimerai pas cette réponse, car elle peut encore être utile à quelqu'un pour comprendre pourquoi no pour le faire.

première réponse

Utilicé docker-compose pour démarrer plusieurs conteneurs et a également eu le problème qu'un port était exposé au monde en ignorant les règles ufw.

Le correctif pour rendre le port disponible uniquement pour mes conteneurs docker était ce changement dans mon fichier docker-compose.yml archivo:

ports:
- "1234:1234"

à ça :

ports:
- "1234"

Maintenant, les autres conteneurs docker peuvent toujours utiliser le port, mais je ne peux pas y accéder de l'extérieur.

1voto

thecoder Points 11

Utilisez --network=host lorsque vous démarrez le conteneur afin que docker mappe le port sur un réseau isolé réservé à l'hôte au lieu du réseau ponté par défaut. Je ne vois aucun moyen légal de bloquer le réseau ponté. Vous pouvez également utiliser un réseau personnalisé défini par l'utilisateur avec une isolation.

0voto

Stefan Points 1
  1. Connectez-vous à votre console Docker :

    sudo docker exec -i -t nom_de_l'image_du_docker /bin/bash

  2. Et ensuite dans votre console de docker :

    sudo apt-get update
    sudo apt-get install ufw
    sudo ufw allow 22
  3. Ajoutez vos règles ufw et activez l'ufw

    sudo ufw enable

    • Votre image Docker doit être lancée avec --cap-add=NET_ADMIN

Pour activer l'option Docker "NET_ADMIN" :

1.Stop Container :

docker stop yourcontainer ; 2. obtenir l'identifiant du conteneur :

docker inspecter votre conteneur ; Modifier hostconfig.json (chemin par défaut de docker : /var/lib/docker, vous pouvez changer le vôtre)

vim /var/lib/docker/containers/containerid/hostconfig.json

Recherchez "CapAdd", et modifiez null en ["NET_ADMIN"] ;

...., "VolumesFrom":null, "CapAdd" :["NET_ADMIN"], "CapDrop":null,.... 5. redémarrer docker sur la machine hôte ;

service docker restart ; 6. démarrez votre console ;

docker start yourcontainer ;

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X