前のトピック: INSSL - SSL サポート付き HTTP ゲートウェイ

次のトピック: OUT: 単一のホスト出力ゲートウェイ アプライアンス


INSSLR - SSL サポート付き冗長 HTTP 入力ゲートウェイ

最新バージョン: 2.0.2-1

INSSLR - SSL サポート付きの冗長 HTTP 入力ゲートウェイ

早見表

カタログ

システム

カテゴリ

ゲートウェイ

ユーザ ボリューム

yes

最小 メモリ

160M

OS

Linux

制約

なし

機能の概要

INSSLR アプライアンスはセキュアな HTTP リクエストのレイヤ 7 ゲートウェイです。 リクエストをエンコードされていない HTTP リクエストに変換します。 クライアント側で安全な HTTP をサポートする必要がある場合は、常にこのアプライアンスを使用できますが、バックエンド処理インフラストラクチャでは、以下のような場合の SSL をサポートしないかサポートできません。

設定された場合、INSSLR はクライアント証明書認証もサポートします。 SSL 相互認証の場合には、クライアントおよびサーバの両方が証明書および対応する公開鍵を交換します。 処理を進める前に、クライアントはサーバの証明書を発行した証明機関に連絡して証明書が信頼できることを確認することができます。 サーバも同様の手順を実行できます。

デフォルト設定では、INSSLR は CA AppLogic アプリケーションへのファイアウォールで保護されたエントリ ポイントをネットワーク トラフィックに提供する、セキュアな HTTP リクエストのレイヤ 7 ゲートウェイとして動作します。これはインターネットによってアクセス可能な静的 IP アドレスと共に設定できます。

設定されると、2 つの INSSLR アプライアンスは冗長サービスを提供するためにフェールオーバ モードで使用できます。 この場合、INSSLR IP アドレス(ip_addr を介して設定)は 1 つのノード上でのみ実行され、失敗した場合にはもう一方の INSSLR アプライアンスに自動で転送されます。 どの時点においても、アクティブなのは INSSLR アプライアンスのうち 1 つだけです。 フェールオーバ モードで実行する場合。INSSLR は複数のモードで動作するよう設定できます。

冗長モードで実行されるとき、INSSLR は以下について ctl 端子へのインターフェースを提供します。

INSSLR は、その http 端子へ接続されたバックエンド アプライアンスの健全性を常にモニタします。 INSSLR が行う健全性状態チェックには、簡易 TCP 接続チェックまたはより複雑な HTTP リクエスト(INSSLR の境界上で指定)が含まれる場合があります。 接続されたアプライアンスが失敗した場合には、INSSLR は、グリッド ダッシュボードへエラーをレポートします。または、冗長モードで、設定されている場合は、バックアップ INSSLR アプライアンスにフェールオーバを実行します。

複数のサービス用に単一 IP アドレスで表示する必要があるアプリケーションをサポートするには、非 HTTP トラフィックを透過的に個別の出力端子に転送するように INSSLR を設定できます。 そのような接続で、このアプライアンスはレイヤ -3 ファイアウォール/NAT ルータとして動作します。

リソース

リソース

最小

最大

デフォルト

CPU

0.05

4

0.05

メモリ

160M

2 G

160 M

帯域幅

1 Mbps

2 Gbps

200 Mbps

CA AppLogic 2.7 リリース用のデフォルト メモリは 128MB に変更されました。 最小メモリは 64MB のままです。

ノート

端子

名前

方向

プロトコル

説明

ctl

in

HTTP

アプライアンスがプライマリ/バックアップになることを強制する通知を受信します。 fover_mode が none でない場合のみ、この端子は接続を受け付けます。 有効な http リクエストは、/?action=<active|passive|kill|status> のような形式です。 active/passive によって、アプライアンスはアクティブまたはパッシブになります。 注: このアクションが成功しなくても(別のノードがアクティブでなく、フェールオーバが完了できない場合)、エラーは返されません。 /?action=status リクエストによってアプライアンスのステータスを確認するのは、呼び出しを行うアプリケーションです。 status は、アプライアンスの現在の状態(アクティブ/パッシブ)を返します。 kill は、アプライアンスの強制シャットダウンを実行し、別のノードに引き継がせます(実行中の場合)。

http

out

HTTP

設定された外部 IP アドレス上で受信された HTTPS または HTTP リクエスト(またはその両方)は、標準の HTTP ポート 80 を使用して、プレーン HTTP リクエストとして出力 http に転送されます。 クライアント提供の HTTP ヘッダに加えて、転送されたリクエストには以下の情報ヘッダが含まれます。

X-Forwarded-For: リモート クライアントの IP アドレス。 これは、リモート IP アドレスの代わりにサーバ側の CGI スクリプトで使用します。

X-Forwarded-Proto: https このヘッダは、クライアントが HTTPS 上で接続されている場合に存在します。 このヘッダを使用して、HTTP および HTTPS 接続を区別することはバックエンド アプリケーションに依存します。

fs

out

NFS

キーの格納場所であるローカル キー ボリュームの代わりの場所として、nfs マウントを提供します。 ローカル キー ボリュームおよび fs 端子接続の両方が提供される場合、アプライアンスは開始しません。 この端子は未接続のままにできます。

aux

out

任意

他のプロトコルの出力(設定されている場合)。l3_accept_* プロパティを参照してください。

nfy

out

HTTP

