nginx-proxyのアクセス制限

nginx-proxy can basic authorication and access limit

* 本ページはプロモーションが含まれています

この記事では、Dockerのjwilder/nginx-proxyを利用したアクセス制限のメモです。
ちなみに、公式にも記載されている情報です

Basic認証 

  1. nginx-proxyのフォルダ内に.htpasswdのフォルダ作成
  2. .htpasswdフォルダ下にhtpasswd形式のドメイン名ファイルを作成
  3. 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制限を有効にしています


See also