WordPressのwp-login.phpに対するDOS攻撃対策

auto_prepend_fileとhttpd.conf双方の対応方法

wp-login.phpへの連続アクセスに対処する2種類の方法。

WordPressのlogin_headアクションを利用して、ローカルネットワークと一部のグローバルアドレス以外からのwp-login.phpに対するアクセス制御をおこなってきたが、

  • WordPressの実行するコスト
  • httpdからのDBコネクション発生コスト

が生じるため、より良いwp-login.phpに対するDOS攻撃対策を書いてみる。

auto_prepend_file

auto_prepend_fileを利用してPHPのメインスクリプト(WordPress)を実行する前に、フックする感じで別のPHPスクリプトを実行することができる。

apacheのconfかhtaccessのVirtualHostディレクティブ内でauto_prepend_fileの設定をすることができる。

php_value auto_prepend_file C:\xampp\htdocs\vhost\wordpress3.9.1ja\wp-content\before_script.php

before_script.phpでローカルネットワーク以外からのwp-login.phpへのアクセスに404エラーを返すコードを追加する。

if( strpos($_SERVER['REQUEST_URI'], "/wp-login.php") !== false )
{
    if ( strpos(getenv("REMOTE_ADDR"), "192.168.0") !== false )
    {
	
    }
	
    else
    {
        header("HTTP/1.1 404 Not Found");
	exit();
    }
}

ここまでの設定で外部ネットワークからwp-login.phpに対するブルートフォースアタックなどから保護することができる。

この方法は、PHPを実行するコストは発生するもののWordPress実行前にアクセスを制御することができるため、WordPressのデータベースに対する接続コストも発生しない。また、純粋なPHPスクリプトであるため、より手の込んだDDOS攻撃を軽減するための処理やログ出力処理などを追加で書くことが可能。

httpd.confとhtaccess

wp-login.phpのアクセス制御でより一般的なのが、httpd.confもしくはhtaccessを利用した方法になる。一例として、locationディレクティブを利用して以下のようにwo-login.phpを保護することが可能。

<Location /wp-login.php>
    order deny,allow
    deny from all
    allow from 192.168.0.2
</Location>

wp-login.phpへのアクセスについては、192.168.0.2からのアクセスのみ可能にする設定になる。

wp-login.phpを保護するのであればこちらの設定の方がおすすめ。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WordPressのwp-login.phpに対するDOS攻撃対策の記事にコメントを投稿