先日、知り合いの経営者からこんな相談がありました。
「海外の誰かが、うちのサイト(WordPress)に管理者としてログインしようとしている形跡がある。なんとかならないか」
見せてもらうと、確かに海外のIPアドレスから、管理画面にログインを試みた記録が何度も残っていました。(SiteGuard WP Plugin のようなプラグインを入れておくと、こうした試行の履歴を見ることができます)
海外に拠点も取引も無いのに、海外から管理画面へのアクセスだけが続く。心当たりはないでしょうか。
日本国内だけで運営していて、海外から管理画面に入る用事がまず無いのであれば、「日本国内からのアクセスだけを許可する」という絞り込みが有効です。ただ、やり方を一つ間違えると、逆にサイト全体を止めてしまうこともあります。この記事では、設定の考え方と、間違えると危ないポイントを合わせて整理します。
1. どんなときに「国内だけ許可」が向いているか
固定IP(いつも同じインターネット回線の住所)で運営している方なら、そのIP以外を弾いてしまうのが一番速い方法です。でも、多くの環境では接続のたびにIPアドレスが変わります。自宅やスマートフォンからも管理画面に入るなら、特定の一つに固定するのは現実的ではありません。
そこで、もう少しゆるく「日本国内のIPアドレスなら許可する」という絞り方にします。次の二つに当てはまるなら、この設定が向いています。
- 海外に拠点や担当者がいない
- 管理画面(ログイン画面)に入るのは国内からだけ
逆に、海外の担当者や、海外出張中のご自身がログインする可能性があるなら、この方法は向いていません。
2. .htaccess で制限する(書き方に注意)
制限には「.htaccess」という一枚の設定ファイルを使います。サーバに置いておくと、「どこからのアクセスを許可し、どこを断るか」といったルールをサーバに伝えられます。
国内のIPアドレスは数が多く、範囲の一覧を手で書くのは現実的ではありません。「国内IP 許可 htaccess 生成」などで探すと、一覧を書き出してくれるツールが見つかります。
ここで一つ、強く気をつけていただきたいことがあります。
古い生成ツールや古い解説記事の多くは、Order / Deny / Allow という書き方(Apache 2.2 時代の構文)で出力します。今のサーバの多くは Apache 2.4 で動いており、この古い書き方はそのままでは動かず、500エラー(サイトや管理画面が真っ白になる状態)を起こすことがあります。
今の書き方は Require を使う形です。イメージだけ挙げると、こうなります。
# 「wp-admin」フォルダに置く .htaccess のイメージ
<RequireAny>
Require ip 210.xxx.xxx.0/24
Require ip 133.xxx.xxx.0/24
# …日本国内のIP範囲が続く
</RequireAny>
一行ずつ覚える必要はありません。大事なのは「Require で始まる新しい書き方になっているか」「古い Deny from all のままではないか」を確かめること、それだけです。ご自身のサーバがどちらのバージョンかは、契約しているサーバ会社の管理画面やサポートで確認できます。分からなければ、設置する前にサーバ会社へ一度聞いてしまうのが安全です。
3. 置き場所は必ず「wp-admin」フォルダの中だけ
ここが、この記事で一番大事なところです。
この制限ファイルは、必ず「wp-admin」フォルダの中だけに置いてください。サイトのルート(トップの階層)に置いてはいけません。
ルートに置くと、制限がサイト全体にかかります。つまり、海外からはサイトそのものが表示されなくなります。問題は、それが人間の訪問者だけの話ではないことです。
Googleの検索ロボット(Googlebot)は、多くが海外(主に米国)からアクセスしてきます。ルートで海外を弾くと、Googleがサイトを読みに来られなくなります。結果として、検索結果への表示や、インデックス(Googleがページを把握している状態)に重大な影響が出ます。管理画面を守るつもりが、サイト全体を検索から消しかねない、ということです。
守りたいのは入口(管理画面)だけです。制限は「wp-admin」の中だけ。ここは外さないでください。
4. 「admin-ajax.php」だけはブロックから外す
もう一つ、見落とすと表示が崩れる落とし穴があります。
「wp-admin」フォルダの中には、admin-ajax.php という一つのファイルがあります。名前は管理画面用に見えますが、実際にはサイトの表側(訪問者が見るページ)の動きにも使われています。お問い合わせフォームや、スクロールに合わせた追加読み込みなど、いわゆるAJAXという仕組みがこれを呼び出します。
ここで、先ほどのGooglebotの話がもう一度出てきます。海外(主に米国)から来るGooglebotがページを描画するとき、この admin-ajax.php を呼べないと、AJAXに頼った表示を正しく再現できないことがあります。
そこで、「wp-admin」全体を海外から断ちつつ、admin-ajax.php だけは誰からでも通す、という例外を加えておきます。
# admin-ajax.php だけは常に許可する
<Files admin-ajax.php>
Require all granted
</Files>
管理画面のログインは国内だけに絞りつつ、表側の機能とGoogleの読み取りは止めずにすみます。この一手間で、両方を守れます。
5. サーバに設置する手順
書き方が用意できたら、サーバに設置します。FileZilla などのFTPツール(サーバの中のファイルを出し入れするソフト)でサーバにつなぎ、「wp-admin」フォルダの中にファイルを置きます。

