質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

20666閲覧

CentOS7のfirewalldで設定しても、dockerで開いた無許可のポートに外部からアクセスできてしまう。

kotatsu_hal

総合スコア34

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

2クリップ

投稿2017/01/04 05:07

編集2017/01/04 05:11

CentOSサーバ上でnginxを80443ポートで受け付けています。
それとは別に同サーバ上でdockerコンテナを1234ポート(仮)で建てたのですが、このポートはホストOS→コンテナアクセス専用なため、外部に公開したくありません。
ところが、特に許可していないはずの1234ポートに外部回線のブラウザから普通にアクセスできてしまいました・・。

・nginx 80ポート → 許可
・nginx 443ポート → 許可
・docker 1234ポート → 拒否(したいができない・・)

firewalldの設定は以下の様になっており、 services: dhcpv6-client http https sshとなっているため1234ポートなんて適当なポートにアクセスできるワケないのですが、ブラウザからアクセスすると、レスポンスが帰ってきてしまいます。。
firewalld再起動、OS再起動も行いましたが、変わらずです。

[root@server]# firewall-cmd --reload success [root@server]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http https ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: [root@server]# docker run -d -p 1234:80 nginx de61adf27ac5d918277543874c3928345f17a23078e7d85eb658e3fe24d1575a

イメージ説明

dockerで開いたポートは、firewalldの設定は反映されないということなのでしょうか??

動作確認しているOSは、さくらのクラウドの CentOS Linux release 7.3.1611 (Core)です。
よろしくお願いいたします。

一応、firewall-cmd --list-all-zone の結果を以下に記載します。

[root@server]# firewall-cmd --list-all-zone work target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: drop target: DROP icmp-block-inversion: no interfaces: sources: services: ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: internal target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client http https mdns samba-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: external target: default icmp-block-inversion: no interfaces: sources: services: ssh ports: protocols: masquerade: yes forward-ports: sourceports: icmp-blocks: rich rules: trusted target: ACCEPT icmp-block-inversion: no interfaces: sources: services: ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: home target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: dmz target: default icmp-block-inversion: no interfaces: sources: services: ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http https ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: block target: %%REJECT%% icmp-block-inversion: no interfaces: sources: services: ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules:

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

docker が firewalld を介さずに、直接 iptables で 1234 番ポートを開けているのだと思います。
iptables -nvL -t nat の PREROUTING チェインをたどっていくと、1234 番ポートを DNAT しているルールがあると思います。
また、iptables -nvL の FORWARD チェインをたどっていくと、で外部→dockerコンテナへの接続が許可されていると思います。

投稿2017/01/04 06:34

編集2017/01/04 06:36
TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kotatsu_hal

2017/01/05 04:32

ありがとうございました! `-p 1234` でポートを完全公開するのではなく、`--expose 1234` で内側に開けておいて、外からはnginxで受けてプロクシするようにしました。 これ知らないままだったら、危ないところでした。 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問