特定の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