web-dev-qa-db-ja.com

UFWがdockerインスタンスへの接続をブロックしていない

次のコマンドを使用して実行されたdockerインスタンス内でWebサービスが実行されています。

Sudo docker run -d -p 4040:4040 ....

私のUFWルールは次のようになります。

~ Sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
4040                       DENY        Anywhere
22                         ALLOW       Anywhere (v6)
4040                       DENY        Anywhere (v6)

IP経由で直接ボックスにアクセスすると、ポート4040にアクセスできます。なぜufwルールがブロックしないのですか?

注:Dockerインストールの一環として、私は変更しました

DEFAULT_FORWARD_POLICY = "DROP"からDEFAULT_FORWARD_POLICY = "ACCEPT"

ここのドッカーの指示に従って/ etc/default/ufwにあります( http://docs.docker.io/en/latest/installation/ubuntulinux/#docker-and-ufw

5
mrwooster

同じ問題があり、代わりにIPTABLESを使用して解決しました。

ソースIP xxx.xxx.xxx.xxxからのみ3306を許可する例:

FORWARDチェーンの1行目にIPに一致するソースの受け入れを追加します

iptables -I FORWARD 1 -p tcp -i eth0 -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT

そのポートのFORWARDチェーン上の他のすべての接続をドロップします

iptables -I FORWARD 2 -p tcp -i eth0 --dport 3306 -j DROP

行番号(1および2)を使用すると、次のような規則がdockerによって作成された規則の上に追加されます。

-A FORWARD -d 0.0.0.0/32! -i docker0 -o docker0 -p tcp -m tcp --dport 3306 -j ACCEPT

3
andyg5000

これに関連する既知の問題があります。基本的に、DockerはUFWの背後でIptablesを構成しています。

詳しくは:

考えられる短い応答:

Set DEFAULT_FORWARD_POLICY="ACCEPT" in /etc/default/ufw
Set DOCKER_OPTS="--iptables=false" in /etc/default/docker
2
angelcervera

特定のIPでコンテナを実行してみてください。

docker run -d -p 127.0.0.1:4040:4040 ...
0
Anonymous