こんにちは、Webプログラマの篠田です。
10月はALAKIの新しい期が始まる月でもあります。
今期で、第8期目に突入してますますの発展に貢献していこうと心のなかで思ってます。
今回は、「CLOUD FLARE」にまつわる注意点をご紹介します。
IP制限とCLOUD FLAREの関係
「CLOUD FLARE」は、CDN(Content Delivery Network)の性質上、ユーザーは「CLOUD FLARE」上にあるキャッシュファイルを、ブラウザにダウンロードして表示されます。
そして、サーバーの最新情報を取得しに来るのは、ユーザーではなく「CLOUD FLARE」が最新の情報を取得するという仕組みです。
そのため、サーバーにアクセスするのが「CLOUD FLARE」となり、アクセスログに残るIPアドレスはすべて「CLOUD FLARE」になるという現象が発生します。
サーバー側のWAFに引っかかる
「CLOUD FLARE」は、CDN以外にも「WAF(Web Application Firewall)」の機能を備えています。
これは、Webサービスの脆弱性を悪用した攻撃からWebサービスを保護するセキュリティ機能です。
また、「WAF」はレンタルサーバー側でも用意されているものも多く、セキュリティを上げています。
ですが、この「サーバー側のWAF」が「CLOUD FLARE」を外部からの攻撃という認識をしてしまい、「CLOUD FLARE」を導入することでアクセスができなくなるという問題を発生する場合があります。
対処法
この場合は、サーバー側で用意されている「WAF」設定を調整して「CLOUD FLARE」からのアクセスを許可するという対応が必要となります。
初期の頃は、この当たりでよく詰まっていました。
IP制限で引っかかる
まれにサイトの管理画面など、限定的なページへのアクセスを制限するという処置を行う場合があります。
例えば、オフィスからのアクセスでしか表示されないページなどは、その最たるものだと思います。
この部分においても「CLOUD FLARE」が影響を及ぼします。
先程から出てきていますが、「CLOUD FLARE」経由のIPアドレスは実際のIPアドレスと異なるという現象が発生します。
そのため、IP制限をかけている場合は、実際と異なるIPアドレスでWebサイトをみようとしているとサーバーが誤解をして、アクセスできなくなります。
※あくまでもWebサービス単位での問題であり、SSH等によるアクセスには影響はありません。
対処法
こういった場合は下記のようにIP制限を.htaccessで行っているのではないでしょうか。
【IP制限の記述】
1 2 3 |
order allow,deny allow from all deny from 192.168.0.1 |
「CLOUD FLARE」を利用する場合は下記のように書き換えます。
【CLOUD FLAREを利用しているときのIP制限の記述】
1 2 3 4 |
SetEnvIf X-Forwarded-For "192.168.0.1" allowed_IP order deny,allow deny from all Allow from env=allowed_IP |
実は、「CLOUD FLARE」は完全にアクセス元のIPアドレスを隠蔽しているわけではなく、HTTPヘッダの「X-Forwarded-For」にIPアドレスを含む形で、サーバーにアクセスをします。
その特性を利用して、「SetEnvIf」ディレクティブ(命令)で「X-Forwarded-For」に書かれている内容が「”192.168.0.1″」と一致したら「allowed_IP」という環境変数に代入します
そして取得した環境変数を「env=allowed_IP」として利用して、取得できたIPアドレスを許可するという仕組みです。
これで、「CLOUD FLARE」からのアクセスであっても特定のIPアドレス制限したアクセスが実現できます。
まとめ
「CLOUD FLARE」は非常に便利なサービスですが、思わぬところで足をすくわれかねない要素を持っています。
その点を理解しつつ、トラブルが発生した時は「CLOUD FLARE」特有の動作を中心に調べると原因究明の近道になるかもしれません。