wordpress

WordPressセキュリティプラグイン「SiteGuard」導入のススメ

WordPress(以下WP)は無料で便利でもっともポピュラーなCMSなのですが、それゆえどうしても狙われやすいです。

WPのセキュリティプラグインは数ありますが、今回は実際に私が導入している「SiteGuard」で解説を進めます(基本的な対策は似たような感じですが、「All In One WP Security」の方がもっと細かく設定できます)

日本で作られているプラグインなので解説ページも日本語です。内容も充実しているので正直そっちを読んでもらえば済むんですが、こちらの記事ではかいつまんで説明していきたいと思います。

当然日本語対応ばっちしなので安心

Botによる不正アクセスについて

不正アクセスというと、個人的に恨み・悪意のある人物(あるいは組織)がピンポイントで狙ってくると思うかもしれませんが、Botでランダムに荒らしにくる愉快犯タイプの方がよっぽど多いです。

Botはコンピュータープログラムなので、パスワードを総当たり攻撃(ブルートフォース攻撃)でトライ&エラーでこじ開けようとしてきます。
自転車などで使うダイヤル式の鍵の数字を忘れてしまったとき、0000から0001…0002…と試して開けた経験がありますが、そんな感じです。コンピューターなので秒単位で次々と試してきます。また、漏洩しているパスワードリストから試してくることもあります。
そのため、簡単なパスワードだったり使いまわしているパスワードでは簡単に突破されてしまう可能性が高くなります。

不正アクセスされた結果、個人のサイトでいたずらで投稿される程度であればまだいいんですが、信頼性がある企業・団体の公式サイトのTOPページを改ざんされたり、不正なプラグインを仕込まれたり、ポルノサイトにリダイレクトされたり、サーバーに上げてるファイルを書き換えられたり……まぁ考えただけで大変な事態ですね。

セキュリティプラグインを入れさえすればもう全てOK!安全安全!なわけではありませんが、玄関を開けっぱなしにして出入り自由にしているよりは、鍵をかけ監視カメラを設置した方が安全性は高いわけじゃないですか。事前の対策という意味でも導入はすべきだと思います。

「SiteGuard」マストな設定

ログインページ変更

まずはこれ。
WPで作成されているサイトの中には、/wp-admin/wp-login.phpを付けると素直にログインページに辿り着けるサイトも少なくありません。オープンですね。
オプションの「管理者ページからログインページへリダイレクトしない」もチェックします。WP「あれ?管理者ページに行きたいの?まずはログインしてね。ログインページはこっちだよ」と親切にリダイレクトされちゃうのを防げます。

ログイン詳細エラーメッセージの無効化

これマストです!
ログイン時のエラーメッセージですが、デフォルトだと「ユーザー名が違います」「パスワードが違います」とログインのヒントを与えてしまいます。正規のユーザーならいいんですが、不正アクセスにもヒントを与えられるのはちょっと。。
ONにすると、「入力内容を確認の上、もう一度送信してください」というシンプルなエラーメッセージのみになります。

ログインロック

何度もログインチャレンジされた場合にロックをかけます。総当たりでパスワードを試す行為を数回でストップさせられます(また来るんですが。際限なく試されるよりは全然マシでしょう)

ログインアラート

管理しているWPサイトが少ないなら。
ログインがあるとメールで知らせてくれます。たくさん管理していたり大規模なサイトなどでログインが多いと、お知らせメールが増えてメールボックスが圧迫されちゃうかも。

XMLRPC防御

XMLRPC攻撃が多いので、どこまで有効かはまだ未確認ですが設定しておいた方がいいでしょう。
他のプラグインに影響があるかも?なので、ひとまず「ピンバック無効化」にしています。

ログイン履歴

これはいい。クライアントに不正アクセスチャレンジされてることを示すにも使えます。ただ言われるだけよりこうして目に見えると危機感が違いますからね。

不正アクセスチャレンジされちゃってます

「SiteGuard」やらない方がいいかもしれない対策

管理ページアクセス制限

これを試したところ、ログインはできるもののその後のダッシュボード画面がNot Foundになってしまいました。何もできない……。FTPで「Site Guard」を削除してみてもダメ。


別のセキュリティプラグインですがこちらの記事を参考にして、契約しているさくらインターネットのコントロールパネルから.htaccessを修正して事なきを得ました。。ありがとうございます、お礼にぽちっておきました。
ちゃんと設定すると大丈夫かもですが、怖いので触らないでおきます。

プラグイン以外の基本的な対策

ログインユーザー名を隠す

ログインユーザー名は「admin」以外で

デフォルトが「admin」です。ということは、不正アクセスチャレンジも「admin」から開始されます。

ログインユーザー名と異なるニックネーム(ユーザー名)を設定

SSL化で対応できるかもですが、HTTPプロトコルの通信データにユーザー名が含まれているため、デフォルトの設定ではユーザー名はログインユーザー名と同一のままではそこからログインユーザー名を割り出されてしまいます。
ユーザーの編集画面から、ログインユーザー名とは別のニックネーム(ユーザー名)を設定しておけば、ユーザー名が漏れたところでログインユーザー名は隠されたままとなります。

表記揺れがややこしいんですが、

author.phpに404リダイレクト処理

デフォルトで存在する投稿者一覧ページ、このページにアクセスすることでユーザー名を見ることができます。前述の対策をするか、404にリダイレクトをかけて見られないようにするか。
複数の著者が個性を発揮しながら投稿しているサイトならともかく、投稿者一覧ページが無くても問題がないのであれば子テーマ内のfunctions.phpに記述を追加して404にリダイレクト処理をかけます。

//author.phpをNot Foundに
add_action( 'template_redirect', function() {
    if( is_author() ){
        global $wp_query;
        $wp_query->set_404();
        status_header( 404 );
    }
});

ログインパスワードを変更

ユーザーが覚えやすいパスワードは、総当たり攻撃で見つけ出しやすいパスワードでもあります。まあ、どこで漏れてるかも分からないのにどこでも同じパスワードを使いまわすなんて論外です。
アルファベットは大文字小文字を混在させ記号や数字も混ぜた長いパスワードがいいんですが、人によっては「覚えられないから短くて簡単なパスワードにして」と言ってくることも。。どうして……。コピペして……。

WP、プラグイン、テーマのアップデート

ちょいちょい更新されています。セキュリティ対策もどんどんされているので積極的に最新の状態にしておくと良いかと思いますが、使用プラグインによっては最新版に対応してなくてサイトの表示崩れが起きることも。
このブログみたいにシンプルなら自動アップデートに設定しとけば問題ないのですが、複雑な作りをしているサイトの場合は自動ではなく確認しながら手動で更新していくのがベターでしょう。

信頼のあるサーバー会社と契約する

WPも古〜〜〜いバージョンしか導入できないような古い古いサーバーでは、セキュリティプラグインも使えずセキュリティ対策もしようがありません。
また、頑張ってセキュリティ対策をしたのに、サーバーの方の問題で不正アクセスを食らってしまうこともあります。
安さで選ばず、X Serverやさくらインターネットといった信頼のおける大手と契約するのがいいでしょう。

WPのバックアップ

「All in one migration」というプラグインでバックアップできます。定期的なり、大きな改修作業前などバックアップを取る癖を付けておくと、何かやらかしたときサッと復元できます。