Xserverで特定のbotのアクセスを遮断する

User-Agentに含まれるbot独自の文字列を含んでいるかどうかで、アクセスを拒否する数行のコードを.htaccessに追記します。403を返すだけになるので帯域の節約になります。
大前提ですが、自己責任でお願いします。


Bytespiderというbotのアクセスが多発していた
Xserverのアクセス解析を見ていたら、Bytespiderというbotがえげつなくアクセスしてきていて邪魔に思えたので、.htaccessを編集してBytespiderからのアクセスには403を返すようにしました。
BytespiderというbotのUser-Agentを確認すると、
Mozilla/5.0 ..省略.. (compatible; Bytespider; spider-feedback@bytedance.com)
のようになっていて、最後に記載されているbytedance.comを調べると、どうやらTikTokの親会社のようでした。
かねてから除外したかったahrefsというSEOツール系のbotと一緒にアクセスを拒否します。
結果、このように、Bytespiderに対してことごとく403を返すようになります。
www.gsx-r400.com ..省略.. 403 "Mozilla/5.0 ..省略.. Bytespider; spider-feedback@bytedance.com
.htaccessに追記するコード
このコードを.htaccessの末尾に追記します。追記する時は、追記前の正常に動作している状態の.htaccessをどこかに必ずコピペしておいて、何か異常があればいつでも戻せるようにしておいてください。
# リクエストをブロックする条件を設定
SetEnvIfNoCase User-Agent "Bytespider" block
SetEnvIfNoCase User-Agent "bytedance" block
SetEnvIfNoCase User-Agent "ahrefs" block
<RequireAll>
Require all granted
Require not env block
</RequireAll>
Xserverのサーバーパネルの「.htaccess編集」→「設定対象ドメイン」を選択→「.htaccess編集」タブを開くと.htaccessが編集できます。すでにWordPressやXserverが書き込んだ設定が書き込まれているでしょう。
その末尾に上記コードをコピペします。
このコードを簡単に解説すると、
.htaccessでは#で始まる行はコメントです。処理されません。
SetEnvIfNoCaseのSetEnvというのは、環境変数を設定する命令で、User-AgentにBytespiderが含まれていたら、そのアクセスに対してblockという環境変数をセットするという意味になります。
SetEnvIfNoCaseは、SetEnvの大文字・小文字を区別しない(NoCase)命令。BytespiderでもbyteSpiderでもbytespiderでも大文字・小文字を区別せずに含まれているかを判定します。
Require all grantedで一旦すべてのアクセスを許可しておいて、Require not env blockで環境変数(env)がblockなアクセスを拒否しています。
ご自分で他のものを追加する場合に気をつけてほしいこと
ご自分で他のものを追加する場合に気をつけてほしいのは、SetEnvは"Bytespider"のようにダブルクオートで囲んで与えられた文字を正規表現で分析するので、正規表現でエスケープが必要な文字はバックスラッシュ( \ )でエスケープしないと、すべてのアクセスが500エラーになるので注意してください。
例えば、"Safari/537.36"を含んでいるのを遮断する場合は、ピリオドが正規表現のエスケープ対象文字なので、
SetEnvIfNoCase User-Agent "Safari/537\.36" block
のように、ピリオドの前にバックスラッシュをつけます。
ちなみにこれは、私のブラウザからアクセスした時のUser-Agentをブラウザの開発ツールで調べて、その中にあった"Safari/537.36"を利用して、実際に効くのかを試した時のものです。
正規表現のエスケープが必要な文字の一覧は、外部サイトですが、このページが参考になります。