フェールオーバが発生するたびに通知を送信します。 fover_nfy_prefix も参照してください。 この端子は未接続のままにできます。

mon

out

CCE

パフォーマンスとリソースの使用状況統計を送信します。

プロパティ

name

type

description

ip_addr

ip_owned

ゲートウェイの外部 IP アドレス。 このプロパティにはデフォルト値がありません。設定する必要があります。 デフォルト:(空)

netmask

IP アドレス

ネットマスク。 このプロパティにはデフォルト値がありません。設定する必要があります。 デフォルト:(空)

gateway

IP アドレス

送信トラフィック用のデフォルト ゲートウェイ。 デフォルト:(空)

l7_accept

文字列

http 端子に転送するために受け付ける HTTP トラフィックの種類を指定します。 有効な値: https、http、both、none。 none に設定された場合、トラフィックはすべて l3_accept_* プロパティのみに従ってリダイレクトされます。
デフォルト: both。

l3_accept_proto

文字列

どのプロトコルを aux 端子へ転送する必要があるかを指定します。 有効な値: none、tcp、udp、raw、all。
tcp または udp に設定されている場合は、l3_accept_port プロパティを使用して、ポートを指定できます。 raw に設定した場合、l3_accept_port プロパティがプロトコル番号を指定します。 all に設定されている場合は、外部インターフェース上の着信トラフィックが、aux 端子に転送されます。 これよりも l7_accept プロパティの方が優先されます。l7_accept を none 以外の値に設定した場合、すべての http(s) が http 端子へ転送され、残りのトラフィックはこのプロパティの指定どおりに aux へ転送されます。
デフォルト: none。

l3_accept_port

文字列

aux 端子への l3_accept_proto によって指定されたプロトコルで受け付け、ルーティングするプロトコルのカンマ(またはスペース)区切りリスト。リスト内のプロトコルは、ポート番号または標準プロトコル名として指定されることがあります(たとえば、ftp、smtp など。 tcp/udp ポートまたは gre、tcp、などを指定するとき。 raw プロトコルを使用するとき)。 ポート範囲も指定できます(1024: 10000、0: 1024)。 空にしておくと、指定されたプロトコルのすべてのポートが転送されます。
注: l3_accept_proto を raw に設定した場合、このプロパティを指定する必要があります。この場合、プロトコル番号を指定します(複数の raw プロトコルを指定できますが、プロトコル範囲(たとえば 20:30)は許可されません)。
デフォルト: all

allowed_hosts

文字列

接続できるホストまたはサブネットのリスト。 スペースまたはカンマで複数のエントリを区切ります。 サポートされている形式の例: 192.168.1.2 192.168.1.0/24 192.168.2.0/255.255.255.0。 デフォルト: 0.0.0.0/0(すべて許可)

key_on_fs

文字列

キーが fs 端子を介して nfs マウントに格納されるか(on)、またはローカル キー ボリューム(off)上に格納されるかを示します。 有効な値: on および off デフォルト: off。

cert_file

文字列

このゲートウェイ インスタンスでクライアントに提示する必要があるサーバ証明書のファイル名(データ ボリュームのルートを基準にした)。 注: l7_accept を https または both に設定した場合は、このプロパティによって指定された場所の設定済みデータ ボリューム(以下の「ボリューム」を参照)上に有効な証明書が存在する必要があり、そうなっていない場合は、INSSLR の起動に失敗します。
デフォルト: server.pem

unsafe_ssl

文字列

レガシ ブラウザとの互換性のために、安全でない ssl 暗号の使用を有効にします。 デフォルト値の disable では、SSLv2 暗号だけでなく、安全と見なされない他のいくつかの SSLv3 および TLSv1 暗号も無効にします。 SSLv2 のみで作動するレガシー ブラウザ用の https セッションをサポートする必要がない限り、このプロパティを disabled のままにすることをお勧めします。 enabled に設定した場合、システム(SSLv2 を含む)で使用可能なすべての SSL 暗号を https セッションで使用できます。
Default: disabled。
このプロパティはバージョン 1.2.1 に追加されました。

keepalive

整数

INSSLR とクライアントの間の最大 keepalive 時間(単位: 秒)を指定します。 デフォルト: 15。

timeout

整数

INSSLR がバックエンド サーバからの出力を何秒間待つかを指定します。 バックエンド サーバがタイムアウト秒の出力を送信しない場合、接続が閉じられます。
デフォルト: 300

max_request_size

整数

クライアント リクエストの最大サイズ(MB)。 アプリケーションで大きなクライアント アップロードを処理する必要がある場合は増やします。 デフォルト: 10

adv_config

文字列

http と https の両方のリスナ(いずれか有効な方)用ロケーション ブロック内で nginx conf に挿入される raw 設定を追加します。 たとえば、カスタム ヘッダを追加するには、proxy_set_header myport$proxy_port に adv_config を設定します。 これにより、myport : 80 がバックエンド サーバに送信されるリクエストに追加されます。 adv_config は、ロケーション ブロックに対して任意の有効なステートメントに設定することができます(詳細は nginx ドキュメントを参照してください)。 複数の設定行は ; で区切ることによって追加できます。 設定されている場合、このプロパティには有効な nginx 構文(; で終了)が含まれている必要があります。そうなっていない場合、アプライアンスは起動に失敗します。 デフォルト:(空)

client_cert

文字列

