WordPressのセキュリティプラグイン『Wordfence Security』を利用して、WordPressへのログインにワンタイムパスワードでの2段階認証を設定する方法の紹介&備忘録記事です。
無料版の『Wordfence Security』でも、認証アプリでの2段階認証を利用できるようになっていたので導入してみました!
Wordfeneでの2段階認証について
『Wordfence Security(以下:Wordfence)』は、WordPressのセキュリティプラグイン。Firewallやマルウェアスキャンなど、総合的なセキュリティ機能を搭載しています。
無料版と有料版がありますが、今回設定する二段階認証は無料版でも利用可能です。
Wordfenceで利用できる2段階認証は、認証アプリを利用する時間ベースのワンタイムパスワード(Time-based One-Time Passwords:TOTP)となっています。
設定すると、WordPress管理画面へのログインに、通常の[(メールアドレス/ユーザー名)+パスワード]による認証に加えて、認証アプリに表示される6桁のコードが必要になります。
設定の流れ
- 1認証アプリのインストール
- 2QRコードの読み取り
- 3Wordfenceで二段階認証を有効化
- 4追加設定
基本設定は、「認証アプリ入れて」→「QRコード読み込んで」→「Wordfenceの管理ページで有効化する」だけで簡単です。
設定方法や注意点については、Wordfenceの公式ページにも詳しい説明が掲載されています。
- WordPress:5.4.2
- Wordfence:7.4.9
認証アプリをインストール
使用できるアプリは、時間ベースのワンタイムパスワードをサポートしている以下のようなもの。
- Google Authenticator
- Sophos Mobile Security
- FreeOTP Authenticator
- 1Password (モバイル版/デスクトップ版)
- LastPass Authenticator
- Microsoft Authenticator
- Authy 2-Factor Authentication
- 時間ベースのワンタイムパスワード(TOTP)をサポートするその他の認証アプリ
スマホとタブレットでは「Google Authenticator」と「Microsoft Authenticator」、WindowsPCでは「WinAuth」を使用しています。
認証アプリの基本的な使い方は、関連記事の方法と大体同じです。
QRコードの読み取りと有効化
QRコードの読み取りを含む2段階認証の基本設定は、管理画面のWordfence「Login Security」ページでサクッとできちゃいます。
- 「WordPress管理画面」-「Wordfence」-「Login Security」
- QRコードを読み取る(下の英数字コードをコピペでも可)
- リカバリーコードをダウンロード/コピー/メモ
- 6桁のワンタイムパスワードを入力
- 「ACTIVATE」ボタンで2段階認証を有効化
設定する時のポイントや注意点は以下。
追加設定
2段階認証について「適用するユーザーの種類」「認証済みデバイスで30日間免除」「XML-RPCに有効/無効」などを追加設定できます。
[管理画面]→[Wordfence-Login Security]→[Settings]でアクセス。
- Enable 2FA for these roles
- ユーザーの種類別に2段階認証を適用する設定
- 「管理者/編集者/投稿者/寄稿者/購読者」など任意で
- Require 2FA for all administrators
- すべての管理者に2段階認証を適用する設定
- WordPress/テーマ/プラグイン等の脆弱性で不正に管理者ユーザーが作成された場合にも、自動で2段階認証が適用されることにより不正ログイン防止の保険になる
- 「Grace period to require 2FA」は、管理者ユーザーが複数いる場合に設定を適用するまでの猶予時間。「SEND NOTIFICATION」で通知を送信
- マルチサイトではSuperAdminにのみ適用
- Allow remembering device for 30 days
- 認証済みデバイスでの再認証を30日間免除する設定
- Googleでの「信頼するデバイス」みたいな設定
- cookieで設定される(ブラウザのcookieを削除するとリセット)
- Require 2FA for XML-RPC call authentication
- XML-RPCの呼び出しに2段階認証を適用する設定
- xmlrpc.phpを利用する攻撃から保護できる
- 「Skipped(省略)/Required(必須)」で設定
- XML-RPCの呼び出しを必要とするプラグインや機能とは互換性がないため注意
- Disable XML-RPC authentication
- 有効なユーザー名とパスワードがあるかどうかに関係なく、認証を必要とするすべてのXML-RPC要求を拒否する設定
- WordPress電話アプリ、Jetpackプラグイン、またはXML-RPCを使用する他のほとんどのサービスと互換性がない
- Whitelisted IP addresses that bypass 2FA
- IPでのホワイトリスト設定
- 指定したIPは2段階認証を省略できる
セキュリティ強化のために、[Enable 2FA for these roles]で「編集者(Editor)/投稿者(Author)/寄稿者(Contributor)」にチェック。
さらに、「Require 2FA for all administrators」も有効化しています。
XML-RPCの設定は、使っているアプリ/プラグインによっては衝突することもあるようなのでテストした方がいいでしょうね。
2段階認証の解除
2段階認証を有効化すると「Login Security」ページの表示が以下のように変わります。
2段階認証を解除/無効にしたい場合は、[Wordfence 2FA Active]の項目で[DEACTIVATE]ボタンをクリック。
リカバリーコードの再生成
同画面でリカバリーコードの再生成も可能です。
リカバリーコードを再生成したい場合は、[Recovery Codes]の項目で[GENERATE NEW CODES]ボタンをクリック。
補足事項
コードの入力方法について
2段階認証のプロンプトが表示されない場合
使用しているプラグインやテーマによっては、(上記画像右側のような)二段階認証のプロンプトが表示されないことがあるらしいです。
その際は、(上記画像左側のような)通常ログイン画面に表示される「パスワード」の入力欄に、パスワードに続けてコードを入力することでもログインできます。
リカバリーコードの使い方
使い方は、基本的に認証アプリのコードと同じです。
2段階認証のプロンプトが表示されない場合の入力方法も通常のコードと同じです。
ログインできなくなった場合
「端末の故障/紛失で認証アプリを使えない」+「リカバリーコードも紛失」などでログインできなくなった場合の対象方法です。
Wordfenceプラグイン自体を無効化すれば2段階認証機能も無効化できるので、FTP/SSHでサーバーにアクセスして、「プラグインを削除する」or「プラグインのディレクトリの名前を一時的に変える(一時的に無効化する)」等で対処できるそうです。
Wordfenceのディレクトリは[~/wp-contens/plugins/wordfence]です。
プラグインのディレクトリの名前を一時的に変更する方法の場合、
- FTP等でWordfenceのディレクトリ名を変更
- 変更前:~/wp-content/plugins/wordfence
- 変更後:~/wp-content/plugins/wordfence-disabled
- 一時的に変更するだけなのでディレクトリ名は適当でOK
- ディレクトリ名を変えることでプラグインを無効化できる
- Wordfenceの2段階認証が無効化されるのでWordPressにログイン
- この時点ではWordfenceプラグインは管理画面に表示されない
- 変更したWordfenceのディレクトリ名をFTPで元に戻す
- WordPressにはログインしたまま
- WordPressの管理画面を再読込/更新する
- 適当にダッシュボードのメニューなどをクリック
- ディレクトリ名が元に戻ってプラグインが正常に有効化されていればメニューに「Wordfence」が表示される
- Wordfenceの「Login Security」にアクセスして諸々を再設定する
2段階認証は、セキュリティが強固になる反面、設定ミスや認証手段の喪失でログインできなくなる可能生もあるため要注意ですな。
まとめ
今回のOTP設定で、うちのWordPressへのログイン認証は、[ベーシック認証]+[ユーザー名/パスワード]+[ワンタイムパスワード]の”3段階”的な感じになりました。
厳密には、ベーシック認証とユーザー名/パスワードによる「知識認証」×2段階に、ワンタイムパスワードの「所有認証」を加えた、[2段階+2要素]といったところでしょうか。
追加の設定で、全ての管理者に2段階認証を適用できるのも不正アクセス対策に有効そうです。管理者自身の設定ミスや、WordPress/プラグインの脆弱性で他の認証を突破されてしまった際に、防衛線の一つになってくれるかな?
Wordfenceを利用しているなら簡単に導入できるので、試してみるのも良いかもしれませんね。