麻姑掻痒 〜まこそうよう〜

かゆいところに手が届く、もうちょっとその先が知りたいに応えたい

結局のところ、CloudFront – ALB – EC2(Nginx) の際に真のクライアントのIPを拾いたい場合の書き方ってこれでいいのではないですか?

time 2021/02/23

結局のところ、CloudFront – ALB – EC2(Nginx) の際に真のクライアントのIPを拾いたい場合の書き方ってこれでいいのではないですか?

超久しぶりの投稿になりました。

なかなかここで記事にするようなニッチなネタがないのですが、ネットの情報を元にあれこれやってみた結果、最終的にそれらに従わず、「これでいいんじゃね?」という設定に辿りついたので、自分の備忘のために書きました。

今回は、nginx です。

掲題の通り、AWS の CloudFront – ALB – EC2 で nginx を使う構成です。
この手の構成の場合、まあ、普通に X-Forwarded-For ヘッダから真のクライアントIPを拾うことになるわけですが、いくつかのサイトを確認したところ、どれも、以下のような書き方が提示されてました。

各パラメータの説明は他のサイトの方や、nginxのドキュメントにお任せしますが、ここで問題になったのは、set_real_ip_from です。

「信頼できるIP」という表現になっているサイトが多かったですが、要するに、ALB と CloudFront のIPを書けってことらしいです。
そうすると、それらを除いて、X-Forwarded-For で渡してくれるので、最終的にそれらに沿わないIP、つまり、一番最初のIP、真のクライアントのIPが残ってくれて、それが $remote_addr に入ってくれる、と。

しかし、CloudFront は、定期的にIPが変わるはず(実際は言うほど変わらないと個人的には思ってますが)。
それを、定期的に確認して書き換えるというのはなぁ、と考えた管理人は、プログラムを書いて自動的に CloudFront の IP を確認して…というのもまた面倒だなぁと考えていたのですが、各サイトの情報をずっと眺めていた際に、ふと以下の思いに駆られました。

「これ、全部、信頼できるIPにしてしまえばいいんじゃね?」

つまり以下のように書いてしまうということです。

やってみました。

すると、どうでしょう。
見事に、期待した通り、$remote_addr に、一番最初のクライアントのIP、つまり、欲しかった真のクライアントIPが入るようになりました。

$http_x_forwarded_for には、CloudFront のIPと思しきものも入ってますが、とにかく、$remote_addr は欲しいIPが入るようになりました。

とりあえず、今のところこの方法で問題なさそうです。
誰か思いつきそうな気がするのですが、これダメなんですかね?

運用して、問題があるようなら、またここで書きます。

sponsored link

コメント

  • はじめまして、X-Fowarded-Forについて調べており当エントリを拝見させていただきました。

    もし間違っていたら申し訳ないのですが、これだとアクセス元のユーザーがX-Fowarded-forヘッダーに不正な情報を入力していた場合 remote_addrがその不正な情報へと書き換わり IPを偽装することができてしまいます。
    ですので、接続元のIPによって挙動が変わるような処理を実装していた場合、もしくは将来実装する場合は気をつけなければなりません。
    そういったケースではないのであれば簡潔なやり方だとは思います。

    by 2357gi €2022年4月18日 6:04 PM

down

コメントする






sponsored link