2026年5月20日
2026年5月20日
WordPressのwp-login.phpへのアクセスをブロックする方法
はじめに
WordPressの wp-login.php は世界中のボットから常に攻撃対象にされています。アクセスログを確認すると、1日数百〜数千回の不正ログイン試行が記録されていることも珍しくありません。適切な対策でサーバー負荷を下げつつセキュリティを強化しましょう。
対策の種類と効果
| 対策 | 難易度 | 効果 |
|------|--------|------|
| IPホワイトリスト | 簡単 | 高(指定IP以外完全遮断) |
| ベーシック認証 | 簡単 | 高(二重認証) |
| ログインURLの変更 | 簡単 | 中(ボットが発見しにくい) |
| ログイン試行回数制限 | 普通 | 中(ブルートフォース対策) |
解決手順
方法1:.htaccessでIPホワイトリスト(最も強力)
# .htaccess — wp-login.php へのアクセスを自分のIPのみ許可
<Files "wp-login.php">
Order Deny,Allow
Deny from all
Allow from 203.0.113.1 # 自分のIPアドレス
Allow from 198.51.100.0/24 # オフィスのIPレンジ
</Files>
固定IPがない場合は、アクセスのたびに .htaccess を更新するか、ベーシック認証を使います。
方法2:ベーシック認証で二重ロック
# .htaccess
<Files "wp-login.php">
AuthType Basic
AuthName "Restricted"
AuthUserFile /home/user/.htpasswd
Require valid-user
</Files>
# .htpasswd を生成(Apache ツール)
htpasswd -c /home/user/.htpasswd admin-user
方法3:Nginxでブロック
# nginx.conf
location = /wp-login.php {
allow 203.0.113.1;
deny all;
}
# wp-admin ディレクトリも保護
location /wp-admin/ {
allow 203.0.113.1;
deny all;
}
方法4:ログインURLをカスタマイズ(WPS Hide Login)
「WPS Hide Login」プラグインをインストールすると、wp-login.php を任意のURLに変更できます。
設定 → WPS Hide Login → ログインURL: /my-secret-login
URLを変更した後も元の wp-login.php にアクセスすると404になります。
方法5:functions.phpでログイン試行を制限
// 3回失敗したら60分ロック
add_filter('authenticate', function($user, $username, $password) {
$lockout_key = 'login_lockout_' . md5($_SERVER['REMOTE_ADDR']);
$attempts = (int) get_transient($lockout_key);
if ($attempts >= 3) {
return new WP_Error(
'too_many_attempts',
'ログイン試行回数が多すぎます。60分後に再試行してください。'
);
}
if ($user instanceof WP_Error) {
set_transient($lockout_key, $attempts + 1, HOUR_IN_SECONDS);
}
return $user;
}, 30, 3);
注意事項
- IPホワイトリストを設定する場合は、自分のIPを必ず確認してから設定すること(締め出しに注意)
- ログインURLを変更した場合は必ずメモしておく(忘れるとアクセス不能になる)
wp-cron.phpや REST APIへのアクセスは別途考慮が必要
まとめ
最も効果が高いのはIPホワイトリストによる制限です。固定IPがない場合はベーシック認証とログインURL変更を組み合わせて、ボットからの攻撃を大幅に減らせます。