Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

NETCONF Call Home セッション

概要 NETCONF Call Homeを使用すると、NETCONFサーバーはNETCONFクライアントへのセキュアな接続を開始できます。その後、NETCONFクライアントは、サーバーとのSSHセッションおよびNETCONFセッションを確立できます。

NETCONF Call Homeは、ネットワークデバイスがネットワークデバイスへの接続を開始できない場合に、NETCONFクライアントがJunosデバイスをリモートで管理することを可能にします。NETCONFサーバーとして動作するJunosデバイスは、事前定義された一連のNETCONFクライアントへのセキュアな接続を開始および維持します。ここでは、NETCONF Call Home 機能について説明します。

NETCONF Call Homeについて

NETCONF Call Home の概要

SSHを介した通常のNETCONFセッションの場合、NETCONFクライアントはまず、NETCONFサーバーとして動作しているJunosデバイスへのTCP接続を開始します。その後、クライアントはSSHセッションを開始し、続いてNETCONFセッションを開始します。NETCONF Call Homeのシナリオでは、TCPサーバーとクライアントの役割が逆になります。NETCONFサーバーが、NETCONFクライアントへのTCP接続を開始します。接続が確立されると、NETCONFクライアントは通常どおりSSHセッションとNETCONFセッションを開始します。

NETCONF Call Homeを使用すると、他の方法ではアクセスできないJunosデバイスをリモートで管理できます。これは、たとえば、デバイスがファイアウォールの内側にあり、ファイアウォールまたは別のセキュリティ ツールがデバイスへの管理アクセスを制限したり、ネットワークアドレス変換(NAT)を実装したりする場合に発生する可能性があります。このような場合、NETCONF クライアントが Junos デバイスとの接続を開始できない可能性があります。ただし、Junos デバイスを設定して、事前定義されたネットワーク管理システムとの接続を開始、確立、維持することはできます。

以下のシナリオで NETCONF Call Home を使用できます。

  • 初期導入

  • 一般的なデバイス管理

図 1 は、コール・ホーム・シーケンスの概要を示しています。NETCONF Call Homeのシナリオでは、ネットワーク管理システム(NMS)がTCPサーバーであり、JunosデバイスがTCPクライアントです。TCPサーバーは、指定したポートで接続要求をリッスンするように構成します。NETCONF Call Home の標準ポートは 4334 ですが、他のサービスと競合しない任意の有効なポート番号を設定できます。指定したポート上の 1 つ以上の事前定義されたネットワーク管理システムに接続するように Junos デバイスを設定します。デバイスがTCP接続を確立すると、NMSはSSHクライアントおよびNETCONFクライアントとしての役割を引き継ぎます。

図 1: NETCONF Call Home 接続 NETCONF Call Home Connection

NETCONFクライアントは、TCP接続を介してSSHセッションを開始します。SSHセッションの確立中に、NETCONFクライアントは、サーバーの提示されたホストキーまたは証明書を検証して、サーバーを認証する必要があります。NETCONF サーバーもクライアントを認証する必要があります。クライアントは、サーバーがサポートする任意のSSH認証方法を選択できます。サーバーは、最初に証明書ベースの認証をチェックし、次にキーベースの認証をチェックし、最後にパスワードベースの認証を確認します。

ユーザーとホストには、SSH 証明書ベースの認証を使用することをお勧めします。認証ベースの認証により、パスワードレスログインを使用したデバイスへのSSHアクセスを設定できるようになり、ユーザーは、カギのフィンガープリントで検証する必要なく、ホストを信頼できるようになります。さらに、特定の証明書が有効である期間を定義できます。証明書ベースの認証では、サーバーとクライアントがそれぞれSSH証明書を送信します。サーバーの証明書を検証する CA 公開キーを使用してクライアントを構成する必要があります。同様に、クライアントの証明書を検証する CA 公開キーを使用してサーバーを構成する必要があります。

NETCONF Call Home の詳細については、RFC 8071、 NETCONF Call Home および RESTCONF Call Home を参照してください。

