先日、当サイトの転送量が大幅に増えました。
転送量が増えたことにより、僕が利用しているエックスサーバーの転送量上限(1日70GB)を超えてしまいました。元々は、バズがきっかけで、ピークでは600GB/日になり、ピークが去っても70GB~100GB/日になってしまい、ほとほと困ってしまいました。
これが続くようなら、サーバーへの負荷が増えるため、アクセス制限をかけられる可能性もあります。
当然ですが、収益化サイトでアクセス制限をかけられてしまうと、アクセス制限をかけられた分だけ収益が下がります。それを恐れた僕は、レンタルサーバから規制を受ける前に無料CDNサービスのCloudflareを利用して負荷分散を行うことにしました。
通常のサイトであれば、上記方法で結構手軽に、しかも無料でサーバーの負荷分散ができるかと思います。
ただ、サイトなどでWordpressを利用している場合は、サーバー上の設定やプラグインの設定によっては、Wordpressの管理画面にログインできなくなることがあります。
というわけで今回は、「WordpressサイトにCloudflareを導入したことによって起こるかもしれないトラブルの解消方法」をいろいろ紹介したいと思います。
目次
Cloudflare導入により起こった不具合
Cloudflareで発行されたネームサーバーを導入して、設定が反映される数時間~3日の後、Wordpressにログインしようとすると以下のような404ページが出るかもしれません(画像はエックスサーバーの場合)。
この画面が表示されたとき、焦って「記事書けないじゃん!Cloudflareの設定を元に戻さねば…」となるかもしれませんが、サーバー側の設定で元に戻すことができるかもしれません。
以下では、とりあえず僕のサーバーで、エラーの原因だったものを改善した対処方法を紹介したいと思います。
考えられるWordpress管理画面に入れない原因
WordPress管理画面に入ることができない原因として、以下のようなことが考えられます。
- サーバーの設定で「国外IPアクセス制限」が有効になっている
- SiteGuard WP Plugin の「管理ページアクセス制限」がかけられている
主な原因としては、上記2点が考えられると思います。
以下では、それぞれの問題を解消する方法について説明したいと思います。
サーバーの設定で「国外IPアクセス制限」を無効にする
WordPressへの攻撃は、基本的に国外からのものが9割以上です。僕の環境では、99%以上が国外IPからの攻撃となっています。
ですので、最近ではサーバーのデフォルト設定で、「管理画面に国外IPからのアクセスがあった場合は攻撃とみなして遮断する」といった設定になっている場合があります。
Cloudflareを利用すると、ネームサーバーを完全に入れ替えてしまうので、サイト管理者を含む、全てのサイトへの訪問者がCloudflare経由でサイトにアクセスすることになります。
Image by Step 1: How does Cloudflare work? – Cloudflare Support
ただ、それには1つ問題があります。それは、Cloudflareが国外サービスであるということです。
Cloudflareを利用してサーバーにアクセスするということは、たとえそれが管理者であったとしても「海外IP(CloudflareのIP)を経由してサイトにアクセスする」ということになります。
そんな国外IP経由でアクセスする状況になった時、サーバー側で「国外IPアクセス制限」が有効になっていると、(管理者であったとしても)全ての管理画面へのアクセスを遮断されてしまうといったことが起きます。
これを回避するには、サーバー側の設定で「国外IPアクセス制限」を解除してやる必要があります。
エックスサーバーでの設定方法
僕が利用しているサーバーは、エックスサーバーなので、以下では、エックスサーバーでの設定解除方法を紹介します。
まずは、サーバーの管理画面からログインし、コントロールパネル画面を表示させます。
サーバーパネル上の「Wordpressセキュリティー設定」をクリックします。
すると「ドメイン選択画面」が表示されるので、変更したいドメインの「選択する」リンクをクリックしてください。
すると「WordPressセキュリティ設定」画面が表示されるので、「国外IPアクセス制限設定」タブの「ダッシュボードアクセス制限」項目の「OFFにする」ボタンをクリックしてください。
オフにして以下のようなメッセージが表示されれば設定完了です。
国外IPアクセス制限設定の変更が完了しました。
設定画面に戻って、「ダッシュボードアクセス制限」の現在の設定が「OFF」になっているのを確認しておいてください。
ブログエディターを利用している場合は「XML-RPC API アクセス制限」も無効に
スマートフォンアプリやブログエディターなどの外部システムから、リモートで記事の投稿や画像のアップロードを行う際に利用される 「XML-RPC WordPress API」が利用されています。
WordPressへの攻撃は、XML-RPCに対して海外からの攻撃が多いので、国外IPアドレスからの接続を制限しているサーバーもあります。
ですので、「外部ツールなどからWordpressに投稿したりしている」といった場合は、「XML-RPC API アクセス制限」を無効にしてやる必要があります。
サーバー側の設定で、上記のように設定変更を行うと、国内からでも国外からでも自由にWordpress管理画面にアクセスできるようになります。
SiteGuardの「管理ページアクセス制限」を無効にする
サーバーの設定を行っても「まだ管理画面に入れない」なんて場合は、プラグインでアクセス制限を行っている場合もあります。
SiteGuard WP Plugin等のプラグインで、管理画面へのアクセス制限を行っている場合は、その機能もオフにしてやる必要があります。
ただ、プラグインの機能をオフにしようにも、「管理画面に入れないので機能を無効にできない」なんて事になるかと思います。
その場合は、サーバー上の.htaccessを編集してアクセス制限部分を削除してやる必要があります。
SiteGuardの.htaccessでの管理画面アクセス制限部分を削除
通常のサーバーであれば、ドメイン 上の「public_html」に.htaccessファイルがあります。
.htaccessファイルは編集に失敗するとサイトが全く表示されなくなるという、編集リスクのあるファイルです。編集を行う前は必ず.htaccessファイルをどこかにコピーしておくなどして、「編集に失敗してもファイルを上書きすればいつでも元に戻せる」というバックアップファイルを作ってから作業を始めることをおすすめします。
もし、SiteGuardプラグインを利用していて、.htaccessファイルを開いて以下のような記述があれば、削除してください。
#==== SITEGUARD_ADMIN_FILTER_SETTINGS_START <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^404-siteguard - [L] RewriteRule ^wp-admin/css - [L] RewriteRule ^wp-admin/images - [L] RewriteRule ^wp-admin/admin-ajax.php - [L] RewriteCond %{REMOTE_ADDR} !^(127\.0\.0\.1|xxx\.xxx\.xxx\.xxx)$ RewriteCond %{REMOTE_ADDR} !^XXX\.XXX\.XXX\.XXX$ RewriteRule ^wp-admin 404-siteguard [L] </IfModule> #==== SITEGUARD_ADMIN_FILTER_SETTINGS_END
上記部分を削除することにより、管理画面に入ることができるようになるかと思います。
XML-RPC制限をしている場合も削除
ブログエディター等の外部ツールからWordpressに投稿している場合は、.htaccessでxmlrpc.phpファイルに制限をかけている方もおられると思います(これはSiteGuardプラグインの機能ではないけど)。
そういった場合は、以下のような記述があると思うので、こういった記述がある場合は、そちらも削除してください。
<Files xmlrpc.php> order deny,allow deny from all allow from XXX.XXX.XXX.XXX </Files>
Cloudflareを利用しながらもアクセス制限をかける方法
ここまでの設定を終えた場合、「管理画面」に対しても、「xmlrpc.php」に対しても、国外から誰でもアクセスできる状態になっています。
これだと何だか「危険な部分を外に晒している感じ」がしてなんだか落ち着きません。いくら「Cloudflareに外部攻撃から守る機能がある」といっても、守るべきところは守りたい。アクセス規制できるものは、しておきたいです。
そういった場合に、アクセス規制する方法を以下で紹介したいと思います。
自分のグローバルIPを調べる
まずは、アクセス情報【使用中のIPアドレス確認】などに接続して、自分のグローバルIPを調べます。
すると以下のようなグローバルIPが表示されるので、メモっておいてください。
Cloudflare経由でも管理画面にアクセス制限をかける方法
Cloudflare経由でも、Wordpress管理画面にアクセス制限をかけて、サイト管理者以外入れないようにするには、.htaccessファイルに以下のように書き込んでください。
#CloudFlare経由の管理画面へのアクセス制限 <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^404-siteguard - [L] RewriteRule ^wp-admin/css - [L] RewriteRule ^wp-admin/images - [L] RewriteRule ^wp-admin/admin-ajax.php - [L] RewriteCond %{REMOTE_ADDR} !^(127\.0\.0\.1|xxx\.xxx\.xxx\.xxx)$ RewriteCond %{HTTP:X-Forwarded-For} !^XXX\.XXX\.XXX\.XXX$ RewriteRule ^wp-admin 404-siteguard [L] </IfModule>
ホストIPアドレスの変更
「xxx\.xxx\.xxx\.xxx」部分はホスト(サーバー)のIPアドレスの番号割り当ててください。
利用中のサーバーのIPアドレスは、サーバーの管理画面の「サーバー情報」等から取得できるかと思います。
ちなみにエックスサーバーでの確認方法は以下を参照してみてください。
グローバルIPアドレスの変更
「!^XXX\.XXX\.XXX\.XXX$」部分は、先程取得したグローバルIPアドレスの番号を割り当ててください。
Cloudflare経由でもXML-RPCにアクセス制限をかける方法
Cloudflare経由でも、xmlrpc.phpファイルに対してアクセス制限をかけるには、.htaccessファイルに以下のように記述します。
#CloudFlare経由のxmlrpc.phpファイルへのアクセス制限(管理者のIP以外を拒否する) <Files xmlrpc.php> SetEnvIf X-Forwarded-For XXX.XXX.XXX.XXX allowed_IP Order deny,allow Deny from All Allow from env=allowed_IP </Files>
グローバルIPアドレスの変更
「XXX.XXX.XXX.XXX」部分は先程取得したグローバルIPの数字を割り当ててください。
参考
今回、Cloudflare経由でもアクセス制限をする方法については、以下の記事を参考にさせていただきました。
参考 CloudFlareで接続元IPアドレス制限をhtaccessで行う | 暗中模索
まとめ
僕の環境では上記の方法で、以下の問題を解決できるようになりました。
- Cloudflareを利用するとWordpress管理画面にアクセスできない
- Cloudflareを利用するとxmlrpc.phpを利用したツールが使えない
- 管理画面のアクセス制限ができない
- xmlrpc.phpファイルに対するアクセス制限ができない
今回書いた方法で、「Cloudflare経由でも管理画面やxmlrpc.phpにアクセスすることができるようしたとともに、自分以外のIPにはアクセス制限をかける」といったことができるようになりました。
これまでのところは、これで問題なく動作しています。
というわけで「Cloudflareを導入したはいいけど、ログインできないじゃないか!」とか「海外IPによるアクセスを許可したら今度は攻撃が怖い!」なんて場合は、今回の方法がヒントになれば幸いです。
わいひらさん、いつも読ませていただいています。
ネットで調べると、グローバルIPアドレスというのは定期的に変更されるとでてきますが、その度に.htaccessファイルを変更しなければならないのでしょうか?
また、グローバルIPアドレスが変更された場合、管理画面のアクセスができなくなるということでしょうか?
あまり詳しくないので、もしかしたらおかしな質問をしているのかもしれませんが、お答えいただけると嬉しいです。