Dockerコンテナにiptablesファイアウォールルールを正しく追加できません。

Dockerコンテナにiptablesファイアウォールルールを正しく追加できません。

特定のIPのみを許可し、他のIPは拒否するDockerコンテナ用のファイアウォールを作成したいと思います。

デフォルト設定は次のとおりです。

$ sudo iptables --list
Chain DOCKER-USER (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Dockerのドキュメントに記載されているように、これはすべての着信IPを受け入れます。だからこれを修正しています。次のコマンドを実行しました。

sudo iptables -D DOCKER-USER -j RETURN
sudo iptables -A DOCKER-USER -s xx.xx.xx.xx,yy.yy.yy.yy -j ACCEPT
sudo iptables -A DOCKER-USER -j DROP

これがうまくいくはずです。予想される結果は、zz.zz.zz.zz IPからサーバーにアクセスしようとすると拒否されますが、xx.xx.xx.xxでは通過することです。

ただし、xx.xx.xx.xx(またはyy.yy.yy.yy)またはzz.zz.zz.zzからアクセスするかどうかに応じて、ページに「接続に失敗しました」というメッセージが表示されるようになりました。だから捨てられたようです。

何が起こっているのか、この問題の原因が何であるかわかりません。ご協力ありがとうございます。

ベストアンサー1

-iしたがって、デフォルトでは、問題は、入力ネットワークインターフェイス名を指定するために(--in-interface)オプションの配信をスキップするためです。

なぜスキップしたのですか?私の考えでは、次の理由によると思います。

  • Dockerの公式ドキュメントには、ファジー値を-i持つオプションが記載されていますext_if。このエラーの最初の理由は、ext_ifインターネット検索などを行った後、これが何を意味するのか理解できません。
  • sudo iptables --list-i(または-o)で指定された値に関する情報を表示しません。だからこのオプションはとにかくそれほど重要ではなく完全に無視してもよいと思います。 (たとえば、-vオプションを使用してオプションを一覧表示できますsudo iptables --list DOCKER-USER -v。)

@ABさんのコメントのおかげで、同じ文書を見直して最初から最後まで試してみて、解決策を見つけました。

だから私が実行して問題を解決した最後のコマンドセットは次のようになります。

$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nameOfContainer # check the docker container's local ip e.g. 172.17.0.3

# assumes the docker container ip is 172.17.0.3, 
# the "internal" docker container port (e.g. "443" for "0.0.0.0:8122->443/tcp") you want to filter is 443, 
# the network interface (you can check with e.g. `ip addr`) is wlp2s0.

sudo iptables -I DOCKER-USER -i wlp2s0 -p tcp -m tcp --dport 443 -d 172.17.0.3 -j DROP
sudo iptables -I DOCKER-USER -i wlp2s0 -p tcp -m tcp --dport 443 -d 172.17.0.3 -s xx.xx.xx.xx -j ACCEPT
sudo iptables -I DOCKER-USER -i wlp2s0 -p tcp -m tcp --dport 443 -d 172.17.0.3 -s yy.yy.yy.0/24 -j ACCEPT

結果のリストは次のとおりです。

$ sudo iptables --list DOCKER-USER -v
[sudo] password for user: 
Chain DOCKER-USER (1 references)
 pkts bytes target     prot opt in     out     source               destination
   10   704 ACCEPT     tcp  --  wlp2s0 any     yy.yy.yy.0.static.xtom.com/24  172.17.0.3           tcp dpt:https
   20  1900 ACCEPT     tcp  --  wlp2s0 any     xx-xx-xx-xx.oo.oo.vectant.ne.jp  172.17.0.3           tcp dpt:https
   30  1760 DROP       tcp  --  wlp2s0 any     anywhere             172.17.0.3           tcp dpt:https
 145K   60M RETURN     all  --  any    any     anywhere             anywhere

おすすめ記事