• 公開日: 2024-12-07
  • 最終更新日:

Cloudflareでアクセス元(クライアント)のIPを取得する方法【WordPress】

汎用的なOGPもしくはアイキャッチ画像

スポンサーさん
下に記事が続きます。

はじめに

※本記事はWordPress向けです。
使用サーバー: さくらのレンタルサーバー スタンダード

Cloudflareを使っていると、リバースプロキシ(Cloudflare)経由のIPアドレスになって、
特定のIPからのログインを遮断したりする時等に、困っていませんか?。

実はCloudflareにはリバースプロキシ(Cloudflare)を経由したクライアントのIPアドレスをオリジンに転送し、
クライアントのIPを取得できるHTTPヘッダがあるのは知っていましたか?
このヘッダーは、X-Forwarded-Forヘッダより、セキュア(安全)です

また、WordPressでしか動作確認をしていませんが、コードの内容的にWordPress以外での応用も効くと思います。

wp-config.phpに数行の記載をするだけで、簡単にこの問題を解決できるので今回はそれを解説していきたいと思います。

CloudflareのIPになっているコメント

なぜCloudflareのクライアントのIPを取得できるHTTPヘッダのほうがセキュアなのか

思ったよりアクセスが多かったので理由を追記しました。(2025/1/04)

主な理由として、X-Forwarded-For HTTPヘッダは容易にヘッダーを偽装することが簡単だからです。
ですが、Cloudflare独自のクライアントのIPを取得するヘッダーのほうが偽造が難しく、よりセキュアです。

例として、特定のIPのみ(今回の場合は、118.86.51.98 )管理画面にログインするのを許可している場合、
X-Forwarded-For HTTPヘッダー の場合、先ほども記述したとおり、容易に偽装ができます。

本当は、xxx.xx.xx.xxx というIPなのに、管理者のみのIPアドレス( 118.86.51.98)に偽装することができてしまいます。

ですが、CF-Connecting-IPというHTTPヘッダーを使用すると、実際にアクセスしたIPしかオリジンに転送しないので、
X-Forwarded-For HTTPヘッダーよりセキュリティが高く安全です。

この X-Forwarded-For HTTPヘッダーを偽装するのをIPスプーフィング攻撃と言ったりします。

クライアントがプロキシを使用している場合、そのプロキシのIPアドレスになります。
つまり、Cloudflareが認識するIPはプロキシのIPになるということです(使用をしていたら)

ですが、裏を返せば、プロキシを利用していないクライアントであれば、Cloudflareはそのままクライアントの元のIPアドレスを認識します。
この仕組みをうまく活用することで、接続元やアクセス元の管理をより正確に行うことができます。

やり方

今回はこのGitHubに転がってた有能な人が作ったコードをベースとして使おうと思います。

// CF-Connecting-IPを使い、実際のクライアントのIPを取得する
// これは適当な位置で大丈夫です。推奨としては、「注意:」と書いてある下辺りです。
// それなら確実に動作します。(私の環境で確認済み)

if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ) {
	$http_x_headers = explode( ',', $_SERVER['HTTP_CF_CONNECTING_IP'] );

	$_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
}

このコードの意味(簡易的)は、まずは CF-Connecting-IP ヘッダが存在するか確認して、
このHTTPヘッダが存在した場合、WordPressが認識する $_SERVER['REMOTE_ADDR']を、
CF-Connecting-IPの中身でオーバーライド(上書き)するということです。

確認

うまくできていたら、このように実際にクライントのIPが表示されます。
ちなみに、もちろんCloudflareのIPではなく、これはJ:COMのIPアドレスです。

CloudflareでクライアントのIPを取得

まとめ

wp-config.phpに数行記載し、CloudflareのHTTPヘッダで、クライアントのIPが取得できます。

IPアドレスに基づいて、ログインロックをするプラグインなどがあるので、クライアントのIPを取得するのは、
非常に重要なセキュリティ対策だと思います。

参考
https://gist.github.com/ryanjbonnell/9509696

https://developers.cloudflare.com/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips/

wp-config.phpはWordPressのコアファイル(核となっているファイル)なので、
必ずバックアップを取ってから作業をしてください。

スポンサーさん
下に記事が続きます。

よかったらグッドボタン&シェアお願いします!

名前の入力は任意でメールアドレスの入力も必要ありません。


記事の削除依頼や修正依頼については、問い合わせにて受け付けております。
ぜひお気軽に問い合わせください。

筆者のプロフィール

profile-img

名前: Otusoaオツソア (本名: 小林 栄太)

主に1年半ぐらい趣味でWebサイトを作っています。
このブログは痒い所に手が届くニッチな技術を提供します。
当サイトでは、自分の好きなようなことをマイペースに発信していきます。
※私は謎の備忘録おじさんではなく、謎の備忘録お兄さんです

Contact