運営者情報
運営者
メニュー
メニュー

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

Xserverで特定のbotのアクセスを遮断する
当ページのリンクには広告が含まれている場合があります。

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

大前提ですが、自己責任でお願いします。

この記事を書いた人
プロフィールヘッダー背景
プロフィールアイコン
千切伝助
元水産養殖業従事者

1994年、水産養殖会社の所長をしていた当時、まだ珍しかったパソコン(DOS/V)を自費で購入し、九州の養殖場で育てていたブリ、カンパチ、ヒラメの在庫管理をエクセル化したのが、プログラミング的なことへの最初の挑戦でした。手作業での管理から解放された時の感動は忘れられません。

以来、私は一人でもくもくとパソコンに向かう時間が大好きです。培ってきた知識やスキルを、困っている多くの方と共有したいという気持ちから、このブログを立ち上げました。

一つ一つ、丁寧に、誰かの「できた!」を増やすお手伝いができれば幸いです。どうぞ、ゆっくりと記事をご覧ください。

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"を利用して、実際に効くのかを試した時のものです。

正規表現のエスケープが必要な文字の一覧は、外部サイトですが、このページが参考になります。

正規表現:エスケープが必要な文字一覧 | WWWクリエイターズ

よかったらシェアしてね!