この記事では、Dockerのjwilder/nginx-proxyを利用したアクセス制限のメモです。
ちなみに、公式にも記載されている情報です
Basic認証
- nginx-proxyのフォルダ内に.htpasswdのフォルダ作成
- .htpasswdフォルダ下にhtpasswd形式のドメイン名ファイルを作成
- docker-compose.ymlに.hpasswdをvolume設定
.htpasswd
.htpasswdフォルダ内にBasic認証したい独自ドメイン名でhtpasswd形式のファイルを作成
htpasswd -c パスワードファイル名 ユーザー名
$ pwd
nginx-proxy
$ mkdir .htpasswd; cd $_
$ htpasswd -c hoge.example.com foo
docker-compose.yml
nginx-proxyのコンテナにvolumes設定 (.htpasswd)
下記は一部のみ抜粋
version: "2"
services:
proxy:
image: jwilder/nginx-proxy
container_name: proxy
volumes:
- ./htpasswd:/etc/nginx/htpasswd
これで、hoge.example.comへ接続した際に、Basic認証となり、ユーザー名(foo)と設定したパスワードにより接続が可能となる
IPによるアクセス制限
docker-compose.yml
nginx-proxyのコンテナにIP制限ファイル設定 (network_internal.com)
下記は一部のみ抜粋
version: "2"
services:
proxy:
image: jwilder/nginx-proxy
container_name: proxy
volumes:
- ./network_internal.conf:/etc/nginx/network_internal.conf
network_internal.conf
IPを許可したいネットワークを明記し、ファイルを作成
allow 127.0.0.0/8;
allow 192.168.0.0/16;
allow 172.16.0.0/12;
deny all;
Docker コンテナ名に適用
nginx-proxyのアクセス制限を適用するには、nginx-proxyとネットワーク共有している事が前提となります
IPアクセス制限をしたいコンテナ名のenvironmentへ記述
一部のみ抜粋
services:
app:
environment:
- NETWORK_ACCESS=internal
appのコンテナへアクセスする際に、network_internal.confで設定したアクセス制限が適用となる。
自宅や職場など特定の場所からしか接続しない場合は、IP制限し、外出先など不特定の場所から接続する場合は、Basic認証で、かなり安全になるかと思いますが、両方適用すると、よりセキュリティが高まりますね。
ちなみに、前記のRSS-Bridgeなど踏み台にされそうなサーバーではIP制限を有効にしています