不正アクセスしてきたIPを自動的に記録してブロックするwordpressプラグイン

不正アクセスしてくる自動攻撃プログラムが流行っているのですが、そのIPをブラックリストとして記録して、以後はアクセスをブロックするプラグインを作りました。

ダウンロード

ダウンロード:x-black-ip-listing.zip

インストール方法

  1. 上記からx-black-ip-listing.zipファイルをダウンロードして解凍してください。
  2. フォルダ「/wp-content/plugins」にダウンロードしたフォルダをそのままアップロードしてください。
  3. 「ダッシュボード→プラグイン→インストール済みプラグイン」の画面で「X IP Blacklist」というのが表示されているので「有効」にしてください。

ソースコード

難しいことはしていません。アクセスを調べて、ダメだったら記録して、2回目以降ばブロックしてるだけです。

<?php
/*
Plugin Name: X IP Blacklist
Description: xmlrpcに不正アクセスしてきたIPをブラックリストとして記録してブロックします。【注意】xmlrpcサービスを使うプラグインと同時に使うことはできません。ブラックリストをリセットするには、FTPでログインして「/wp-content/uploads/black-ip-list」フォルダを削除してください。
Version: 0.1
Author: x-nonce
Author URI: https://xnonce.com/%E4%B8%8D%E6%AD%A3%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%97%E3%81%A6%E3%81%8D%E3%81%9Fip%E3%82%92%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%A6%E3%83%96%E3%83%AD%E3%83%83/
 */

/* ------------------------------------------------------------ */

// リモートのIP
define('XBIL_REMOTE_IP', getenv('REMOTE_ADDR'));

// ログファイルの保存場所
$upload_dir = wp_upload_dir();
define('XBIL_DIR', $upload_dir['basedir'] . '/black-ip-list');

// ログファイル
define('XBIL_LOGFILE', XBIL_DIR . '/' . XBIL_REMOTE_IP . '.txt');

/* ------------------------------------------------------------ */

// 作業ディレクトリ作成
if (!file_exists(XBIL_DIR)) {
    mkdir(XBIL_DIR);
    file_put_contents(XBIL_DIR . '/index.html', '');
}

/* ------------------------------------------------------------ */

// もしファイルが存在したらアクセス禁止
if (file_exists(XBIL_LOGFILE)) {
    wp_die('Your IP address is on the blacklist.');
}

/* ------------------------------------------------------------ */

// もしxmlrpcにアクセスがあったらファイル作成
if (preg_match('/xmlrpc\.php/', getenv('REQUEST_URI'))) {
    file_put_contents(XBIL_LOGFILE, '1');
}

動作・解説・使い方

xmlrpc.phpにアクセスしてきたIPを「/wp-content/uploads/black-ip-list」フォルダに記録します。

もし、記録されたIPからアクセスがあった場合、エラーページを表示します。

IPをデータベースに記録せずにファイルに記録する理由ですが、データベースの負荷を下げたいのと、移行を容易にするためです。(wordpressとデータベースとコネクションを張ってクエリ発行して検索して結果を受信するよりも、ファイルを検索するほうが速い。)

  • xmlrpcサービスを使うプラグインと同時に使うことはできません。(例:wordpressアプリ)
  • 誤ったIPが記録されてしまった場合には「/wp-content/uploads/black-ip-list」フォルダ内にある該当IP同じ名前のテキストファイルを削除してください。
  • ブラックリストをリセットする場合には、FTPでログインして「/wp-content/uploads/black-ip-list」フォルダを削除してください。

質問・コメントなどあると嬉しいです