アクセスログを確認していたところ、同じ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が一種減ります。