NETCONF Call Home のメリット

  • NETCONF Call Homeは、デバイスの初期導入を合理化できます。

  • 証明書ベースの認証を使用した NETCONF Call Home は、従来のパスワードベースのアプローチと比較して、認証キーの管理と拡張を簡素化し、より強力なセキュリティを提供できます。

NETCONF Call Home の設定方法

NETCONF Call Home を設定するには、以下のセクションで説明する手順を実行します。

Junosユーザー アカウントを設定します

すべてのSSH認証方法では、NETCONFクライアントには、NETCONFセッションを確立する各デバイスに、ローカルユーザーアカウントまたはユーザーテンプレートアカウントが必要です。

ローカル・ユーザー・テンプレート・アカウントを作成するには、以下の手順に従います。

  1. [edit system login]階層レベルで user ステートメントを設定し、ユーザー名を指定します。class ステートメントを含め、ユーザーが実行するすべてのアクションに必要な権限を持つログインクラスを指定します。

  2. 設定をコミットします

  3. クライアント アプリケーションが NETCONF セッションを確立する各 Junos デバイスで、上記の手順を繰り返します。

SSH認証の設定

SSHセッション確立中に、NETCONFクライアントは、サーバに提示されたホストキーまたは証明書を検証することで、サーバを認証します。同様に、NETCONF サーバーはクライアントを認証します。サーバーは、最初に証明書ベースの認証をチェックし、次にキーベースの認証をチェックし、最後にパスワードベースの認証を確認します。どちらの認証方法を選択しても、サーバーとクライアントを構成する必要があります。SSH認証方法は、次のセクションで説明されています。

パスワードベースの認証を設定する

NETCONF クライアントがパスワードベースの認証を使用する場合、Junos ユーザー アカウントにパスワードを設定します。

テキストベースのパスワードを作成するには:

  1. ユーザーアカウントに plain-text-password または encrypted-password ステートメントを含めます。

    • パスワードをテキストとして入力するには、次のコマンドを発行します。パスワードの入力を求められます。パスワードは保存される前に暗号化されます。

      事前に暗号化されたパスワード(たとえば、以前にメッセージダイジェスト5(MD5)を使用して作成およびハッシュしたパスワード)を保存するには、次のコマンドを発行します。

  2. 設定をコミットします。

  3. クライアント アプリケーションがパスワードベースの認証を使用して NETCONF セッションを確立する各 Junos デバイスで、上記の手順を繰り返します。

キーベース認証を構成する

NETCONF クライアントがキーベースの認証を使用する場合は、まず設定管理サーバーでユーザーの SSH キーペアを生成します。次に、Junosデバイスの対応するユーザーアカウントの下で公開キーを設定します。

NETCONF クライアントのキーベース認証を設定するには:

  1. 指定されたユーザーのSSHキーペアを生成します。

    ネットワーク管理システムで、 ssh-keygen コマンドを発行し、適切な引数を指定します。

    例えば:

    デフォルトでは、ssh-keygen コマンドは公開鍵と秘密鍵をユーザーのホームディレクトリの .ssh サブディレクトリ内のファイルに保存します。ファイル名はエンコーディングと SSH のバージョンによって異なります。コマンドオプションの詳細については、ssh-keygenのマニュアルページを参照してください。
  2. Junos デバイスで、公開キーをそのユーザーの Junos ログイン アカウントに関連付けます。

    Junos OSは、指定されたファイルの内容を、Junos OS. URL を実行しているデバイスにコピーします。は、1 つ以上の公開キーを含むファイルへのパスです。URLの指定については、 CLIユーザーガイドを参照してください。

    手記:

    または、[edit system login user username authentication]階層レベルで ssh-rsa または同等の ステートメントを含めることで、公開キーを設定できます。

  3. 設定をコミットします。

  4. クライアントアプリケーションがNETCONFセッションを確立する各Junosデバイスで公開キーを設定する手順を繰り返します。

SSH接続の初期化中に、クライアントはサーバーの公開キーを使用してNETCONFサーバーのIDを認証できます。サーバーの公開キーをネットワーク管理システムにインストールするか、セッションの初期化中にキーを渡すことができます。

証明書ベースの認証を設定する

