Dockerポートをブロックし、いくつかのIPアドレスを介してアクセスします。

Dockerポートをブロックし、いくつかのIPアドレスを介してアクセスします。

Ubuntu Server 16.04のポート8090に入ってくるすべてのトラフィックをブロックする必要があります。 iptablesを使用しましたが、動作しません。私が使用したコマンドは次のとおりです。

iptables -A INPUT -p tcp --dport 8090 -j DROP iptables -A INPUT -p tcp --dport 8090 -s <IP> -j ACCEPT

NATには次のものがあります。 Chain DOCKER (2 references) target prot opt source destination DNAT tcp -- anywhere <VM local IP> tcp dpt:8090 to:172.21.0.2:8080

パブリックインターフェイスの命名eth0とDockerインターフェイスの命名docker0

答え1

DNATのせいで今ルーティング。 INPUTチェーンはもはやこのDNATedトラフィックには使用されず、代わりにFORWARDチェーンが通過します。新しい目的は、172.21.0.2:8080これがもはや規則ではなく、今の規則でなければならないということです<VM local IP>:8090

したがって、DNATを使用した後は、次の方法を使用してトラフィックをブロックする必要があります(正しい順序:例外を許可してから他のすべてを許可しない)。

iptables -A FORWARD -s <IP> -d 172.21.0.2 -p tcp --dport 8080 -j ACCEPT
iptables -A FORWARD -d 172.21.0.2 -p tcp --dport 8080 -j DROP

システムルールの前に実際に完了していることを確認するには、次のようにします。

iptables -I FORWARD 1 -s <IP> -d 172.21.0.2 -p tcp --dport 8080 -j ACCEPT
iptables -I FORWARD 2 -d 172.21.0.2 -p tcp --dport 8080 -j DROP

構成によっては、これらのルールは他のコンテナがこのコンテナにアクセスするのを防ぐことができるため、これを調整する必要があるかもしれません(外部入力インタフェース宣言など)。それにもかかわらず、それをシステムのファイアウォールアプローチとうまく統合する方法を見つける必要があります。

答え2

この行について:

iptables -A INPUT -p tcp --dport 8090 -j DROP
iptables -A INPUT -p tcp --dport 8090 -s <IP> -j ACCEPT

順序を変更する必要があります。IPテーブルルールは競合状態で互いに上書きされます。これが正しいアプローチなので、まずこれらのルールを変更して他のすべての役割を確認して上書きを避けてください。

~についてネットワークアドレス変換まだ明確ではない質問の1つは、dockerでコンテナを起動するときにポートを割り当てる必要があることです。

docker run ... -p 8090:8080 ... 

関連情報