LoginSignup
2
2

More than 5 years have passed since last update.

dotCloud で IP制限する

Posted at

dotCloud の sandbox 環境は無料(いつの間にかアプリ数の制限もなくなってる)なので、ちょっとした社内ツールを動かす場所にも使えそうですね。

dotCloud では、アプリのディレクトリに *nginx.conf というファイルを置けばそれを server セクションで読み込んでくれます。

ただ、罠として、 nginx にはリバースプロクシされたリクエストが来るので X-Forwarded-For ヘッダを見るようにしないといけないのと、しかも IPv6 になってくるので 1.2.3.128/25 じゃなくて ::ffff:1.2.3.128/121 って書かないといけません。

ipaddr-nginx.conf
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;

allow 1.2.3.128/25;
allow ::ffff:1.2.3.128/121;
deny all;

ただし、リバースプロクシのIPアドレスが不明なので、 set_real_ip_from の範囲を広く設定してしまっています。
dotCloud のネットワーク構成を理解していないのですが、もし同じローカルネット内に他人の dotCloud 環境があれば、 X-Forwarded-For を使ってアクセスできてしまいそうです。
あくまでもカジュアルな対策にとどめておいて、ちゃんとした認証も組み合わせて使ってください。

IPアドレスリストが長い時にこの設定ファイルを生成するスクリプトを書きました. python3 make_ipaddr_conf.py < iplist.txt > ipaddr-nginx.conf みたいにして使ってください。

make_ipaddr_conf.py
import sys

print("set_real_ip_from 10.0.0.0/8;")
print("real_ip_header X-Forwarded-For;")

for L in sys.stdin:
    L = L.strip()
    if not L or L[0] == '#':
        continue
    print("allow", L + ';')
    if '/' in L:
        v4, subnet = L.split('/')
    else:
        v4, subnet = L, None
    if subnet is not None:
        print("allow ::ffff:%s/%d;" % (v4, int(subnet) + 96))
    else:
        print("allow ::ffff:%s;" % (v4,))
    print()

print("deny all;")
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2