Webサイトのお助け隊

特定のIPアドレスからのみWordPressの管理画面にアクセスを許可する方法

10 views
約12分

「関係者以外、立入禁止」WordPressの管理画面に、鉄壁の門を築く。特定のIPアドレスからのみアクセスを許可する方法

「また、中国からだ…」

ある朝、クライアントサイトのログイン履歴を見て、俺は深いため息をついた。wp-login.phpへの不正ログイン試行。そのほとんどが、見慣れた海外のIPアドレスからだった。ブルートフォース攻撃、ってやつだ。パスワードを片っ端から試して、力ずくでこじ開けようとする、野蛮で、しかし執拗な攻撃。

幸い、パスワードは複雑なものを設定していたし、ログイン試行回数制限もかけていたから、すぐに破られることはない。でも、精神衛生上、非常によろしくない。何より、サーバーに無駄な負荷がかかる。ちりも積もれば、だ。サイト全体のパフォーマンスにも影響してくる。

どうも。WordPressサイトのセキュリティ対策と、もう何年も鬼ごっこを続けているWeb屋です。

攻撃者は、常に扉を叩き続けている。俺たちは、その扉に、いくつ鍵をかけられるか。その戦いだ。今日は、その中でも、特に原始的で、しかし、とてつもなく強力な「鍵」の話をしようと思う。それが、「IPアドレスによるアクセス制限」だ。

特定の「住所」からしか、管理画面という「建物」に入れないようにする。いわば、顔なじみしか入れない、会員制のバーみたいなもんだ。これを設定するだけで、世界中のほとんどのボット攻撃は、門前払いになる。文字通り、管理画面の存在すら、彼らには見えなくなるんだからな。

この記事では、.htaccessっていう、ちょっと専門的なファイルを使って、君のWordPressサイトに、この鉄壁の門を築く方法を、具体的に解説していく。固定IPがない場合の対処法や、俺がやらかした、自分自身を締め出してしまった、笑えない失敗談も交えながらな。もし君が、鳴り止まない攻撃の通知に、うんざりしているなら。この記事は、君に、久しぶりの平穏をもたらしてくれるはずだ。

IP制限とは何か? なぜ、それが「最強」なのか

そもそも、IPアドレスって何だ? ってところから、軽く話しておこうか。インターネット上の「住所」みたいなもんだと思ってくれればいい。君が今、この記事を読んでいるスマホやPCにも、必ずIPアドレスが割り当てられている。

そして、IPアドレスによるアクセス制限っていうのは、その「住所」を元に、アクセスできる人間を限定する、っていうセキュリティ対策だ。

「この住所(IPアドレス)からのアクセスは許可する」
「それ以外の、すべての住所からのアクセスは拒否する」

これを、WordPressの管理画面(/wp-admin/ディレクトリ)に対して設定する。たったこれだけで、君のサイトのセキュリティは、劇的に向上する。

なぜか?

ブルートフォース攻撃を仕掛けてくるボットのほとんどは、海外の、あるいは、国内の、ランダムなIPアドレスを使っている。君が、自分のオフィスや自宅のIPアドレスだけを許可するように設定すれば、それ以外の、99.99%の不正なアクセスは、管理画面にたどり着くことすらできなくなるんだ。

ログイン試行をされる前に、門前払いする。これが、IP制限の本質であり、その強力さの秘密だ。

メリットと、知っておくべきデメリット

もちろん、どんな強力な武器にも、メリットとデメリットがある。

メリット

  • 圧倒的な防御力:ブルートフォース攻撃や、管理画面の脆弱性を狙った攻撃のほとんどを、無効化できる。
  • サーバー負荷の軽減:無駄なログイン試行がなくなることで、サーバーのリソースを節約できる。サイトの表示速度が改善することもある。
  • 精神的な平穏:鳴り止まない攻撃の通知から解放される。これは、地味に大きい。

デメリット

  • IPアドレスが変わると、アクセスできなくなる:これが、最大のデメリットだ。自宅やオフィスのネット環境が、固定IPじゃない場合、IPアドレスが変わるたびに、設定を更新しないといけない。
  • 設定を間違えると、自分も締め出される.htaccessの記述を1文字でも間違えると、自分自身が管理画面に入れなくなる。俺も、やった(後で詳しく話す)。
  • 外出先からのアクセスが面倒になる:カフェや出張先のホテルから、急にサイトを更新したい、なんて時に、その都度、IPアドレスを調べて、設定に追加しないといけない。

デメリットも、確かにある。でも、それを補って余りあるほどの、強力なメリットがある、と俺は思っている。特に、サイトの管理者が、君一人、あるいは、少人数で、作業場所も決まっている、っていうなら、導入しない手はない。

.htaccessで、鉄壁の門を築く

じゃあ、具体的に、どうやって設定するのか。ApacheっていうWebサーバーを使っているなら、.htaccessっていうファイルに、数行のコードを書き加えるだけでいい。

1. 自分のIPアドレスを調べる

まず、君の「住所」を調べないと始まらない。Googleで、「what is my ip」とかで検索すれば、すぐに表示されるはずだ。

xxx.xxx.xxx.xxx みたいな、数字の羅列。それが、君の今のIPアドレスだ。

2. /wp-admin/ディレクトリに、.htaccessファイルを作成する

次に、FTPソフトや、サーバーのファイルマネージャーを使って、WordPressをインストールしたディレクトリの中にある、/wp-admin/っていうディレクトリに移動する。

そこに、.htaccessっていう名前のファイルを作成する。もし、すでにファイルが存在する場合は、そのファイルを開いて、編集する。

注意: WordPressのルートディレクトリ(一番上の階層)にも、.htaccessファイルがあるけど、そっちじゃないぞ。必ず、/wp-admin/の中のファイルだ。間違えるなよ。

3. コードを書き込む

作成した.htaccessファイルに、以下のコードを書き込む。

order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxxの部分を、さっき調べた、君自身のIPアドレスに書き換えるんだ。

複数人を許可したい場合は、allow fromの行を、人数分、追加すればいい。

order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx # 俺の自宅
allow from yyy.yyy.yyy.yyy # Aさんのオフィス
allow from zzz.zzz.zzz.zzz # Bさんの自宅

これで、指定したIPアドレス以外からの、/wp-admin/ディレクトリへのアクセスは、すべてブロックされる。管理画面だけじゃなく、その中にある、すべてのファイルへの直接アクセスが、禁止されるんだ。

4. ログイン画面(wp-login.php)も忘れずに

待てよ、と思うだろ。管理画面(/wp-admin/)だけじゃなく、ログイン画面(wp-login.php)自体も、制限しないと意味がないじゃないか、と。その通りだ。

WordPressのルートディレクトリにある.htaccessファイルに、以下のコードを追記する。こっちは、ルートディレクトリの方だぞ。間違えるな。

<Files wp-login.php>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>

これで、ログイン画面自体も、許可されたIPアドレスからしか、アクセスできなくなる。完璧だ。

固定IPがない? なら、どうする?

「でも、俺の家、固定IPじゃないんだけど…」

そう、これが最大の問題だ。多くの家庭用インターネットは、IPアドレスが定期的に変わる、動的IPだ。その場合、どうすればいいのか。いくつか、方法はある。

選択肢1:諦めて、他の対策を強化する(現実的)

身も蓋もない言い方だけど、これが一番、現実的かもしれない。IP制限は諦めて、その分、他のセキュリティ対策を、これでもか、というくらい、徹底的にやるんだ。

  • 2要素認証(2FA):パスワードと、スマホの認証アプリを組み合わせる。必須だ。
  • reCAPTCHA:ログイン画面に、「私はロボットではありません」を導入する。
  • ログインURLの変更wp-login.phpを、推測されにくいURLに変更する。
  • 強力なパスワード:言うまでもない。

これらの対策を組み合わせれば、IP制限がなくても、かなりのレベルのセキュリティは確保できる。

選択肢2:動的DNSサービスを使う(上級者向け)

「Dynamic DNS(DDNS)」っていうサービスがある。これは、変動するIPアドレスに、固定のホスト名(my-home.ddns.netみたいな)を割り当ててくれるサービスだ。.htaccessで、IPアドレスの代わりに、このホスト名を指定する。

order deny,allow
deny from all
allow from my-home.ddns.net

ただし、これには、君のルーターがDDNSに対応している必要があるし、設定も少し複雑になる。腕に覚えがあるなら、挑戦してみるのもいいだろう。

選択肢3:VPNサービスを使う

固定IPを提供してくれるVPNサービスを契約する、っていう手もある。VPN経由で接続すれば、君のIPアドレスは、常に、そのVPNサービスの固定IPになる。これなら、外出先からでも、安全にアクセスできる。ただし、月々のコストがかかる。

どれを選ぶかは、君のサイトの重要度と、君のスキル、そして、かけられるコスト次第だ。よく考えて、決めてくれ。

俺がやらかした、笑えない失敗談

