Apache HTTP Serverでは、同一IPアドレスからのアクセス回数をカウントして一定回数以上の場合に永続的に拒否することは可能か

2024年6月23日

Apache HTTP Serverでは、同一IPアドレスからのアクセス回数をカウントして一定回数以上の場合に永続的に拒否することが可能です。これを実現するためには、Apacheのmod_securityモジュールやmod_evasiveモジュール、あるいはFail2Banのような外部ツールを使用することがあります。

以下に、mod_evasiveモジュールを使用した例を示します。このモジュールはDoS攻撃などからの保護を目的としていますが、同一IPアドレスからのアクセス回数制限も実現可能です。

  1. mod_evasiveモジュールのインストール:
    bash
    sudo apt-get install libapache2-mod-evasive
    

    インストールが完了したら、Apacheを再起動します。

    bash
    sudo systemctl restart apache2
    
  2. Apacheの設定:

    Apacheの設定ファイル(通常は /etc/apache2/apache2.conf/etc/httpd/conf/httpd.conf)に以下のような設定を追加します。

    apache
    <IfModule mod_evasive20.c>
        DOSHashTableSize 3097
        DOSPageCount 2
        DOSSiteCount 50
        DOSPageInterval 1
        DOSSiteInterval 1
        DOSBlockingPeriod 3600
    </IfModule>
    

    これにより、同一IPアドレスからの1秒あたりのリクエストが2回を超えるか、同一サイト全体で1秒あたり50回を超える場合に、そのIPアドレスを1時間ブロックします。設定は適宜調整してください。

  3. モジュールの有効化:

    mod_evasiveモジュールを有効にします。

    bash
    sudo a2enmod evasive
    

    Apacheを再起動します。

    bash
    sudo systemctl restart apache2
    

これにより、mod_evasiveモジュールが同一IPアドレスからのアクセスを監視し、設定に基づいてブロックするようになります。この例では1時間のブロック期間が設定されていますが、適切な期間を選択してください。

未分類

Posted by ぼっち