LoginSignup
23
20

More than 5 years have passed since last update.

ELBを使ってnginxでアクセス制限をしたいときに気をつけること

Posted at

ずいぶん長ったらしいかつ、いまさら感があるがメモとして書く。
別にELBじゃなくてLB全般な気もするけど。

環境

$ nginx -v
nginx version: nginx/1.4.6 (Ubuntu)
  • ELBの下に1台のEC2インスタンスがある。
  • ELBにexample.comをcnameで設定した。(実際には無理だけど)

やりたいこと

  • 大したサービスでもないので、webhookを受けたらgit pullさせたい。
  • webhookを受けてgit pullするものはnode.jsで書いた。http://localhost:9000で待ち受けている。
  • nginxで、
        location /webhook {
                proxy_pass http://localhost:9000;
                allow 192.30.252.0/22;
                deny all;
        }

  はもう書いた。
  192.30.252.0/22はgithub.comがwebhookをするために使うアドレス帯。
  余談:https://twitter.com/morikuma_works/status/486754412241903616 (192.で始まっているからか「security group設定しますが、それはプライベートIPでは?」って言われた)

どうなったか

2014/07/10 06:36:24 [error] 1948#0: *3458 access forbidden by rule, client: 172.30.x.x, server: localhost, request: "GET /webhook HTTP/1.1", host: "example.com"
2014/07/10 06:36:31 [error] 1948#0: *3458 access forbidden by rule, client: 172.30.x.x, server: localhost, request: "POST /webhook HTTP/1.1", host: "example.com"

まあそりゃそうっすよね
何故かと言うと、、ELBからのアクセス172.30.x.xになっているから、allowに引っかからないんですね。
ついでに、access.logも全てELBのプライベートIPになっていて使えたもんじゃない。

解決法

ngx_http_realip_moduleset_real_ip_fromreal_ip_headerを使う
http://nginx.org/en/docs/http/ngx_http_realip_module.html

        #ELB
        set_real_ip_from 172.16.0.0/12;
        real_ip_header  X-Forwarded-For;

X-Forwarded-For: clientIPAddressのように、
X-Forwarded-ForヘッダにクライアントのIPアドレスがあるらしい。
http://docs.aws.amazon.com/ja_jp/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html

172.16.0.0/12で良いのかはちょっと不安だが、今のところ一件落着。

23
20
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
23
20