WordPressのログインURLを変更してみたいと思います。 使用するのは WP Cerber Security です
なぜ変更するのか
WordPressのログインURLはデフォルトだとhttps://ドメイン名/wp-login.php
と決められています。
この状態だと、このサイトはWordPressが使われてるぞ!と攻撃者に知られてしまえば、総当たり攻撃などでWordPressが乗っ取られる危険性があります。
一般ユーザーでほぼ権限がないユーザーであれば記事の改ざんや削除だけで済みます(あまりされたくはないが)が、管理者権限のあるユーザーが乗っ取られたらけっこう大変なことになります。
ログインURLと、ユーザー名(メールアドレス)、パスワードの3つがあればログインできてしまいます。
そのうちユーザー名はWordPressにもでていますので、ログインURLを変更しなければあとはパスワードだけがわかればログインされてしまいます。
なにか事情がない限りは変更しておいたほうが無難です。
*ハックノートはもともと一般開放していたものなので、現時点では変更していません
どの方法でログインURLを変更するか
ログインURLの変更方法は大きく分けて2つあります。
- 自分でPHPを書く
- プラグインで変更する
他にもIP制限を行ったり、AWS WAFを使用している場合、Web ACLを利用して、アクセスをブロックするなども出来ます。
自分でPHPを書く
1の自分でPHPを書く方法ですが、これはあまりオススメされません。
自分で書くことによって脆弱性やバグの原因になるからです。
また、メンテナンスなども必要になってくるので、やらないほうが良いです。
プラグインで変更する
プラグインで変更する方法が手軽だと言えます。
自分でコードを書く必要がないので、とても簡単です。
ログインURLを変更するだけのプラグインではなく、セキュリティ系のプラグインをインストールすればセキュリティも高めることが出来ます。
WordPressのセキュリティ系のプラグインで有名どころは2つあります
- SiteGuard WP Plugin
- WP Cerber Security
1のSiteGuard WP Pluginの記事がヒットすることが多いですが、今回これは使えません。
SiteGuard WP Pluginは仕組みとして.htaccess
を利用しているからです。Nginxに.htaccess
がないので。
今回はWP Cerber Securityを利用します。
ログインURLの変更以外にも不審なアクセスや、ログイン履歴などが閲覧できるので使い勝手が良いです。
WP Cerber Securityの有効化の際に詰まってので後述します
今回の環境
今回の環境は以下です
- OS : AmazonLinux2
- webサーバ : nginx version: nginx/1.12.2
- PHP : 7.2.30
- データベース : mysqlVer 5.7.30
Nginxであることが、URLを変更する際にハマった原因にもなるので、そちらについても解説します。
WordPressサーバ構築
すでにWordPressが構築されてる方は特に読まなくても大丈夫です。
まずはじめにWordPressサーバを構築します。
AmazonLinux2にWordPressを構築してみたを参考にインストールすれば問題ないかと思います。
WP Cerber Securityのインストール
インストール出来たら プラグイン > 新規追加 をクリックして、WP Cerber Securityを検索します
今すぐインストールをクリックして、有効化をクリックしてください。
インストールする際にFTP情報を求められた場合はこちらをご覧ください => WordPressのプラグインインストール時にFTP情報を求められた【Nginx】
インストールが終わった時にWP Cerber Securityの管理画面にこのようなエラーが出ることがあります。
エラー: A PHP extension mbstring is not enabled on this website. Some plugin features will not work properly. You need to enable the PHP mbstring extension (multibyte string support) in your hosting control panel
このエラーはphp-mbstringが有効になっていないことのエラーです。
有効にする際はこちらをご確認ください => Amazon linux2でphp-mbstring有効化
現段階でログインURLを変更しても404エラーになってしまいます。
これがほんとに謎だったのですが、そもそもWordPressで記事が投稿できないことに気が付きます
投稿しても404エラーになってしまい、記事が閲覧できないという状況です。
これを解決するには、パーマリンクの設定を基本にすると解決出来ました。
しかしこれだと、WP Cerber SecurityでログインURLを変更することが出来ません。
というわけで、パーマリンクを 基本 以外にしても記事を閲覧できるようにします。
パーマリンクの設定
nginxのconfigファイルを編集します。
location/{}の部分に以下を挿入します。
try_files $uri $uri/ /index.php?$args;
これについて別途記事を書いているのでそちらも合わせてご覧ください => 【Nginx】WordPressのパーマリンクの設定で気をつけること
ログインURLの変更
パーマリンクの設定を基本以外のものに変更することが出来たら、WP Cerber Securityで設定を行っていきます。
WP Cerber Securityを開いて、メイン設定を以下のようにします
カスタムログインURLを自由に変更してください。
今回は /login-replace
としました。(このテスト環境は削除するので、URLにアクセスしても意味はありません。)
存在しないユーザーや、wp-login.php
へのリクエスト後、直ちにIPをブロックを有効にしてもよいのですが、タイプミスやブックマークに登録していて、wp-login.php
にアクセスしてしまった場合などを考えると、そこまでガチガチにしなくても良いのかなと思います。
アクセスすると、ログイン画面が出ることが確認出来ると思います。
変更しても/wp-login.php
にログイン出来ることがあります。
このプラグインがIPを覚えているため、最初に設定した時のIPではアクセス出来る場合があります。
スマホのテザリングなどを使って、IPを変えてアクセスすると、404エラーが出るのがわかるかと思います。
おわりに
このプラグインをインストールすればサクッとログインURLを変更できるよ!って書いてあるサイトが多かったので、Nginxのconfigに気がつくまでかなり時間がかかりました。
プラグイン入れようとするときは大抵投稿が出来るようになっているので、その辺りの説明は省かれているようです。
今回のNginxのconfigファイルの変更はベストプラクティスではないよう(con.dを活用するべき)なので、もっと理解を深めないとだめですね。