WordPress には xmlrpc.php というファイルがあって、DDoS 攻撃や不正ログインを目指すハッカーのターゲットになりやすいことはご存知でしょうか? このページでは、通常のインターネットから xmlrpc.php へのアクセスを禁止しつつ、スマホのモバイルネットワークからはアクセスできるようにする方法をご紹介します。
はじめに
xmlrpc.php という名前から分かるかもしれませんが、このファイルは WordPress を外から XML によって操作 (RPC: Remote Procedure Call) するための機能を提供しています。たとえば、WordPress の Pingback 機能はこのファイルを使って実装されています。しかし、この Pingback 機能を悪用して DDoS 攻撃の踏み台に使われてしまうことが知られています。

また、WordPress のスマホアプリは xmlrpc.php を介して記事の投稿を実現しています。これはすなわち、管理者権限の ID とパスワードが分かれば xmlrpc.php を介して WordPress の操作ができるということです。そこでハッカーはしらみつぶしに ID と パスワードの組み合わせを試して、管理者権限を奪おうとします。
このようなセキュリティ問題が生じるため、様々な Web ページで xmlrpc.php に対するアクセスを拒否してセキュリティ対策をする方法が書かれています。しかし、xmlrpc.php へのアクセスを全て禁止してしまうと、WordPress のスマホアプリを使って投稿ができなくなり不便です。最近は、スマホのブラウザから WordPress にアクセスしても管理画面が適切に機能するため、スマホアプリの必要性は低いのかもしれません。しかし、記事の下書きやメモをする際に、すぐに立ち上がるスマホアプリはやはり利便性が高く、筆者は利用を続けたいです。
となると、PCからのアクセスは制限して、スマホからのアクセスのみ許可をする必要が出てきます。User-Agent でスマホやタブレットを判定することも可能ですが、User-Agent は詐称が簡単なので、より厳密にアクセス制限をしたい場合は適切ではありません。そんな時には、ファイヤーウォールのIPフィルタや .htaccess を使って、モバイルデバイスで使用されるIPアドレスからのアクセスを許可するよう設定するのが1つの方法です。しかし、スマホが利用するIPアドレスの一覧は手に入るのでしょうか。幸いなことに大手キャリアはIPアドレスの範囲を公開しており、アクセス制限に使うことができます。
IPアドレスの掲載ページ
以下では SoftBank, au, docomo の IP アドレスの範囲が書かれているページをご紹介します。
SoftBank の場合
まず、SoftBank は以下のページに IPアドレス一覧が掲載されています。iPhone/iPad とそれ以外のスマートフォンでページが分かれていますので注意してください。
iPhone/iPad
スマートフォン
au の場合
以下のページは Android の技術情報となっていますが、IS NET/LTE NET のアドレスが掲載されています。 iPhone も LTE NET を介してインターネットにアクセスしますので、以下のページの IP アドレスが au のスマホで使用される範囲と解釈して問題ないと思います。
docomo の場合
docomo の場合は以下のページに掲載されています。sp モードサービスで利用される IP アドレスが掲載されています。iPhone も spモードでインターネットに接続しますので、以下のページの IP アドレスが使用される範囲と考えて問題なさそうです。
.htaccess による設定例
以下は xmlrpc.php を SoftBank の iPhone の IP アドレスからのみアクセスできるようにする .htaccess の設定例です。他のキャリアの場合は、上記リンク先を参照して IP アドレスを書き換えてください。この .htaccess は WordPress のインストールディレクトリ直下に置けば良いです。.htaccess が既に存在している場合には、末尾に追記してください。存在しない場合は、新しく作成して記入してください。
この設定をすると、Wordpress の Pingback ができなくなったり、一部プラグインで不具合が出たりすることがありますが、セキュリティ対策のために設定して損はないはずです。
なお、以下では上記 SoftBank のページで公開されている全てのスマホ IP アドレスからのアクセスが許可されています。推測ですが、おそらく使用される IP アドレスはスマホの位置、すなわち接続先の基地局によってある程度限定されるはずです。より IP アドレスの範囲を限定してセキュリティを高めたい場合は、ご自分の普段の移動範囲内で IP アドレスを調べて、ルールを削減することが有効です。
# 2018年12月20日現在の情報です。
# コピペするのではなく上記 SoftBank のページをご確認ください
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from 126.32.32.0/19
Allow from 126.33.0.0/16
Allow from 126.35.0.0/16
Allow from 126.152.0.0/16
Allow from 126.182.0.0/16
Allow from 126.193.0.0/17
Allow from 126.199.0.0/16
Allow from 126.225.144.0/21
Allow from 126.233.0.0/16
Allow from 126.236.0.0/16
Allow from 126.245.0.0/16
Allow from 126.247.0.0/16
Allow from 126.253.0.0/16
Allow from 126.254.0.0/16
</Files>
この方法の問題点と考察
上記 IP アドレスは 4G などモバイルネットワークを経由したときに使われる IP アドレスです。当然、スマホが WiFi に繋がっていると異なる IP アドレスが使用されますので、上記設定をしてしまうと WiFi 接続時にアクセスできなくなってしまいます。しかし、WordPress のスマホアプリを使用するのは自分だけでしょうから、スマホの WiFi を一時的にオフにして、モバイルネットワークからアクセスすることで対応すれば良いでしょう。
もし、不特定多数のユーザがログインするようなコミュニティサイトの場合、「WiFi 接続をすると繋がらなくなるからモバイルネットワークでアクセスしてね」と伝えることは難しくなります。その場合は User-Agent を使って判断するのが次点の策ですが、詐称が容易なので安全性は損なわれると思います。
また、モバイルネットワークで使用される IP アドレスは時々変更されるので、定期的にアクセスルールを見直す必要があります。しかし、これも利用者が自分だけであれば気付いた時に修正すれば問題ないかと思います。
なお上記の方法では、ハッカーがモバイルデバイスを使用して攻撃を仕掛けるとアクセスできることになってしまいます。しかし多くの場合、モバイルデバイスは身元確認がされているため、あえて足がつくモバイル端末を経由して攻撃をする選択肢を取ることは少ないように考えます。
おわりに
このページでは、通常のインターネットから xmlrpc.php へのアクセスを禁止しつつ、スマホのネットワークからはアクセスできるようにする方法をご紹介しました。アクセス制限をするということは、利便性を損なうということでもあります。セキュリティ対策と利便性のトレードオフを考えるなら、モバイルネットワークからのみアクセスを許可することで、スマホアプリからのみ使えるようにするというのは良い選択肢でしょう。