元の訪問者IPを復元する
元の訪問者IPを復元する
訪問者のオリジナルIPアドレスを記録するために、オリジンWebサーバーのタイプ(Apache、NGINX、Microsoft IISなど)に基づいてmod_cloudflareを設定する方法を説明します。
本記事の内容
概要
WebサイトトラフィックがCloudflreネットワークを介してルーティングしている時、当社はリバースプロキシとして機能します。これにより、パケットをより効率的にルーティングし、静的リソース(画像、JavaScript、CSSなど)のキャッシングして、Cloudflareはページ読み込み時間をスピードアップさせられます。その結果として、リクエストに応答してそれをログし、オリジナルサーバーが Cloudflare IP アドレスを返します。
例えば、元の訪問者の受信IPアドレスに依存するアプリケーションをインストールする場合、CloudflareのIPアドレスがデフォルトでログに記録されます。元の訪問者のIPアドレスは、 CF-Connecting-IP というHTTPヘッダを付加して表示されます。 Webサーバーの説明書 に従えば、オリジンサーバーで元の訪問者のIPアドレスを記録することができます。リクエストがオリジンサーバーに到達したときにこのHTTPヘッダーが利用できない場合は、Transform RulesとManaged Transforms の設定を確認してください。
次の図は、Cloudflareを利用する場合と利用しない場合のIPアドレス処理の違いを示しています。
mod_remoteip
概要
Cloudflareでは、 mod_cloudflare の更新およびサポートを終了させていただきました。しかし、 Apache Webサーバーを Ubuntu Server 18.04 や Debian 9 Stretchなどのオペレーテングシステムでお使いの場合は、 mod_remoteip を使って、訪問者のオリジナルIPアドレスを記録することは可能です。
このモジュールは外部関係者によって作成されているため、当社はプラグインに関係する問題に対してのテクニカルサポートが提供できません。
Apache Webサーバーで mod_remoteip をインストールするには:
1. mod_remoteip を有効化するために次のコマンドを出します。
sudo a2enmod remoteip
2. _RemoteIPHeader CF-Connecting-IP_を含むサイト設定に更新します。例: /etc/apache2/sites-available/000-default.conf
ServerAdmin webmaster@localhostDocumentRoot /var/www/htmlServerName remoteip.andy.supportRemoteIPHeader CF-Connecting-IPErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined
3. apache.conf
で結合された LogFormat エントリを /etc/apache2/apache2.conf.
で、 %h を %a に替えてから更新してください。例えば、現在の LogFormat は次のように表示されています。
LogFormat "%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined
LogFormat を次のように更新します。
LogFormat "%a %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined
4. 次のコードと
Cloudflare IPを入力して、 /etc/apache2/conf-available/remoteip.conf
を作成し、信頼されるプロキシアドレスを定義します。
RemoteIPHeader CF-Connecting-IPRemoteIPTrustedProxy 192.0.2.1 (example IP address)RemoteIPTrustedProxy 192.0.2.2 (IPアドレスの例)( [https://www.cloudflare.com/ips/](https://www.cloudflare.com/ips/)に記載されているすべてのCloudflare IPについて繰り返します)
5. Apacheの設定を有効にします。
sudo a2enconf remoteipEnabling conf remoteip.新しい設定を有効にするには、service apache2 reloadを実行する必要があります。
6. Apache設定をテストします。
sudo apache2ctl configtestSyntax OK
7. Apacheを再起動します。
sudo systemctl restart apache2
mod_cloudflare
mod_cloudflare のインストールには、Github から Apache 拡張機能をダウンロードする方法と、オリジンのWebサーバーにコードを追加する方法の2種類があります。
Githubからパケットやスクリプトをダウンロードする
Apache Webサーバーを使用している場合、 Githubから mod_cloudflare をダウンロードすることができます。
オリジンWebサーバー にコードを追加する方法
mod_cloudflareをインストールできない場合、またはコンテンツ管理システムプラットフォームに使えるCloudflareプラグインがなく、オリジナル訪問者のIPが復元できない場合、オリジナル訪問者のIPを必要とするページにあるタブの中か、その前に、このコードをオリジンWebサーバーに追加してください。
<?php if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];?>
この作業では、IPアドレスが必要なスクリプトで利用できるようになっただけです。実際のサーバーログにIPを保存するということではありません。
Apache
_mod_cloudflare_を削除するには、 _mod_cloudflare_を読み込むApache設定行にコメントアウトしなければなりません。
これは、Linuxディストリビューションによって異なりますが、ほとんどの人はin /etc/apache2
を見れば、その行を見つけるための検索ができるはずです。
LoadModule cloudflare_module
この行にコメントするか、この行を削除し、Apacheを再起動させると mod_cloudflare がなくなっているはずです。
UbuntuやDebianを実行している場合は、次を見てください。
file/etc/apache2/mods-enabled/cloudflare.load
このファイルを削除して、 _mod_cloudflare_を消去します。それからApacheを再起動します。
Nginx
Mod_cloudflareは、
NGINX設定ファイル nginx.conf
を ngx_http_realip_module
で変更することで、インストールされます。
mod_cloudflare を消去するには、この行をコメントまたは消去する必要があります。それからNGINXを再起動させると、 mod_cloudflare はなくなっているはずです_。_
Webサーバーの説明
Webサーバーの種類に応じたオリジナルの訪問者IPを記録するための設定方法については、以下を参照してください。
- 以下がインストールされていることを確認してください。
- Red Hat/Fedora
sudo yum install httpd-devel libtool git
- Debian/Ubuntu
sudo apt-get install apache2-dev libtool git
- Red Hat/Fedora
- _mod_cloudflare_の最新ビルドのために以下を複製します:
- Red Hat/Fedora/Debian/Ubuntu:
git clone https://github.com/cloudflare/mod_cloudflare.git; cd mod_cloudflare
- Red Hat/Fedora/Debian/Ubuntu:
- Apache拡張ツールを使用して、.c fileをモジュールに変換します:
- Red Hat/Fedora/Debain/Ubuntu:
apxs -a -i -c mod_cloudflare.c
- Red Hat/Fedora/Debain/Ubuntu:
- 再起動させ、モジュールがアクティブであることを確認します:
- Red Hat/Fedora
service httpd restart; httpd -M|grep cloudflare
- Debian/Ubuntu:
sudo apachectl restart; apache2ctl -M|grep cloudflare
- Red Hat/Fedora
- Webサーバーはロードバランサの背部にある場合は、以下の行をApache設定 (通常、httpd.conf)に追加し、123.123.123.123をロードバランサのIPアドレスに置き換えます。
IfModule cloudflare_moduleCloudFlareRemoteIPHeader X-Forwarded-ForCloudFlareRemoteIPTrustedProxy **[ロードバランサのIPアドレスを挿入]**DenyAllButCloudFlare/IfModule
ngx_http_realip_module
NGINX モジュール および以下の設定パラメータを使用します。
set_real_ip_from 192.0.2.1 (IPアドレスの例)( [https://www.cloudflare.com/ips/](https://www.cloudflare.com/ips/)に記載されているすべてのCloudflare IPについて繰り返します)
以下の二つのうち、どちらかを使用
real_ip_header CF-Connecting-IP;#real_ip_header X-Forwarded-For;
プレフィックスのリストは定期的に更新される必要があり、 Cloudflare IPアドレスに完全版リストを公開しています。
CloudflareとNGINX も参照してください。
- 次のスクリプトを実行して、EasyApache の一部としてmod_cloudflareをインストールします:
bash<(curl -s https://raw.githubusercontent.com/cloudflare/mod_cloudflare/master/EasyApache/installer.sh)
- インストールにあたり、Apacheを新規のmod_cloudflare プラグインでリコンパイルする必要があります。
Railgun(または、Varnishなどのリバースプロキシソフトウェア)を使用する時、ユーザーのリクエストはCloudflareの代わりに、Railgunサーバーから送信されます。これは、リクエストが直接Cloudflareから送信されず、mod_cloudflareがデフォルトで訪問者IPアドレスを復元しないからです。
- これを修正するには、Apache設定を開きます。これは通常、
/etc/apache2/apache2.conf
/etc/httpd/httpd.conf
、/usr/local/apache/conf/httpd.conf
o、またはほかのロケーションで見つかります。不明な場合は、ホスティングプロバイダーにお問い合わせください。 - 最後に追加するもの:
CloudflareRemoteIPTrustedProxy railgun_address
したがって、Railgunサーバーが127.0.0.1にある場合、次のようになります:CloudflareRemoteIPTrustedProxy 127.0.0.1
- 3. 信頼するプロキシ一覧に追加するサーバーが複数ある場合、最後にそうしたサーバーを追加することができます:CloudflareRemoteIPTrustedProxy 127.0.0.1 127.0.0.2
Lighttpdが自動的にログとアプリケーションにアクセスするためのサーバーIPを書き換えるようにするには、以下のソリューション二つのどちらかにしたがってください。
- lighttpd.conf ファイルを開き、 mod_extforward を server.modules に追加します。 mod_accesslog の あと に来ないと、アクセスログに実際のIP が表示されません。
- lighttpd.confファイルの任意の場所に、以下のコードブロックをサーバモジュールリストの後に追加し、Lighttpdを再起動します
$HTTP["remoteip"] == "192.2.0.1 (IPアドレスの例)"{extforward.forwarder = ( "all" => "trust" )extforward.headers = ("CF-Connecting-IP")}
([https://www.cloudflare.com/ips/](https://www.cloudflare.com/ips/) に記載されているすべてのCloudflare IPについて繰り返す)
- 「LiteSpeed Web Admin Console」に移動します。
- 「設定」の「ヘッダ」にある「クライアント IPを使用する」オプションを有効化します。
- 有効になると、アクセスログが正しいIPアドレスを表示します。そして、PHPの
$_SERVER['REMOTE_ADDR']
変数に、Cloudflare IPアドレスの代わりとなるクライアントの実IPアドレスが含まれます。(WordPressまたはvBulletinなどがインストールする)PHP有効化Webサイトで、Cloudflareを有効化すると、それ自体であなたが直面する問題の多くを解決してくれます。
IIS 7 - 8の場合:
こちらの指示に従ってください。
IIS 8.5 - 10の場合:
IIS 8.5以降では、カスタムログインがビルトインオプションとなっています。 IIS Enhanced Loggingを参照してください
IIS Managerで、作業中のサイトの_アクション(Actions)_ メニューの ログイン(Logging) をダブルクリックしてください。
起動後、フォーマットとして W3Cを選択してから、 _ログファイル(Log File)_サブセクションでフォーマットドロップダウンのとなりにある **フィールドを選択する(Select Fields)**をクリックします。
フィールドを追加する(Add Field) をクリックし、 CF-Connecting-IP ヘッダに追加します。
Okをクリックします。これで、 **カスタムフィールド(Custom Fields)**で、新しいエントリが反映されているはずです。戻ったときに ロギング ウィンドウで 適用(Apply) をクリックします。
無事に完了すると、ログファイルにアンダーバーが付きます。フィールドでの変更がこのように確認できます。
変更がすぐに反映されない場合は、サイトを再起動します。次に W3SVC、そしてインスタント全体を再起動します。IIS 8.5+で拡張ロギングを使用する場合 、 アプリケーションレベルのオリジナルビジターIPを復元しません。
Tomcat 7が自動的にオリジナル訪問者IPをあなたのアクセスログとアプリケーションに復元するようにするには、ログスキーマに %{CF-Connecting-IP}i
を追加する必要があります。
例えば、以下のブロックを server.xml
ファイルに追加することができます。
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log."suffix=".txt" pattern="%{CF-Connecting-IP}i - %h %u %t - "%r" - %s - %b - %{CF-RAY}i"/>
その結果、ログは次のようになります。
Visitor IP - Cloudflare IP - [04/Dec/2014:23:18:15 -0500] - "GET / HTTP/1.1" - 200 - 1895 - 193d704b85200296-SJC
MagentoとCloudflareで、オリジナル訪問者IPを復元するためのサードパーティのチュートリアルを参照してください。
同様に、Cloudflareがこの Magento拡張を書き込みませんでしたが、役立つと感じた当社のお客様もいらっしゃいました。
このモジュールは外部関係者によって作成されているため、当社はプラグインに関係する問題に対してテクニカルサポートが提供できません。
Cloudflareを介してインビジョンパワーボード3インストールを実行するときに、正しいIPのマッチングを有効化するには、次の手順に従ってください:
IPBインストールのACPにログインするします。
- システム をクリックします。
- 「概要」の下の「 セキュリティ」(Security)をクリックします。
- セキュリティセンターの下の「 セキュリティ設定」をクリックします。 プロキシが提供する信頼IPアドレスをチェックしますか? がグリーンであることを確認します。
_プロキシが提供するIPアドレスを信頼しますか?_のIPB4説明
ネットワーク環境で、リクエストがプロキシ経由(オフィスや大学構内のインターネット状況、または負荷分散サーバークラスターなど)で処理されていることが分かる場合、正しいIPアドレスが使われるように、この設定を有効化する必要があるかもしれません。ただし、有効化する際に、悪意のあるユーザーがシステムを悪用して偽のIPアドレスを提示する可能性があります。ほとんどの環境では、この設定をオフにしておくべきでしょう。
Apacheサーバーをご利用なら、ログに訪問者IPを復元させるために mod_remoteip のインストールをお勧めします。
MODをインストールするためにサーバーにアクセスできない場合は、 コアを変更することができるかもしれません。
MyBBの最新バージョンには、「ユーザーIPアドレスを詳しく調べる」オプションが含まれています。
管理CP>設定>サーバーと最適化オプション>ユーザーのIPアドレスを詳しく調べますか?>はい
また、MyBB 1.6で利用できる Cloudflare管理プラグイン をインストールすることもできます。
MyBB 1.6.0, 1.6.1, 1.6.2, または 1.6.3
-
./inc/functions.php
に移動します。 - 2790行目へ移動します。
- 置き換えます:
if(isset($_SERVER['REMOTE_ADDR']))
それと:if(isset($_SERVER['HTTP_CF_CONNECTING_IP']))
- 再度、置換します:
$ip = $_SERVER['REMOTE_ADDR'];
それと:$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
Vanillaチームのメンバーが、 Vanilla用のCloudflareプラグイン を作成しており、オリジナル訪問者IPを自己ホストサイトのログファイルに復元することができます。
このモジュールは外部関係者によって作成されているため、当社はプラグインに関係する問題に対してテクニカルサポートを提供できません。
-
includes/GlobalFunctions.php
を開きます。370行目ぐらいで、以下のように変更します。$forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})";
から$forward = "\t(proxied via {$_SERVER['HTTP_CF_CONNECTING_IP']}{$forward})";
-
includes/ProxyTools.php
を開きます。79行目ぐらいで、以下を探します。if ( isset( $_SERVER['REMOTE_ADDR'] ) ){
そして、次に置き換えます:if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ){
第2ステップは、MediaWiki バージョン 1.18.0とそれ以前のバージョンにのみ適用されます。MediaWikiの新しいバージョンは、ProxyTools.phpが完全に書き直され、以下のコードは存在しなくなりました。 - 80行目ぐらいで以下を探します。
$ipchain = array( IP::canonicalize($_SERVER['REMOTE_ADDR']) );
保存し、オリジンWebサーバーにアップロードします。
1.27.1前後のバージョンの場合:
-
GlobalFunctions.php
の1232行に移動して、REMOTE_ADDR
をHTTP_CF_CONNECTING_IP
に変更します。 - 次に、
WebRequest.php
、1151行目から1159行目にかけて、REMOTE_ADDR
をHTTP_CF_CONNECTING_IP
に変更します。
XenForoユーザーが Cloudflare用のプラグインを作成しました。
このモジュールは外部関係者によって作成されているため、当社はプラグインに関係する問題に対してテクニカルサポートが提供できません。
-
library/config.php
を開きます。 - 最後に、以下を付け加えます。
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];}
- アップロードして上書きします。
外部関係者が、オリジナル訪問者IPを復元する CloudflareとPunBB用のモジュール を作成しました。
このプラグインは外部関係者によって作成されているため、当社はプラグインに関係する問題に対してテクニカルサポートが提供できません。Cherokeeサーバーは、
- サーバーに
cherokee-admin
を開きます。 - Webブラウザで Cherokee管理インターフェース に移動します。
- Cloudflareが提供しているドメインの 仮想サーバー を選択します。
- 4. 「ロギング」 タブで選択した 仮想サーバーで、転送されたIPを受け入れるを有効化します。
- 「ホストから受け入れる」 ボックスに、 CloudflareのIPアドレスを入力します。
Livezillaサーバー上で PHP IP Server Param
フィールドを HTTP_CF_CONNECTING_IP
に変更すると、IPアドレスを修正することができます。
訪問者IPをDataLife Engineに復元するには:
- Open:/engine/inc/include/functions.inc.php見つけます:
$db_ip_split = explode( ".",$_SERVER['REMOTE_ADDR'] );
次に変更します:$db_ip_split = explode(".",$_SERVER['HTTP_CF_CONNECTING_IP'] );
- 見つけます:
$ip_split = explode( ".",$_SERVER['REMOTE_ADDR'] );
次に変更します:$ip_split = explode(".",$_SERVER['HTTP_CF_CONNECTING_IP'] );
- Open:/engine/modules/addcomments.php見つけます:
$_SERVER['REMOTE_ADDR'],
次に変更します:$_SERVER['HTTP_CF_CONNECTING_IP'],
- 見つけます:
$db_ip_split = explode( ".",$_SERVER['REMOTE_ADDR'] );
次に変更します:$db_ip_split = explode( ".",$_SERVER['HTTP_CF_CONNECTING_IP'] );
外部関係者が、オリジナル訪問者IPをあなたのログに復元する Cloudflare extension for TYPO3 拡張機能を作成しました。この拡張機能により、Cloudflareのキャッシュをクリアにする能力も備わります。
このモジュールは外部関係者によって作成されているため、当社はプラグインに関係する問題に対してテクニカルサポートが提供できません。
ホスティングパネルのVestaCPをご利用の場合は、サーバーでNginxとApacheを両方実行していることになります。リクエストは、Apacheに行く前に、Nginxを通してプロキシされます。
このNginxプロキシのため、実訪問者IPアドレスを戻すためにNginxを設定する手順説明が必要となります。 Apacheの Mod_remoteip は必要ではありません。 mod_remoteip をApacheに追加するとNginxサーバー設定と競合しません。
HAProxyで元の訪問者IPを復元する
X_FORWARDD_FORヘッダで元のクライアントIPを抽出するためには、HAProxyで以下の設定を行う必要があります。
- CF
_ips.lst
https://www.cloudflare.com/en-gb/ips/ からのすべてのIP範囲を含むテキストファイルを作成します。 - HAProxyで
転送オプション
が無効になっていることを確認します。
HAProxyのコンフィグです。
acl from_cf src -f /path/to/CF_ips.lst
acl cf_ip_hdr req.hdr(CF-Connecting-IP) -m found
http-request set-header X-Forwarded-For %[req.hdr(CF-Connecting-IP)]if from_cf cf_ip_hdr