ロードバランサー(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呼び出しの攻撃を自動的にブロックするための推奨される方法は何ですか。
[〜#〜] ossec [〜#〜] (FOSSホストベースの侵入検知システム)を使用してApache 2.4でこれを行う方法について 拡張ブログ投稿 を作成しました)。 TLDRは次のとおりです。
Require not ip 1.2.3.4
のようなmod_authz_Hostディレクティブを含むファイルを追加するOSSECのカスタム アクティブ応答スクリプト を作成します。command
およびactive-response
構成ブロックから設定をコピーすることをお勧めします Host-deny active -応答。これは、それ以上のアラートをトリガーした場合にIPアドレスを10分間ブロックします レベル6 。local_rules.xml
定義ファイルにいくつかのカスタムルールを追加します。これにより、X frequency in Y timeframe と一致したときに上記のアクティブな応答がトリガーされます。 =(10秒間に50回以上言う、またはあなたが虐待すると考えるものは何でも)。OSSEC(または他のHIDS)をまだ使用していない場合は、心からお勧めします。セットアップが非常に簡単で、箱から出してすぐに多くの機能を提供します。 DigitalOceanには、Ubuntu 14.04用の優れた OSSECインストールチュートリアル があります(他のLinuxでもかなりうまくいくことができます)。各サーバーに「ローカル」モードでインストールして開始し、後で再配置して、豪華なクライアントサーバーアーキテクチャを使用することができます。
また、この手法では、IPがブロックリストに追加されるたびにApacheを自動的に再起動する必要があることに注意してください。これは、一部の人にとっては初心者ではない可能性があります。
これは、 mod_evasive と mod_rpaf を組み合わせて行うことができます。
前者ではIPアドレスで制限でき(たとえばDOS攻撃を阻止するため)、後者ではX-FORWARDED-FORアドレスをIPとして表示できます。これについては、 this質問 。
(mod_rpafが機能しない場合は、mod_evasiveのソースをハックする必要があります。)