dockerコンテナでIP制限するやり方

概要

あるサーバー上で動いているdockerコンテナに対して、任意のマシンからのみアクセスさせる方法について
(centos7を想定しています)

具体的に箇条書きにすると・・・

  • Aがクライアント側とする
  • Bがサーバー側で内部にdockerコンテナ(C)を起動しているとする
  • AからB上のCにアクセスを許可する設定について
    • 但し、A以外からは受け付けたくない

  • AのIPを192.168.0.100とする
  • Bで受け付けるポート番号を30000とする
  • Cでローカルから受け付けるポート番号を5000とする
$ docker run -d -p 192.168.0.100:30000:5000 (起動したいイメージ名)

より複雑なやり方

  • CのIPを172.17.1.10とする
  • CのIPが変わらないようにdocker network createで任意のネットワークを作り、docker runで指定しておく
$ docker network create --subnet=172.17.1.0/24 mynetwork
$ docker run -d --net mynetwork --ip 172.17.1.10 (コンテナイメージ名)

ファイヤーウォールの設定

$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.100" forward-port port="30000" protocol="tcp" to-port="5000" to-addr="172.17.1.10"'
$ sudo firewall-cmd --reload

こちらのやり方なら対象が増えた時にコンテナを起動し直す必要がない(はず)。