NETCONF Call Home は、認証での SSH 証明書の使用をサポートしています。SSH証明書は、認証局(CA)によって署名されたSSH公開キーで構成されています。CA秘密鍵(署名鍵)は、ホストの公開鍵に署名して、ホスト証明書を生成します。同様に、CA の秘密鍵は、ユーザーの公開鍵に署名して、ユーザー証明書を生成します。ホスト証明書はユーザーに対してホストを認証し、ユーザー証明書はホストに対してユーザーを認証します。

OpenSSH を使用して、SSH 証明書および関連する CA インフラストラクチャを作成できます。OpenSSH 証明書は、公開鍵、ID 情報、および有効性の制約を指定します。認証にSSH証明書を使用するには、以下を行う必要があります。

  • 認証局を作成し、CA 署名キーを生成します。

  • ユーザーのSSHキーペアを生成します。

  • CA 秘密鍵を使用してユーザー証明書とホスト証明書を生成し、ユーザーの公開鍵とホストの公開鍵に署名します。

  • Junos デバイスとネットワーク管理システムで、CA 公開キーを信頼できるものとして設定します。

  • Junosデバイスで承認されたプリンシパルを設定します。

デフォルトでは、生成された証明書はすべてのユーザーに対して有効です。ユーザー証明書を特定のユーザー セット (プリンシパル) に制限するには、証明書の生成時に承認されたプリンシパルを指定する必要があります。Junos デバイスには、1 つ以上の承認済みプリンシパルを指定する証明書が必要です。Junosデバイスで承認されたプリンシパルのリストも設定する必要があります。デバイスで構成されている承認済みプリンシパル 証明書内の承認済みプリンシパルと一致する場合、デバイスは証明書を認証します。接続するユーザーは、証明書またはデバイスで承認されたプリンシパルとして明示的に構成されていない場合でも承認されます。

証明書ベースの認証を設定するには、次の手順を実行します。

認証局の生成
  1. 任意の Linux/FreeBSD システムで、認証局の署名キーを生成します。

    たとえば、次のコマンドは、ユーザー証明書とホスト証明書に署名するための個別の CA 署名キーを作成します。

  2. ホスト CA を信頼するようにネットワーク管理システムを構成します。

    ホストCA公開キーの内容をコピーし、グローバルまたはユーザーのSSH既知のホストファイルに追加して、信頼できるCAとしてマークします。次の例では、ホスト CA の公開キーの内容をコピーし、 @cert-authority * host-ca-public-key ユーザーの known_hosts ファイルに追加します。

    手記:

    NMSは、ホストCA公開キーを使用してホスト証明書を検証します。特定のホストまたはドメインの証明書のみを信頼するには、ワイルドカード(*)を適切なホスト名またはドメイン名に置き換えます。

  3. ユーザー CA 公開キーを Junos デバイスにコピーします。

    例えば:

  4. Junos デバイスで、ユーザー CA 公開キーを信頼できる CA キーとして設定します。

    次の例では、 user_ca.pub ファイルに格納されている CA 公開キーを、信頼できるユーザー CA キーとして追加します。

    このステートメントを設定すると、デバイスはユーザー CA 公開キーを /var/etc/ssh_trusted_user_ca.pub ファイルに追加します。Junosデバイスは、SSHセッション確立中にユーザーCAパブリックキーを使用してユーザー証明書を検証します。

ユーザー証明書の生成

NETCONFクライアントのSSH証明書を生成するには:

  1. クライアント NMS で、ユーザーの SSH キーペアを生成します。

    例えば:

  2. デバイスが異なる場合は、CA 署名キーを持つ CA サーバーにユーザーの公開キーをコピーします。

  3. ユーザー証明書を生成します。

    ユーザー CA 秘密キーを使用してユーザーの公開キーに署名し、この証明書を使用して Junos デバイスにアクセスできる承認済みプリンシパル(ユーザー)のリストを指定します。

    次のコマンドは、 user_ca に格納されている CA 秘密キーを使用して、 id_rsa.pub に格納されているユーザーの公開キーに署名します。証明書は、labとnetconf-userの2つのプリンシパルに対して有効です。

  4. ユーザー証明書が作成されていることを確認します。

    前の手順では、コマンドによって id_rsa-cert.pub ファイルが作成されます。

  5. デバイスが異なる場合は、ユーザー証明書をネットワーク管理システムにコピーします。

  6. ユーザー証明書ファイルの所有者とアクセス許可が正しいことを確認します。

  7. SSH キーと証明書の ID が自動的に追加されない場合は、ssh-agent アプリケーションに追加します。例えば:

