BIG-IPの持つトラフィック処理機能の1つである、iRulesの機能をご理解いただくためのガイドブックです。「iRulesに興味はあるが、どのようなことができるのかわからない」といった方に、iRulesとはどのようなものなのか、何ができるのかを活用事例を交えて概要をご紹介しています。
※資料ダウンロードフォーム入力後、閲覧頂けます。
本ページでは、BIG-IPの強力なトラフィック処理機能である「iRule」について、具体的な例を用いてご紹介します。
「BIG-IP」のトラフィック処理を司るTraffic Management OS(TMOS)の中に組み込まれ、「BIG-IP」に実装されたトラフィック処理機能を詳細に制御することが可能なTCL(=Tool Command Language)プログラミング言語です。
「iRule」を使用することで、メジャーなベンダーのアプリケーションサーバーやWebサービスのXMLデータ、あるいはモバイルアプリケーションによる通信に対し、よりきめ細やかで柔軟なトラフィック処理を実現し、アプリケーションの改変なしに多くの機能を実現できるようになります。
「iRule」では、単純なクライアントリクエストのHTTPヘッダによるロードバランス先の決定だけではなく、サーバーのレスポンス、コンテンツ内容、その他様々な条件に基づき、ダイナミックな設定変更、通信内容の書き換え、ロギング更には「BIG-IP」自身がレスポンスを返すといった高度な機能を備えています。
「iRule」には、以下のような特長があります。
「iRule」の処理は主に以下の3つの要素に分かれます。
処理を開始するトリガー |
↓
様々なデータを用いた条件の判断 |
↓
トラフィックデータの処理 |
処理を開始するトリガー
トリガーとは、どのようなイベントが発生した際にiRuleの処理を開始するかという条件です。
主要なイベントとしては
があり、HTTPリクエストのヘッダ情報を元に処理を行いたい場合は、HTTPリクエストを受け取った際に発生するイベント“HTTP_REQUEST”をトリガーとして処理を開始します。
トリガーにできるイベント
Global | HTTP | SSL | AUTH |
CLIENT _ACCEPTED |
HTTP _REQUEST _DATA |
CLIENTSSL _HANDSHAKE |
AUTH _FAILURE |
CLIENT
_DATA |
HTTP
_RESPONSE HTTP _REQUEST |
CLIENTSSL
_CLIENTCERT |
AUTH _ERROR |
SERVER _ACCEPTED |
HTTP
_RESPONSE_DATA |
SERVERSSL
_HANDSHAKE |
AUTH
_SUCCESS |
SERVER _CONNECTED |
HTTP
_ERROR |
AUTH
_WANTCREDENTIAL |
|
SERVER _DATA |
HTTP _RESPONSE _CONTINUE |
様々なデータを用いた条件の判断
イベントが発生した際、様々なデータに基づいてどのような処理を行うかの判断を行います。
判断の対象として参照できる主な情報には
があり、これらの情報から必要な部分を抜き出して
のような条件判断を行います。例えば、クライアントのIPアドレスが特定のネットワークからのものか、HTTPヘッダーに特定のCookieがあるかなどの条件で判断します。
判断基準に使用できる値と判断方法
IP | UDP | TCP | HTTP | SSL | AUTH | X509 |
IP:: client _addr |
UDP:: client _port |
TCP:: client _port |
HTTP:: header |
SSL:: cert |
AUTH:: status |
X509:: version |
IP:: server _addr |
UDP:: server _port |
TCP:: server _port |
HTTP:: method |
SSL:: cipher |
AUTH:: wantcredential _type |
X509:: issuer |
IP:: protocol |
UDP:: payload |
TCP:: payload |
HTTP:: uri |
SSL:: current_ sessionid |
AUTH:: wantcredential _prompt |
X509:: serial_ number |
IP:: tos |
UDP:: payload _length |
TCP:: payload _length |
HTTP:: is_ keepalive |
SSL:: mode |
AUTH:: wantcredential _prompt_style |
X509:: subject _public _key |
IP:: idle_ timeout |
TCP:: rtt |
HTTP:: payload |
SSL:: verify_ result |
AUTH:: ssl_cc_ldap _username |
X509:: subject _public_ key_type |
|
TCP:: mss |
HTTP:: cookie |
AUTH:: ssl_cc_ldap _status |
X509:: hash |
比較演算子
contains ~ | ~を含む |
matches ~ | ~(リスト)の1つと一致する |
equals ~ | ~と一致する |
starts_with ~ | ~で始まる |
ends_with ~ | ~で終わる |
matches_regex ~ |
~(正規表現)と一致する |
トラフィックデータの処理
条件の判断を行った結果、条件に一致した(一致しなかった)場合に行う処理には、
があります。例えば、リクエストのコンテンツ種別毎に振り分け先POOLを指定する、クライアント証明書の項目をHTTPヘッダーに埋め込んでサーバーに渡す、不正なアクセスを検知した場合にログを出力するなどの処理を行うことができます。
判断処理方法
node | 指定したノードを選択する |
pool | 指定したpoolに渡す |
discard | パケットを破棄 |
log | syslogに記録する |
matchclass | classと比較し、一致する値に対応するノードを選択する |
rateclass | レートシェーピングの設定を変更する |
HTTP::redirect | リダイレクトする |
HTTP::header insert | HTTPヘッダを挿入する |
HTTP::respond | HTTPのレスポンスを返す |