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

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

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

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

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

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

退職後、「何か自分で作りたい!」という強い思いが湧き上がり、長年親しんできた海の世界、特に潮の満ち引きに関する知識を活かしたいと考え、潮汐Webアプリ『タイドウェザー』を開発しました。

振り返れば、私のDIY人生は意外と早くから始まっていたのかもしれません。
1994年、まだ珍しかったパソコンを自費で購入し、九州の養殖場で育てていたブリ、カンパチ、ヒラメの在庫管理をエクセル化したのが、プログラミング的なことへの最初の挑戦でした。手作業での管理から解放された時の感動は忘れられません。

このWebサイトのWordPressテーマも自作です。既製品では満足できない、そんなDIY精神が私の原動力です。
漁師さんが採ってきた稚魚に1年間エサをやり、育てた成魚を市場に出荷していました。
還暦を迎えた今も、自分で考え、試行錯誤しながら何かを作り上げる喜びは変わりません。

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クリエイターズ

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