Configuring TCP Intercept(1回目)

はじめに

今回はTCP Interceptについて取り上げます。TCP Interceptは主に外部に公開
しているサーバに対するTCP SYN FloodingといったDoS Attackへの対策として
使用される機能です。

About TCP Intercept

TCP Interceptは、TCPを使用するアプリケーションを載せたサーバがTCP SYN Flooding
のようなDoS Attackにさらされるのを軽減する機能です。

TCP SYN Floodingというのは

-クラッカーが送信元アドレスを偽造し
-サーバに対して大量のSYNパケットを送りつけ
-サーバはそれらのSYNに対するSYN ACKを返し
-ACKが返ってきたときにどのセッションか判断できるようにメモリ上にセッションの情報を記録しておき
-セッション情報がメモリを使い切るまでのTCP SYNを送りつけられた状態になってしまう

という攻撃です。

送信元アドレスを偽造してランダムに変えるという点はIP Spoofing Attackと同じですね。
TCP Interceptはこのような不正なTCP SYNパケットを監視し、最終的にACKが返ってこないようなコネクションを切断します。
一般的には、TCP SYN、SYN ACKまでのやり取りがされた、完全ではないTCPコネクションをハーフオープンセッションと呼んだりします。他にも呼び方はいろいろあります(embryonicとも言ったりします)が、ハーフオープンセッションと言えば大体通じると思います。

TCP Interceptには2つのモードがあります。

-Intercept Mode
-Watch Mode

です。

Intercept ModeはルータがクライアントからのTCP SYNをインターセプトしま
す。インターセプトする、しないの判断はACLに設定されたあて先であればイ
ンターセプトし、ACLにマッチしないあて先であればインターセプトしません。
ルータはクライアントとコネクションが張れるかどうかチェックし、クライア
ントからACKが返ってくれば、サーバ側とのコネクションとつなぎ合わせ最終
的にクライアントとサーバのコネクションが張られたようにします。

処理としては

1.クライアントがSYNを送る
2.ルータがSYN ACKを送る
3.クライアントがACKを送る
4.ルータがサーバにSYNを送る
5.サーバがSYN ACKを送る
6.ルータがサーバにACKを送る
7.クライアントとサーバのコネクションをつなぎ合わせる

7.のつなぎ合わせるってところは大変そうな感じがしますが、要はクライアン
トからACKが返ってこないような不正なTCP SYNはサーバには到達しないので、
サーバを守ることができるということです。
この動作はクライアントとサーバからはTransarentですが、ルータがコネクシ
ョン確立を代理するため、ルータの処理能力によりパフォーマンスが制限され
ます。
少ないアクセスであれば問題ないでしょうが、大量のアクセスが発生するよう
なサイトには使用しないほうが良いと思います。

またIntercept Modeには制限事項があって、TCPのnegotiationはできません。
例えばMSSなどはクライアントとサーバ間でnegotiationされる必要があるので
すが、ルータがInterceptしてしまうためにnegotiationすることが不可能にな
ります。
仮にクライアントがMSSを1300にしてコネクションを張ろうとしてもサーバは
ルータからのSYNパケットを受け取るため、MSS1300は反映されない状態になっ
てしまいます。
これは例えばの話で、実環境で実際にどう動作するのかは検証が必要でしょう。
TCPはセッションの途中でもWindow sizeを動的に変えたりできますので、もし
かすると問題ないのかもしれません。

Watch ModeではルータはクライアントからのTCP SYNを見ているだけで、クラ
イアントからのTCP SYNはサーバまで届きます。
サーバがSYN ACKを返してからクライアントからACKが返ってくるかを監視して
いて、一定時間内にACKがない場合は、サーバに対してRSTを送ってサーバのハ
ーフオープンセッションを切断します。
ルータがRSTを送ることで、サーバはハーフオープンコネクションを一定時間
内に削除でき、それに伴ってメモリ上に保存していた当該のセッション情報も
消去することができます。これによりメモリが浪費されないようにできます。

Intercept ModeとWatch Modeの共存はできません。どちらか一方のModeで動作
させる必要があります。

TCP Interceptはハーフオープンセッションが一定の閾値を超えるとより積極
的にコネクションを切断できるようになります。

次回は設定について取り上げたいと思います。

By 『Overseas and Beyond』 Koichi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA