NetScaler 製品担当 です。前回に引き続き、NetScaler VPN仮想サーバーの保護をテーマに、使えると思われる機能を検証してみました。
本ブログの注意点:
- 「絶対安全」というものは存在しないため、製品のリリースノートを定期的に確認し、脆弱性情報が公開された際には速やかにOSのアップグレードを行うことをお勧めします。
- ここで紹介する機能や設定例は検証環境では動作することを確認出来ておりますがお客様環境での動作を保証するものではありません。導入前に必ず検証することをお勧めします。
1 想定構成
構成は過去記事をご覧ください。
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」します。
3、「設定例パラメータ」を「SSL Profile」メニューの各項目に入力し最後に「OK」、「Done」をクリックします。
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」をクリックします。
3、「Server Certificate Binding」の「Server Certificate for SNI」にチェックを入れ、次に「Click to select」をクリックします。
4、「Server Certificates」メニューの中からVPN仮想サーバーに当てはまる証明書にチェックを入れ「Select」します。
5、最後に「Bind」します。
*次の警告画面が表示されますが、この時点ではSNI が無効であるためそのまま「OK」をクリックします。
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」をクリックします。
3、画面が自動的にスクロールされ、「SSL Profile」ドロップダウンメニューから事前に作成した Profile を選択、その後「OK」と「Done」をクリックします。
2.3 項目説明
製品GUI ヘルプより取得した機能説明を翻訳した内容です。
2.4 動作確認
SNI の動作と効果を確かめるために、HTTP リクエストを VPN 仮想サーバーに対して送信し、その応答を検証しました。リクエストはTLS によって暗号化し、宛先ドメインとHTTP ホストヘッダーの情報を順次変え、意図通りに通信が成立するもしくは拒否されるかを検証しました。その結果を「試験パターン」にまとめてみました。
条件:
・「SNI」 を有効(Enable)・無効(Disable)、にしてリクエストを送信
・「SNI HTTP Host Match」 を有効(STRICT)・無効(NO)、にしてリクエストを送信
・リクエスト宛先、HTTP ホストヘッダー値を同一・別々にしてリクエストを送信
・クライアントは curl を使用
2.5 注意事項
・作業完了後必ず設定を保存してください。
・VPN仮想サーバーにSSLプロファイルを適用すると、グローバル設定で有効なSSL関連の設定が無効化されます。そのため、必要な項目は必ずSSLプロファイル内で再設定してください。例として、SSLやTLSのバージョン指定、サイファースイートの指定などが該当します。
・SNIの有効化や「Host」ヘッダー値の検証方法は、SSLグローバルパラメータから変更することも可能です。ただし、将来的にはSSLプロファイルが主な設定方法となることが予想されるため、本手順ではSSLプロファイルを使用しています。
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」
3 まとめ
ここまでお読みいただき、ありがとうございます。NetScalerのSSL-SNI機能を活用することで、より安全なVPN接続環境を構築することが可能です。設定手順をしっかりと確認し、適切に導入することで、セキュリティを強化し、攻撃からシステムを守ることができます。今後も最新の情報をチェックし、セキュリティ対策を継続的に行っていきましょう。