web-dev-qa-db-ja.com

ロードバランサーの背後でApacheで繰り返されるhttpリクエストをブロックする

ロードバランサー(ELB)の背後でApacheを実行しているAWS上のEC2サーバーがいくつかあります。一部のIPアドレスは、EC2サーバーでホストされているAPIを悪用し、サービス拒否を引き起こすことがあります。ロードバランサーにアクセスできないため、サーバーレベルでアクセスをブロックする必要があります。

ロードバランサーによって提供されるX-Forwarded-Forヘッダーに基づいてIPを表示するようにApacheアクセスログを変更しました(そうでない場合は、ロードバランサーのIPを表示するだけです)。これにより、これらのIPを識別してブロックできます(ここでもX- Forwarded-For)のようなもの:

<Directory api_dir>
                SetEnvIF X-FORWARDED-FOR "1.1.1.1" DenyIP
                Order allow,deny
                allow from all
                deny  from env=DenyIP
</Directory>

ただし、これは、すべての攻撃を手動で処理する必要があることを意味し、その結果、サーバーでダウンタイムが発生します。

IPではなく、ロードバランサーからのForwarded-Forヘッダーに基づいて、繰り返されるHTTP呼び出しの攻撃を自動的にブロックするための推奨される方法は何ですか。

3
hillel

[〜#〜] ossec [〜#〜] (FOSSホストベースの侵入検知システム)を使用してApache 2.4でこれを行う方法について 拡張ブログ投稿 を作成しました)。 TLDRは次のとおりです。

  1. mod_remoteip を使用して、ロードバランサーIPの代わりにクライアントIPをログに記録します。
  2. Vhost構成で、 IncludeOptional ディレクティブを RequireAll ディレクティブ内で使用して、OSSECによって書き込まれた他の mod_authz_Host ディレクティブを含むディレクトリにソースを設定します。
  3. OSSECが悪意のあるアクティビティを検出するIPアドレスごとに、上記のディレクトリにRequire not ip 1.2.3.4のようなmod_authz_Hostディレクティブを含むファイルを追加するOSSECのカスタム アクティブ応答スクリプト を作成します。
  4. 上記のアクティブ応答スクリプトの使用を開始するようにOSSECを構成します-OSSECのデフォルトのcommandおよびactive-response構成ブロックから設定をコピーすることをお勧めします Host-deny active -応答。これは、それ以上のアラートをトリガーした場合にIPアドレスを10分間ブロックします レベル6
  5. Apacheアクセスログに記録されたHTTPリクエストのOSSECのlocal_rules.xml定義ファイルにいくつかのカスタムルールを追加します。これにより、X frequency in Y timeframe と一致したときに上記のアクティブな応答がトリガーされます。 =(10秒間に50回以上言う、またはあなたが虐待すると考えるものは何でも)。

OSSEC(または他のHIDS)をまだ使用していない場合は、心からお勧めします。セットアップが非常に簡単で、箱から出してすぐに多くの機能を提供します。 DigitalOceanには、Ubuntu 14.04用の優れた OSSECインストールチュートリアル があります(他のLinuxでもかなりうまくいくことができます)。各サーバーに「ローカル」モードでインストールして開始し、後で再配置して、豪華なクライアントサーバーアーキテクチャを使用することができます。

また、この手法では、IPがブロックリストに追加されるたびにApacheを自動的に再起動する必要があることに注意してください。これは、一部の人にとっては初心者ではない可能性があります。

2
Justin Ludwig

これは、 mod_evasivemod_rpaf を組み合わせて行うことができます。

前者ではIPアドレスで制限でき(たとえばDOS攻撃を阻止するため)、後者ではX-FORWARDED-FORアドレスをIPとして表示できます。これについては、 this質問

(mod_rpafが機能しない場合は、mod_evasiveのソースをハックする必要があります。)

2
Keith