YOKOHEI.COM

YOKOHEI.COM

›Docker

Docker

  • Container Networking Model
  • Network drivers
  • Docker and iptables
  • Container DNS
  • Container communication
  • Hands On

ECS

  • 01 Network Mode

Docker Network - Docker and iptables

iptables

Netfilter というパケット処理のフレームワークが Linux Kernel に組み込まれており、それを操作するツールが iptables である。
iptables では、フィルタリングする対象を選ぶ「テーブル」と、各テーブルにおいて、どのタイミングで処理するかを示す「チェイン」で構成されている。

テーブル

iptables には5つのテーブルがある。

  1. raw は接続追跡の対象から外れるようパケットを設定するのに使われる
  2. filter はデフォルトのテーブルで、主としてファイアウォールが備えるべきアクションは全てここで行われる
  3. nat はネットワークアドレス変換に使われる (例: ポートフォワーディング)
  4. mangle は特別なパケット変換に使われる
  5. security は強制アクセス制御のネットワークルールに使われる

チェイン

各テーブルにおいて、どのタイミングで処理を行うかを指定するもの。
インターフェースで受け取られたネットワークパケットは、以下のフローチャートで示された順番でチェインを通過していく。


(from https://www.frozentux.net/ )

上にもある通りだが、 filter テーブルには INPUT, OUTPUT, FORWARD の 3 つの組み込みチェインがあり、 nat テーブルには PREROUTING, POSTROUTING, OUTPUT チェインがある。

iptables | archlinux
https://wiki.archlinux.jp/index.php/Iptables

Docker の iptables 設定 | tiqwablog
https://blog.tiqwab.com/2018/02/12/learniing-iptables.html

Docker のルールより先に iptables ポリシーを追加する

Docker のすべての iptables ルールは、 DOCKER chain に追加される。このテーブルは手動で変更してはならない。
もし Docker のルールがロードされる前に追加する必要がある場合は、 DOCKER-USER chain に追加する。ここに追加されたルールは、 Docker が自動生成するどんなルールよりも先にロードされる。

Docker Daemon に対してコネクションを制限する

デフォルトでは、すべての外部の IP から Docker コンテナに接続できるような設定になっている。特定の IP からのみ受け入れるような設定にするには、 DOCKER filter chain の先頭に拒否ルールを追加する必要がある。
例えば、 192.168.1.1 を除く全ての IP からの受け入れを制限するようなルールを追加する場合は以下の通りとなる。

$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP

また、サブネット単位での制限も可能。

$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.0/24 -j DROP

特定の IP レンジでの制限も可能。

$ iptables -I DOCKER-USER -m iprange -i ext_if ! --src-range 192.168.1.1-192.168.1.3 -j DROP

-s または --src-range と -d または --dst-range を組み合わせて設定することも可能。

手動で iptables が書き換えられることを防ぐ

手動変更を防ぐために、 /etc/docker/daemon.json にて iptables キーが false にセットされている。

← Network driversContainer DNS →
▼ Codes ▼
LeetCodeGitHub
▼ Profile ▼
LinkedInFlickr
▼ Logo made with DesignEvo ▼
DesignEvo
Copyright © 2020 Kohei Yoshida