wordpressでブログ作成してるけど、
セキュリティって何をどうしたらいいか
わからないよー
っていう人のために、今回のテーマはwordpressのセキュリティについてです。
- 不正ログイン怖い
- スパムのコメント多くてうっとしい
このような悩みについて、私はインフラの仕事をしているので、ApacheやNginxなどのミドルウェアで色々と解決しようと試みましたが、結果、wordpressプラグインの方が圧倒的に簡単でした、本記事はそのwordpressのプラグインの中でオススメの「SiteGuard WP Plugin」について、各設定について説明します。
はじめに
「SiteGuard WP Plugin」は無償で使えます。私の会社ではサーバにインストールする改ざん防止機能のついたWAFタイプのSiteGuardを利用していますが、こちらは有償ですね。wordpress関連は無償が多くて助かります。SiteGuardは「EGセキュアソリューションズ」(気づいたら会社名変わってたw)という日本の企業が提供しているサービスです。
まずインストールですが、wordpressのプラグイン検索で普通に出てきますので、「新規追加」→「検索」→「今すぐインストール」→「有効化」を実施してください。
準備はこれだけで完了です。
準備ができたら、管理画面の左メニューに「SiteGuard」が表示されますので、そちらへ移動します。
SiteGuard WP Plugin 設定
各設定は以下のとおりにしていきます。
ダッシュボード
設定が有効になっているか、全設定を一覧で確認することができます。
「✅」マークが付いていると有効化になっています。
管理ページアクセス制限
設定の説明は管理画面に書いているので省略しますが、OFFにしておくメリットを探す方が難しいのでONで大丈夫です。
※注意点:「mod_rewrite」が有効化されていないとNGです。Apacheなどのミドルウェア設定を自由に触れる環境に無い場合は、サーバ管理者に問い合わせしましょう。きょうび有効化されてると思いますが。
ログインページ変更
設定は「有効化」の一択です。wordpressのログインURIは「/wp-admin」がデフォルトになっています。これは世界中で知れ渡っているコトなので、ログインを試みようと不正なアクセスが集中します。そのため、この機能をONにすると、「/wp-admin」へアクセスしても、トップページへリダイレクトされるため、ログインページを隠すことができます。変更後のログインページ名は覚えやすくバレにくい名前にするようにしましょう。
また、オプションの「管理者ページからログインページへリダイレクトしない」も必ず「✅」を入れて有効化にしてください。そうしないと、「/wp-admin」へアクセスした人は、変更後のログインページへリダイレクトされます。上記設定で隠した意味がなくなります。
画像認証
とりあえず必須は「コメントページ」の画像認証有効化です。これだけでスパムコメントが圧倒的に減ります。wordpressではデフォルトで「Akismet Anti-Spam」のプラグインが入っていますが、GoogleAdsenseなどの広告を表示していると、商用サイトという扱いになりサブスクリプションの支払い義務が発生します。
不正アクセスの多くは人の手でせっせとやってるわけでは無く、機械で自動的に処理させているので、有償でスパムコメント対策をしなくても、画像認証だけで十分効果は得られます。(広告などを付けておられない個人ブログの方は、Akismetをご利用ください。)
私はログインページの画像認証は無効化しています。自分が面倒だからですね。前述の「ログインページ変更」でバレないようにしているので、画像認証までは不要という判断です。
ログイン詳細エラーメッセージの無効化
ユーザー名のミス、パスワードのミス、画像認証のミス、どれであってもエラー内容を同一のもので返します。IP制限などして、特定のユーザーにだけ公開しているようなサイトではOFFの方が親切ですが、インターネット上でグローバルに公開しているのであれば有効化しておいた方がいいでしょう。
ログインロック
IPアドレス毎に不正アクセス時に制限を設けます。期間、回数、ロック時間は好みによるので、好きなものを選べばよいです。
ログインアラート
アラートメールを保守管理しているような企業では実施してもよいと思いますが、自分のログインも通知されるので、必然的にいずれ見なくなってしまうメールになります。なので、私はOFFで運用しています。
フェールワンス
正しい情報を入力しても、一度わざとログインエラーにする仕組みです。ログインページを上手に隠しているようであればOFFでもいいと思います。自分のログインも毎回一度失敗になってしまうので。
XMLRPC防御
wordpressには「xmlrpc.php」という、システム間通信を行うために開発されたものが標準搭載されています。こちらのファイルは脆弱性をもたらす可能性があり、現在では「REST API」というJavaScriptを利用する形に変わっています。ファイルを削除することで対策することも可能ですが、アップデートすると自動で再生成されてしまいます。(※何故、今もファイルを残しているのかはわかりません。古いwordpressで「xmlrpc.php」を使っている人たちを救うためかな?)
「システム間通信とかないよ」「REST APIだから大丈夫だよ」という場合は、「XMLRPC無効化」にすればOKです。本設定が「OFF」or「ONでピンバック無効化」の場合は、下記のように表示されるので、一度、自サイトで確認してみてください。完全無効化にすると、「Forbidden」表示になります。
ユーザー名漏えい防御
その名のとおり、ユーザー名を隠すための機能です。「REST API」をONにしていると、下記のように丸見えになります。自サイトで、以下のように入力して確認してみてください。「author」と「slug」の次にユーザー名が表示されていると思います。
https://xxx.exampleple.com/wp-json/wp/v2/users
機能をONにして、「REST API無効化」に✅を入れると下記のように変わります。
システム連携で「REST API」を使っている場合は、除外項目設定箇所があるので、そちらに追加してからONにするようにしましょう。
更新通知
その名のとおりです。欲しい方はメールを受け取りましょう。
WAFチューニングサポート
冒頭で説明した有償のWAF(改ざん検知など)機能と連携するためのものです。ほとんどの方が利用されていないと思うのでOFFで問題ありません。
オマケ)インフラ側でやろうとしたこと
まず、無償でできる範囲に限ってで何個か検討しました。
固定IPによる管理画面へのアクセス制限
家はもちろんDHCPなのでNG。会社からだとOKだけど、毎回SSL-VPN繋いだりするのがめんどくさいし、スマホアプリ(ほぼ使ってない)からもアクセスができない。
GeoIPによる海外IPのブロック
これは割と使える。スパムなどは9割以上が海外のサーバ経由で来るので、日本限定にすればほぼブロックできる。ただ、問題なのは正常クローラーからのアクセスや、GoogleAdsenseの審査で弾いてしまうというデメリットもあり。
Basic認証などの2段階(?)認証によるアクセス制限
とりあえずwordpress関係無くApacheだけで制御できるが、なんかしっくりこなかった。
コメント