WordPressは世界で最も人気のあるCMSとして、全Webサイトの約40%以上で利用されています。この広範な普及は、同時に悪意ある攻撃者からの標的にもなりやすいことを意味します。あなたのWordPressサイトが小規模であっても、自動化されたボットによる攻撃は日常的に行われています。
特に管理画面(wp-admin)やログインページ(wp-login.php)は、サイトの「鍵」となる重要な入口です。これらへの不正アクセスを許してしまうと:
- 不正ログインによるサイト乗っ取り
- マルウェアの埋め込み
- コンテンツの改ざんや削除
- 個人情報の流出
- SEOスパムの挿入
などの深刻な被害につながる可能性があります。
そこで効果的なのが「IPアドレスによるアクセス制限」です。特に管理画面やログインページへのアクセスを、あなたや正規の管理者が使用するIPアドレスのみに制限することで、不正アクセスのリスクを大幅に低減できます。
この記事では、プラグインに頼らず.htaccess
ファイルを使って効率的にIP制限を設定する方法を解説します。サーバーレベルでの設定となるため、より堅牢なセキュリティを実現できます。

WordPressのIP制限、主な方法は?(.htaccessに焦点を当てる理由)
WordPressサイトにIP制限をかける方法はいくつかありますが、主に以下の3つのアプローチがあります:
1. .htaccessファイルを使う方法
2. WordPressプラグインを使う方法
3. サーバーの管理画面で設定する方法
本記事では、コストパフォーマンスと効果のバランスが最も優れた「.htaccess」によるIP制限に焦点を当てます。この方法は中小規模のサイトから大規模サイトまで幅広く適用でき、プラグインの追加負荷なしにセキュリティを向上させることができます。

.htaccessとは?IP制限を設定する前に知っておきたいこと

.htaccessファイルの役割と配置場所
.htaccess
(Hypertext Access)ファイルは、Apacheウェブサーバーの設定を、ディレクトリごとに上書きできる特別な設定ファイルです。WordPressでは通常、以下の場所に配置されています:
- WordPressのルートディレクトリ(index.phpなどがある場所)
- wp-adminディレクトリ内(管理画面用の設定を行う場合)
このファイルを通じて、リダイレクト設定やURLの書き換え、そして今回のテーマであるアクセス制限などを行うことができます。
編集時の最重要注意点
.htaccess
ファイルの編集は非常にデリケートな作業です。小さなミスが原因でサイト全体がアクセス不能になる可能性があります。以下の点に注意しましょう:
- 必ずバックアップを取る:編集前に既存の
.htaccess
ファイルのコピーを別名で保存しておきましょう。 - パーミッション設定:通常は「644」(所有者が読み書き可能、それ以外は読み取りのみ)に設定します。
- シンタックスエラーに注意:スペルミスや記号の欠落がエラーの原因になります。
- 変更後すぐに動作確認:編集後はすぐにサイトが正常に動作するか確認してください。
FTPクライアントやサーバーのファイルマネージャーを使った編集方法
.htaccess
ファイルを編集するには、以下の方法が一般的です:
- FTPクライアント(FileZilla, Cyberduckなど)を使用:
- サーバーに接続し、WordPressのルートディレクトリに移動
.htaccess
ファイルを右クリックして「ダウンロード」- ローカルで編集後、再度アップロード
- レンタルサーバーの管理画面のファイルマネージャーを使用:
- cPanelやXサーバーなど、多くのレンタルサーバーでは管理画面からファイルを直接編集可能
.htaccess
ファイルを選択し、編集ボタンをクリック
- WordPressのプラグインを使用:
- 「WP File Manager」などのプラグインを使って
.htaccess
を編集することも可能 - ただし、セキュリティの観点からはFTPの使用が推奨されます
- 「WP File Manager」などのプラグインを使って
注意点として、.htaccess
ファイルは「ドットから始まる隠しファイル」のため、FTPクライアントの設定で「隠しファイルを表示」にしておく必要があります。ファイルが見つからない場合は、この設定を確認してください。

.htaccessを使ったIP制限の基本構文:Allow, Deny, Require
.htaccess
でIP制限を設定する際の基本的な構文を理解しましょう。特に重要なのは、Apacheのバージョンによって推奨される書き方が異なることです。

Orderディレクティブの重要性(Apache 2.2以前)
Apache 2.2以前のバージョンでは、Order
、Allow from
、Deny from
ディレクティブを使います。Order
は評価順序を指定する重要な設定です:
# Allow,Deny の場合: まずAllowを評価し、次にDenyを評価(デフォルトは拒否)
Order Allow,Deny
# Deny,Allow の場合: まずDenyを評価し、次にAllowを評価(デフォルトは許可)
Order Deny,Allow
Allow fromとDeny from(Apache 2.2以前)
# 特定のIPアドレスからのアクセスを許可
Allow from 123.45.67.89
# 特定のIPアドレスからのアクセスを拒否
Deny from 123.45.67.89
# すべてのアクセスを拒否
Deny from all
# すべてのアクセスを許可
Allow from all
Requireディレクティブ(Apache 2.4以降)
Apache 2.4以降では、より簡潔なRequire
ディレクティブの使用が推奨されています:
# 特定のIPアドレスからのアクセスのみ許可
Require ip 123.45.67.89
# 複数のIPアドレスを許可
Require ip 123.45.67.89 98.76.54.32
# 特定のIPアドレス以外を許可
Require not ip 123.45.67.89
# すべてのアクセスを許可
Require all granted
# すべてのアクセスを拒否
Require all denied
多くのレンタルサーバーは現在Apache 2.4以降を使用していますが、念のためご利用のサーバーのApacheバージョンを確認することをお勧めします。確認方法がわからない場合は、サーバー管理者やレンタルサーバーのサポートに問い合わせるか、phpinfo()関数を使って確認できます。
次のセクションでは、これらの基本構文を使った具体的な設定例を紹介します。
【設定例1】特定のIPアドレスだけアクセスを許可する方法
管理画面やログインページへのアクセスを、自宅や会社などの特定のIPアドレスからのみ許可したい場合の設定例です。これは最も一般的なIP制限のパターンでしょう。
事前準備:自分のIPアドレスを確認する
設定の前に、まずは自分のIPアドレスを確認しましょう。以下のような方法で確認できます:
- Google検索で「自分のIPアドレス」と検索する
- 「What Is My IP」などのサービスを利用する
- スマホの場合は「4G/5G」と「Wi-Fi」でIPアドレスが異なるため注意
Apache 2.2以前の場合
# 特定のIPアドレスのみアクセスを許可し、他をすべて拒否
<Directory "/var/www/html/wordpress/wp-admin">
Order Deny,Allow
Deny from all
Allow from 123.45.67.89 # あなたの自宅のIPアドレス
Allow from 98.76.54.321 # あなたの会社のIPアドレス
</Directory>
このコードの解説:
Order Deny,Allow
– まず「すべて拒否」し、その後「特定を許可」するという順序を指定Deny from all
– デフォルトですべてのアクセスを拒否Allow from xxx.xxx.xxx.xxx
– 指定したIPアドレスからのアクセスのみ許可
Apache 2.4以降の場合
# 特定のIPアドレスのみアクセスを許可し、他をすべて拒否
<Directory "/var/www/html/wordpress/wp-admin">
Require ip 123.45.67.89 # あなたの自宅のIPアドレス
Require ip 98.76.54.321 # あなたの会社のIPアドレス
</Directory>
このコードの解説:
Require ip xxx.xxx.xxx.xxx
– 指定したIPアドレスからのアクセスのみ許可(他はすべて拒否)- 複数のIPアドレスを許可する場合は、スペースで区切るか、複数行で指定できます
より簡潔に書くなら以下のようにも記述できます:
<Directory "/var/www/html/wordpress/wp-admin">
Require ip 123.45.67.89 98.76.54.321
</Directory>
【設定例2】特定のIPアドレスからのアクセスを拒否する方法
逆に、特定の悪意あるIPアドレスからのアクセスだけを拒否したい場合もあるでしょう。例えば、ログを分析して不正アクセスが多いIPアドレスを特定した場合などです。
Apache 2.2以前の場合
# 特定のIPアドレスのみアクセスを拒否し、他をすべて許可
<Directory "/var/www/html/wordpress">
Order Allow,Deny
Allow from all
Deny from 11.22.33.44 # 不正アクセス元のIPアドレス
Deny from 55.66.77.88 # 別の不正アクセス元のIPアドレス
</Directory>
このコードの解説:
Order Allow,Deny
– まず「すべて許可」し、その後「特定を拒否」するという順序を指定Allow from all
– デフォルトですべてのアクセスを許可Deny from xxx.xxx.xxx.xxx
– 指定したIPアドレスからのアクセスのみ拒否
Apache 2.4以降の場合
# 特定のIPアドレスのみアクセスを拒否し、他をすべて許可
<Directory "/var/www/html/wordpress">
Require all granted
Require not ip 11.22.33.44 # 不正アクセス元のIPアドレス
Require not ip 55.66.77.88 # 別の不正アクセス元のIPアドレス
</Directory>
このコードの解説:
Require all granted
– デフォルトですべてのアクセスを許可Require not ip xxx.xxx.xxx.xxx
– 指定したIPアドレスからのアクセスのみ拒否
こちらもより簡潔に書くなら以下のようにも記述できます:
<Directory "/var/www/html/wordpress">
<RequireAll>
Require all granted
Require not ip 11.22.33.44 55.66.77.88
</RequireAll>
</Directory>
【設定例3】IPアドレスの範囲(CIDR)を指定して許可/拒否する方法
会社のネットワークなど、特定の範囲のIPアドレスすべてを許可または拒否したい場合は、CIDR(Classless Inter-Domain Routing)表記を使用します。
CIDRとは?
CIDR表記は、IPアドレスの範囲を簡潔に表現するための方法です。例えば、192.168.1.0/24
は192.168.1.0
から192.168.1.255
までの256個のIPアドレスを意味します。
よく使われるCIDR表記と対応するIPアドレス範囲:
/32
– 単一のIPアドレス(例:192.168.1.1/32は192.168.1.1のみ)/24
– 最後のオクテットが0〜255(例:192.168.1.0/24は192.168.1.0〜192.168.1.255)/16
– 下2オクテットが0〜255(例:192.168.0.0/16は192.168.0.0〜192.168.255.255)/8
– 下3オクテットが0〜255(例:192.0.0.0/8は192.0.0.0〜192.255.255.255)
Apache 2.2以前の場合
# 特定のIP範囲のみアクセスを許可
<Directory "/var/www/html/wordpress/wp-admin">
Order Deny,Allow
Deny from all
Allow from 192.168.1.0/24 # 192.168.1.0から192.168.1.255までを許可
</Directory>
Apache 2.4以降の場合
# 特定のIP範囲のみアクセスを許可
<Directory "/var/www/html/wordpress/wp-admin">
Require ip 192.168.1.0/24 # 192.168.1.0から192.168.1.255までを許可
</Directory>
同様に、特定のIP範囲からのアクセスを拒否する場合は以下のように設定します:
# 特定のIP範囲のみアクセスを拒否
<Directory "/var/www/html/wordpress">
<RequireAll>
Require all granted
Require not ip 192.168.1.0/24 # 192.168.1.0から192.168.1.255までを拒否
</RequireAll>
</Directory>
【応用】WordPress管理画面(wp-admin)へのIP制限
WordPress管理画面(wp-admin)へのアクセスだけを制限したい場合、2つの方法があります。
方法1:wp-adminディレクトリ内の.htaccessに記述する
WordPressのwp-adminディレクトリ内に.htaccess
ファイルを作成・配置します。既にファイルが存在する場合は、そのファイルに追記します。
# wp-adminディレクトリ内の.htaccessファイル
# 特定のIPアドレスのみアクセスを許可(Apache 2.4以降)
Require ip 123.45.67.89
この方法のメリットは、管理画面のみに制限がかかり、サイト表示部分には影響しない点です。
方法2:ルートディレクトリの.htaccessで指定する
WordPressルートディレクトリの.htaccess
ファイルに、以下のように記述します:
# ルートディレクトリの.htaccessファイル(Apache 2.4以降)
<Directory "/var/www/html/wordpress/wp-admin">
Require ip 123.45.67.89
</Directory>
# または別の書き方
<DirectoryMatch "^/.*/wp-admin/">
Require ip 123.45.67.89
</DirectoryMatch>
ただし、この方法はサーバー設定によっては動作しない場合があります。多くのレンタルサーバーでは、セキュリティ上の理由から<Directory>
ディレクティブの使用が制限されていることがあります。
その場合は、次に紹介する「Files」ディレクティブを使用した方法が有効です。

【応用】WordPressログインページ(wp-login.php)へのIP制限
ログインページ(wp-login.php)だけにIP制限をかけたい場合は、<Files>
ディレクティブを使用します。これはファイル単位での制限を可能にします。
Apache 2.2以前の場合
# ルートディレクトリの.htaccessファイル
<Files "wp-login.php">
Order Deny,Allow
Deny from all
Allow from 123.45.67.89 # あなたのIPアドレス
</Files>
Apache 2.4以降の場合
# ルートディレクトリの.htaccessファイル
<Files "wp-login.php">
Require ip 123.45.67.89 # あなたのIPアドレス
</Files>
この設定により、wp-login.phpへのアクセスは指定したIPアドレスからのみ可能になり、他のユーザーはログインページさえも表示できなくなります。これは総当たり攻撃(ブルートフォースアタック)を防ぐ上で非常に効果的です。

【応用】特定のファイルやディレクトリへのIP制限
WordPressの他の重要なファイルやディレクトリへのアクセスを制限することも可能です。特にwp-config.php
はデータベース接続情報などの機密情報を含むため、保護が重要です。
wp-config.phpへのアクセス制限
# ルートディレクトリの.htaccessファイル(Apache 2.4以降)
<Files "wp-config.php">
Require all denied # すべてのアクセスを拒否
</Files>
この設定は、すべてのユーザー(あなた自身を含む)が直接ブラウザからwp-config.phpにアクセスすることを禁止します。WordPressの内部処理には影響しません。
XMLRPCへのアクセス制限
WordPress APIのエンドポイントであるxmlrpc.php
も、不正アクセスの標的になりやすいファイルです。使用していない場合は、以下のように制限することを検討してください:
# ルートディレクトリの.htaccessファイル(Apache 2.4以降)
<Files "xmlrpc.php">
Require all denied # すべてのアクセスを拒否
</Files>
wp-includesディレクトリの保護
# ルートディレクトリの.htaccessファイル(Apache 2.4以降)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-includes/(.*)$ - [R=403,L]
</IfModule>
この設定により、wp-includesディレクトリへの直接アクセスが制限されますが、WordPress自体の機能は正常に動作します。

.htaccessでのIP制限、設定時の注意点とトラブルシューティング
.htaccess
でのIP制限設定は非常に効果的ですが、設定を誤るとサイトにアクセスできなくなる可能性もあります。ここでは、よくあるトラブルとその対処法について解説します。
構文エラーによる500 Internal Server Errorへの対処法
.htaccess
ファイルの構文に誤りがあると、「500 Internal Server Error」が表示されることがあります。これはサーバー側でエラーが発生していることを示します。
403 Forbiddenエラーが表示される場合
自分自身がサイトにアクセスできなくなり、「403 Forbidden」エラーが表示される場合は、IP制限の設定が厳しすぎる可能性があります。
キャッシュによる影響
.htaccess
の変更がすぐに反映されないことがあります。これはサーバーのキャッシュが原因の可能性があります。
動的IPアドレスの場合の対策
多くの家庭用インターネット回線では、IPアドレスが定期的に変更される「動的IP」が割り当てられています。この場合、固定のIPアドレスでの制限は実用的ではありません。
複数の.htaccessファイルがある場合の影響
WordPressのインストールディレクトリに複数の.htaccess
ファイルが存在する場合、それらは階層構造に基づいて適用されます。
例えば、ルートディレクトリとwp-admin
ディレクトリの両方に.htaccess
ファイルがある場合、wp-admin
ディレクトリ内の設定がルートディレクトリの設定を上書きします。
この階層構造を理解し、意図しない上書きが発生していないか確認することが重要です。

