web-dev-qa-db-ja.com

HAproxy + ApacheでHTTP接続フラッドを軽減する

私たちのインフラストラクチャは、HAProxyとApacheを実行するロードバランサーで構成されており、Apacheのみを実行するアプリサーバーにトラフィックを転送します。過去数日間、ロードバランサーが問題なく通過する接続フラッドが発生していますが、接続はすぐにアプリケーションサーバーを圧倒します。それらは応答しなくなり、私たちの唯一の緩和策は、洪水を維持するためにより多くのアプリケーションサーバーを起動することです。ロードバランサーに実際のスパイクトラフィックがなかったため、最初はこれらのサーバーがダウンする理由を特定できませんでしたが、調査の結果、Apache接続の数が屋根を通過していることがわかりました。

添付されているのは、洪水の唯一の指標であると思われるいくつかのグラフです。各バックエンドサーバーのHAProxymaxconnディレクティブをより妥当な数(以前のデフォルトは255)に下げましたが、新しい正当な接続がフラッドが治まるまで遅れるのではないかと心配しています。このサービスは、既存の接続を持つユーザーには稼働しているように見えますが、HAProxyはホストに関係なくレート制限されているため、新しい接続と外部監視サービスに依存しているように見えます。

負荷を維持するために私たちの側でできることは他にありますか(HAProxyまたはApache)、またはネットワークの外部でそれをフィルタリングすることを検討する必要がありますか?トラフィックが非常に少ないので、もっとできることがあるように感じますが、HAProxyのすべての機能についてはあまり詳しくありません。 HAProxyがIPに基づいてレート制限できるかどうかを調べることにも興味がありますが、何も見つかりませんでした。

EDIT:ロードバランサーの1つのアクセスログを監査しました。上位IPのリクエスト数は次のとおりです。

1070 69.64.*.*
1227 1.9.*.*
1235 64.71.*.*
1376 69.64.*.*
1459 12.189.*.*
1572 1.9.*.*
1678 208.106.*.*
1982 5.15.*.*
2630 23.22.*.*
3300 76.125.*.* (our office)
3543 216.38.*.*

そのため、小さなウィンドウ内であまりにも多くのセッションを確立するIPを動的に禁止することはできましたが、リクエストの総数に基づいてブロックすることはできませんでした。このルートは意味がありますか?ロードバランサーのiptablesレベルでこれを行う必要がありますか?

どんなアドバイスも大歓迎です!

ありがとう、

クリス

enter image description hereenter image description hereenter image description hereenter image description hereenter image description hereenter image description here

まず、取得するのが「単なる」接続フラッドである場合、haproxyは有効な要求のみをサーバーに渡し、要求のないプレーン接続は渡さないため、サーバーにmaxconnを設定するだけで十分です。また、maxconnを低くすると、サーバーが高速になり、一般にユーザーへのサービスが高速になります(低くなりすぎない限り、ApacheマシンのCPUコアの数を少なくとも2〜3倍に保ちます)。

リクエストフラッドが発生した場合は、より適切な対策が必要です。 Haproxy 1.5-devにはこれらの数があり、要求が多すぎる、接続レートが高すぎる、同時接続が多すぎる、またはエラーが多すぎるIPアドレスをブラックリストに登録できます。

ここに素晴らしい説明があります http://blog.exceliance.fr/2012/02/27/use-a-load-balancer-as-a-first-row-of-defense-against-ddos/ これを設定する方法について。

これがお役に立てば幸いです。

1
Willy Tarreau