【自宅サーバ WordPress】Google認証システムエラー( ERROR: The Google Authenticator code is incorrect or has expired.)

  • このエントリーをはてなブックマークに追加

はじめに

WordPressの管理者ログインにはGoogle認証システムを利用しています。先日正しいアカウントと認証コードを入力しているはずなのにログインできずに困ったことがありました、その時のメモです。

Google認証システムとは

各サービスのログイン認証の際にアカウント(ユーザ名とパスワード)とGoogle 認証システムが発行した認証コード(6桁の数字)を入力して二段階で認証することで不正侵入を防ぐ方法です。Google 認証システムアプリはスマートフォンにダウンロードします。パスワードに加えて、スマートフォンのGoogle認証システムアプリによって生成されたコードも必要になります。

エラー発生

先日正しいアカウントと認証コードを入力しているにもかかわらず下記エラーが発生してwordpressにログインできませんでした。

ERROR: The Google Authenticator code is incorrect or has expired.

困った。

原因

色々ググるとサーバの時間が正確に合っていないとGoogle認証に失敗してしまうということがわかりました。そこでntpdateコマンドを使って時間をコマンドラインから合わせます。ntpdateコマンドとは指定されたNTPサーバーに対し時刻を問い合わせ,教えてもらった時間をローカル・ホストに設定するコマンドです。

no server suitable for synchronization found

が、しかしntpdateコマンドで時間を調整しようとしてもno server suitable for synchronization foundエラーがでて上手く時間を調整出来ませんでした。なぜ・・。(ちなみにntpdate を実行するときはntpdデーモンは停止が必要)

なぜ時間を調整できなかったのか

サーバではLinuxが動いていますがこのLinuxはNTPサーバに時間を問い合わせて定期的に時刻合わせをしています。そのNTPサーバに時間を問い合わせて定期的に時刻合わせをしているデーモンがntpdです。ntpdはポート番号123&プロトコルUDPでNTPサーバに問い合わせをします。ntpdateもポート123で通信をします。色々調べるとLinuxサーバ&ルータでポート123への通信を許可しておらず時間を調整できていませんでした。

対応

iptablesの設定

iptablesとはLinuxのファイアウォールです。通信を制限できます。

iptables -I INPUT 3 -p udp --dport=123 -j ACCEPT

ポート番号123への通信を許可しました。

ルータの設定

同じようにWanから123への通信を許可しました。

時間の調整

iptablesとルータの設定後下記コマンドを実行。

 ntpdate -v ntp.nict.jp

結果

今度はエラーもでずに上手く時間を合わせることでGoogle認証システムも認証できるようになりWordpresへログインできるようになりました。Google認証システムはWordpresに限らず様々なサービスで利用できます。私は他にAWS、GitLab、GitHubなどのログインに利用しています。まだ導入されていない方はセキュリティ強化のためにも一度お試しあれ。