ポータルアクセス(リバース Proxy)

ポータルアクセス(リバース Proxy)
様々な規模の企業、団体の従業員、パートナー、エンドユーザー等に対しての SSL-VPN によるセキュアなリモ
ートアクセスソリューションとなる FirePass コントローラーは、内部アプリケーションへの様々なアクセス手段を提供
します。本ドキュメントでは FirePass ポータルアクセス(リバース Proxy)モードにフォーカスし、リバース Proxy を使
用してアプリケーションを提供する際に知っておく必要のある情報を提供します。
このドキュメントはリバース Proxy で使用するのに適した、または適していない特定のコンテンツの種類に関する
内容だけでなくリバース Proxy を経由して動作する web コンテンツの作成に携わる web アプリケーションの開発
者と UI デザイナー向けの内容、さらにアプリケーションが proxy を経由して想定通りに動作しない場合の
(Bypass モードを含む)トラブルシューティングに関する記述を含んでいます。このドキュメントは FirePass 5.5 用に
記述されています。
Web アプリケーションの説明
ポータルアクセス(旧 My イントラネット)は、リモートユーザーにソフトウェアのダウンロードや設定変更の必要無しに
アプリケーションを提供する web ベースのリモートアクセス手段です。ポータルアクセスは完全なネットワークアクセ
スではなく特定の web アプリケーションをユーザーに使用させたい時に使用することができます。
FirePass コントローラーは内部アプリケーションへのすべてのリクエストを Proxy することでセキュリティを提供します。
コネクションを Proxy するとき、FirePass コントローラーはホスト名を FirePass コントローラーのものに置き換え、
内部サーバに関する情報を追加するために、オリジナルの HTML ドキュメントの URL やタグを修正するコンテンツ
変換エンジンとコンテンツ処理スクリプトを使用します。
例えば以下のようなリンクがある場合
<a href='http://company.com/...'>
FirePass のコンテンツ処理エンジンは以下のような内容に変換します
<a
href='https://firepass.company.com/f5-w-X8d676sba8c650337ebf0937652fd67828ac8a76653627
88f8a7d9449c9/...'>
難解なコンテンツを proxy する際に発生した問題に対処するために、UNIX 系のストリームエディタ(SED)を使用
して Web アプリケーションを通過するイントラネットウェブページのコンテンツを修正することができます。グローバル
設定画面では、この他に HTML ではないコンテンツの処理や cookie をユーザーに見えなくする設定を行うことが
できます。
F5 ネットワークスは Microsoft Outlook web Access、Microsoft SharePoint、IBM Lotus Domino Web
Access(IBM Lotus iNotes または Notes)、CIFS 用の設定が行われたマイクロソフトファイルサーバーについて、
ポータルアクセスの互換性テストを行いました。その他の Web アプリケーションは追加設定の必要無くポータルア
クセスで動作しますが、JavaScript、Java アプレット、ActiveX コントロール、Flash コンポーネント、XML が多量
に使用されている場合は、コンテンツ処理スクリプトまたは本ドキュメントで記述するワークアラウンドが必要にな
ることがあります。
FirePass コントローラーのリバース Proxy 昨日は複雑な JavaScript と Java アプレットを処理することができます。
Proxy パフォーマンス向上のために、FirePass コントローラー上の Proxy エンジンとダイナミックキャッシュを使用し、
処理します。FirePass コントローラーはキャッシュする前にコンテンツを書き替えますが、ダイナミックキャッシュの場
合、FirePass コントローラーは HTML、JavaScript、スタイルシート、Java アプレットのようなスタティックオブジェク
トの書き替えを常に行わなければならないわけではありません。また、リバース Proxy エンジンは Citrix、VNC のよ
うな複雑なアプレットの書き替えおよび.jar、.cab アーカイブの再署名をサポートします。
JavaScript、Java アプレット、ActiveX コントロールや Flash コンポーネントのようなダイナミックコンテンツを取り扱
F5 Networks Japan K.K.
1
August, 2006
う Web アプリケーションは、リバース Proxy 環境での使用を困難にします。アプリケーションが綺麗な HTML を生
成しない場合はなおさらです。FirePass コントローラーのリバース Proxy はスタンダードな HTML、CSS、
JavaScript、Flash、Java アプレットをサポートします。各コンテンツの種類に関する詳細はコンテントタイプの項
を参照してください。
"複雑なアプリケーションのためのトラブルシューティングツール"セクションに、複雑なアプリケーションでの一般的な
問題と解決策が記述してあります。
コンテンツタイプ
このセクションでは FirePass コントローラーのリバース Proxy でアプリケーションを使用するときに・・・特定のコンテ
ンツの種類について説明します。
HTTP
FirePass コントローラーのリバース Proxy は、バックエンドのサーバーとの通信では HTTP/1.0 のサポートのみです
が、ブラウザと通信する際には HTTP/1.1 と 1.0 をサポートします。使用する HTTP の標準に正しく準拠している
ことを確認してください。
リバース Proxy は Web サーバからのすべてのヘッダをブラウザに渡します。リバース Proxy はカスタムヘッダーを変
更せず、書き替え無しに通過させるので、数値としての URL のカスタムヘッダーの使用は避け、HTTP で規定さ
れている標準ヘッダーを使用してください。
◆ 注意:
カスタムコンテンツ処理(SED)スクリプトはページのコンテンツだけを書き替えます。
Content-Type ヘッダーはドキュメントの実際のコンテンツと一致していなければなりません。例えば、コンテンツが
HTML ではないときは text/html は送信しないでください。リバース Proxy はコンテンツの種類を検出し、データを
収集しますが、Content-Type ヘッダが適切でなければ Web アプリケーションのパフォーマンスは低下します。
HTML
FirePass コントローラーのリバース Proxy では HTML4.0 が完全にサポートされており、実際には HTML3.2 以降
のバージョンが正式にサポートされています。HTML の仕様については http://www.w3.org/MarkUp/を参照し
てください。
適切な、文法に従った HTML を必ず使用してください。HTML 文法チェッカーを使用してページを確認してくださ
い。無料で利用可能な HTTML 文法チェッカーがインターネット上に多数あります。リバース Proxy パーサーは不
適切な HTML の処理の失敗はしませんが、制限があります。
URL の仕様に関してはを参照してください。URL 中の HTML エスケープコードの仕様を避けてください。URL 中
のバックスラッシュ(\)のかわりにスラッシュ(/)を使用してください。
CSS
カスケーディングスタイルシートはサポートされます。Content-Type ヘッダには必ず text/css をセットしてください。
Content-Type ヘッダが正しくセットされていないとリバース Proxy でエラーが発生することがあります。CSS 内の
JavaScript はサポートされません。CSS の仕様については http://www.w3.org/Style/CSS/を参照してくださ
い。
JavaScript
リバース Proxy エンジンは複雑な JavaScript の処理に対応しています。内部サーバから送られてきた
JavaScript はリバース Proxy エンジンによって解析され、書き替えられます。FirePass コントローラーはその後、
クライアントで処理される JavaScript の解析と書き替えを行うための追加の JavaScript ヘルパーをクライアント
F5 Networks Japan K.K.
2
August, 2006
へ渡すファイルに含んで送信します。
リバース Proxy を更に効果的に使用する方法として、以下のことに注意してください。
注意
以下のすべての推奨は、ブラウザとネットワークの相互作用のための URL 参照処理を行うコードの一部にのみ
適用されます。
・
・
・
・
・
・
・
可能であれば、シンプルでわかりやすい JavaScript をコーディングします。複雑なスクリプトでダイナミックに生
成されるものは避けることを推奨します(例えば eval、Function、document.write 等)。
フレーム間を行き来して処理を行う JavaScript の利用を避けてください。
ブラウザ上でダイナミックなコード生成を行う JavaScript の使用は避けてください。例えば eval()関数はクラ
イアント側でのダイナミックな生成や実行を可能にします。ReverseProxy ではこのようなコードの処理を行う
ことができません。eval 関数の使用を避けるか、関数やオブジェクトの間接的な参照をできるだけ行わない
ようなコードを記述することを推奨します。
document.write の使用はサポートされていますが、前述の通り推奨しません。
with 構文の使用は推奨しません。
リバース Proxy が生成する名前との衝突を避けるため、JavaScript 名に$記号は使用しないでください。
JacaScript 内での相対 URL の使用は特に推奨しますが、JavaScript での URL の動的な生成やクライア
ント側での cookie の解析やチェックは行わないでください。
リバース Proxy バイパスモード(最小限のコンテンツ書換)は FirePass5.4.2 から利用可能です(5.4.2 は HotFix
での提供)。このモードが有効になると、JavaScript は FirePass で変更されません。詳細はリバース Proxy バイ
パスモードの利用セクションを参照してください。
現在 FirePass のリバース Proxy によって書き替えられる JavaScript のメソッドのリストは以下の通りです。
write, writeln, open, close, createPopup, addRule, ClearBrowserCache, SetApplicationDataURL,
getResponseHeader, insertAdjacentHTML, load, LoadURL, Download, Upload, showHelp,
createStyleSheet, Navigate, Navigate2, NavigateAndFind, assign, startDownload, Install, InitPath,
InitLanguage, DownloadAttach, OpenSession, RetrieveData, addParam, ModifyProc21, replace, save,
search, setAttribute, setInterval, setTimeout, showModalDialog, toString, addBehavior, charAt,
charCodeAt, concat, match, search, slice, substr, substring, toLowerCase, toLocaleLowerCase,
toUpperCase, toLocaleUpperCase, action, backgroundImage, background, cookie, filter, domain, host,
hostname, href, innerHTML, location, outerHTML, pathname, port, protocol, referrer, referer, search,
src, DocumentHTML, BaseURL, ReportSource, AnnDataPath, BitmapDataPath, ReportURL, URL,
BaseHref, toString
JavaScript コンテンツ書換方法
FirePass のリバース Proxy は基本的に JavaScript の多くの部分を元の状態に保ちますが、FirePass が追加
の JavaScript の一部として含む関数でクリティカルなメソッドやプロパティを上書きします。これらの関数はクライ
アントで実行された際にデータを書き替えるのに使用されます。
例えば、以下の内容は
window.document.write('<a href="http://internal.site.com">Internal link</a>');
以下のように書き替えられます。
ur$call$method(window, "document", "write")('<a href="http://internal.site.com">Internal link</a>');
ur$call$metohd(...)は document.write()メソッドの元々の引数に適用される関数を返し、この引数を適切に書
き替え、document.write を書き替えられた引数と共に呼び出します。
この document.write メソッドの内部呼び出しは、元々のものの代わりに以下のようになります。
'<a href="https://firepass.enerprise.com/f5-w-......">Internal link</a>'
F5 Networks Japan K.K.
3
August, 2006
ur$call$method に変換されるメソッドのリストは以下の通りです。
addBehavior, addHierarchy, appendChild, createElement, createPopup, close, execCommand,
EditDocument,
EditDocument2,
ViewDocument,
ViewDocument2,
CreateNewDocument,
CreateNewDocument2,
SendForReview,
SendForReview2,
ImportList,
getResponseHeader,
insertAdjacentHTML, load, LoadURL, showHelp, createStyleSheet, !Navigate, NavigateAndFind, open,
replace, save, search, setAttribute, setInterval, setTimeout, showModalDialog, showModelessDialog,
toString, write, writeln, createContextualFragment, openNewWindow, addRule
加えて、URL を参照する DOM 変数へのすべての読み込み/書き込みアクセスも変換されます。例えば、
document.location と form.action は以下のようになります。
ur$get$property() と ur$set$property() 関数
この関数は以下のように使用されます。
変換前:document.cookie="foo=bar;;path=/";
変換後:document.cookie=ur$set$property(document, "cookie", "foo=bar;;path=/");
バージョン 5.5 では、<FP_DO_NOT_TOUCH>と</FP_DO_NOT_TOUCH>という FirePass 固有のタグを使用す
ることができます。これらのタグは書換エンジンで書換られるべきではない事を示します。これによって書換が必要
とされないケースや注意をはらうべきコンテンツが FirePass コントローラーで変換されないようにすることができます。
最小限のコンテンツバイパスモードも JavaScript を書き替えません(HTML に対する最小限の書換が行われま
す)。
これらのタグを使用するには、あらかじめ Web ページのコンテンツに含ませるか、FirePass のコンテンツパッチ SED
スクリプトを使用します(複雑なアプリケーションのためのトラブルシューティングツールセクションを参照してくださ
い)。
Java
リバース Proxy はクライアントサイドで実行される Java アプレットのバイトコードを書き替えます。アプレットから行
われる通信を正しく内部サーバに届かせるため、これらの通信が FirePass コントローラーを通過して行われなけ
ればなりません。本来 Sun のネットワーククラスを呼び出すメソッドが書換によってリバース Proxy が挿入する特
別なクラスを呼び出すようにします。
独自のライブラリやフォーマット、サーバからソケット通信を開始するアプレットはリバース Proxy 経由では正しく動
作しません。
クライアントに送られるアプレットは元のものとは異なるため、バイトコードチェックサムに基づく内部的な完全性チ
ェックは失敗します。
コードサイニング証明書
FirePass はアプレットを特権モードで動作させるために、書換後に再署名を行います。書換後のバイトコードに
対しては古い署名は無効です。
リバース Proxy は Thawte Code Signing CA から F5 Networks に発行された証明書でアプレットの署名を行い
ます。アプレットが開始中にブラウザは警告メッセージを行いますが、これを許可しなければなりません。次回から
同様のメッセージを表示させないためには"F5 Networks のコンテンツを常に信頼する"オプションをチェックしま
す。
Macromedia Flash
Macromedia Flash ファイル(*.swf)および Flash ActionScript の書式はサポートされます。Flash ファイルの仕様
F5 Networks Japan K.K.
4
August, 2006
上、リバース Proxy を通したときに Flash ファイルをストリームすることができません。Flash オブジェクトはサーバか
ら最初にリバース Proxy を通して書き替えられた上ですべてダウンロードされ、ユーザーに送られます。大きな
Flash ファイル(Flash ファイルにビデオストリームを含むような場合)を提供する場合、リバース Proxy がサーバから
ダウンロードして書換を行っている間、ユーザーへのダウンロードが開始されるまでに多少の遅延が発生します。
リバース Proxy バイパスモードの使用
コンテンツ書換スクリプトを設定していない Web アプリケーション経由で複雑なアプリケーションのサイトにアクセス
するには、最小限のコンテンツ書換バイパス機能を使用することができます。通常の FirePass のコンテンツ処理
と異なり、最小限のコンテンツ書換バイパス機能が有効な場合 FirePass コントローラーは URL や cookie を書
き替えません。クライアントに内部サーバではなく FirePass にアクセスさせるため、URL に含まれるホスト名のみが
FirePass コントローラーによって書き替えられます。
以下の内容は最小限のコンテンツ書換バイパスモードの優位点です。
・
・
FirePass コントローラーはすべての HTML リンクやダイナミック URL に内部の宛先ホストとポートをエンコード
した文字列を付与する必要がありません。
cookie の処理は劇的に簡素化されます。サイトの必要性に応じて cookie パススルーの設定が明示的に
行われている必要があります。(これはバイパスモード使用時は手動で行われなければなりません。バイパス
モードでは cookie パススルーの自動設定はサポートされません)。詳細は FirePass コントローラー管理者ガ
イドを参照して下さい。
バイパスモードは単一の内部ホストで発生した問題を解決するためにのみ使用し、複数の内部ホストの処理に
は適しません。cookie パススルーがバイパスモード利用時に有効な場合、cookie は判読できない書式に変換さ
れません。
注意
バイパスモードを利用する前に"複雑なアプリケーションのためのトラブルシューティングツール"を試してみることを
推奨します。バイパスモードにはパターンベースの proxy と代替のポート-ホストベースの 2 種類の実装方法があ
ります。
パターンベースバイパス
このモードは URL のパターンマッチングの仕組みを提供します。FirePass コントローラーにマッチさせるプロトコル、
ホスト、ディレクトリを指定します。URL とパターンベースバイパス Proxy ルールが一致すると、URL を書き替えま
せん。このモードはネットワーク設定を変更せずに使用できますが、FirePass が入力 URL にマッチするようアプリ
ケーションで使用するプロトコル、ホスト、ディレクトリを指定する必要があります。
パターンは大文字小文字を区別するため、大文字と小文字の両方の使用が想定される場合は両方のパター
ンを設定する必要があります。
他のサーバへのリンクは書き替えられないためパターンベース Proxy モードの利用は慎重に行わなければなりませ
ん。従ってこの方法は単一の複雑なアプリケーションにのみ適し、アプリケーションポータルには不向きです。
代替ホスト/ポートベース Proxy
代替ホスト/ポートベース Proxy モードは FirePass コントローラーのウェブサービスと内部ホスト間で 1 対 1 のマッ
ピングを行うことができます(path の制限または他の内部ホストとの衝突はありません)。このモードはアプリケーショ
ンサーバに proxy されて通過する専用の IP アドレスとポートの組み合わせを提供します。
代替ホスト/ポートベース Proxy モードの設定時、アプリケーションサーバごとに 1 個の FirePass ポート(および必
要により IP アドレス)を設定しなければなりません。アプリケーションが SSL 暗号化を使用している場合、同一の
SSL 証明書と鍵を FirePass にインストールする必要があります。
設定方法は FirePass のオンラインマニュアルを参照してください。
F5 Networks Japan K.K.
5
August, 2006
複雑なアプリケーションのトラブルシューティングツール
複雑なアプリケーションを FirePass のリバース Proxy で正しく動作させるいくつかの方法があります。バイパスモー
ドの使用を検討する前にここで紹介する方法を試すことを推奨します。最初にイントラネットにネットワークの問
題が無いことを確認することを推奨します。そして問題点がブラウザ固有であるかどうかを絞り込むために異なる
ブラウザでアプリケーションを使用します。
互換性モード
以前はアプリケーションがリバース Proxy 経由で正しく動作していたにも関わらず、アップグレード後に動作しなく
なった場合は互換性モードを使用することができます。互換性モードは 5.2.1 以前で使用されていた web アプリ
ケーションエンジンを引き続き使用することができます。このモードはイントラネットで固有の要件を満たすために
SED スクリプトを記述していた場合や、旧来 My Intranet や Web アプリケーションの動作で特に問題や不満が
無いときに役立ちます。
互換性モードは JavaScript の書換をデフォルトのモードほど行いません。これは誤った JavaScript の書換が起
こる可能性が少ないことも意味しますが、動的に生成される URL は書換えられません。
互換性モードを ON にするにはナビゲーションペーンの Web アプリケーションメニューからポータルアクセスをクリック
し、コンテンツ処理をクリックします。そしてページ上部のグローバル設定タブをクリックし、ページ下部にある web ア
プリケーショングローバル設定セクションまでスクロールさせます。そこで互換性モードのチェックボックスをチェックし、
サービスを再起動します。
インターネットエクスプローラーの gzip 圧縮バグ
圧縮を使用していて多くのユーザーが MSIE6 のパッチが当てられていないものを使用している場合、FirePass の
リバース Proxy を通じてアプリケーションが正しく動作しないかのうせいがあります。パッチが当てられていない IE6
には gzip 圧縮を使用しているときにサーバーメッセージの先頭 2kB を取り除くバグがあります。FirePass コントロ
ーラーはこのバグの対処として先頭に 2kB の空白を追加し、アプリケーションを正しく動作させることができます。
この修正を有効にするには、ナビゲーションペーンの Web アプリケーションメニューからポータルアクセスをクリックし、
コンテンツ処理をクリックします。そしてページ上部のグローバル設定タブをクリックし、ページ下部にある web アプリ
ケーショングローバル設定セクションまでスクロールさせます。そこで HTML ページに 2 キロバイトのホワイトスペース
を先頭に追加して、IE gzip compression bug を回避をチェックし、サービスを再起動します。
圧縮とキャッシュの設定
まれに FirePass での圧縮やキャッシュの利用がアプリケーションとコンフリクトすることがあります。もし圧縮やキャッ
シュを利用時に問題があったらそれらを両方とも無効にすることを試して再度アプリケーションをテストしてください。
設定可能なキャッシングに関するグローバル設定がいくつかあります。
圧縮とキャッシュの設定を変更するには、ナビゲーションペーンの Web アプリケーションからキャッシングと圧縮をクリ
ックします。
App トンネル
もし可能なら、App トンネルの利用は複雑なアプリケーションにおいて良い結果につながります。App トンネルとポ
ータルアクセス(リバース Proxy)の違いは、App トンネルはクライアントのブラウザ上に IE であれば ActiveX コントロ
ールをロードし、Win32 プラットフォームの Mozzila 系ブラウザであればプラグインをロードすることです。App トンネ
ルは Microsoft Windows クライアントのみの対応になります。App トンネルの設定に関しては該当する FirePass
のマニュアルかオンラインヘルプを参照してください。
コンテンツ処理スクリプト
FirePass コントロールは特別な用途向けに Web アプリケーションを経由するコンテンツの処理を Web アプリケー
ションコンテンツ処理(SED)スクリプトを使用して行うことができます。SED スクリプトで、それぞれの処理タイプ(レ
F5 Networks Japan K.K.
6
August, 2006
スポンスの事前処理、レスポンスの事後処理、リクエストの処理)に対して一個の URL マッチパターンリストを指
定することができます。FirePass は最初にリストの中からマッチした URL のコンテンツを処理します。
例えば、s/HTTP:\/\//http:\/\//g は HTTP:// を全体(1 行に複数あればそれらの全部)から検索し、見つ
かったものを http:// に変換します。バックスラッシュ(円記号)はスラッシュをエスケープしています。正規表現を
使用したより複雑なスクリプトを記述することもできます。
コンテンツ処理スクリプトのトラブルシューティング
バージョン 5.4 から、FirePass は URL に新しいプレフィックスを使用します。
5.4 より前のバージョンでは URL は以下のようになりますが、
https://<firepass>/i-tr-<obscured>/<path>
5.4 より後のバージョンでは以下のようになります。
https://<firepass>/f5-w-<obscured>/<path>
この変更の結果として、以前から i-tr-を含んだコンテンツ処理スクリプトがあった場合は期待通りの動作をしなく
なり、URL は変更されずにクライアントに渡されるのでリンクは正しくなくなります。これを修正するには以下のステ
ップを実行します。
既存のコンテンツ処理スクリプトを修正する
1.
2.
3.
管理コンソールから、ポータルアクセスをクリックします。
コンテンツ処理をクリックします。
各コンテンツ処理スクリプトのお気に入りをクリックし、スクリプト内の i-tr-を f5-w-に変更します。
その他のコンテンツ処理スクリプトに関する問題の可能性は、FirePass がマッチパターンに最初にマッチしたスクリ
プトを使用することです。一度 FirePass がスクリプトを選ぶと、その他のスクリプトはチェックしません。
複数のコンテンツ処理スクリプトがあるとき、FirePass が誤ったマッチングを行わないように適切な条件を指定す
ることが重要です。
コンテンツ処理(SED)スクリプトの設定方法についての情報は FirePass コントローラーのマニュアルかオンラインヘ
ルプを参照してください。
F5 Networks Japan K.K.
7
August, 2006