このファイルは、名前を「.htaccess」にする必要があります。先頭に「.」が付くファイルは「不可視ファイル」と呼ばれ、Macなどでは通常は画面に表示されません。手元のパソコンで「htaccess」を「.htaccess」に変えようとすると、ファイルが見えなくなって扱いづらくなります。ですので、名前の変更はパソコン上ではなく、サーバにアップしたあとに行ってください。
サーバにアップしてから「.htaccess」に変更すれば、設置は完了です。

設置できたら、必ず動作を確認します。VPN(接続元の国を切り替えられるサービス)を使うと、海外から見たときにどうなるかを手元で確かめられます。海外からはきちんと弾かれること、日本国内からは今まで通り管理画面に入れること、そしてサイトの表側が普通に表示されること。この三つを確認してください。
6. サーバ側に同じ機能がないかも確認する
ここまで .htaccess を手で置く方法を説明してきました。ただ、最近のレンタルサーバには、同じことをボタン一つでできる機能が用意されていることがあります。
例えばエックスサーバには「国外IPアクセス制限」という設定があり、サーバの管理パネルから切り替えるだけで、海外からのログインを拒否できます。設定を有効にすると、海外から管理画面に入ろうとしたときに、このように拒否されます。

手でファイルを書き換えるより、こうした公式の機能のほうが安全で確実です。契約中のサーバに同じ設定があれば、まずそちらを試すのをおすすめします。レンタルサーバでWordPressが乗っ取られる事件は実際に起きています。標準の機能として用意されているのは、その対策の意味合いもあるのだと思います。
最後に:これは「攻撃されにくくする」ための設定です
この設定の目的は一つです。管理画面(サイトの入口)に海外から誰でも入れる状態をやめて、攻撃される面をできるだけ小さくすること。地味ですが、乗っ取りやいたずらのリスクを確実に下げられます。
一方で、絞り込みには裏返しのリスクもあります。設定を一つ間違えると、必要な相手(Googleや、国内にいるはずのご自身)まで締め出してしまいます。この記事で挙げた三つ、
- 制限は「wp-admin」の中だけに置く(サイトのルートには置かない)
- admin-ajax.php はブロックから外す
- 古い Deny の書き方ではなく、今の Require の書き方になっているか確かめる
このどれを外しても、逆にサイトを傷めることになります。
普段サイトを見ているだけでは、こうした設定の良し悪しには気づけません。少しでも不安があれば、契約しているサーバ会社のサポートや、詳しい人に一度確認してから進めてください。「よく分からないまま触るのが怖い」という感覚は、この手の設定ではむしろ正しい判断です。
外から一度診て、直すべきところだけを指す。それが私の仕事です。もし判断に迷われたら、その相談相手になれればと思います。


