WordPressのセキュリティ対策

セキュリティの考え方、やり方はいろいろあるのですが、最低限やっておいたほうが良いことを書いていこうと思います。

ログインエラーを確認する

phpMyAdminを開いて wp_login_fails テーブルがあり、そこにデータが書き込まれているのなら注意が必要です。
login_attempt_ID を降順に並び替えて、日時をチェックしてみてください。直近でしょうか。

このままでは分かりづらいので下記のSQLをご利用ください。

1日あたりの件数を直近から表示する

SELECT
    DATE_FORMAT(login_attempt_date, '%Y-%m-%d') AS ymd,
    COUNT(*) AS cnt
FROM wp_login_fails
GROUP BY ymd
ORDER BY ymd DESC
;

直近の確認だけなので、複数ページあっても最初の1ページ目だけ見て行けば雰囲気が分かります。

月あたりの件数を直近から表示する

SELECT
    DATE_FORMAT(login_attempt_date, '%Y-%m') AS ym,
    COUNT(*) AS cnt
FROM wp_login_fails
GROUP BY ym
ORDER BY ym DESC
;

こちらで月ごとの遷移も確認しておきます。
いつ頃からどのくらいの頻度・件数が発生しているでしょう。

IPアドレスごとの件数を多い順に表示する

SELECT
    login_attempt_IP,
    COUNT(*) AS cnt
FROM wp_login_fails
GROUP BY login_attempt_IP
ORDER BY cnt DESC
;

目立って多いところはほとんどなく、いろんなIPアドレスからまんべんなく来ていることと思います。

ということで、ここまでは現状の確認です。
もしテーブルに何もデータがなければ、まずは一安心です。

アクセスを制限する

まずは答えからです。

<Directory "/var/www/example/public_html">

    # wp-config.php へのアクセスを禁止
    <Files wp-config.php>
        order allow,deny
        deny from all
    </Files>

    # xmlrpc.php へのアクセスを禁止
    <Files xmlrpc.php>
        order allow,deny
        deny from all
    </Files>

    # 管理画面へのログインを制限
    <Files wp-login.php>
        AuthType Basic
        AuthName "Private"
        AuthUserFile /var/www/example/.htpassword
        Require valid-user
        Satisfy Any
        Order deny,allow
        Deny from all
        Allow from 000.000.000.000 # 自分のIPアドレス
    </Files>

</Directory>

httpd.conf か .htaccess に書きます。
上記は、httpd.conf の書き方なので、 .htaccess の場合は Directory が不要だったりで調整が必要です。

何をしているかはコメントで記しているとおりです。

管理画面は、IPアドレスを指定して自分自身は無条件に通るようにするのと、外出先で困らないためのBasic認証の二本立てとしますが好みでどちらでも良いです。

これで、 login_attempt_date テーブルに書き込まれていた不正アクセスも無くなることと思います。

海外からのアクセスを拒否する

まずは記述例からです。

# 日本以外からのアクセスを禁止
<Files ~ "(xmlrpc\.php|wp-cron\.php)">
    Require all denied
    Require ip 1.0.16.0/20
    Require ip 1.0.64.0/18
    Require ip 1.1.64.0/18
  ・・・大量に続く
    Require ip 223.223.164.0/22
    Require ip 223.223.208.0/21
    Require ip 223.223.224.0/19
</Files>

上記は、 xmlrpc.php と wp-cron.php に限定していますが、サイト全体的に適用したりなどやり方はお好み次第です。

(参考サイト) http://www.cgis.biz/tools/access/

参考サイトにあるように、apnic で日本に割り当てられているIPアドレスのリストが取得できます。(厳密には日本以外も含まれるので除外する必要あり)

これを定期的に取得して日本のIPアドレスを抽出し、htaccessを自動的に更新するようなプログラムを作っておくことも方法の1つです。

基本のキ

書くまでもないことですが、一応書いておきます。

  • 不必要なプラグインはインストールしない
  • プラグインはWordpress公式から入手する
  • プラグインを可能な限り使わない
  • 管理画面にある「サイトヘルス」をチェック
  • PHP、MySQL、Wordpressを常に最新版になるようにする
  • 独自でPHP、javascriptを書いたところは特に脆弱性が発生しやすいポイントなので、安全なプログラムの作り方を知っておく、もしくは分かる人にチェックしてもらう

他にも書き出せば色々出てきますが、ひとまずこんなところです。

開発・技術入サポート

ということで宣伝です。

弊社では有償でWordpress案件も行っていますので、お気軽にお問い合わせください。
WordPressは2007年(バージョン2.2)頃から触り続けてきていることもあり得意中の得意です。

特にプログラム開発が必要になるようなカスタマイズは遠慮なくご相談ください。

メールやSNSなどのメッセージで簡単に連絡いただいたあとで、電話していただけると確実です。

特に 03 で始まる番号は、営業電話が面倒で取らない場合がほとんどです。
また、メッセージだけだと時間が掛かるので、最初の最初はお電話からでお願いしたいです。

※電話にはスカイプ・Google Meet・Zoomなども含みます。