2016-12-12 15 views
4

Dockerでサーバー上で実行するサービスの一部は、プライベートIPアドレス(10.0.0.0/8、192.0.0.0/16、172.16.0.0/12 、100.64.0.0/10)。DockerコンテナからのプライベートIPへの外部への接続をブロックする

この動作は正常ですが、当社のサーバープロバイダはこのトラフィックを検出し、アラートを送信します。

iptablesでの着信ではなく、発信トラフィックのみを停止したいと考えています。

これが私たちの現在の設定です:サービスについては

Chain FORWARD (policy ACCEPT) 
target  prot opt source    destination 
DOCKER-ISOLATION all -- anywhere    anywhere 
DOCKER  all -- anywhere    anywhere 

Chain DOCKER (1 references) 
target  prot opt source    destination 
ACCEPT  tcp -- anywhere    172.17.0.2   tcp dpt:1234 
ACCEPT  tcp -- anywhere    172.17.0.4   tcp dpt:1234 

ドッカーは、次のルールを作成するため

-A OUTPUT -d 192.168.0.0/16 -m owner --uid-owner `id -u dockeruser` -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -d 100.64.0.0/10 -m owner --uid-owner `id -u dockeruser` -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -d 172.16.0.0/12 -m owner --uid-owner `id -u dockeruser` -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -d 10.0.0.0/8 -m owner --uid-owner `id -u dockeruser` -j REJECT --reject-with icmp-port-unreachable 

しかし、これは動作していないよう最後に:

Chain DOCKER-ISOLATION (1 references) 
target  prot opt source    destination 
RETURN  all -- anywhere    anywhere 

フィードバックに感謝します。

+0

私はiptablesのエキスパートではありませんが、起動時に '--iptables = false'をフラグとしてデーモンに渡すことで、iptablesを変更することを止めることができます。 – johnharris85

+0

アドバイスをいただきありがとうございますが、Dockerに独自のファイアウォールルールを追加していただきたいです。 –

+0

atm afaikのすべてかどうか。 – johnharris85

答えて

3

ルールを間違って追加しています。ドッカーコンテナから発信されたトラフィックは、チェーンではなく、テーブルのFORWARDチェーンを通過します。これは、ホストコンピュータの観点から、トラフィックがdocker0インターフェイスから着信し、ホストコンピュータが単なるフォワーダとして機能しているためです。

インバウンドトラフィックとアウトバウンドトラフィックを区別するために、インターフェイスを指定するには、-iおよび-oオプションを使用してください。また、トラフィックがドッカーコンテナから来ているかどうかを判断するために、uidを使用することもできません(データがローカルに生成されていないため)。着信インターフェイスを確認するだけで十分です。

ので、(FORWARDチェーンから呼ばれている)DOCKER-ISOLATIONチェーンに次のルールを追加します。

-A DOCKER-ISOLATION -d 192.168.0.0/16 -i docker0 ! -o docker0 -j REJECT --reject-with icmp-port-unreachable 
-A DOCKER-ISOLATION -d 100.64.0.0/10 -i docker0 ! -o docker0 -j REJECT --reject-with icmp-port-unreachable 
-A DOCKER-ISOLATION -d 172.16.0.0/12 -i docker0 ! -o docker0 -j REJECT --reject-with icmp-port-unreachable 
-A DOCKER-ISOLATION -d 10.0.0.0/8 -i docker0 ! -o docker0 -j REJECT --reject-with icmp-port-unreachable 

は、ドッキングウィンドウによって作成された仮想インタフェースの名前でdocker0を交換してください。

(注:チェーンDOCKER-ISOLATIONが存在しない場合は、FORWARDチェーンに直接添付してください)。

また、アドレスがどのように変換されているかをよりよく理解するために、出力はiptables -vLiptables -t nat -vLです。

+0

'-I FORWARD 1'の最初の位置に' FORWARD'チェーンにルールを挿入するまで、元の答えは機能しませんでした。私はあなたの答えを編集しましたが、ルールに反する場合は、それを自分で更新して他の人にも利益をもたらすことができます。 –

+0

これらのルールを 'FORWARD'チェーンの先頭に挿入するのは良い考えではありません。なぜなら、これらのIPアドレス範囲からの着信トラフィックを許可したいからです。 'FORWARD'チェーンの最後に追加するか、' DOCKER-ISOLATION'という名前のチェーンがあればそれを追加してください。 – Tanmay

+0

'DOCKER'チェーンは発信トラフィック(docker0から物理インターフェイス)にのみ使用されるため、元の応答は機能しませんでした。私は答えを編集しました。 – Tanmay

関連する問題