CDNETWORKS CDNでhtaccessを使ってIPアドレスによるアクセス制限をしてみた件
はじめに
CDNETWORKSにてCDNを利用しているWEBアプリにて、特定のIPからしかアクセス出来ないようにするために、htaccessにて制限をかけようとしてたのだけど、ハマったので忘備録。
通常のhtaccess制限だと以下のようになるのだがー
order deny,allow
deny from all
allow from 123.xx.xxx.xxx
この場合、制御は、拒否→許可、の順番で、まず全て拒否して、123.xx.xxx.xxxからのアクセスのみ許可されるという流れ。
しかし、これでは上手くいかなかった。
CDN利用上の根本問題
CDNのエッジサーバを経由してサーバ側にアクセスをすると、もちろんの事ながら自身のサーバから見ると、実際にアプリに到達するIPアドレスが、アクセス元のIPアドレスから全部CDNを経由したものに変わってしまう。
しかもそのIPは都度、変わってしまうという。。。
X-Forwarded-Forの活用
これだとIPアドレスによる制限がかけられないのだけど、それを解決する方法としてはX-FORWARDED-FORヘッダを活用しようと思い立つ。
X-Forwarded-For (XFF) とは、HTTPヘッダフィールドの一つ。HTTPプロキシサーバまたは負荷分散装置(ロードバランサ)を経由してウェブサーバに接続するクライアントの送信元IPアドレスを特定する際のデファクトスタンダードである。このヘッダはSquidキャッシング・プロキシサーバの開発者により初めて導入された。のちに、IETFのネットワーク作業部会 (Network Working Group) が同種のHTTPヘッダForwardedを RFC 7239 で提唱している。
それを利用する事で、アクセス元のIPアドレスをロードバランサやプロキシを挟んだとしてもそのままアプリに通知する事が出来るようになるらしい。
CDN側の設定
まずはCDNETWORKSのCDNカスコンにログインして実クライアントIPをX-Forwarded-Forに挿入するように設定変更。
htaccessの配置
実際のコードは以下。
allowipは変数名なのでなんでもよい。
こうやって記述することで、CDN経由上でも指定のIPアドレスのみ許可してやることが出来た。
SetEnvIf X-Forwarded-For 123.456.789.001 allowip1
SetEnvIf X-Forwarded-For 123.456.789.002 allowip2
order deny,allow
deny from all
allow from env=allowip1
allow from env=allowip2
指定のIPアドレスのみ拒否する場合も書き方は同じ。まあ拒否設定はCDN側のHotlink Protection機能でも挙動可能だけど。というかCDN上にキャッシュしてあるコンテンツへのアクセス禁止はCDN側にやらせないと実現できないのでそちらを活用すべし。
SetEnvIf X-Forwarded-For 123.xx.xxx.xxx denyip
order allow,deny
allow from all
deny from env=denyip
でもって出来た.htaccessファイルを制限掛けたいフォルダ直下に配置してやると完成!
IPアドレスの範囲指定をした場合には、CIDR形式でのレンジ表記で書いてやると実現可能なり。
Author And Source
この問題について(CDNETWORKS CDNでhtaccessを使ってIPアドレスによるアクセス制限をしてみた件), 我々は、より多くの情報をここで見つけました https://qiita.com/YOCCHAAAAN/items/134c342e3ff47827f1a2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .