2026年7月5日

2026年7月5日

WordPressでログイン試行のアラートをメールで受け取る方法

はじめに

セキュアなウェブサイト運営において、管理者のログイン情報が不正に使用されるリスクは常に存在します。特に公開されているブログやECサイトなどでは、ユーザーIDとパスワードを管理する責任が重くなります。この記事では、WordPressでログイン試行の情報を定期的にメール通知することで、セキュリティのレベルを向上させる方法について解説します。

症状・背景

この設定が必要になる主な場面:

  • <不正アクセスによる管理者アカウントの乗っ取りを防ぎたい>
  • <ログイン失敗や異常な試行回数をリアルタイムで把握したい>
  • <侵入検知システムを導入するまでの間、簡易的な警報機能が必要>

手順・設定方法

ステップ1: WordPressのログファイルにアクセスログを追加

WordPressのログ機能を使用して、各ユーザーのログイン試行情報を保存します。

# wp-config.php ファイルを開き、以下のコードを追加または編集
define('WP_DEBUG_LOG', true);

ステップ2: cronジョブを使って定期的にログファイルをチェック

cronを使用して、WordPressのログファイルを定期的に監視し、異常なログイン試行があった場合にメール通知します。

# crontab -e を実行し、以下のようにcronジョブを追加
0 * * * * /usr/bin/php /path/to/your/wordpress/wp-content/plugins/check-login-attempts.php > /dev/null 2>&1

# check-login-attempts.phpの内容は以下の通りです。
<?php
$logfile = '/var/log/nginx/access.log'; // ログファイルのパスを指定
$mail_to = 'admin@example.com';          // 管理者にメールを送るアドレス
$mail_subject = 'WordPress Login Attempts Alert';

$log_entries = file($logfile);
foreach ($log_entries as $entry) {
    if (strpos($entry, 'POST /wp-login.php') !== false && strpos($entry, 'HTTP/1.1" 403 ') !== false) {
        // 不正なログイン試行があった場合
        $message .= "異常なログイン試行が検出されました。\n";
    }
}
if (!empty($message)) {
    mail($mail_to, $mail_subject, $message);
}
?>

ステップ3: ログイン状況の監視を強化する

複数のIPアドレスからの大量のログイン試行を検知し、メール通知を送るように設定します。

# wp-config.php に以下のように追加
define('WP_LOGIN_LOCKOUT', true);
define('WP_LOGIN_LOCKOUT_IP_LIMIT', 5); // IPごとの最大試行回数を設定

# functions.php に以下の関数を追加
function check_login_lockout($data) {
    $ip = $_SERVER['REMOTE_ADDR'];
    if (isset($_COOKIE[ WP_TESTS_DOMAIN . 'wp-resetpass-nonce' ]) && ! empty($_COOKIE[ WP_TESTS_DOMAIN . 'wp-resetpass-nonce' ])) {
        return;
    }
    // ここでログファイルをチェックし、不正な試行回数を超えているか確認
}
add_action('wp_login', 'check_login_lockout');

ステップ4: ログの監視と分析

定期的にログファイルを確認し、異常なアクセスパターンがないか点検します。

# crontab -e を開き、以下のように追加
0 3 * * * /usr/bin/php /path/to/your/check-log.php > /dev/null 2>&1

# check-log.php の内容は以下の通りです。
<?php
$log_file = '/var/log/nginx/access.log';
$report_file = '/home/admin/login_attempts_report.txt';

$log_entries = file($log_file);
foreach ($log_entries as $entry) {
    if (strpos($entry, 'POST /wp-login.php') !== false && strpos($entry, 'HTTP/1.1" 403 ') !== false) {
        // 不正なログイン試行があった場合、レポートファイルに追記
        file_put_contents($report_file, $entry . "\n", FILE_APPEND);
    }
}
?>

注意事項

  • <実践的な注意点1>: ログファイルのパスは正確に入力してください。誤ったパスを指定すると、ログ情報が取得できない可能性があります。
  • <実践的な注意点2>: cronジョブではメール通知が正常に機能するよう、サーバー設定を確認しておきましょう。
  • <セキュリティ上の注意>: 不正なアクセスのログ情報を適切に管理し、第三者に漏洩しないように注意してください。
  • <パフォーマンス/運用上の注意>: ログファイルのサイズが大きくなると、サーバー性能への影響が懸念されます。定期的にログをアーカイブしたり、古い情報を削除したりするよう設定することをお勧めします。

まとめ

1. ログ収集: WordPressのアクセスログやエラーログを適切に保存し、監視用のスクリプトで活用することが重要です。

2. メール通知: 異常なアクセスが発生した場合に即座に管理者へ通知する仕組みを作ることで、迅速な対応が可能になります。

3. ログ分析: 定期的にログを確認し、不審なパターンがないかチェックすることで、より効果的なセキュリティ対策を行えます。

4. パフォーマンス最適化: ログファイルのサイズが大きくなりすぎないよう定期的に整理することにより、サーバーの負荷を軽減できます。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