あなたのサイトは、ボットやスパマー、ハッカーから常に攻撃されていませんか?攻撃の頻度によっては、アクセス数や帯域幅に大きな影響を受けるため、攻撃者のIPアドレスをブロックすることをお勧めします。

すべてのKinstaプランには、特定のIPアドレスやIPアドレス範囲からのサイトへのアクセスをブロックする、無料の「IP拒否ツール」が付属します。この記事では、IPアドレスをブロックする、IP拒否ツールを含むいくつかの方法を説明します。

早速はじめましょう!

問題のあるIPアドレスを特定する方法

WordPressは動的なCMSですPHPワーカープロセスにより、必要な場合はキャッシュされていない新規のページが生成されます。このキャッシュされていないリクエストを処理するには、キャッシュされたリクエストに比べて、非常に多くのCPUリソースやRAMが必要なため、悪意のある人物が、大量のリクエストを送信してサーバーの応答を停止させることが可能です。

このような困った状況にある場合、サーバーの負荷を軽減する一つの方法として、問題のあるIPアドレスをブロックできます。

MyKinstaの分析ダッシュボードでは、サイトにアクセスしたIPアドレスの上位のリストを表示できます。「分析」>「位置情報とIP」にアクセスし、「リクエスト数上位のクライアントIP一覧」セクションまでスクロールしてください。

リクエスト数上位のクライアントIP一覧
リクエスト数上位のクライアントIP一覧

他のIPアドレスよりも多くのリクエスト、例えば5〜10倍のリクエストを行うIPアドレスがあった場合、そのIPアドレスがボットやスパマーかどうかを調査します。悪意あるIPアドレスを最も簡単に確認するには、CleanTalkSpamhausのようなレピュテーションチェッカーを使用します。

レピュテーションチェッカーがIPアドレスをボットまたはスパマーと識別する場合、次のアクションとして該当のIPアドレスをブロックできます。なお、レピュテーションチェッカーがIPアドレスを悪質なものとしてリストしない場合も、単にデータベースに登録されていないだけかも知れないことに注意してください。

該当のIPアドレスが原因でHTTP 502エラーが発生したり、サーバーが完全にダウンしたりしていると思われる場合、そのIPアドレスをブロックすることで状況が改善するかを試してみてください。

MyKinstaを使用したIPアドレスのブロック方法

MyKinstaダッシュボードの「IP拒否ツール」を使用すると、ウェブサーバーの設定ファイルを編集することなく、個別のIPアドレスとIPアドレス範囲の両方をブロックできます。Kinstaでホスティングしている場合、IPアドレスのブロックには、IP拒否ツールの使用を推奨します。

MyKinstaでIPアドレスをブロックするには、「サイト」>(あなたのサイト)>「IP拒否」に移動します。

MyKinstaのIP拒否ツール
MyKinstaのIP拒否ツール

次に、ページの右上にある「IPアドレスを追加」ボタンをクリックします。

ブロックするIPアドレスを追加
ブロックするIPアドレスを追加

「制限するIPアドレスを追加」モーダルウィンドウではブロックリストに、IPV4アドレス、IPV6アドレス、CIDR(Classless Inter-Domain Routing)のIPアドレス範囲を追加できます。CIDRの範囲は、IPアドレスの連続した範囲(例:127.0.0.1~127.0.0.255)をブロックする際に便利です。有効なCIDRの範囲を生成するには、こちらのようなツールの使用をお勧めします。

ブロックするIPアドレスの例をいくつか挙げます。

  • IPV4アドレス:5.140.141
  • IPV6アドレス:2001:0db8:0a0b:12f0:0000:0000:0000:0001
  • CIDRの範囲:0.0.1/32

ブロックするIPアドレスを追加したら、「IPアドレスを追加」ボタンをクリックしてください。

ブロックリストへのIPアドレスの追加
ブロックリストへのIPアドレスの追加

ブロックリストに追加されたIPアドレスが表示されます。このページでは、「操作」欄から2つのアクション「編集」と「削除」にアクセスできます。編集」では、IPアドレスや範囲を更新できます。「削除」ではブロックしたIPアドレスを削除できます。

ブロックしたIPアドレスの編集と削除
ブロックしたIPアドレスの編集と削除

CloudflareでのIPアドレスのブロック方法

Cloudflareユーザーであれば、Cloudflareダッシュボードの「IP Accessルール」ツールを使用して、IPアドレスやIP範囲をブロックできます。

Cloudflareのダッシュボードで、「ファイアウォール」>「ツール」にアクセスしてください。

Cloudflareのツールダッシュボード
Cloudflareのツールダッシュボード

新しいIP Accessルールを作成するには、IPアドレスを入力し、「ブロック」アクションを選択し、「このウェブサイト」または、Cloudflareの全ドメインにルールを適用する「アカウント内のすべてのウェブサイト」を選択して、「追加」をクリックします。

IP Accessルールの追加
IP Accessルールの追加

