Cloudflare Docs
Support
Support
Visit Support on GitHub
Set theme to dark (⇧+D)

元の訪問者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 RulesManaged Transforms の設定を確認してください。

次の図は、Cloudflareを利用する場合と利用しない場合のIPアドレス処理の違いを示しています。

The diagram illustrates the different ways that IP addresses are handled with and without Cloudflare.


​​ 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@localhost
DocumentRoot /var/www/html
ServerName remoteip.andy.support
RemoteIPHeader CF-Connecting-IP
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${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-IP
RemoteIPTrustedProxy 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 remoteip
Enabling conf remoteip.
新しい設定を有効にするには、
service apache2 reloadを実行する必要があります。

6. Apache設定をテストします。

sudo apache2ctl configtest
Syntax 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を記録するための設定方法については、以下を参照してください。

  1. 以下がインストールされていることを確認してください。
    • Red Hat/Fedorasudo yum install httpd-devel libtool git
    • Debian/Ubuntusudo apt-get install apache2-dev libtool git
  2.  _mod_cloudflare_の最新ビルドのために以下を複製します:
    • Red Hat/Fedora/Debian/Ubuntu:git clone https://github.com/cloudflare/mod_cloudflare.git; cd mod_cloudflare
  3. Apache拡張ツールを使用して、.c fileをモジュールに変換します:
    • Red Hat/Fedora/Debain/Ubuntu:apxs -a -i -c mod_cloudflare.c
  4. 再起動させ、モジュールがアクティブであることを確認します:
    • Red Hat/Fedoraservice httpd restart; httpd -M|grep cloudflare
    • Debian/Ubuntu:sudo apachectl restart; apache2ctl -M|grep cloudflare
  5. Webサーバーはロードバランサの背部にある場合は、以下の行をApache設定 (通常、httpd.conf)に追加し、123.123.123.123をロードバランサのIPアドレスに置き換えます。
IfModule cloudflare_module
CloudFlareRemoteIPHeader X-Forwarded-For
CloudFlareRemoteIPTrustedProxy **[ロードバランサの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 も参照してください。

  1. 次のスクリプトを実行して、EasyApache の一部としてmod_cloudflareをインストールします: bash<(curl -s https://raw.githubusercontent.com/cloudflare/mod_cloudflare/master/EasyApache/installer.sh)
  2. インストールにあたり、Apacheを新規のmod_cloudflare プラグインでリコンパイルする必要があります。

Railgun(または、Varnishなどのリバースプロキシソフトウェア)を使用する時、ユーザーのリクエストはCloudflareの代わりに、Railgunサーバーから送信されます。これは、リクエストが直接Cloudflareから送信されず、mod_cloudflareがデフォルトで訪問者IPアドレスを復元しないからです。

  1. これを修正するには、Apache設定を開きます。これは通常、 /etc/apache2/apache2.conf /etc/httpd/httpd.conf、 /usr/local/apache/conf/httpd.conf o、またはほかのロケーションで見つかります。不明な場合は、ホスティングプロバイダーにお問い合わせください。
  2. 最後に追加するもの:CloudflareRemoteIPTrustedProxy railgun_addressしたがって、Railgunサーバーが127.0.0.1にある場合、次のようになります:CloudflareRemoteIPTrustedProxy 127.0.0.1
  3. 3. 信頼するプロキシ一覧に追加するサーバーが複数ある場合、最後にそうしたサーバーを追加することができます:CloudflareRemoteIPTrustedProxy 127.0.0.1 127.0.0.2

Lighttpdが自動的にログとアプリケーションにアクセスするためのサーバーIPを書き換えるようにするには、以下のソリューション二つのどちらかにしたがってください。

  1. lighttpd.conf ファイルを開き、 mod_extforward を server.modules に追加します。 mod_accesslog の あと に来ないと、アクセスログに実際のIP が表示されません。
  2. 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について繰り返す)
  1. 「LiteSpeed Web Admin Console」に移動します。
  2. 「設定」の「ヘッダ」にある「クライアント IPを使用する」オプションを有効化します。
  3. 有効になると、アクセスログが正しい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を参照してください

  1. IIS Managerで、作業中のサイトの_アクション(Actions)_ メニューの ログイン(Logging) をダブルクリックしてください。

  2. 起動後、フォーマットとして W3Cを選択してから、 _ログファイル(Log File)_サブセクションでフォーマットドロップダウンのとなりにある **フィールドを選択する(Select Fields)**をクリックします。

  3.  フィールドを追加する(Add Field) をクリックし、 CF-Connecting-IP ヘッダに追加します。

  4.  Okをクリックします。これで、 **カスタムフィールド(Custom Fields)**で、新しいエントリが反映されているはずです。戻ったときに ロギング ウィンドウで 適用(Apply) をクリックします。

  5. 無事に完了すると、ログファイルにアンダーバーが付きます。フィールドでの変更がこのように確認できます。

  6. 変更がすぐに反映されない場合は、サイトを再起動します。次に 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 - &quot;%r&quot; - %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にログインするします。

  1. システム をクリックします。
  2. 「概要」の下の「 セキュリティ」(Security)をクリックします。
  3. セキュリティセンターの下の「 セキュリティ設定」をクリックします。 プロキシが提供する信頼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
  1.  ./inc/functions.phpに移動します。
  2. 2790行目へ移動します。
  3. 置き換えます:if(isset($_SERVER['REMOTE_ADDR']))それと:if(isset($_SERVER['HTTP_CF_CONNECTING_IP']))
  4. 再度、置換します:$ip = $_SERVER['REMOTE_ADDR'];それと:$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];

Vanillaチームのメンバーが、  Vanilla用のCloudflareプラグイン を作成しており、オリジナル訪問者IPを自己ホストサイトのログファイルに復元することができます。

このモジュールは外部関係者によって作成されているため、当社はプラグインに関係する問題に対してテクニカルサポートを提供できません。

  1.  includes/GlobalFunctions.phpを開きます。370行目ぐらいで、以下のように変更します。$forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})";から$forward = "\t(proxied via {$_SERVER['HTTP_CF_CONNECTING_IP']}{$forward})";
  2.  includes/ProxyTools.phpを開きます。79行目ぐらいで、以下を探します。if ( isset( $_SERVER['REMOTE_ADDR'] ) ){そして、次に置き換えます:if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ){第2ステップは、MediaWiki バージョン 1.18.0とそれ以前のバージョンにのみ適用されます。MediaWikiの新しいバージョンは、ProxyTools.phpが完全に書き直され、以下のコードは存在しなくなりました。
  3. 80行目ぐらいで以下を探します。$ipchain = array( IP::canonicalize($_SERVER['REMOTE_ADDR']) );保存し、オリジンWebサーバーにアップロードします。
​​ 1.27.1前後のバージョンの場合:
  1.  GlobalFunctions.phpの1232行に移動して、 REMOTE_ADDR を HTTP_CF_CONNECTING_IPに変更します。
  2. 次に、 WebRequest.php 、1151行目から1159行目にかけて、 REMOTE_ADDR を HTTP_CF_CONNECTING_IPに変更します。

XenForoユーザーが  Cloudflare用のプラグインを作成しました。

このモジュールは外部関係者によって作成されているため、当社はプラグインに関係する問題に対してテクニカルサポートが提供できません。

  1.  library/config.phpを開きます。
  2. 最後に、以下を付け加えます。if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];}
  3. アップロードして上書きします。