他のセキュリティ対策との組み合わせ
IP制限は効果的なセキュリティ対策ですが、単独ではなく他の対策と組み合わせることで、多層防御(Defense in Depth)を実現できます。
WAF(Web Application Firewall)との組み合わせ
WAFは不正なリクエストを検知・ブロックするシステムです。CloudflareやSucuri、AWS WAFなどのサービスを利用することで、より高度なセキュリティを実現できます。
Basic認証との組み合わせ
IP制限に加えて、Basic認証(ユーザー名とパスワードによる認証)を追加することで、二重のセキュリティを確保できます。.htaccess
ファイルに以下のように追記します:
# Basic認証の設定
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
.htpasswd
ファイルの作成には、オンラインジェネレーターやサーバーのコマンドラインツールを使用します。
ログイン試行回数制限の設定
.htaccess
を使って、短時間に多数のログイン試行を行うIPアドレスを一時的にブロックすることも可能です。これにはmod_securityやmod_evasiveなどのApacheモジュールが必要になります。
# mod_securityを使用した例(サーバーがサポートしている場合)
SecFilterEngine On
SecFilterScanPOST On
SecFilter "wp-login.php" "deny,log,status:403"
SecFilterSelective "REQUEST_METHOD" "POST" chain
SecFilterSelective "REQUEST_URI" "wp-login.php" chain
SecFilterSelective "HTTP_REFERER" "!^https://www\\.yourwebsite\\.com" "deny,log,status:403"
WordPressのセキュリティプラグインの活用
IP制限に加えて、以下のようなセキュリティプラグインの導入も検討してください:
- Wordfence: ファイアウォール、マルウェアスキャン、ログイン制限など総合的なセキュリティ機能
- Sucuri Security: マルウェアスキャン、セキュリティ通知、ファイル整合性モニタリング
- iThemes Security: 40以上のセキュリティ機能を備えた包括的なプラグイン
これらのプラグインは.htaccess
によるIP制限と併用することで、より強固なセキュリティを実現できます。

まとめ:安全なWordPress運営のために
本記事では、.htaccess
ファイルを使ってWordPressサイトにIP制限を設定する方法を解説しました。IP制限は特に管理画面やログインページへの不正アクセスを防ぐ効果的な手段です。
主なポイント
- IP制限の重要性:
- WordPress管理画面やログインページは攻撃の標的になりやすい
- 特定のIPアドレスからのみアクセスを許可することで、不正アクセスのリスクを大幅に低減
.htaccess
によるIP制限の基本:- Apache 2.2以前:
Order
,Allow from
,Deny from
ディレクティブを使用 - Apache 2.4以降:
Require
ディレクティブを使用 - 設定前には必ずバックアップを取ること
- Apache 2.2以前:
- 応用例:
- 管理画面(wp-admin)へのIP制限
- ログインページ(wp-login.php)へのIP制限
- 特定のファイル(wp-config.php, xmlrpc.phpなど)への保護
- 注意点とトラブルシューティング:
- 500エラーや403エラーが発生した場合の対処法
- 動的IPアドレスへの対応策
- 複数の
.htaccess
ファイルの影響
- 他のセキュリティ対策との組み合わせ:
- WAF、Basic認証、ログイン試行回数制限
- セキュリティプラグインの活用
IP制限は重要なセキュリティ対策の一つですが、包括的なセキュリティのためには以下の対策も検討してください:
- 定期的なバックアップ: データ喪失に備えて、自動バックアップを設定しましょう
- WordPressの最新化: コアファイル、テーマ、プラグインを常に最新の状態に保ちましょう
- 強力なパスワード: 管理者アカウントには複雑で長いパスワードを使用しましょう
- 2段階認証の導入: パスワードだけでなく、追加の認証要素を設定しましょう
- 不要なプラグインの削除: 使っていないプラグインは脆弱性の原因になります
- SSL証明書の導入: HTTPS通信でデータを暗号化しましょう
今日から少しずつでもセキュリティ対策を実施することで、サイトを守ることができます。まずは.htaccess
ファイルのバックアップを取り、この記事で紹介した設定を試してみてください。
関連記事



※記事内で紹介した設定は一般的な環境を想定していますが、サーバー環境やWordPressの構成によっては動作が異なる場合があります。重要な変更を行う前には必ずバックアップを取り、検証環境での動作確認をお勧めします。