ホスト証明書の生成

Junos デバイスは、SSH キーを /etc/ssh ディレクトリに保存します。ホスト証明書を生成するには、まずホストの公開キーを CA サーバにコピーし、次にホスト CA の秘密キーを使用してホストの公開キーに署名します。

  1. Junos デバイスで、ホストの公開キーを確認します。

  2. Junos デバイスの公開キーを、CA 署名キーがある CA サーバーにコピーします。

  3. ホスト証明書を生成します。

    ホストCA秘密鍵を使用してホストの公開鍵に署名し、 -h オプションを指定してホスト証明書を作成します。

    次のコマンドは、 host_ca に格納されている CA 秘密キーを使用して、 ssh_host_rsa_key.pub に格納されているホストの公開キーに署名します。

  4. ホスト証明書が作成されていることを確認します。

    前の手順では、コマンドによって ssh_host_rsa_key-cert.pub ファイルが作成されます。

  5. ホスト証明書をJunosデバイスにコピーします。

    例えば:

  6. Junos デバイスで、ホスト証明書を設定します。

    このステートメントを設定すると、デバイスはホスト証明書を /var/etc/ssh_host_ca.pub ファイルに追加します。

承認されたプリンシパルを構成する

ユーザー証明書は、特定のユーザーまたはプリンシパルに関連付けることができます。Junos デバイスでは、ユーザー証明書に 1 つ以上の認証済みプリンシパルを指定する必要があります。また、Junos デバイスで承認されたプリンシパルを設定する必要があります。Junos デバイスは、デバイスに設定された承認済みプリンシパルの少なくとも 1 つが証明書内の承認済みプリンシパルと一致する場合、証明書を認証します。

許可されたプリンシパルのリストは、いくつかの方法で構成できます。許可されたプリンシパルのリストを含むファイルを、それぞれ別の行にロードできます。また、許可されたプリンシパル・リストを構成内で直接構成することもできます。

権限のあるプリンシパルを設定するには、次のようにします。

  1. (オプション)承認済みプリンシパル ファイルを作成し、Junos デバイスにコピーします。

  2. SSH 証明書を使用してシステムにアクセスできる承認済みプリンシパルを構成します。

    • 承認されたプリンシパルを含むファイルをロードするには、 authorized-principals-file ステートメントを設定し、ロードするファイルのパスを指定します。

      例えば:

    • 1 つ以上の承認されたプリンシパルを構成内で直接構成するには、 authorized-principals ステートメントを使用して、プリンシパル名またはプリンシパル名のリストを指定します。

      例えば:

  3. 設定をコミットします。

    許可された主体を設定すると、デバイスは承認された主体のリストを /var/etc/ssh_authorized_principals ファイルに追加します。

NETCONFサービスを有効にする

Junos デバイスで NETCONF Call Home 用の NETCONF サービスを設定するには、次の手順に従います。
  1. デフォルトのNETCONFポート(830)またはユーザー定義ポートのいずれかでNETCONFサービスを有効にします。
    • デフォルトの NETCONF ポート(830)を使用する場合は、ポート番号を指定しないでください。

    • 特定のポートを使用するには、ポート番号を設定します。

      ポートの範囲は 1 から 65535 までですが、通常は別のサービスに割り当てられるポートでアクセスを設定することは避けてください。

  2. RFCに準拠したNETCONFセッションを設定します。
  3. YANG準拠のNETCONFセッションを設定します。
  4. 設定をコミットします。

NETCONF Call Home クライアントに接続するための Junos デバイスの設定