外部関係者が、オリジナル訪問者IPを復元する  CloudflareとPunBB用のモジュール を作成しました。

このプラグインは外部関係者によって作成されているため、当社はプラグインに関係する問題に対してテクニカルサポートが提供できません。Cherokeeサーバーは、

  1. サーバーに cherokee-admin を開きます。
  2. Webブラウザで Cherokee管理インターフェース に移動します。
  3. Cloudflareが提供しているドメインの 仮想サーバー を選択します。
  4. 4.  「ロギング」 タブで選択した 仮想サーバーで、転送されたIPを受け入れるを有効化します。
  5.  「ホストから受け入れる」  ボックスに、  CloudflareのIPアドレスを入力します。

Livezillaサーバー上で PHP IP Server Param フィールドを HTTP_CF_CONNECTING_IPに変更すると、IPアドレスを修正することができます。

訪問者IPをDataLife Engineに復元するには:

  1. Open:/engine/inc/include/functions.inc.php見つけます:$db_ip_split = explode( ".",$_SERVER['REMOTE_ADDR'] );次に変更します:$db_ip_split = explode(".",$_SERVER['HTTP_CF_CONNECTING_IP'] );
  2. 見つけます:$ip_split = explode( ".",$_SERVER['REMOTE_ADDR'] );次に変更します:$ip_split = explode(".",$_SERVER['HTTP_CF_CONNECTING_IP'] );
  3. Open:/engine/modules/addcomments.php見つけます:$_SERVER['REMOTE_ADDR'],次に変更します:$_SERVER['HTTP_CF_CONNECTING_IP'],
  4. 見つけます:$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で以下の設定を行う必要があります。

  1. CF_ips.lst https://www.cloudflare.com/en-gb/ips/ からのすべてのIP範囲を含むテキストファイルを作成します。
  2. 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


​​ 関連リソース