hirosanote’s blog

検証環境の構築手順やネットワーク機器のテスト結果、関連する事について記載します。このブログは個人で行っており、所属する会社とは関係ありません。

slowhttp攻撃とロードバランサ

slow http攻撃は、時間がかかったり、終了しないHTTPリクエストを送ることにより、コネクションを長時間保持し大量に消費させる攻撃です。

 

プロキシタイプのロードバランサは、クライアントからのリクエストを終端してから、別のコネクションで実サーバとコネクションを作ります(Delayed Binding)。よって、クライアントから全てのHTTPリクエストを受け取ってから実サーバへデータを送るので、終了しないHTTPリクエストによって、実サーバのコネクションが消費されることがありません。

 

実際に動作テストを行ってみます。

slow http攻撃ツール : google slowhttptest

http://code.google.com/p/slowhttptest/downloads/list

ロードバランサ : Array vAPV

 

手順

1. CentOS6.5 minimalを標準でインストールし、以下を設定します。

-  FireWallの停止

chkconfig iptables off

- SE linuxの停止

vi /etc/selinux/config

SELINUX=disabled

 

2.slowhttptestのサイトより、ファイルをダウンロードします。ここでは、最新版のslowhttptest-1.6.tar.gzを使用しました。

- PCから、slowhttptestのURLへアクセスし、ファイルをダウンロードします。

- WinSCP等で、ファイルをLinuxサーバへアップロードします。

 

3.動作に必要なモジュールをインストールします。

yum install gcc-c++

yum install openssl-devel

 

4.slowhttpをインストールします。

- インストールファイルの展開

gzip -cd slowhttptest-1.6.tar.gz | tar xvf -

- フォルダの作成

mkdir /home/slowhttptest

- インストール

cd slowhttptest-1.6

./configure --prefix=/home/slowhttptest

make

make install

- 動作確認のために、ヘルプメッセージを表示

cd /home/slowhttptest/bin

./slowhttptest -h

 

ロードバランサのVIPへ対して、遅いHTTPヘッダリクエストを10コネクション作成し送ってみます。

構成

Client(192.168.0.33) ----- Port1 | VIP(192.168.0.78) | Port2 ---- Real Server(192.168.99.21)

./slowhttptest -c 10 -H -l 300 -g -o logtest -i 300 -r 10 -t GET -u http://192.168.0.78/ -x 10 -p 100

ロードバランサのコネクション情報を見てみます。

AN(config)#show connection
Proto Local Address Foreign Address state expire Interface
----------------------------------------------------------------------------------------
TCP 192.168.0.78:80 192.168.0.33:37440 ESTABLISHED 248 port1
TCP 192.168.0.78:80 192.168.0.33:37442 ESTABLISHED 248 port1
TCP 192.168.0.78:80 192.168.0.33:37434 ESTABLISHED 248 port1
TCP 192.168.0.78:80 192.168.0.33:37436 ESTABLISHED 248 port1
TCP 192.168.0.78:80 192.168.0.33:37438 ESTABLISHED 248 port1
TCP 192.168.0.78:80 192.168.0.33:37441 ESTABLISHED 248 port1
TCP 192.168.0.78:80 192.168.0.33:37433 ESTABLISHED 248 port1
TCP 192.168.0.78:80 192.168.0.33:37435 ESTABLISHED 248 port1
TCP 192.168.0.78:80 192.168.0.33:37437 ESTABLISHED 248 port1
TCP 192.168.0.78:80 192.168.0.33:37439 ESTABLISHED 248 port1

Port1のClientとVIP間のコネクションが作成されますが、Port2側の実サーバとのコネクションは作成されていません。よって、HTTPヘッダが全て送られない場合、コネクションはロードバランサのみに作成され、実サーバには作成されません。ロードバランサ標準の機能によって、slowhttp攻撃から実サーバを守ることが出来ます。