Apacheで特定のユーザーエージェント(例えば Go-http-client/1.1
)からのアクセスをブロックするには、以下の方法を使用します。mod_rewrite
またはmod_setenvif
モジュールを使用するのが一般的です。
方法 1: mod_rewrite を使用する
mod_rewrite
を有効化
Apacheでmod_rewrite
が有効になっているか確認します。有効でない場合は以下を実行してください。
sudo a2enmod rewrite
sudo systemctl restart apache2
- .htaccessにルールを追加
サイトのルートディレクトリ(例:/var/www/html/
)にある.htaccess
ファイルを編集するか、新しく作成します。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Go-http-client/1\.1 [NC]
RewriteRule ^ - [F,L]
説明:
RewriteCond
は特定の条件(この場合はユーザーエージェント)に一致するリクエストを対象とします。RewriteRule ^ - [F,L]
はリクエストを拒否し、403 Forbiddenを返します。
3. 設定を適用
サーバーの設定に応じて、.htaccess
を使用する場合、AllowOverride
がAll
またはFileInfo
に設定されていることを確認してください(/etc/apache2/apache2.conf
やバーチャルホスト設定ファイルを確認)。
方法 2: mod_setenvif を使用する
mod_setenvif
を有効化mod_setenvif
が有効でない場合は、以下を実行して有効化します。
sudo a2enmod setenvif
sudo systemctl restart apache2
- 設定ファイルを編集
サーバーの設定ファイル(例:/etc/apache2/sites-available/000-default.conf
)や.htaccess
に以下を追加します。
SetEnvIfNoCase User-Agent ^Go-http-client/1\.1 block_bad_bot
<RequireAll>
Require all granted
Require not env block_bad_bot
</RequireAll>
説明:
SetEnvIfNoCase
は、ユーザーエージェントが条件に一致する場合に環境変数block_bad_bot
を設定します。<RequireAll>
でblock_bad_bot
が設定されたリクエストを拒否します。
3. 設定を有効化
設定ファイルを保存したら、Apacheを再起動します。
sudo systemctl restart apache2
方法 3: サーバーレベルでアクセスを拒否
mod_rewrite
またはmod_setenvif
を使わず、サーバーレベルの設定で直接拒否することもできます。 バーチャルホスト設定に以下を追加:
<Location />
BrowserMatchNoCase "^Go-http-client/1\.1" block_bad_bot
<RequireAll>
Require all granted
Require not env block_bad_bot
</RequireAll>
</Location>
- サーバー設定を適用後、再起動:
sudo systemctl restart apache2
設定確認とテスト
- 設定の確認:
設定にエラーがないか確認します。
apachectl configtest
- 動作確認:
curl
を使用して、対象のユーザーエージェントでテストできます。
curl -A "Go-http-client/1.1" http://your-server-url
403 Forbiddenが返ってくることを確認してください。