クライアント証明書認証を有効にします。 有効な値: on および off on に設定した場合、クライアント証明書認証が強制され、有効な証明書を持っているクライアントのみが INSSLR へのリクエストに成功します。 ask に設定した場合、クライアントは証明書を提示するよう求められます。しかし、有効な証明書を提示しなくても接続は確立されます。 デフォルト: off。

client_depth

整数

チェーンのクライアント証明書内で追求する検証の深さ。 client_cert が設定されていない場合、このプロパティは効果がありません。 有効な値: 1 ~ 9。 デフォルト: 1

ca_list_client

文字列

PEM 形式の証明機関の証明書のシーケンスが含まれるファイル。 リスト表示された証明書の名前は、接続時にクライアントへ送信されます。 これはクライアントに対し、どのクライアント証明書を送信する必要があるかを通知します。 同じリストがクライアント証明書の確認にも使用されます。 ファイル名は、マウント済みキー ボリュームのルートまたは fs 端子経由で行った nfs マウントのルートに相対するもので、たとえば path/to/keys/ca_list_client.pem のようにパスを含めてもかまいません。 デフォルト: ca_list_client.pem

cert_revocation_list

文字列

証明機関によって生成される証明書失効リスト(CRL)が含まれるファイル。 このリストは、CA によって無効にされたクライアント証明書を識別します。 INSSLR に対して提示されるすべてのクライアント証明書が検索され、証明書の失効が判明した場合、INSSLR はクライアントに対して「SSL 証明書エラー」応答を発行します。 ca_list_client と同様、ファイル名はマウント済みキー ボリュームのルートまたは fs 端子経由で行った nfs マウントのルートに相対するもので、パスを含めることができます(たとえば path/to/keys/ca_list_client.pem デフォルト: "")。

ヘルス チェック プロパティ

name

type

description

healthcheck_method

文字列

バックエンド Web サーバのヘルス チェックに使用されるメソッド。
off - ヘルスチェックは無効になり、他のすべての healthcheck_ properties は無関係になります。
tcp_connect - INSSLR は Web サーバのポート 80 に接続します。 接続が正常に確立される場合、INSSLR は Web サーバが機能しているとみなします。 これは最も速いメソッドで、最も少ないリソースを必要とします。
http_head - INSSLR は、HEAD メソッドを使用して healthcheck_url プロパティによって指定されたドキュメントをリクエストします。 これは tcp_connect より遅く、INSSLR と Web サーバの両方でより多くのリソースを必要としますが、信頼性は向上します。 応答では healthcheck_regexp によって指定された正規表現とのマッチングが行われ。一致が見つかるとサーバは稼働中と考えられます。
http_get - INSSLR は、GET メソッドを使用して healthcheck_url プロパティによって指定されたドキュメントをリクエストします。 これはほとんどのリソースを必要とする最も遅いメソッドですが、信頼性は最も高くなります。 応答(ヘッダと本文)では healthcheck_regexp によって指定された正規表現とのマッチングが行われ。一致が見つかるとサーバは稼働中と考えられます。
デフォルト: off。

healthcheck_url

文字列

