dockerを使用するときにiptablesで特定のIPのポートを開く方法は?

dockerを使用するときにiptablesで特定のIPのポートを開く方法は?

すべてのユーザーが公開されているデータベースポートを表示できるため、ホストネットワークに公開したくないpostgreSQLデータベースが内部にあります。Docker(現在私はpfsenseまたはそれに似たものはありません)。

全体的な構成iptablesは次のとおりです。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy DROP)
target     prot opt source               destination
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
Chain DOCKER (2 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.2           tcp dpt:15672
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.18          tcp dpt:8081
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.19          tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.19          tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.8           tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.13          tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.11          tcp dpt:5432
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0
DROP       all  --  0.0.0.0/0            0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
Chain DOCKER-USER (1 references)
target     prot opt source               destination  

私がしたことは、docker内のデータベースを同じポートのホストに公開することです。

0.0.0.0:5432:5432

iptablesすべての接続を削除し、IPアドレス111.111.111.111と222.222.222.222のみを追加しましたACCEPT。以下のリンクはこれについて説明します。

だから、次のコマンドを発行しました。

iptables -I DOCKER-USER -s 111.111.111.111 -p tcp --dport 5432 -j ACCEPT
iptables -I DOCKER-USER -s 222.222.222.222 -p tcp --dport 5432 -j ACCEPT
iptables -I DOCKER-USER -p tcp --dport PORT_X -j REJECT --reject-with icmp-port-unreachable

上記の設定では、222.222.222.2225432ポートからリモートでログインすることはできません。

ドッカーチェーンにルールを追加しました。

なぜこれが起こるのか理解できず、最初と2番目のIPアドレスからポートにTelnetを接続できません。私の設定に問題がありますか?

答え1

IPアドレスをホワイトリストに追加するのはそれほど安全ではありません。 IPスプーフィングを使用すると、簡単にバイパスできます。

IPTableを手動で構成することは過度のエンジニアリングの問題であるため、不要です。

IPソケットの代わりにUnixソケットを使用するようにコンテナを設定します。これにより、権限をより効果的に制御できます。その後、sshセキュリティトンネルを使用してポートをローカルコンピュータ(別のUnixソケットまたはIPソケット)に転送できます。

関連情報