Docker:iptablesを使用したインバウンドおよびアウトバウンドトラフィックの制限

Docker:iptablesを使用したインバウンドおよびアウトバウンドトラフィックの制限

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

おすすめ記事