web-dev-qa-db-ja.com

iptablesを使用してDockerコンテナで実行されているPostgresポート5432をブロックします

Ubuntu 14.04デスクトップ(正確にはXubuntu)を使用しており、ローカルで実行されているPostgresポート5432への外部アクセスをiptablesでブロックしようとしています。これは私の iptables -S

-A INPUT -i lo -p tcp -m tcp --dport 5432 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5432 -j DROP

そしてiptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:postgresql
DROP       tcp  --  anywhere             anywhere             tcp dpt:postgresql

しかし、どういうわけか、同じWi-Fiに接続されているAndroidのネットワークスキャナーアプリは、それを表示できます。 AndroidのPSQLユーティリティでさらにテストすることができ、実際にすべてのテーブルを見ることができます。何が足りないのですか?

編集:これはDockerコンテナで実行されているPostgresであることに言及する価値があるかもしれません。これはそれと関係があるかもしれません。

1

もっと掘りました。これは、iptablesFORWARDチェーンを変更するDockerの動作のように見えます。

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

Chain DOCKER (2 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:postgresql

このウェブサイト 問題の概要を説明します。

Dockerがコンテナーへのすべてのアクセスを転送しないようにするには、コンテナーの実行時に127.0.0.1を指定します。

docker run -p 127.0.0.1:5432:5432 postgres

1