Dockerを使用してLinuxサーバー上で実行される多くのアプリケーションがあります。
たとえば、私のアプリケーションが次から実行されているとします。サーバーAコンテナ(Docker)で。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df68695a00f1 app/myapp:latest "/run.sh" 2 weeks ago Up 2 days 0.0.0.0:50423->3000/tcp reallymyapp
アプリケーションは、ホストシステムのポート50423(コンテナのポート3000にマップされている)でリッスンしています。
アプリケーションにアクセスするために使用されるエンドポイント(DNS)は、HAProxyホストを指します(例:サーバーB)、トラフィックを次にルーティングサーバーA:50423。
これまですべてがうまくいっています。
私たちの組織のセキュリティチームは、すべての外部ソースIPを持つDockerホスト(例:サーバーA)彼らは特定のIPだけを許可するようにトラフィックを制限したい(サーバーBこれはロードバランサー)コンテナにアクセスし、その逆も同様です(サーバーA到着サーバーB)。その後、ユーザーのコンピュータから次の接続を許可します。サーバーB/ロードバランサー専用です。
今私はDockerに従っています。文書そして、iptablesを使ってDOCKER-USERチェーンに次のルールを挿入してみてください。
iptables -I DOCKER-USER -i ekf192 -s 10.1.2.10, 10.1.2.11, 10.1.2.12 -j ACCEPT
iptables -I DOCKER-USER -i ekf192 -j DROP
ACCEPT all -- 10.1.2.10 anywhere
ACCEPT all -- 10.1.2.11 anywhere
ACCEPT all -- 10.1.2.12 anywhere
LOG all -- anywhere anywhere LOG level info prefix "IPTables Dropped: "
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
これらのホスト(10.1.2.10、10.1.2.11、10.1.2.12)からの着信および発信トラフィックが必要です。
iptablesの私の(制限された)理解によると、これらの規則は、言及されたIPアドレスから発生しない限り、すべての着信要求を削除する必要があり、その逆も同様です。つまり、言及されたIPへのトラフィックを許可する必要があります。
着信トラフィックは期待どおりに機能しますが、これらのホストへのトラフィックは減少しています。
私はこれについて頭を傷つけ、何が間違っているのかわかりません。言うまでもなく、iptablesルールがどのように機能するのかわかりません。
Jan 12 16:24:43 sms100394 kernel: IPTables Dropped: IN=docker0 OUT=ekf192 MAC=02:42:09:37:a0:14:02:42:ac:11:00:02:08:00 SRC=172.17.0.2 DST=10.1.2.10 LEN=40 TOS=0x00 PREC=0x00 TTL=63 ID=40235 DF PROTO=TCP SPT=3000 DPT=42579 WINDOW=242 RES=0x00 ACK FIN URGP=0
Jan 12 16:24:44 sms100394 kernel: IPTables Dropped: IN=docker0 OUT=ekf192 MAC=02:42:09:37:a0:14:02:42:ac:11:00:02:08:00 SRC=172.17.0.2 DST=10.1.2.11 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=3000 DPT=45182 WINDOW=29200 RES=0x00 ACK SYN URGP=0
Jan 12 16:24:45 sms100394 kernel: IPTables Dropped: IN=docker0 OUT=ekf192 MAC=02:42:09:37:a0:14:02:42:ac:11:00:02:08:00 SRC=172.17.0.2 DST=10.1.2.12 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=3000 DPT=45182 WINDOW=29200 RES=0x00 ACK SYN URGP=0
ベストアンサー1
デフォルトでは、iptablesは「ストリーム」を理解せず、個々のパケットのみを理解します。したがって、発信パケットの場合は別のルールを追加する必要があります。例:
iptables -I DOCKER-USER -i ekf192 -d 10.1.2.10, 10.1.2.11, 10.1.2.12