AIの学習環境としてDockerは一般的なものの一つかと思います。しかし、Dockerは気を付けて使用しないとセキュリティ上の問題を起こしてしまうことがあります。そのうちの一つが通信制限です。
Ubuntuだけの通信制限であれば ufw(Uncomplicated Firewall) などを利用することが可能です。しかしDockerはDOCKER-USERの通信をあらゆるIPアドレスに対して許可するようiptablesにルールを加えてしまうため、コンテナのポート指定を間違えるとセキュリティ上の問題となってしまう可能性が残ります。
Kubernetesなどを利用する方法もありますが、以前iptablesの設定を行って特定のIPアドレス以外の通信を遮断するように変更したため、その内容を記載します。
Dockerのコンテナ間通信以外の通信を遮断
Dockerによって使用されるネットワークのデフォルトは 172.16.0.0/12 となっているため、それ以外の通信を拒否(DROP)するよう設定します。
iptables -A DOCKER-USER ! -s 172.16.0.0/12 -j DROP
iptables -A DOCKER-USER ! -d 172.16.0.0/12 -j DROP
特定のIPアドレスとの通信を許可する
上記の設定ではコンテナ間通信のみが許可された状態なので、やり取りしたいIPアドレスとの通信を以下のように許可します。
今回アドレスは例として 192.0.2.0/24 とします。
iptables -I DOCKER-USER -s 192.0.2.0/24 -j RETURN
iptables -I DOCKER-USER -d 192.0.2.0/24 -j RETURN
結果としてiptablesでは以下のようなルールが設定されます。
Chain DOCKER-USER (1 references)
num target prot opt source destination
1 RETURN all -- anywhere 192.0.2.0/24
2 RETURN all -- 192.0.2.0/24 anywhere
3 DROP all -- !172.16.0.0/12 anywhere
4 DROP all -- anywhere !172.16.0.0/12
ルールは上から適用されるため、 192.0.2.0/24 との通信はin/outともに許可⇒Dockerコンテナ間通信以外は拒否という順番でルールが適用され、特定のIPアドレスとの通信とDockerコンテナ間通信のみが許可されて、それ以外は遮断されている状況となります。
最後に
最後まで読んでいただき、ありがとうございます。私たちのサービスでは、データ分析基盤の構築やDeep Learningモデル開発、MLOps構築、生成AIモデル開発等データに関わるプロジェクトを伴走支援しております。データ分析基盤開発やデータのAI活用経験のある方や、興味のある方は、ぜひご応募ください。あなたのスキルと情熱をお待ちしています。

