株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

NetScaler徹底解説!SSL-SNIによる安全な接続方法

    NetScaler 製品担当 です。前回に引き続き、NetScaler VPN仮想サーバーの保護をテーマに、使えると思われる機能を検証してみました。

 

本ブログの注意点:

  • 「絶対安全」というものは存在しないため、製品のリリースノートを定期的に確認し、脆弱性情報が公開された際には速やかにOSのアップグレードを行うことをお勧めします。
  • ここで紹介する機能や設定例は検証環境では動作することを確認出来ておりますがお客様環境での動作を保証するものではありません。導入前に必ず検証することをお勧めします。

 

 

想定構成

構成は過去記事をご覧ください。

2 SSL SNI による接続制限

    SNI(Server Name Indication) は、2003年にTLSの拡張機能として導入された仕組みです。この機能により、クライアントはTLSハンドシェイク中に接続先のサーバー名を指定できるようになりました。サーバー名は「Client Hello」メッセージ内の「server_name」という拡張フィールドに格納されます。

    NetScaler はこの「server_name」パラメータを受け取り、それに対応するドメインの証明書を使用して通信を暗号化します。もし該当する証明書が存在しない場合は、NetScalerはTLS プロトコルレベルで通信を強制的に終了します。

    TLSの仕組みとNetScaler の機能を組み合わせることで、VPN 仮想サーバーに接続するクライアントは正しいドメイン名を使用する必要があります。これにより、不正なIP指定による攻撃からVPN 仮想サーバーを保護することが可能になります。さらに SNI HTTP Host Match を有効にすることにより、NetScaler は「server_name」とHTTP のホストヘッダーを比較し、これらの値が一致するリクエストのみを許可します。

2.1 設定例パラメータ

パラメータ情報

2.2 設定手順

2.2.1 SSL Profile 新規作成

1、「Profiles」メニュー内の「SSL Profile」に移動します。

        GUI) Config > System > Profiles > SSL Profile

2、「ns_default_ssl_profile_frontend」にチェックを入れ「Add」します。

Profiles 設定画面

3、「設定例パラメータ」を「SSL Profile」メニューの各項目に入力し最後に「OK」、「Done」をクリックします。

SSL Profile 設定画面
2.2.2 VPN 仮想サーバーに対するサーバー証明書のバインド

本手順ではサーバー証明書が「Bind」されていないことが前提となります。

証明書が「Bind」済みの場合は、先に「Unbind」してから本手順を実施します。

 

1、「NetScaler Gateway Virtual Servers」メニューに移動し、設定対象の仮想サーバーにチェックを入れ「Edit」します。

        GUI) Config > NetScaler Gateway > Virtual Servers

2、「VPN Virtual Server」メニューより項目名 「Certificate」内の 「Server Certificate」をクリックします。

Server Certificate 設定画面1

3、「Server Certificate Binding」の「Server Certificate for SNI」にチェックを入れ、次に「Click to select」をクリックします。

Server Certificate設定画面2

4、「Server Certificates」メニューの中からVPN仮想サーバーに当てはまる証明書にチェックを入れ「Select」します。

5、最後に「Bind」します。

*次の警告画面が表示されますが、この時点ではSNI が無効であるためそのまま「OK」をクリックします。

Server Certificate 設定画面3
2.2.3 VPN 仮想サーバーに対するSSL Profile のバインド

1、「NetScaler Gateway Virtual Servers」メニューに移動し、設定対象の仮想サーバーにチェックを入れ「Edit」します。

GUI) Config > NetScaler Gateway > Virtual Servers

2、「VPN Virtual Server」メニューの 「Advance Settings」から「SSL Profile」をクリックします。

SSL Profile 設定画面1

3、画面が自動的にスクロールされ、「SSL Profile」ドロップダウンメニューから事前に作成した Profile を選択、その後「OK」と「Done」をクリックします。

SSL Profile 設定画面2

SSL Profile 設定画面3

 

2.3 項目説明

     製品GUI ヘルプより取得した機能説明を翻訳した内容です。

SNI 設定項目説明

2.4 動作確認

      SNI の動作と効果を確かめるために、HTTP リクエストを VPN 仮想サーバーに対して送信し、その応答を検証しました。リクエストはTLS によって暗号化し、宛先ドメインとHTTP ホストヘッダーの情報を順次変え、意図通りに通信が成立するもしくは拒否されるかを検証しました。その結果を「試験パターン」にまとめてみました。

 

条件:

・「SNI」 を有効(Enable)・無効(Disable)、にしてリクエストを送信

・「SNI HTTP Host Match」 を有効(STRICT)・無効(NO)、にしてリクエストを送信

・リクエスト宛先、HTTP ホストヘッダー値を同一・別々にしてリクエストを送信

・クライアントは curl を使用

 

試験パターン

 

試験項番1

試験項番2

試験項番3

試験項番4

試験項番5

試験項番6

試験項番7

試験項番8

試験項番9

試験項番10

試験項番11



2.5 注意事項

・作業完了後必ず設定を保存してください。

・VPN仮想サーバーにSSLプロファイルを適用すると、グローバル設定で有効なSSL関連の設定が無効化されます。そのため、必要な項目は必ずSSLプロファイル内で再設定してください。例として、SSLやTLSのバージョン指定、サイファースイートの指定などが該当します。

・SNIの有効化や「Host」ヘッダー値の検証方法は、SSLグローバルパラメータから変更することも可能です。ただし、将来的にはSSLプロファイルが主な設定方法となることが予想されるため、本手順ではSSLプロファイルを使用しています。

SSL パラメータに関する警告画面(CLI 表示)

2.6 参考情報

・SNI 詳細 「RFC6066」

各機能の詳細情報は製品ドキュメントをご覧ください。

・「Configure a server name indication (SNI) virtual server for secure hosting of multiple sites」

https://docs.netscaler.com/en-us/citrix-adc/current-release/ssl/config-ssloffloading.html

 

・「Host header validation」

https://docs.netscaler.com/en-us/citrix-adc/current-release/ssl/ssl-profiles/ssl-enabling-the-default-profile.html

3 まとめ

     ここまでお読みいただき、ありがとうございます。NetScalerのSSL-SNI機能を活用することで、より安全なVPN接続環境を構築することが可能です。設定手順をしっかりと確認し、適切に導入することで、セキュリティを強化し、攻撃からシステムを守ることができます。今後も最新の情報をチェックし、セキュリティ対策を継続的に行っていきましょう。