WordPressのインストール直後からセキュリティ対策をしておくべき

テクニック
記事内に広告が含まれています。

WordPressでブログを運営していて困ることの1つに、海外からのアタックがあります。ブルートフォースアタックは有名です。総当たり攻撃なので本当に厄介です。

ここでは少なくても3つの防御方法を載せておきます。

プラグインで対策

プラグインにはセキュリティ対策系があります。

あくまでも2022年〜2024年と前置きしておきます。ずっと開発が更新されるとは限りませんからね。

有名なプラグインとして

  1. SiteGuard WP Plugin
  2. XO Security
  3. (Wordfence) → テーマによってはヤバイ

全部使ったことがあります。

Wordfenceはお勧めできなくなりました。アンインストールした後、データベースにゴミが残って大変でした。これがGoogle検索で拾うから始末悪い。キチンとアンインストールし、データベースからも直接削除したのに無くなりませんでした。

かなり調べたのですが、キャッシュの問題らしく、キャッシュを消してもダメで、テーマによって毎回キャッシュが生成されて無くなりませんでした。個人的にWordfence側が対処できないのが問題かと思っています。しばらく時間が経過しているので、Wordfence側の設定でリアルタイムなんちゃらを使わなければ問題にならないと思う。しかし、とっくにDBからも削除したのに無くなりません。本当に困っています。

WordPressのテーマによってはXO Securityが確実で安全でした。SiteGuard WP Pluginだと不具合が出るテーマを使用していたので乗り換えました。

記事公開時点では、XO Securityだけで対処しています。

.htaccessファイルで対策

2つ目はhtaccessファイルで対策します。

.htaccessファイルの編集は、よく理解してから実行してください。文字コードのミスで文字化けするだけでなく、書式があっていないと500サーバーエラーでサイトが表示されなくなることがあります。

htaccessファイルは、httpからhttpsへの転送設定で触ったことがある人も多いでしょう。

プラグインより前に、サイトへアクセスがあった段階で、怪しいアクセスを排除するのに使っています。URLやIPアドレスを指定して閲覧させない、転送させるようにしています。

サーバーがApache2.4以降では、Requireディレクティブでアクセス制御をします。

具体的な設定例

以下の記述の例は、ユーザーエージェント名(例ではMJ12bot)でbotを判断して、それをアクセスさせない場合です。

環境変数(bad_bot)を定義して、それ以外は全てall granted(許可)し、<RequireNone></RequireNone>の箇所で例外を記載しています。

SetEnvIf User-Agent "MJ12bot" bad_bot
<RequireAll>
    Require all granted
    <RequireNone>
        Require env bad_bot
    </RequireNone>
</RequireAll>

逆に特定のものだけ許可して全てを拒否する書き方もあります。逆ですよね。
他にもnot構文を使うパターンもあるので、この例がすべてではありません。
ユーザーエージェントを追加したい場合、SetEnvIf User-Agent "MJ12bot" bad_botの下に改行して続けていきます。

Apache2.2までは、denyやallowで以下のような形式でした。
これだと全く効いていないなら、Requireディレクティブを使います。

Order deny,allow
deny from all
allow from XXX.XXX.XXX.XXX

なかなか難しい。以下、参考URL。

これでできるだけスパムや特定のアドレス、ユーザーエージェントを弾いています。完璧はありませんから、ひどい振る舞いのアクセスを優先して対応しています。

httpsリダイレクト設定

httpsはSSL設定です。現在のサーバーなら、無料独自SSLの機能が利用できます。とはいえ、設定してもhttpとhttpsのリダイレクト設定は自分で行う必要があります。

調べると色んな書き方がありますよね。私は以下で問題なく対処しています。

#BEGIN HTTPS REDIRECT HTACCESS
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP:X-Forwarded-Proto} !=https
    RewriteCond %{HTTP:CloudFront-Forwarded-Proto} !=https
    RewriteCond %{HTTPS} !=on [NC]
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
#END HTTPS REDIRECT HTACCESS

気をつけよう

セキュリティの設定は言葉も難解な物が多くて、上手く設定できないこともあります。単にWebサイトからコピペしてくると、環境やバージョンの違いなどで苦労する原因にもなります。

あくまでも自分の環境に合わせて読み替える必要が出てきます。これが難しいと感じますね。

恐らく、月間で5万〜10万PVに到達すると、色んなスパムに悩まされます。

但し、ブルートフォースアタックと呼ばれる総当たり攻撃に限っては、サイトを新規に用意した数時間後にアタックされた経験もあるため、本当に侮れません。

直ぐに対応しないとならないのは、プラグインなどで行うことになる管理画面へのログイン防御です。(例えばXO Securityを使う)

サーバにWordpressをインストールしたそばからセキュリティを心配するのもアレですが、できる時に対応していきましょう。

どうしてもキリがないことなので、PV数に影響するようなアタック先だけでも対処したいですね。