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 ...