さまざまな種類の攻撃からWebサーバーを保護することは、システム管理者にとって重要な責任です。 ModEvasiveは、DoS、DDoS、およびブルートフォース攻撃が発生した場合にWebサーバーを保護するのに役立つApacheWebサーバーモジュールです。これらのタイプの攻撃により、サーバーのメモリが不足し、Webサイトがクラッシュします。
mod_evasiveモジュールは、IPアドレスとURIのハッシュテーブルを作成し、次のような疑わしい着信サーバー要求を監視することで機能します。
- 1秒あたり100を超える同時接続を確立します。
- 同じページを1秒間に数回リクエストする。
このような疑わしいリクエストが発生した場合、mod_evasiveモジュールは403エラーを送信し、IPアドレスをブロックします。
このチュートリアルでは、Ubuntu18.04サーバーにApacheを使用してmod_evasiveをインストールおよび構成する方法を示します。
前提条件
- Atlantic.Netクラウドプラットフォーム上の新しいUbuntu18.04VPS。
- サーバーに構成されている静的IPアドレス。
ステップ1-Atlantic.Netクラウドサーバーを作成する
まず、Atlantic.Netクラウドサーバーにログインします。少なくとも1GBのRAMを搭載したオペレーティングシステムとしてUbuntu18.04を選択して、新しいサーバーを作成します。 SSH経由でクラウドサーバーに接続し、ページの上部で強調表示されているクレデンシャルを使用してログインします。
Ubuntu 18.04サーバーにログインしたら、次のコマンドを実行して、ベースシステムを最新の利用可能なパッケージで更新します。
apt-get update -y
ステップ2–mod_evasiveをインストールする
開始する前に、ApacheWebサーバーをサーバーにインストールする必要があります。インストールされていない場合は、次のコマンドでインストールできます。
apt-get install apache2 apache2-utils -y
Apache Webサーバーをインストールしたら、次のコマンドを使用してmod_evasiveをインストールできます。
apt-get install libapache2-mod-evasive -y
インストール中に、Eメール通知用にPostfixメールサーバーを設定するように求められます。ご希望のオプションを選択して、インストールを完了することができます。よくわからない場合は、ローカルのみを選択してください。 または構成なし 。
mod_evasiveをインストールした後、次のコマンドを実行して、mod_evasiveモジュールが有効になっているかどうかを確認できます。
apachectl -M | grep evasive
次の出力が得られるはずです:
[Mon Jan 27 13:55:35.707317 2020] [so:warn] [pid 29031] AH01574: module dav_module is already loaded, skipping evasive20_module (shared)
この時点で、mod_evasiveモジュールがインストールされ、有効になっています。これで、次のステップに進むことができます。
ステップ3–mod_evasiveを構成する
mod_evasiveのデフォルトの設定ファイルは/etc/apache2/mods-enabled/evasive.confにあります。要件に応じてこのファイルを構成する必要があります。
以下に示すように、nanoエディターを使用してこのファイルを開くことができます。
nano /etc/apache2/mods-enabled/evasive.conf
以下のようにファイルを変更します。メールを送信するアドレス(構成されている場合)とDOSSystemCommandにDOSEmailNotifyを修正することをお勧めします(例:「su– richard -c‘/ sbin…%s…’」
<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 100 DOSEmailNotify [email protected] DOSSystemCommand "su - someuser -c '/sbin/... %s ...'" DOSLogDir "/var/log/mod_evasive" </IfModule>
終了したら、ファイルを保存して閉じます。
各オプションの簡単な説明を以下に示します:
- DOSHashTableSize :mod_evasiveは、このオプションを使用してハッシュテーブルのサイズを制御します。 Webサーバーがビジー状態の場合は、これを増やすことをお勧めします。
- DOSPageCount :このオプションは、1秒あたりに同じURIに許可される要求数のしきい値制限を指定します。しきい値の制限を超えると、クライアントのIPアドレスがブラックリストに登録されます。
- DOSSiteCount :このオプションは、同じIPアドレスに許可されるリクエストの総数の制限を指定します。
- DOSPageInterval :このオプションは、ページカウント間隔を指定します。
- DOSSiteInterval :このオプションは、サイトカウント間隔を指定します。
- DOSBlockingPeriod :このオプションは、クライアントがブロックされる時間を秒単位で定義します。
- DOSEmailNotify :このオプションは、IPアドレスがブラックリストに登録されている場合に、指定されたアドレスに電子メールを送信します。
- DOSSystemCommand :IPアドレスがブラックリストに登録されると、指定されたシステムコマンドが実行されます。
- DOSLogDir :このオプションは、mod_evasiveログディレクトリを定義します。
次に、次のコマンドを使用して、mod_evasiveログを保存するディレクトリを作成し、その所有権をwww-dataに変更します。
mkdir /var/log/mod_evasive chown -R www-data:www-data /var/log/mod_evasive
最後に、Apacheサービスを再起動して、変更を実装します。
systemctl restart apache2
ステップ4–mod_evasiveをテストする
この時点で、mod_evasiveモジュールがインストールおよび構成されています。モジュールが正しく機能しているかどうかをテストするときが来ました。
リモートシステムに移動し、abコマンドを使用してサーバーにバルクページリクエストを送信します。
ab -n 1000 -c 20 http://your-server-ip/
このコマンドは、10の同時接続で1000のページ要求を送信することにより、DoS攻撃と同等の攻撃を引き起こします。
サーバーで、次のコマンドを実行してメールログを確認します。
tail -15 /var/mail/root
クライアントのIPアドレスがmod_evasiveによってブラックリストに登録されていることがわかります。
Received: by ubuntu1804 (Postfix, from userid 33) id B0C3EC1753; Mon, 27 Jan 2020 14:15:09 +0000 (UTC) To: [email protected] MIME-Version: 1.0 Content-Type: text/plain; charset="ANSI_X3.4-1968" Content-Transfer-Encoding: 8bit Message-Id: <[email protected]> Date: Mon, 27 Jan 2020 14:15:09 +0000 (UTC) From: www-data <[email protected]> To: [email protected] Subject: HTTP BLACKLIST 103.250.161.100 mod_evasive HTTP Blacklisted 103.250.161.100
test.pl組み込みスクリプトを使用してmod_evasiveをテストすることもできます。このスクリプトを機能させるには、このスクリプトを変更する必要があります。
次のようにスクリプトを編集できます:
nano /usr/share/doc/libapache2-mod-evasive/examples/test.pl
次の行を見つけます:
print $SOCKET "GET /?$_ HTTP/1.0\n\n";
次のように置き換えます:
print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n";
終了したら、ファイルを保存して閉じます。次に、perlコマンドを使用してスクリプトを実行します。
perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
すべてが正常に機能する場合は、次の出力が得られるはずです。
HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden
結論
おめでとう!これで、mod_evasiveモジュールは、DDoS攻撃とブルートフォース攻撃からサーバーを保護するように構成されました。