あれは、ある金曜の夜だった。クライアントのサイトに、IP制限を導入していた時のことだ。作業も無事に終わって、最後に、自分のIPアドレスがちゃんと許可されているか、確認しようとした。

「あれ…?」

403 Forbidden。アクセス拒否。俺は、自分自身を、締め出していた。

血の気が、引いた。原因は、すぐに分かった。.htaccessに記述した、自分のIPアドレスの、最後の数字を、1文字、間違えていたんだ。単純な、しかし、致命的なミス。

幸い、FTPのアカウント情報は、手元にあった。深夜、冷や汗をかきながら、FTPでサーバーに接続して、問題の.htaccessファイルを修正し、事なきを得た。もし、FTPの情報まで忘れていたら…と考えると、今でもゾッとする。

教訓だ。.htaccessを編集する前は、必ず、バックアップを取ること。そして、編集後は、すぐに、別のブラウザやシークレットモードで、アクセス確認をすること。これを、肝に銘じておいてくれ。約束だぞ。

まとめ:セキュリティは、想像力だ

IP制限は、強力だ。でも、万能じゃない。君が許可したIPアドレスを持つPCが、マルウェアに感染したら? 君の会社の誰かが、悪意を持って、内部から情報を盗んだら?

セキュリティ対策に、終わりはない。それは、常に、攻撃者の「次の一手」を想像し、その先回りをして、対策を講じ続ける、地道な作業だ。

IP制限は、その、重要な一歩に過ぎない。でも、この一歩を踏み出すかどうかで、君のサイトの安全性は、天と地ほど、変わってくる。

まずは、自分のサイトのログイン履歴を見てみることから、始めてみてはどうだろうか。そこに、見知らぬIPアドレスの群れを見つけたら、その時が、君のサイトに、鉄壁の門を築く、タイミングだ。

FAQ:よくある質問

Q. Nginxサーバーを使っているんだけど、.htaccessが使えない。どうすればいい?

A. いい質問だ。Nginxでは、.htaccessは使えない。代わりに、Nginxの設定ファイル(nginx.confとか、サイトごとの設定ファイル)に、直接、設定を書き込む必要がある。こんな感じだ。

location /wp-admin/ {
    allow xxx.xxx.xxx.xxx;
    deny all;
    # ... 他の設定
}

location = /wp-login.php {
    allow xxx.xxx.xxx.xxx;
    deny all;
    # ... 他の設定
}

サーバーの設定ファイルを直接編集する必要があるから、難易度は少し上がる。よく分からない場合は、サーバー管理者に相談するのが、一番安全だ。

Q. IPアドレスを間違えて、自分を締め出してしまった! どうすればいい?

A. 落ち着け。俺もやった。FTPソフトか、レンタルサーバーが提供している「ファイルマネージャー」機能を使って、サーバーに接続するんだ。そして、問題の.htaccessファイルの名前を、一時的に、_htaccessとか、別の名前に変更する。そうすれば、IP制限は一時的に無効になるから、管理画面にアクセスできるはずだ。アクセスできたら、改めて、正しいIPアドレスで、.htaccessファイルを作り直せばいい。

Q. 会社のIPアドレスを許可したんだけど、家に帰ったらアクセスできなくなった。

A. 当然だ。君の自宅のIPアドレスは、会社のIPアドレスとは、違うからな。自宅のIPアドレスも、allow fromに追加する必要がある。複数の場所からアクセスする可能性があるなら、そのすべての場所のIPアドレスを、あらかじめ登録しておくんだ。面倒だけど、それが、このセキュリティ対策の「作法」だ。


「うちのサイト、今どのくらい安全なんだろう?」

そんな疑問を持った方は、まずセキュリティ診断を受けてみるのもいいかもしれない。最近では、30秒ほどでサイトの安全性をチェックできる無料診断サービスもある。暗号化の設定やプラグインの脆弱性、情報漏れのリスクなど、気になるポイントを一通り確認できる。

WordPressのセキュリティ、不安に思っていませんか?

「自分のサイトは大丈夫だろうか…」
「何から手をつければいいか分からない…」

もしあなたが少しでもそう感じているなら、専門家によるセキュリティ診断を受けてみることを強くお勧めします。

>> WordPressセキュリティ無料診断はこちら

上記のサイトでは、WordPressのプロがあなたのサイトの脆弱性を無料で診断してくれます。問題が見つかれば、具体的な対策方法についてもアドバイスをもらえます。手遅れになる前に、一度プロの目でチェックしてもらい、安心を手に入れましょう。

FacebookでシェアTwitterでシェアPinterestでシェア