botのアクセス遮断について

サーバ
ブラウザによって接続できる様子

アクセスログを確認していたところ、同じIPアドレスから頻繁にアクセスがあるので調べてみたところ、botと判明しました。(UAの一部 Bytespider; spider-feedback@bytedance.com)
 調べてみたところ、あまり好かれていないbotのようでしたので、botをブロックする方法について実験した様子を記載します。

環境

OS Ubuntu 22.04.3
Webサーバ apache 2.4.52

実験前の確認

①モジュールの確認(標準で使えるはずです)

今回はApachのmod_setenvifモジュールとauthz_coreモジュールを使用するので、ubuntuで次のコマンドを実行し、モジュールが使用可能になっているか確認しました。

$ > apachestl -M | grep setenvif
:
setenvif module(shared)

$ > apachestl -M | grep authz_core
:
authz_core_module(shared)

標準インストールしたapache 2.4.52では、両方のモジュールが有効になっていました。
なお、sharedとなっているのは「共有モジュール」と呼ばれる種類のモジュールであり、サーバが起動した後で、必要に応じで動的に実行されているモジュールのことらしいです。(メモリに優しい)

②自身のUA(ユーザエージェント)を確認する(知っていれば飛ばしてください)

 自分のブラウザで接続できなくなれば成功ですので、自分自身のブラウザで「確認くん」等を開いてUAを確認しておきます
私の環境では、UAが

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0

となっていたので、とりあえず「Edg/119.0.0.0」を含むブラウザをブロックすることを目標にしました。

③.htaccessファイルの有効化(すでに有効化していれば不要)

 次のコマンドでapacheの設定ファイルを開き、confファイルを修正します。

$ > sudo nano /etc/apache2/apache2.conf
↓
<Directory /var/www/>
     Options FollowSymLinks
     AllowOverride None
     Require all granted
</Directory>

となっていれば、
 AllowOverride None  → AllowOverride All に変更してください。

これで、/var/www/フォルダ以下に配置した.htaccessが有効になります。
 ※設定を変更した場合は、apacheの再起動が必要になります。

実験 (UAによるアクセス遮断)

 対象となるフォルダの.htaccessファイルを開き、編集します。
 私は、/var/www/html/以下としましたので、
   /var/www/html/.htaccess
を編集しました。
 このファイルが存在しない場合は、メモ帳などでテキストファイルを作成し、UTF-8形式で「.htaccess」というファイル名で保存してください。
.htaccessファイルの内容

<IfModule mod_setenvif.c>
    SetEnvIf User-Agent "Edg/119.0.0.0" block-bot
</IfModule>

<IfModule mod_authz_core.c>
    <RequireAll>
        Require all granted
        Require not env block-bot
    </RequireAll>
</IfModule>

(注意点)
 ファイルのアップロードにffftpを使用していると、.htaccessファイルが表示されないことがあります(ありました)

 ffftpの初期設定では
  ホスト一覧 → 対象のホストを選択 → 設定変更 → 高度タブ
    □ LISTコマンドでファイル一覧を取得
にチェックが入っているので、チェックを外した上で、
  表示タブ → 「.で始まるファイルを表示」にチェックが入っていることを確認
をしないと.htaccessファイルが表示されませんので注意してください。


 apacheを再起動して、HPを表示するとEdgeブラウザ上にエラーが表示されました。

 同じIPアドレスから接続しているのに、Edgeブラウザではエラーになり、ChromeブラウザではHPが表示されていることが確認できました。
 .htaccessによるフィルタリングを行うと、パーミッションエラーとして処理されるのですね。

Botの制限

 UAでアクセス制限ができることが確認できたので、.htaccessを次のように修正し、「Bytespider」という文字列を含むUAからの接続を遮断しました。

<IfModule mod_setenvif.c>
    SetEnvIf User-Agent "Bytespider" block-bot
</IfModule>

<IfModule mod_authz_core.c>
    <RequireAll>
        Require all granted
        Require not env block-bot
    </RequireAll>
</IfModule>

これでアクセスログからBotが一種減ります。