端くれプログラマの備忘録 Apache [Apache] 特定のユーザエージェントからのアクセスをブロックする

[Apache] 特定のユーザエージェントからのアクセスをブロックする

Apacheで特定のユーザーエージェント(例えば Go-http-client/1.1)からのアクセスをブロックするには、以下の方法を使用します。mod_rewriteまたはmod_setenvifモジュールを使用するのが一般的です。

方法 1: mod_rewrite を使用する

  1. mod_rewriteを有効化
    Apacheでmod_rewriteが有効になっているか確認します。有効でない場合は以下を実行してください。
   sudo a2enmod rewrite
   sudo systemctl restart apache2
  1. .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を使用する場合、AllowOverrideAllまたはFileInfoに設定されていることを確認してください(/etc/apache2/apache2.confやバーチャルホスト設定ファイルを確認)。

方法 2: mod_setenvif を使用する

  1. mod_setenvifを有効化
    mod_setenvifが有効でない場合は、以下を実行して有効化します。
   sudo a2enmod setenvif
   sudo systemctl restart apache2
  1. 設定ファイルを編集
    サーバーの設定ファイル(例: /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: サーバーレベルでアクセスを拒否

  1. 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>
  1. サーバー設定を適用後、再起動:
   sudo systemctl restart apache2

設定確認とテスト

  1. 設定の確認:
    設定にエラーがないか確認します。
   apachectl configtest
  1. 動作確認:
    curlを使用して、対象のユーザーエージェントでテストできます。
   curl -A "Go-http-client/1.1" http://your-server-url

403 Forbiddenが返ってくることを確認してください。