NETCONF Call Homeのシナリオでは、TCPサーバーとクライアントの役割が逆になります。Junos デバイスを設定して、事前定義されたネットワーク管理システムとの接続を開始、確立、維持します。NETCONF Call Home は、指定された NETCONF クライアントに接続するためにアウトバウンド SSH を使用します。

開始する前に、以下を実行します。

  • 認証にSSH証明書を使用する場合は、ユーザーCA 証明、ホスト証明書、および承認されたプリンシパルを設定します。

手記:

NETCONF Call Home クライアント設定は、クライアント設定をコミットした時点で SSH 証明書設定を登録します。クライアント構成をコミットする際に、ホスト証明書と少なくとも 1 つのユーザー CA 証明書、および 1 つの承認済みプリンシパルを構成する必要があります。これらの初期値を後から追加する場合、値を有効にするには、クライアント構成を非アクティブ化してコミットし、次にクライアント構成をアクティブ化してコミットする必要があります。クライアント構成を最初にアクティブ化するときに初期値が構成されている場合、既存の値に対する更新はクライアント構成によって自動的に登録されます。

Junos デバイスで NETCONF Call Home クライアントを設定するには、次の手順に従います。

  1. [edit system services ssh] 階層レベルで、SSH バージョンを v2 に設定します。
  2. アウトバウンド SSH クライアント階層に移動し、NETCONF Call Home クライアントを一意に識別する識別子を定義します。

    例えば:

  3. NETCONF クライアントのホスト名または IPv4 または IPv6 アドレスを設定します。さらに、NETCONFクライアント(TCPサーバーとして機能)が接続要求をリッスンしているポートを指定します。

    例えば:

  4. デバイス識別子を定義します。これは、開始シーケンス中にクライアントに対してJunosデバイスを識別するためのユーザー定義の文字列です。

    例えば:

  5. 切断されたアウトバウンド SSH 接続を sticky または in-order として再確立するために使用する方法を定義します。
  6. セッションのNETCONFサービスを設定します。
  7. (オプション)キープアライブ メッセージを管理サーバーに送信するように Junos デバイスを設定します。

    例えば、以下の設定では、15秒ごとにキープアライブ信号を送信し(デフォルト)、応答を受け取らないメッセージを3件送信した後にSSH接続を終了します(デフォルト)。

  8. (オプション)セッションの初期化中にデバイスの公開キーを管理サーバーに渡す場合は、secretステートメントを設定します。

    このステートメントを構成すると、デバイスは、セッションの初期化中に、 secret ステートメントから部分的に派生した SHA1 ハッシュとともに公開キーを管理サーバーに渡します。クライアントアプリケーションは、共有シークレットとハッシュを使用して、提示されたホストキーが device-id ステートメントで識別されるデバイスからのものかどうかを確認できます。

  9. Junos デバイスを管理する各 NETCONF Call Home クライアントについて、上記の手順を繰り返します。
  10. 設定をコミットします。

NETCONF Call Home クライアントに接続するようにデバイスを設定し、設定をコミットすると、デバイスはクライアントとの TCP/IP 接続を開始しようとします。デバイスは、成功するまで、または NETCONF Call Home クライアント設定が削除または非アクティブ化されるまで、この接続を作成し続けます。

Junos デバイスは、アウトバウンド SSH 接続を確立するたびに、デバイスを識別する開始シーケンスをクライアントに送信します。この送信内には、 device-idの値があります。 secret ステートメントを設定しない場合、開始シーケンスは次のとおりです。

secret ステートメントを設定する場合、開始シーケンスには、Junos デバイスの公開キーと、secret ステートメントから部分的に派生した SHA1 ハッシュが含まれます。クライアントは、予想されるハッシュ値を計算し、それをHMAC値と比較して、提示されたホストキーがdevice-idステートメントで識別されるデバイスからのものであることを確認できます。

クライアントは、提示されたホストキーまたは証明書を検証して、Junosデバイスを認証します。同様に、NETCONF サーバーはクライアントを認証します。サーバーは、最初に証明書ベースの認証をチェックし、次にキーベースの認証をチェックし、最後にパスワードベースの認証を確認します。SSHセッションが確立された後、クライアントはNETCONFセッションを開始します。