WordPressを運用しているサイトは、以前から不正なログイン対策などが必要になっています。2020年春には、このWordPressに対する不正なログイン試行が増加しています。
狙われるWordPress不正アクセスのURI
WordPressサイトで不正アクセスや不正なログイン試行がされる場所は次のようなURIです。
- wp-login.php
- xmlrpc.php
wp-login.phpは、/wp/ や /shop/ などサブディレクトリを追加して、存在するかの確認などを含めてアクセスされる場合があります。
xmlrpc.phpは、WordPressのXMLRPCを使用したリモート投稿やプラグインが記事の管理をするために使うことがある機能です。
しかし、xmlrpc.phpは、WordPressのpinbackを悪用してDoS攻撃に使用されることがあります。
この不正アクセスが多くなると、サイトのページが表示できなくなったり、不正アクセスにサーバーの資源がとられてしまい ページビューが減ってしまうこともあります。
wp-login.phpとxmlrpc.phpの対策
特に狙われるのは wp-login.php と xmlrpc.php です。この二つをメインに対策します。
まずは、wp-login.phpの対策。.htaccessなどでwp-login.phpへのアクセスを拒否します。
Order deny,allow Deny from all Allow from 自社の固定IPアドレス
同じように xmlrpc.php も設定します。
Order deny,allow Deny from all Allow from 自社の固定IPアドレス
効果が薄いBASIC認証での対策
不正なログインを回避するため、wp-login.phpに対してBASIC認証をつけるケースがあるようです。しかし、wp-login.php にBASIC認証をつけてしまうとサーバーへのアクセスを許してしまい、またBASIC認証に応えるためにサーバーの資源を無駄に使われてしまいます。
固定IPアドレスなどが設定できない場合もありBASIC認証に頼らなくてはいけない場合もありますが、BASIC認証でのアクセス制御は不正アクセスの対策としては十分ではないことに気をつける必要があります。
Apache httpdよりも前にアクセスを拒否する
Apache httpdのアクセス制御(.htaccess)でアクセスを拒否できますが、サーバーのログには記録されます。
また、Apache httpdに接続を許可してしまうのは間違いありませんので、サーバーの資源も無駄になります。
そもそもApache httpdに接続させないためには iptables などのファイヤーウォール機能で接続を拒否します。
不正アクセスで拒否(アクセスログで Status 403)になったIPアドレスを次のように拒否します。
# vi /etc/sysconfig/iptables -A INPUT -s xxx.xxx.xxx.xxx/24 -j DROP # service iptables restart
これで、不正アクセスしてきているIPアドレスの接続を拒否できます。
ただし、不正アクセスするコンピュータを全て登録していたのでは、管理だけで時間がとられてしまい人的リソースの無駄が多くなります。
さらなる不正アクセスの防止(WAFの導入)
WordPressコンテンツを提供しているサーバーでの対策には、限界があります。
コンテンツを提供するWordPressサーバーは、コンテンツに専門化して、不正なアクセスは専用の仕組み「Web Application Firewall(WAF)」で対策する方法があります。
弊社が管理しているWebサイトでは、ほぼ全てのサイトでWAFを導入し、wp-login.php や xmlrpc.php それ以外の不正アクセスに使われる可能性のあるURIを、WAFでブロックしています。
導入前までは、不正アクセスによるページ表示の不具合や、ページ表示速度の低下などの問題がありましたが、WAF導入後にはこういった問題から解放されました。