WordPress 管理画面wp-login.phpほかのアクセス制限 メモ

wordpress への不正アクセスなどへの対策やっていますか?
最近だと、レンタルサーバー会社自体で、海外IPをブロックする対策を導入していたりして安心度は増しましたが、国内IPだけだから絶対安心とは限りません。

WordPressのログインを一定回数以上間違えるとロックするプラグイン
Limit Login Attempts
https://wordpress.org/plugins/limit-login-attempts/

ログイン履歴(エラーもふくめて)を記録してくれるプラグイン
Crazy Bone
https://wordpress.org/plugins/crazy-bone/

などを使わせて頂いてますが、数は多くないですがあります。
ログイン試行している形跡が。

一番有効なのはやはり.htaccessでのIP制限だと思います。
特定のIPだけを許可したい、特定のIPだけを拒否したいという場合があると思うのでその時のためにメモしておきます。

制限をかける対象のファイル・ディレクトリ

  • wp-config.php
  • wp-login.php
  • wp-admin/
  • xmlrpc.php

wp-config.phpのアクセス制限

wp-config.php はデータベース情報など重要情報が記載されているのでアクセスできないようにしておきます。

<Files "wp-config.php">
order deny,allow
deny from all
</Files>

wp-login.phpのアクセス制限

■特定のIPのみ許可する

<Files "wp-login.php">
order deny,allow
deny from all
allow from 192.168.xx.xx
</Files>

※192.168.xx.xxからのアクセスだけ許可する
複数指定する場合は、改行してallow from を記述

■特定のIPを拒否する

アクセスする場所が限定できない場合はこっち

<Files "wp-login.php">
order allow,deny
allow from all
deny from 192.168.xx.xx
</Files>

※192.168.xx.xxからのアクセスを拒否する

wp-adminディレクトリのアクセス制限

※wp-adminディレクトリ内にある「admin-ajax.php」は、プラグインで使われている場合があるので対象から外した方がよいらしいです。
Gatespace's Blogさんの記事から
http://gatespace.jp/2013/05/21/wp-admin-access-restriction-ver3-5-1/

wp-adminディレクトリ内に.htaccess を置く

■特定のIPのみ許可する

order deny,allow
deny from all
allow from 192.168.xx.xx
<FilesMatch "(admin-ajax.php)$">
    Satisfy Any
    Order allow,deny
    Allow from all
    Deny from none
</FilesMatch>

xmlrpc.phpの対策

xmlrpc.phpに対しブルートフォースアタックをかけられるのを防ぐため
※Pingback機能を悪用して踏み台にするらしい

<Files "xmlrpc.php">
order deny,allow
deny from all
</Files>

もしくは、Disable XML-RPC Pingbackプラグインを利用する
https://ja.wordpress.org/plugins/disable-xml-rpc-pingback/

.htaccessでの制限の記述おさらい

アクセス制限をかける場合、
「すべてを許可してから特定のIPを拒否する」
「すべてを拒否してから特定のIPを許可する」
という設定方法があります。
それを記述するのが「order」です。

すべてを許可する  order deny,allow
すべてを拒否する   order allow,deny

「すべてを許可してから特定のIPを拒否する」
order deny,allow
allow form 許可する対象
deny from 拒否する対象

「すべてを拒否してから特定のIPを許可する」
order allow,deny
deny from 拒否する対象
allow from 許可する対象