訪問者のオリジナルIPアドレスを記録するために、オリジンWebサーバーのタイプ(Apache、NGINX、Microsoft IISなど)に基づいてmod_cloudflareを設定する方法を説明します。
概要
Cloudflareは、X-Forwarded-ForとCF-Connecting-IPヘッダーのオリジナル訪問者IPアドレを含みます。
- このヘッダーは訪問者の発信されたIPを復元したり、ログに含めたりできます。
- しかし、設定プロセスは使用するWebサーバーによって異なります。
オリジナル訪問者IPを復元する:オプション1 mod_cloudflareのインストールに関する詳細について
Webサーバータイプに合わせて訪問者IPを復元する
Webサーバータイプに基づいて、オリジナル訪問者IPを記録するmod_cloudflare の設定方法の説明は以下を参照してください。
Red Hat/Fedora:
sudo yum install httpd-devel libtool gitDebian/Ubuntu:
sudo 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/Fedora:
service 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
1. 以下のNGINXモジュールと設定パラメーターを使用します:
set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 162.158.0.0/15; set_real_ip_from 172.64.0.0/13; set_real_ip_from 173.245.48.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 190.93.240.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 2400:cb00::/32; set_real_ip_from 2606:4700::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2c0f:f248::/32; set_real_ip_from 2a06:98c0::/29;
以下の二つのうち、どちらかを使用
real_ip_header CF-Connecting-IP; #real_ip_header X-Forwarded-For;
プレフィックスのリストは定期的に更新される必要があり、Cloudflare IPアドレスに完全版リストを公開しています。
2. ログにオリジナル訪問者IPを含むには、log_format
ディレクティブに$http_cf_connecting_ipと$http_x_forwarded_for
の変数を追加します。
こちらも参照してください: 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
、またはほかのロケーションで見つかります。不明な場合は、ホスティングプロバイダーにお問い合わせください。
2. 最後に追加するもの:
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を書き換えるようにするには、以下のソリューション二つのどちらかにしたがってください。
オリジンがIPv4経由でインターネットに接続しているだけの場合:
1. lighttpd.conf
ファイルを開いて、mod_extforward
をserver.modules
リストに追加します。これは、アクセスログ(例:http://cl.ly/9fRX
)内で、実IPを表示するために、mod_accesslog
の後に来るようにします。
2.次のコードブロックを、サーバーモジュールリストの次のlighttpd.conf
ファイルの任意の場所に追加します。
$HTTP["remoteip"] == "199.27.128.0/21" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "173.245.48.0/20" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "103.21.244.0/22" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "103.22.200.0/22" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "103.31.4.0/22" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "141.101.64.0/18" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "108.162.192.0/18" { extforward.forwarder = ( "all" => "trust" ) >extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "190.93.240.0/20" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "188.114.96.0/20" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "197.234.240.0/22" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "198.41.128.0/17" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "162.158.0.0/15" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "104.16.0.0/12" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") } $HTTP["remoteip"] == "172.64.0.0/13" { extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP") }
3. Lighttpd を再起動します。
オリジンがIPv6経由でインターネットに接続している場合:
Lighttpdドキュメントでは、フィールドIPv6が有効化になっているときに、リモートIPレンジの照合するために必要となるフィールド、$HTTP["remoteip"]
が記載されています。上記の方法はIPレンジを転送しようとしても、機能しません。
ここで、Lighttpdを使ってオリジナルIPv6アドレスを転送するための代替ソリューションは、プロキシすべてを信頼することです(Lighttpdによって推奨されているわけではありません)。これは、次の方法で行なうことができます:
1.server.modules リスト
で、mod_extforwardの前に mod_accesslog を設定します。
2.lighttpd.conf
に次の行を追加します:
extforward.forwarder = ( "all" => "trust" ) extforward.headers = ("CF-Connecting-IP")
3. Lighttpd を再起動します。
1. 「LiteSpeed Web Admin Console」に移動します。
2. 「設定」の「ヘッダ」にある「クライアント IPを使用する」オプションを有効化します。
3. 有効になると、アクセスログが正しいIPアドレスを表示します。そして、PHPの $_SERVER['REMOTE_ADDR']
変数に、Cloudflare IPアドレスの代わりとなるクライアントの実IPアドレスが含まれます。(WordPressまたはvBulletinなどがインストールする)PHP有効化Webサイトで、Cloudlfareを有効化すると、それ自体であなたが直面する問題の多くを解決してくれます。
IIS 7 - 8の場合:
こちらの指示に従ってください。
IIS 8.5 - 10の場合:
1. IIS Managerで、作業中のサイトの アクション(Actions)のログイン(Logging)をダブルクリックしてください。
2.起動後、フォーマットとしてW3Cを選択してから、ログファイル(Log File)サブセクションでフォーマットドロップダウンのとなりにあるフィールドを選択する(Select Fields)をクリックします。
3, フィールドを追加する(Add Field)をクリックし、CF-コネクト-IP(CF-Connecting-IP)ヘッダに追加します。
4.Okをクリックします。これで、カスタムフィールド(Custom Fields)で、新しいエントリが反映されているはずです。戻ったときにログインウィンドウで適用(Apply)をクリックします。
5. 無事に完了すると、ログファイルにアンダーバーが付きます。
フィールドでの変更がこのように確認できます。
6. 変更がすぐに反映されていない場合は、サイトを再起動します。次に W3SVC、そしてインスタント全体を再起動します。
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にログインするします。
1. 「システム」(System)をクリックします。
2. 「概要」の下の「セキュリティ」(Security)をクリックします。
3. セキュリティ センターの下の「セキュリティ 設定」をクリックします。
4. 「プロキシが提供する信頼IPアドレスをチェックしますか?」は、グリーンです。
プロキシが提供するIPアドレスを信頼しますか?のIPB4説明
ネットワーク環境で、リクエストがプロキシ経由(オフィスや大学構内のインターネット状況、または負荷分散サーバークラスターなど)で処理されていることが分かる場合、正しいIPアドレスが使われるように、この設定を有効化する必要があるかもしれません。ただし、有効化する際に、悪意のあるユーザーがシステムを悪用して偽のIPアドレスを提示する可能性があります。ほとんどの環境では、この設定をオフにしておくべきでしょう。
Simple Machines (SMF)でのオリジナル訪問者IP復元についての情報は、Simple Machines フォーラムで見つけられるかもしれません。
Apacheサーバーをご利用なら、ログに訪問者IPを復元させるためにmod_cloudflareのインストールすることをお勧めします。
mod_cloudflareのような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'] ) ){
3. 80行目ぐらいで次を探します:
$ipchain = array( IP::canonicalize($_SERVER['REMOTE_ADDR']) );
そして、次に置き換えます:
$ipchain = array( IP::canonicalize($_SERVER['HTTP_CF_CONNECTING_IP']) );
4. 保存し、オリジンWebサーバーにアップロードします。
1.27.1前後のバージョンの場合:
1. GlobalFunctions.php
の1232行目に移動し、REMOTE_ADDR
をHTTP_CF_CONNECTING_IP
に変更します。
2. 次に、WebRequest.php
に移動して1151〜1159行目で、REMOTE_ADDR to 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用のモジュールを作成しました。
1. サーバー上でCherokee-admin
を起動します。
2. WebブラウザでCherokee管理インターフェースに移動します。
3. Cloudflareが提供しているドメインの仮想サーバーを選択します。
4. 「ログイン」タブで選択した仮想サーバーで、転送されたIPを受け入れるを有効化します。
5. 「ホストから受け入れる」ボックスに、CloudflareのIPアドレスを入力します。
Livezillaサーバー上でPHP IPサーバーParam
フィールドをHTTP_CF_CONNECTING_IP
に変更すると、IPアドレスを修正することができます。
訪問者IPをDataLife Engineに復元するには:
1. 開きます:
/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. 開きます:
/engine/modules/addcomments.php
見つけます:
$_SERVER['REMOTE_ADDR'],
次に変更します:
$_SERVER['HTTP_CF_CONNECTING_IP'],
4. 開きます:
/engine/modules/functions.php
見つけます:
$_IP = $_SERVER['REMOTE_ADDR'];
次に変更します:
$_IP = $_SERVER['HTTP_CF_CONNECTING_IP'];
5.見つけます:
$db_ip_split = explode( ".", $_SERVER['REMOTE_ADDR'] );
次に変更します:
$db_ip_split = explode( ".", $_SERVER['HTTP_CF_CONNECTING_IP'] );
6.見つけます:
$ip_split = explode( ".", $_SERVER['REMOTE_ADDR'] );
次に変更します:
$ip_split = explode( ".", $_SERVER['HTTP_CF_CONNECTING_IP'] );
外部関係者が、オリジナル訪問者IPをあなたのログに復元するTYPO3のCloudfare拡張機能を作成しました。この拡張機能により、Cloudflareのキャッシュをクリアにする能力も備わります。
ホスティングパネルのVestaCPをご利用の場合は、サーバーでNginxとApacheを両方実行していることになります。リクエストは、Apacheに行く前に、Nginxを通してプロキシされます。
このNginxプロキシのため、実訪問者IPアドレスを戻すためにNginxを設定する手順説明が必要となります。いくつかのリクエストに対するNginxサーバーを無効にしていなければ、ApacheのMod_cloudflare は必要ではありません。mod_cloudflareをApacheに追加すると、Nginxサーバー設定と競合しません。
外部の開発者が、node_cloudflareと呼ばれる訪問者IPを復元するためにモジュールを作成しました。