J'ai un service Web qui s'exécute dans une instance de docker à l'aide de la commande suivante:
Sudo docker run -d -p 4040:4040 ....
Mes règles UFW ressemblent à ceci:
~ Sudo ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
4040 DENY Anywhere
22 ALLOW Anywhere (v6)
4040 DENY Anywhere (v6)
Lorsque j'accède à la boîte directement via son IP, je peux accéder au port 4040. Pourquoi la règle ufw ne la bloque-t-elle pas?
Remarque: dans le cadre de l'installation du menu fixe, j'ai changé
DEFAULT_FORWARD_POLICY = "DROP" à DEFAULT_FORWARD_POLICY = "ACCEPT"
dans/etc/default/ufw selon les instructions des dockers ici ( http://docs.docker.io/en/latest/installation/ubuntulinux/#docker-and-ufw )
J'ai eu le même problème et l'ai résolu en utilisant IPTABLES à la place.
Exemple pour autoriser uniquement 3306 à partir de l'IP source xxx.xxx.xxx.xxx:
Ajoute un accept pour la source correspondant à notre ip à la ligne 1 de la chaîne FORWARD
iptables -I FORWARD 1 -p tcp -i eth0 -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT
Supprime toutes les autres connexions sur la chaîne FORWARD pour ce port
iptables -I FORWARD 2 -p tcp -i eth0 --dport 3306 -j DROP
L'utilisation des numéros de ligne (1 et 2) force l'ajout de règles au-dessus de celles créées par docker, telles que:
-A FORWARD -d 0.0.0.0/32! -i docker0 -o docker0 -p tcp -m tcp --dport 3306 -j ACCEPTER
Il y a un problème connu lié à cela. Fondamentalement, docker configure Iptables derrière UFW.
Plus d'information:
La courte réponse possible:
Set DEFAULT_FORWARD_POLICY="ACCEPT" in /etc/default/ufw
Set DOCKER_OPTS="--iptables=false" in /etc/default/docker
Essayez d’exécuter le conteneur avec une adresse IP spécifique.
docker run -d -p 127.0.0.1:4040:4040 ...