追加したAccessルールは、「IP Accessルール」のリストに表示されます。ここでは、アクションの変更、メモの追加、ルールの削除など、アクセスルールを変更できます。

CloudflareダッシュボードのIP Accessルール
CloudflareダッシュボードのIP Accessルール

Cloudflareは、「ブロック」アクションに加えて、「チャレンジ」、「許可リスト」、「JavaScriptチャレンジ」アクションをサポートしています。目的に応じて、「ブロック」の代わりにこれらのアクションを使用できます。

CloudflareでのIP範囲、国、ASNのブロック

CloudflareのIP Accessルールは、単一のIPアドレスだけでなく、IP範囲、国名、ASN(自律システム番号)にも対応しています。

  • IPの範囲でブロックするには、IP Accessルール値にCIDRの範囲を指定します。
  • 国でブロックするには、その国の英字2文字の国コードを指定します。
  • ASN(単一のネットワーク事業者が管理するIPのリスト)でブロックするには、「AS」で始まるASNを指定します。

NginxでのIPアドレスのブロック方法

サイトがNginxウェブサーバーでホスティングされている場合は、ウェブサーバーの設定で直接IPアドレスをブロックできます。この方法は、MyKinstaのIP拒否ツールやCloudflareのファイアウォールでIPをブロックする方法のようにユーザーフレンドリーではありませんが、特定の状況では唯一の選択肢となります。

NginxでIPアドレスをブロックするには、サーバーにSSH接続し、nanoテキストエディタでNginxの設定ファイルを開きます。

nano /etc/nginx/nginx.conf

Nginxで単一のIPアドレスをブロックする

Nginxで単一のIP(IPV4またはIPV6)アドレスをブロックするには、以下のようにdenyディレクティブを使用します。

deny 190.60.78.31;
deny 4b73:8cd3:6f7b:8ddc:d2f9:31ca:b6b1:834e;

NginxでCIDRのIP範囲をブロックする

NginxでCIDRのIP範囲をブロックするには、以下のディレクティブを使用します。

deny 192.168.0.0/24;

NginxでのIPブロックの高度なテクニック

特定のディレクトリ(例:domain.com/secret-directory/)へのアクセスをブロックするには、以下のNginxディレクティブを使用します。

location /secret-directory/ {
        deny 192.168.0.0/24;
}

denyディレクティブは、値としてallを取ります。これは、サイトへのすべてのIPアドレスをブロックする場合に便利です。deny all;ディレクティブはallowと一緒に使われることが多く、特定のIPアドレスのみを許可し、それ以外をブロックします。

location /secret-directory/ {
        allow 192.168.0.0/16;
        deny all;
}

Nginx構成を保存し、Nginxをリロードする

nanoでファイルの編集を終えたらCtrl+Oを押して変更を保存し、Ctrl+Xを押してnanoを終了します。

新しいIPブロックルールを有効にするには、以下のコマンドでNginxの設定を再読み込みする必要があります。

sudo systemctl reload nginx

ApacheでのIPアドレスのブロック方法

サイトがApacheウェブサーバでホスティングされている場合は、ウェブサーバの設定で直接IPアドレスをブロックできます。ApacheでIPアドレスをブロックするには、.htaccessファイルを使用する必要があります。.htaccessファイルは、特定のディレクトリに固有のルールを適用できます。サイト全体にルールを適用するには、.htaccessファイルをサイトのルートディレクトリに置く必要があります。

まず、サーバーにSSH接続し、サイトのルートディレクトリに移動して、以下のコマンドで.htaccessファイルを作成します。

touch .htaccess

次に、nanoテキストエディターで.htaccessファイルを開きます。

nano .htaccess

IPをブロックする正確なルールは、Apache 2.2と2.4のどちらを使用しているかによって異なるため、ここでは両方のバージョンのルールを記載します。.htaccessファイルを編集する際には、サイトのApacheのバージョンに合わせたルールを使用してください。

Apacheで単一のIPアドレスをブロックする

Apacheで単一のIP(IPV4またはIPV6)アドレスをブロックするには、以下のルールを使用します。

# Apache 2.2
order allow, deny
allow 192.168.0.0
deny from all

#Apache 2.4
Require all granted
Require not ip 192.168.0.0

ApacheでCIDRのIP範囲をブロックする

# Apache 2.2
order allow, deny
allow 192.168.0.0/16
deny from all

#Apache 2.4
Require all granted
Require not ip 192.168.0.0/16

まとめ

サイトに到達するIPアドレスをブロックする方法は、サイトの構成によって異なります。Kinstaユーザーであれば、MyKinstaに内蔵された「IP拒否ツール」の使用をお勧めします。

サイトがKinstaでホストされていない場合は、Cloudflareで保護することをお勧めします。Cloudflareでは、IPアドレス、範囲などをブロックする独自のIP Accessルールを作成できます。サイトにCloudflareを構成できない場合は、ウェブサーバーの設定ファイル内に直接、IPをブロックするルールで実装してください。