http_get および http_head のヘルス チェック メソッドを通じてバックエンド Web サーバのヘルス チェックを実行するのに使用される URL。 完全な URL(http://host.name/file/to/check/for.php)、または相対パス(/file/to/check/for.php)として指定可能です。 URL として指定された場合、INSSLR は HTTP/1.1 プロトコルを使用する一方で、Host: ヘッダ内の UR から抽出されたホスト名を使用して、ヘルス チェックを実行します。 これにより、仮想ホストの使用が可能になります。 相対パスとして指定されると、INSSLR は HTTP/1.0 プロトコルを使用し、このプロパティによって指定されたドキュメントをチェックします。
デフォルト: /

healthcheck_agent

文字列

http_get と http_head のヘルス チェック メソッド用のエージェント識別子として使用される文字列。
デフォルト: INSSLR-health-check

healthcheck_regexp

文字列

http_head および http_get ヘルス チェック モードで使用されるテスト文字列。 短いか一般的な値(たとえば 「OK」)は間違った正の一致の原因になる場合があります。 この文字列は Perl の正規表現です。Perl の正規表現に関する詳細は、こちらを参照してください。
デフォルト: ^HTTP\/1\.\d\s+200

healthcheck_interval

整数

バックエンド Web サーバのヘルス チェックの間隔(秒単位で指定)。
デフォルト: 60 秒

healthcheck_timeout

整数

ヘルス チェックに要する最大時間(単位: 秒)。 タイムアウトを超えた場合、チェックは失敗したとみなされ、終了します(新しいチェックが開始されます)。 デフォルト: 10

healthcheck_alert

整数

INSSLR がグリッド ダッシュボード上でエラーをダンプし始めるまでのヘルス チェックの失敗回数。 0 に設定した場合、エラーはダッシュボードにレポートされません(ただし、ヘルス チェックは有効なままです)。 アプリケーションを起動/停止するとき、誤った判定による警告を回避するため、値の設定を小さくし過ぎないでください。 INSSLR を冗長モードで実行しており、バックエンド サーバが失敗した場合にバックアップ ノードへスイッチを移動する場合は、fover_on_healthcheck も参照してください。 デフォルト: 3

詳細プロパティ(フェールオーバ シナリオで使用)

fover_mode

文字列

フェールオーバ モード。 可能な値は、none(フェールオーバなし)、symmetric、asymmetric です。
symmetric に設定すると、INSSLR は、対称なフェールオーバ モードで実行されます(どちらも対称なフェールオーバ モードで実行される 2 つの INSSLR アプライアンスを必要とします)。
asymmetric に設定すると、INSSLR は、非対称なフェールオーバ モードで実行されます(どちらも非対称なフェールオーバ モードで実行される 2 つの INSSLR アプライアンスを必要とします)。
重要: フェールオーバ モードで実行するとき、どちらのアプライアンスも fover_mode を同じ値に設定する必要があります。
デフォルト: none

fover_local_ip

IP アドレス

別の INSSLR アプライアンスと通信するためにフェールオーバ モードで使用されるローカル IP アドレス。 これは、予約されたプライベート アドレス(rfc1918 によって定義)を含めて利用可能な任意の IP でもかまいません。 このアドレスは別の INSLLR アプライアンスのステータスのモニタのためにのみ使用されます。
重要:

これは別の INSSLR アプライアンス上で fover_remote_ip プロパティと同じ IP で設定する必要があります。

fover_mode を none に設定している場合は、これを空にしておきます。
デフォルト:(空)

fover_remote_ip

IP アドレス

フェールオーバ モードで使用される別の INSSLR アプライアンスのリモート IP アドレス。

重要:

これは別の INSSLR アプライアンス上で fover_local_ip プロパティと同じ IP で設定する必要があります。

fover_mode を none に設定している場合は、これを空にしておきます。
デフォルト:(空)

fover_netmask

IP アドレス

fover_local_ip 用のネットマスク。
重要: fover_mode を none に設定している場合は、これを空にしておきます。
デフォルト:(空)

fover_nfy_prefix

文字列

フェールオーバが発生するたびにリクエストされる URL プレフィックス。 リクエストされる URL は次のとおりです。

http://nfy/fover_nfy_prefixfover_mode=fover_mode&state=<start|stop>&ip_addr=ip_addr&fover_local_ip=fover_local_ip&fover_remote_ip=fover_remote_ip&fover_netmask=fover_netmask

その後、nfy 端子を通過します。
デフォルト: ?

fover_on_healthcheck

整数

http 端子上のヘルス チェックが失敗したときに、INSSLR がバックアップ ノードにフェールオーバを実行するかどうかを指定します。 ゼロ以外の値に設定されている場合、INSSLR はその後の何回にもわたるヘルス チェックの失敗後にフェールオーバを実行します。 アプリケーションを起動/停止するとき、誤った判定による警告を回避するため、値の設定を小さくし過ぎないでください。 単に失敗時の通知が必要な場合は、healthcheck_alert も参照してください。 デフォルト: 0(無効)

ボリューム

名前

説明

key

最低限、SSL サーバの署名キーが含まれる読み取り専用ボリューム(プレースホルダ)。 ファイルは PEM 形式である必要があります。 cert_file プロパティが別の名前を指定するように変更されない場合、証明書は server.pem という名前のキー ボリュームのルート ディレクトリ内に存在する必要があります。

エラー メッセージ

アプライアンスが開始に失敗すると、以下のメッセージが、アプライアンスのログ ファイルまたはグリッド コントローラのシステム ログのいずれかに表示される場合があります。

パフォーマンス

アプリケーション フェールオーバ

INSSLR は、他の INSSLR の失敗を約 10 秒で検出します。 別のアプリケーションへのフェールオーバに、さらに 10 秒かかります。 アプリケーションの失敗が最初に発生してから、別のアプリケーションにトラフィックが引き継がれるまでの合計時間は、約 20 秒です。

リクエスト レート

ドキュメント サイズや利用可能なネットワーク帯域幅にもよりますが、INSSLR は毎秒 3000 以上のトランザクション(リクエスト/応答ペア)をルーティングします。

データ スループット

ドキュメント サイズや利用可能なネットワーク帯域幅にもよりますが、INSSLR は 7 MB/秒以上でルーティングします。

同時接続

デフォルト メモリで、INSSLR は 500 以上の同時保留リクエストをサポートします (クライアントからのオープン TCP 接続である保留リクエストで、1 つ以上の未完了 HTTP リクエストが進行中です)。 同時接続の最大数は、利用可能な空きメモリに依存します。 16MB の増設メモリは、それぞれ同時 http トランザクションの数を 500 ずつ増やします。 たとえば、冗長モードで実行していて、2000 の同時接続に対応できるようにするには、100M+3*=148M (冗長モードでの実行時の最小メモリは 100M)が必要となります。

通知

冗長モード(fover_mode が none ではない)で実行される場合、INSSLR は、それがアクティブまたはパッシブになると必ず通知をトリガします。 これはアクティブなノードの起動時またはフェールオーバの発生時に必ず行われます(アクティブまたはパッシブになると通知が各ノードによって送信される)。

INSSLR 次の 2 つの通知を送信します。

重要:

ヘルス チェック

INSSLR は、1 分ごとに以下を確認する cronjob を実行します。

上記のいずれかが true の場合は、エラー メッセージがグリッド ダッシュボードに送信されます。 複数のテストに失敗した場合は、すべてのエラーを示すサマリ メッセージがグリッド ダッシュボードにポストされます。 それぞれのエラーは 1 時間に 1 回のみグリッド ダッシュボードに送信されます。 アプライアンス起動後の最初の 5 分間はエラーはレポートされません。これは、レプリケーションでの他のノードが開始されていないときの間違ったアラームを防止するためです。

サーバ証明書

SSL を使用するには、署名された証明書と暗号化に使用された秘密鍵の両方が必要です。 キーと証明書は、PEM 形式にし、cert_file プロパティによって指定された単一のファイルに入力する必要があります。

サーバ証明書の生成

CA AppLogic では、サーバ証明書を生成することができます。

サーバ証明書を生成する方法

  1. 以下のコマンドを使用して、秘密キーを生成します。
    openssl genrsa -out privkey.pem 2048 
    

    パスワード保護キーを生成するには、以下のコマンドを使用します。(INSSLR でキーを使用するには、パスワードなしのキーが必要です。パスワード保護キーを作成した場合は、INSSLR で使用する前にパスワードを削除する必要があります)。

    openssl genrsa -des3 -out privkey.pem 2048 
    
  2. 次に、証明書が必要です。 ここでは 2 つのオプションがあります。つまり、証明書リクエストを作成し、信頼された CA(それに基づいて請求)による署名を受けるか、テスト目的(この場合は、サイトをリクエストするブラウザによって、証明書が信頼された CA によって署名されていないという警告が発行されます)で自己署名証明書を作成します。

    証明書リクエスト生成するには、以下のコマンドを実行します。

    openssl req -new -key privkey.pem -out server.csr 
    

    信頼された証明機関へ .csr ファイルを送信した後、署名付き証明書(.crt ファイル)が戻されるので、これを使用できます。

  3. 自己署名証明書を生成するには、以下のコマンドを実行します。
    openssl req -new -x509 -key privkey.pem -out server.crt -days 1095
    
サーバ証明書の使用

これで、証明書とキーを 1 つのファイルに入れて、INSSLR で使用できるようになります。

cat privkey.pem  server.crt > server.pem 

キーがパスワード保護されている場合は、以下のコマンドを実行してパスワードを削除できます。

openssl rsa -in key_with_pass.pem -out privkey.pem
既存の apache+mod_ssl サーバ証明書の使用

Apache で使用する既存の証明書を持っている場合は、INSSLR 内でもそれを使用できます。 キーがパスワード保護されていないことを確認し(上記参照)、秘密キーと証明書をこの順序で 1 つのファイル内に配置してください。

例:

cat privkey.pem  server.csr > server.pem 

チェーン証明書を使用する場合は、発行者によって提供される中間証明書も含める必要があります。 秘密キー、証明書、中間証明書をこの順序で 1 つのファイル内に配置してください。

例:

cat privkey.pem server.csr sf_issuing.crt > server.pem 

重要: サーバ署名キーは、ユーザの Web サイトのアイデンティティを証明するものです。 パスワード暗号化されないので、脆弱でもあります(ユーザの助けがなくてもアプライアンスが読み取れるようにするためです)。 データ ボリュームにインストールするときは、キー ファイルを保護するために必要な手段を講じます。 同じデータ ボリュームを他の目的に使用したり、Web アクセス可能なデータ(HTML ページ、スクリプトなど)をホストするなどのように、Web サーバから見られる状態にはしないでください。

クライアント証明書

以下の例は、ユーザ自身の証明機関を作成し、OpenSSL を使用して、自分の証明書に署名する方法の概要を示しています。 これは OpenSSL 0.9.8b (INSSLR にインストールされているものと同じバージョン)を使用してテストされました。

証明機関の作成

自己署名付きサーバ証明書の作成に使用するご自身の証明機関をすでにお持ちの場合は、この手順をスキップして、その証明機関を使用することができます。 ユーザのアプリケーションに対する信頼された権限のインスツルメントを作成するときは、環境が安全であることが重要です。

証明機関を作成する方法

  1. 安全なホスト システムで、以下のコマンドを使用して、作業ディレクトリおよび作業ディレクトリ内のプライベート ディレクトリを作成します。
    mkdir CA 
    mkdir CA/private 
    
  2. 証明機関用に、パスワード保護された RSA キーをキーの長さ 2048 ビットで作成します。
    openssl genrsa -des3 -out CA/private/CA_key.pem 2048 
    

重要: 証明機関用の秘密キーはアプリケーションの信頼の基本です。したがって、誰にでもわかるような保管や、他者への提供をしてはなりません。

証明機関の署名付きクライアント証明書の作成

CA AppLogic を使って、証明機関の署名付きクライアント証明書を作成することができます。

証明機関の署名付きクライアント証明書を作成する方法

  1. RSA 秘密キーを生成します(パスワード保護されたキーを作成するには、-des3 スイッチを使用します)。
    openssl genrsa -out clientA_privkey.pem 2048 
    
  2. 秘密キーから証明書署名要求(CSR)を生成します。
    openssl req -new -key clientA_privkey.pem -out clientA_request.csr 
    
  3. CA 用に生成された証明書を使用して、CSR 内の証明書に署名します。
    openssl x509 -req -days 365 -in clientA_request.csr -CA CA/CA_cert.pem -CAkey CA/private/CA_key.pem -CAcreateserial -out clientA.cer 
    

以下の点に留意してください。

INSSLR によって使用される CA リスト ファイルの作成

CA の署名付きクライアント証明書の無効化

CA が発行したクライアント証明書を無効にする方法

この例で「openssl.conf」は以下に示すとおりであり、「crl_reason」パラメータは、unspecified、keyCompromise、CACompromise、affiliationChanged、superseded、cessationOfOperation、certificateHold、removeFromCRL のうちのいずれかです。 理由の一致では、大文字と小文字を区別しません。

証明書失効リスト(CRL)を再生成する方法

この例で、「crl.pem」は「cert_revocation_list」プロパティとして INSSLR に提供されるファイルです。

上記の例に使用される環境設定ファイルの一例を以下に示します。

      ####################################################################
      [ ca ]
      default_ca      = CA_default            # The default ca section

      ####################################################################
      [ CA_default ]

      dir             = ./CA                  # Where everything is kept
      certs           = $dir/certs            # Where the issued certs are kept
      crl_dir         = $dir/crl              # Where the issued crl are kept
      database        = $dir/index.txt        # database index file.
      #unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
      new_certs_dir   = $dir/newcerts         # default place for new certs.

      certificate     = $dir/cacert.pem       # The CA certificate
      serial          = $dir/serial           # The current serial number
      crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
      crl             = $dir/crl.pem          # The current CRL
      private_key     = $dir/private/cakey.pem# The private key
      RANDFILE        = $dir/private/.rand    # private random number file

      default_days    = 365                   # how long to certify for
      default_crl_days= 30                    # how long before next CRL
      default_md      = sha1                  # which md to use.
      preserve        = no                    # keep passed DN ordering

      policy          = policy_anything

      [ policy_anything ]
      countryName             = optional
      stateOrProvinceName     = optional
      localityName            = optional
      organizationName        = optional
      organizationalUnitName  = optional
      commonName              = supplied
      emailAddress            = optional

INSSLR が使用する証明機関リスト ファイルの作成

CA AppLogic では、INSSLR が使用する証明機関リスト ファイルを作成できます。

ca_list_client プロパティによって識別されたファイルを作成する方法

  1. 以下のファイルにアクセスします。
    cat CA/private/CA_key.pem CA/CA_cert.pem > ca_list_client.pem 
    
  2. このファイルを、キー ボリュームまたは fs 端子経由で nfs マウントされたボリュームのいずれかに置きます。
  3. 必要であれば、INSSLR サーバ証明書(たとえば server.pem)もクライアント証明書と同じ方法で作成し、作成済みの証明機関によって同様に署名することができます。 この証明書にはパスワードを使用しないでください。
  4. server.pem と ca_list_client.pem を所定の場所に置いたら、以下の方法でクライアント証明書認証をテストできます。
クライアント証明書ヘッダ

HTTPS を使用してクライアントを INSSLR に接続する場合、およびクライアント証明書を提示する場合、INSSLR はバックエンド サーバに発行するリクエストに以下のヘッダを追加します。

これらのヘッダを利用するかどうかはアプリケーションによって判断されます。 INSSLR は、特に確認せずに単にこの情報を渡します(シグネチャと正しい暗号化チェックは例外)。

Web アプリケーション

アプリケーションへの http または https アクセスを行うには、WEB アプライアンスに http 端子を直接接続します。

WEB アプライアンスに直接接続された http 端子

拡張性のある Web アプリケーションが必要な場合は、HALB アプライアンスに http 端子をフックします。

HLB アプライアンスに接続された http 端子を使用する拡張性のある Web アプリケーション

Web アプリケーション用の設定

設定例の一覧は、デフォルト以外の値に設定され、ネットワーク設定されていないプロパティのみを表示しています(ip_addr、netmask、gateway)。

プロパティ

ノート

l7_accept

http/https/both

どの l7 プロトコルが使用されるかを指定します。 注: https または both を指定する場合、重要なボリュームには cert_file プロパティによって指定された SSL 証明書を含める必要があります。

サービスを追加した Web アプリケーション

アプリケーション内に http 以外にもサービスがある場合、INSSLR を使用して http トラフィックをその http 端子へ渡し、他のサービス用の aux 端子を使用することができます。

INSSLR を使用した http トラフィックのその http 端子への受け渡しと、その他のサービスに対する aux 端子の使用

プロパティ

ノート

l7_accept

http/https/both

どの l7 プロトコルが使用されるかを指定します。 注: https または both を指定する場合、重要なボリュームには cert_file プロパティによって指定された ssl 証明書を含める必要があります。

l3_accept_proto

tcp

tcp ポート 25、110、143 を aux 端子へリダイレクトします。

l3_accept_port

25,110,143

tcp ポート 25、110、143 を aux 端子へリダイレクトします。

複数サービスを追加した Web アプリケーション

複数の tcp/udp サービスおよび http がある場合、INSSLR を使用して http トラフィックをその http 端子へ渡し、aux を使用して PS8 への残りのトラフィックをフィードします。これがバック エンド サーバへ必要なトラフィックをフィードします。

INSSLR を使用した http トラフィックのその http 端子への受け渡しと、aux を使用したその他のトラフィックの PS8 への転送

プロパティ

ノート

l7_accept

http/https/both

どの l7 プロトコルが使用されるかを指定します。 注: https または both を指定する場合、重要なボリュームには cert_file プロパティによって指定された ssl 証明書を含める必要があります。

l3_accept_proto

all

http 端子へ渡されないすべての IP (icmp 以外の)トラフィックを aux 端子へリダイレクトします。

冗長性のある Web アプリケーション

冗長性のある Web アプリケーションが必要な場合は、アプリケーションをコピーし、INSSLR を使用して、外部 IP アドレスにフェールオーバ機能を提供することができます。

バックアップ Web アプリケーション

ユーザにダウンタイムを通知するバックアップ アプリケーションのみが必要な場合は、INSSLR を使用して、最小のリソースを必要とするバックアップ アプリケーションを構築します。

使用中のアプライアンス:

プライマリ アプリケーション上の INSSLR は次のとおりです。

プロパティ

ノート

ip_addr

1.2.3.4

アプリケーションのパブリック IP アドレス。プライマリとバックアップのアプリケーションで同じである必要があります。

netmask

255.255.255.0

アプリケーションのパブリック IP アドレス用ネットマスク。プライマリとバックアップのアプリケーションで同じである必要があります。

gateway

1.2.3.254

アプリケーションのパブリック IP アドレス用ゲートウェイ。プライマリとバックアップのアプリケーションで同じである必要があります。

fover_mode

asymmetric

プライマリがダウンしているときに限りバックアップ アプリケーションを使用するので、asymmetric モードで実行されます。

fover_local_ip

192.168.100.1

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるプライベート IP アドレス。 ローカル IP アドレスはリモートよりも小さいので、このアプライアンスがプライマリであり、実行中はずっとそのままです。

fover_remote_ip

192.168.100.2

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるリモート IP アドレス。

fover_netmask

255.255.255.0

fover_local_ip 用のネットマスク。

バックアップ アプリケーション上の INSSLR は次のとおりです。

プロパティ

ノート

ip_addr

1.2.3.4

アプリケーションのパブリック IP アドレス。プライマリとバックアップのアプリケーションで同じである必要があります。

netmask

255.255.255.0

アプリケーションのパブリック IP アドレス用ネットマスク。プライマリとバックアップのアプリケーションで同じである必要があります。

gateway

1.2.3.254

アプリケーションのパブリック IP アドレス用ゲートウェイ。プライマリとバックアップのアプリケーションで同じである必要があります。

fover_mode

asymmetric

プライマリがダウンしているときに限りバックアップ アプリケーションを使用するので、asymmetric モードで実行されます。

fover_local_ip

192.168.100.2

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるプライベート IP アドレス。

fover_remote_ip

192.168.100.1

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるリモート IP アドレス。

fover_netmask

255.255.255.0

fover_local_ip 用のネットマスク。

冗長性のある Web アプリケーション(単一アプリケーション)

冗長 Web アプリケーション(単一のアプリケーション)

アプリケーションを新規作成せずに、冗長モードでアプリケーションを実行する場合、単純に中のアプライアンスを二重にして、冗長モードで実行することができます。 このとき(少なくとも) 2 つの Web サーバと 2 つのデータベース アプライアンスを使用するので、標準モードではすべてが使用されます(拡張性を提供)。しかし、他のアプライアンスが失敗した場合、これらのそれぞれはアプリケーションに単独でサービスすることになります。 追加の拡張性を必要とする場合は、さらに多くの Web とデータベースのアプライアンスを追加できます。 この例では、アプライアンスの半分(in1、sw1、web1、db1)が 1 つのフェールオーバ グループ内で実行され、残り(in2、sw2、web2、db2)は別のフェールオーバ グループ内で実行されるので、アプリケーションはサーバ クラッシュに耐えることができます。 すべてのアプライアンス(要求されるリソースが非常に少ない 1 つの INSSLR および 1 つの HALB のアプライアンスを除く)がアクティブ状態にあり、プライマリが失敗したときにのみ実行されるバックアップ アプリケーションにはリソースが費やされないので、このアプリケーションは非常に低コストで冗長性を提供します。

in1

プロパティ

ノート

ip_addr

1.2.3.4

アプリケーションのパブリック IP アドレス。プライマリとバックアップのアプリケーションで同じである必要があります。

netmask

255.255.255.0

アプリケーションのパブリック IP アドレス用ネットマスク。プライマリとバックアップのアプリケーションで同じである必要があります。

gateway

1.2.3.254

アプリケーションのパブリック IP アドレス用ゲートウェイ。プライマリとバックアップのアプリケーションで同じである必要があります。

fover_mode

symmetric

symmetric モードで実行されます。

fover_local_ip

192.168.100.1

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるプライベート IP アドレス。

fover_remote_ip

192.168.100.2

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるリモート IP アドレス。

fover_netmask

255.255.255.0

fover_local_ip 用のネットマスク。

in2

プロパティ

ノート

ip_addr

1.2.3.4

アプリケーションのパブリック IP アドレス。プライマリとバックアップのアプリケーションで同じである必要があります。

netmask

255.255.255.0

アプリケーションのパブリック IP アドレス用ネットマスク。プライマリとバックアップのアプリケーションで同じである必要があります。

gateway

1.2.3.254

アプリケーションのパブリック IP アドレス用ゲートウェイ。プライマリとバックアップのアプリケーションで同じである必要があります。

fover_mode

symmetric

symmetric モードで実行されます。

fover_local_ip

192.168.100.2

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるプライベート IP アドレス。

fover_remote_ip

192.168.100.1

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるリモート IP アドレス。

fover_netmask

255.255.255.0

fover_local_ip 用のネットマスク。

db1

プロパティ名

ノート

auto_create

1

ボリュームが空の場合は、データベースを作成します。

server_id

1

マスタ サーバ 1。これはリモート アプリケーション上では異なります。

rpl_mode

master_and_slave

マスタとスレーブ

db2

プロパティ名

ノート

auto_create

1

ボリュームが空の場合は、データベースを作成します。

server_id

2

マスタ サーバ 1。これはリモート アプリケーション上では異なります。

rpl_mode

master_and_slave

マスタとスレーブ

冗長性のある Web アプリケーション(2 つの同一アプリケーション)

冗長 Web アプリケーション(2 つの同一アプリケーション)

同じグリッド(ただしサーバの 1 つが失敗してもアプリケーションのうちの 1 つにしか影響しないようにサーバが別々であること)、または別のグリッド上で使用する IP アドレスが両方のグリッドからアクセス可能である場合、2 つの同一のアプリケーションを実行できます。 以下の例は、冗長モードでも実行されているデータベース アプライアンスを使用したアプリケーションを示しています。このため、1 つのアプリケーションで失敗した場合でも、別のアプリケーションが引き継ぐのでデータが損失しません。

使用中のアプライアンス:

クライアント リクエストが in1 ゲートウェイに到達します。 ゲートウェイは Web ロード バランサにリクエストを転送し、Web ロード バランサは web1 と web2 のいずれかの Web サーバにリクエストを伝えます。 Web サーバは db データベースにアクセスします。 db アプライアンスはリモート アプリケーション(これは同じもののコピーで、唯一異なるのは server_id が db かネットワーク設定であるかのみです)に接続され、データベースをレプリケートします。 リモート アプリケーションは、リモート アプリケーションの repl_out ゲートウェイからのみ接続が許可されるように設定された repl_in ゲートウェイ経由で、db アプライアンスに接続します。 2 つのアプリケーション内の db アプライアンスはマスタ/マスタ設定で実行されるので、これらのデータは常に同一です。

プロパティ設定の例(リストに表示されていないプロパティはデフォルト値のままにしてください):

db への Web アクセスは、ポート 8080 上の admin ゲートウェイを使用すれば可能です。

in1

プロパティ

ノート

ip_addr

1.2.3.4

アプリケーションのパブリック IP アドレス。両方のアプリケーションで同じである必要があります。

netmask

255.255.255.0

アプリケーションのパブリック IP アドレス用ネットマスク。両方のアプリケーションで同じである必要があります。

gateway

1.2.3.254

アプリケーションのパブリック IP アドレス用ゲートウェイ。両方のアプリケーションで同じである必要があります。

fover_mode

symmetric

symmetric モードで実行されます。

fover_local_ip

192.168.100.1

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるプライベート IP アドレス。 リモート アプリケーションでは、これを 192.168.100.2 に変更します。

fover_remote_ip

192.168.100.2

2 つのアプリケーション内の INSSLR アプライアンス間の通信に使用されるリモート IP アドレス。 リモート アプリケーションでは、これを 192.168.100.1 に変更します。

fover_netmask

255.255.255.0

fover_local_ip 用のネットマスク。

db

プロパティ名

ノート

auto_create

1

ボリュームが空の場合は、データベースを作成します。

error_log_filename

db.error

logs データ ボリューム上に格納されるエラー ログ ファイルの名前。

error_log_level

error

エラー ログ レベル

server_id

1

マスタ サーバ 1。これは第 2 アプリケーション上では異なります。

rpl_mode

master_and_slave

マスタとスレーブ

重要: アプリケーションのうち 1 つのみが常にアクティブです。もう一方は単にフェールオーバのために実行されており、アクティブなアプリケーションが失敗したときに使用されます。

INSSLR は HTTP 1.0 および HTTP 1.1 をサポートしますが、クライアントがそれ自体で MSIE として識別する場合、HTTP 1.1 サポートはその接続に対してオフになります(MSIE の一部のバージョン内のバグを回避)。

クライアントが MSIE でない場合、INSSLR はクライアントのために HTTP 1.1 をサポートします(TCP セッション機能を通じた複数のリクエストを含む)。これは、バックエンド サーバの使用によって HTTP 1.0 のみがサポートされる場合も同様です。

INSSLR は 1 つの外部 IP をサポートします。したがって、単一の SSL 証明書のみを使用できます。

アプライアンス内でオープン ソース/サードパーティ ソフトウェアを使用

INSSLR は、ベース クラス LUX5 で使用されるサードパーティのオープン ソース パッケージに加えて、以下のサードパーティのオープン ソース パッケージを使用します。

ソフトウェア

バージョン

変更

ライセンス

PyXML

0.8.4

いいえ

MIT および Python および ZPLv1.0 および BSD

該当なし

gnutls

1.4.1-2

いいえ

LGPLv2.1

該当なし

heartbeat

3.0.4-1

いいえ

LGPLv2 および GPLv2+

該当なし

heartbeat-pils

2.1.3-3

いいえ

LGPLv2.1

該当なし

heartbeat-stonith

2.1.3-3

いいえ

LGPLv2.1

該当なし

iptables

1.3.5-4

いいえ

GPLv2

該当なし

libgcrypt

1.2.3-1

いいえ

GPLv2

該当なし

libgpg-error

1.4-2

いいえ

LGPLv2.1

該当なし

lighttpd

1.4.18-1

いいえ

BSD

該当なし

nginx

0.7.62-1

はい

BSD

該当なし

sudo

1.6.8p12-10

いいえ

BSD

該当なし

telnet

0.17-38

いいえ

BSD

該当なし