端くれプログラマの備忘録 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が返ってくることを確認してください。