3.3 VPN Server 管理 - SoftEther VPN プロジェクト

3.3 VPN Server 管理

    目次
    1. 1. 3.3.1 システムを停止する必要がない管理
    2. 2. 3.3.2 SoftEther VPN Server と仮想 HUB
    3. 3. 3.3.3 管理ツールおよびリモート管理
    4. 4. 3.3.4 管理権限
      1. 4.1. SoftEther VPN Server 全体の管理権限
      2. 4.2. 仮想 HUB の管理権限
    5. 5. 3.3.5 SSL 証明書
    6. 6. 3.3.6 リスナーポート
    7. 7. 3.3.7 コンフィグレーションファイル
      1. 7.1. コンフィグレーションファイルの役割
      2. 7.2. コンフィグレーションファイルの保護
      3. 7.3. コンフィグレーションファイルの形式
      4. 7.4. コンフィグレーションファイルの例
      5. 7.5. コンフィグレーションファイルのデータ構造
      6. 7.6. コンフィグレーションファイルの置換
      7. 7.7. 別のコンピュータへのコンフィグレーションファイルの移動
      8. 7.8. コンフィグレーションファイル内容のリモートからの参照および書き換え
    8. 8. 3.3.8 コンフィグレーションバージョン番号
      1. 8.1. コンフィグレーションバージョン番号について
      2. 8.2. コンフィグレーションバージョン番号が書かれている場所
    9. 9. 3.3.9 コンフィグレーション履歴
    10. 10. 3.3.10 統計情報の管理
      1. 10.1. 統計情報とは
      2. 10.2. 統計情報の利用目的
      3. 10.3. リアルタイム統計データ
      4. 10.4. 統計情報の取得
      5. 10.5. クラスタ構成時のクラスタ全体の統計情報の取得
    11. 11. 3.3.11 ディスク容量不足時の自動調整機能
      1. 11.1. SoftEther VPN Server が書き出すログファイルの内容
      2. 11.2. 空きディスク容量が不足することによるセキュリティ上の危険性
      3. 11.3. 最小空き容量の設定値
    12. 12. 3.3.12 障害回復
      1. 12.1. プログラムエラー発生時の障害回復
      2. 12.2. ハードウェア障害発生時の構成データ保護と障害回復
      3. 12.3. コンフィグレーションファイルの自動保存
      4. 12.4. DoS 攻撃からの自動防衛
    13. 13. 3.3.13 インターネット接続の維持機能
    14. 14. 3.3.14 サーバー情報の取得
      1. 14.1. サーバー状態の取得
      2. 14.2. VPN Server に関する情報
    15. 15. 3.3.15 SSL 通信で使用する暗号化アルゴリズムの選択
    16. 16. 3.3.16 VPN Server サービスの再起動および構成情報の初期化
    17. 17. 3.3.17 syslog 送信機能
    18. 18. 3.3.18 IP アドレスによるリモート管理接続元の制限
      1. 18.1. 管理接続元の限定によるセキュリティの確保
      2. 18.2. adminip.txt ファイルの書き方
      3. 18.3. 仮想 HUB 管理モードにおける各仮想 HUB ごとの接続元 IP アドレスの指定
      4. 18.4. VPN サーバー全体の管理モードにおける接続元 IP アドレスの指定
      5. 18.5. adminip.txt ファイルのパーミッション

    SoftEther VPN Server を管理するための操作には、大きく分けて 2 種類があります。1 つは VPN Server 全体の管理であり、もう 1 つは VPN Server 内の特定の仮想 HUB のみの管理です。 ここではまず、VPN Server 全体を管理する際に必要となる知識、および操作方法について解説します。

    なお、以下の説明では具体的な操作方法を示す箇所においては、「SoftEther VPN サーバー管理マネージャ」における操作方法と、対応する 「VPN コマンドライン管理ユーティリティ (vpncmd)」内のコマンド名について解説します。vpncmd の各コマンドの詳細な使用方法については、「6. コマンドライン管理ユーティリティマニュアル」 を参照してください。

    3.3.1 システムを停止する必要がない管理

    SoftEther VPN Server ではプログラム全体の構造が慎重に設計されており、どのような設定変更を行っても VPN Server のプロセス自体の再起動は一切必要ありません。例外的に、VPN Server のプロセスの再起動が必要になるのは、以下の 4 種類の場合のみです。

    • オペレーティングシステム自体を再起動する場合。
    • VPN Server のプログラム自体をアップデートする場合。
    • VPN Server プロセスが、ハードウェアその他の不具合によって暴走したため、これを再起動しなければならない場合。
    • VPN Server のコンフィグレーションファイルを手動で変更したり、古いバージョンにロールバックしたりする場合。

    また、下記のような設定変更を行う場合は、VPN Server プロセスの再起動は不要ですが、VPN Server 内のサーバーモジュールの内部状態を初期化する作業が行われますので、その際に接続している VPN セッションは一時的に切断され、しばらくして再接続されます。

    • サーバーのクラスタリング設定を変更する場合。

    3.3.2 SoftEther VPN Server と仮想 HUB

    SoftEther VPN Server には、複数個の仮想 HUB を作成することができます。それぞれの仮想 HUB は独立したレイヤ 2 セグメントを持ち、互いに通信することはできないようになっています。また、ユーザー認証に使用するためのユーザー認証データベースやアクセスリスト、信頼する証明書リスト、Radius サーバーの設定、SecureNAT の設定およびカスケード接続の設定などの設定項目は、仮想 HUB 単位で管理され、互いに完全に独立しています。それぞれの仮想 HUB の設定変更が、別の仮想 HUB の動作に影響を与えることはありません。

    3-3-1.png

    VPN Server と仮想 HUB および仮想 HUB ごとに保持することができる設定データ

    3.3.3 管理ツールおよびリモート管理

    SoftEther VPN Server を管理するためには、「2.4 VPN サーバー管理マネージャ」 で解説した「SoftEther VPN サーバー管理マネージャ」または 「2.6 VPN コマンドライン管理ユーティリティ (vpncmd)」 で解説した「VPN コマンドライン管理ユーティリティ (vpncmd)」を使用します。VPN Server には、ローカルまたはリモートコンピュータから管理セッションとして接続することができ、理論上はインターネットに接続されている VPN Server であれば、世界中どこにいてもその VPN Server に対して管理接続しリモート管理を実行することができます。

    「SoftEther VPN サーバー管理マネージャ」は GUI での管理、VPN コマンドライン管理ユーティリティ (vpncmd)」は CUI での管理を行うのに適しています。これら 2 つのユーティリティ以外に、VPN Server を日常的に管理するために必要なユーティリティはありません。これら 2 つのユーティリティは、管理用端末に常にインストールしておくことをお勧めします。管理ツールのインストールに関する詳細は 「2.4 VPN サーバー管理マネージャ」 をお読みください。

    3-3-2.png

    VPN Server と VPN Bridge の管理方法

    3.3.4 管理権限

    VPN Server に管理モードで接続して管理するには 2 種類の管理権限があります。

    SoftEther VPN Server 全体の管理権限

    「VPN Server 全体の管理権限」は、VPN Server のサーバーコンピュータを管理する担当者が持っておくべき権限です。この権限があれば、VPN Server 内のすべての項目の設定を変更したり、新しい仮想 HUB を作成したり、既存の仮想 HUB を管理したり、また既存のすべての仮想 HUB やその中のオブジェクトを削除したりすることができます。したがって、VPN Server 全体の管理者権限は非常に重要であり、一般的なコンピュータにおける「root 権限 / Administrators 権限」と同等に、慎重に取り扱ってください。VPN Server をサーバーコンピュータにインストールする場合は、そのサーバーコンピュータのオペレーティングシステムの管理者権限を持っている管理担当者が VPN Server 全体の管理権限を持つのが最適です。

    VPN Server 全体の管理権限は、パスワードによって保護されています。このパスワードは初期状態では「空」ですので、VPN Server をインストールした直後に変更されることをお勧めします (※現在のインストーラでは、インストール中にパスワードを設定する画面は表示されません)。「VPN サーバー管理マネージャ」で、VPN Server に接続した際に管理者パスワードが設定されていない場合は、パスワードを設定するように促すメッセージボックスが表示されますので、[はい] をクリックしてパスワードを直ちに設定してください。VPN Server に設定すべきパスワードは、一般的な Windows や UNIX サーバーにおける管理者パスワードと同等の安全性を持ったものにしてください。VPN Server の管理者パスワードはハッシュ化されて保存され、平文の形で復元することはできませんので安心してください。

    VPN Server 全体のパスワードを変更するには、「VPN サーバー管理マネージャ」で [暗号化と通信関係の設定] をクリックし、次に [管理者パスワード] をクリックして、表示される入力ボックスに新しいパスワードを 2 回入力してください。「vpncmd」では、「ServerPasswordSet」コマンドによってパスワードを設定することが可能です。

    3-3-3.png

    VPN Server のパスワードの変更画面

    仮想 HUB の管理権限

    SoftEther VPN Server 全体の管理者は、複数個の仮想 HUB を VPN Server に作成することができます。また、新しい仮想 HUB を作成する際に、その仮想 HUB の管理パスワードを設定し、そのパスワードを仮想 HUB の管理を任せる担当者に渡すことにより、仮想 HUB 単位で管理権限を委譲することができます。仮想 HUB を作成する際に、仮想 HUB の管理パスワードを指定しなかった場合は、その仮想 HUB にリモートから仮想 HUB 管理モードで接続することはできませんのでご安心ください。「仮想 HUB」に関する詳細は、「3.4 仮想 HUB の機能」 および 「3.5 仮想 HUB のセキュリティ」 を参照してください。

    3.3.5 SSL 証明書

    SoftEther VPN Server では、1 つの X.509 証明書を「サーバー証明書」(SSL 証明書) として設定することができます。これにより、VPN Server に接続しようとする VPN クライアントコンピュータがサーバー証明書によってサーバー認証を行うことができます。

    SSL 証明書を指定する場合は、設定する証明書の X.509 形式のファイルと RSA 秘密鍵データが必要です。これらのファイルは PKCS#12 形式で 1 つにまとめられている場合もあります。SSL 証明書を特に指定しない場合、VPN Server が初回起動時に自動的に乱数を用いて、ランダムな内容の証明書 (自己署名証明書) を生成しますので、少人数の環境で安全にその証明書のダイジェスト値などをVPN Client のユーザーに通知することができる場合は、デフォルトの証明書をそのまま使用しても問題はありません。

    VPN Server がクライアントに対して提示する X.509 証明書と秘密鍵を指定するには、VPN サーバー管理マネージャで [暗号化と通信関係の設定] をクリックし、次に [証明書のインポート] をクリックしてください。「vpncmd」では、「ServerCertSet」コマンドによって同様の操作を行うことができます。なお、一度設定した SSL サーバー証明書は、VPN Server 全体の管理者であれば証明書データと秘密鍵データをエクスポートすることも可能です。

    設定した証明書が正しく使用されているかどうかを調べるには、証明書を設定した後で、Web ブラウザから「 https:// サーバーのIPアドレス:リスナーポート番号/」にアクセスし、Web ブラウザが証明書を正しく認識しているかどうかを確認してください。

    3-3-4.png

    VPN Server に Web ブラウザで接続した際に表示される X.509 証明書

    3.3.6 リスナーポート

    SoftEther VPN Server では、複数の TCP/IP ポートを待機状態にしておき、インターネットなどの IP ネットワークを経由して、VPN クライアントコンピュータがそのポートに対して VPN 接続し、VPN セッションを確立することができます。そのためには、VPN Server の管理者はあらかじめリスナーポートを登録しておく必要があります。

    初期状態では、VPN Server には「443 番」「992 番」「5555 番」の 3 つの TCP/IP ポートがリスナーポートとして割り当てられています。リスナーポートは、システムリソースが許す限りいくつでも追加することができますが、通常は 1 つか 2 つ程度で十分です。

    VPN Server への接続の際の TCP/IP ポート番号としては、特に支障のない限り「5555」番を使用し、Web などの一部のプロトコルしか通さないようなファイアウォールやプロキシサーバーがある場合は「443」番を使用することを推奨しています。「443」番ポートは「HTTPS プロトコル」のためのポートであり、セキュリティ設定が厳しいネットワークにおいてもほとんどの場合、「443」番で SSL 通信を行うことによって通過することができます。「992」番は現在ではほとんど利用されていない「TELNET over SSL (Telnets)」というプロトコルのためのポート番号であり、やはり多くのファイアウォールを通過することができます (プロキシサーバーは通過できない場合が多い)。リスナーポートはいくつも登録しておき、そのうち一部を無効 (停止状態) にしておくこともできます。

    リスナーポートを追加したり、削除したり、また有効化・無効化したりするには、「VPN サーバー管理マネージャ」の [リスナーの管理] で [新規作成]、[削除]、[開始] または [停止] をクリックしてください。「vpncmd」では、「ListenerCreate」コマンド、「ListenerDelete」コマンド、「ListenerList」コマンド、「ListenerEnable」コマンドおよび「ListenerDisable」コマンドによって同様の操作を行うことができます。

    VPN Server が起動した際は、登録されているリスナーポートのうち無効になっていないものをすべて開き、待機状態にします。また、新しいリスナーポートを登録すると、そのポートも自動的に待機状態にします。もし、ポートを待機状態にすることができない場合は、そのポートを専有している他のプロセスが終了するかポートを解放するまで、そのポートの状態を [エラー発生] として表示し、ポートを専有している他のプロセスが終了するかポートを解放すると、自動的に VPN Server がそのポートを確保します。

    なお、Windows を除く UNIX 系オペレーティングシステムで、VPN Server を一般ユーザー権限で起動している場合は、1024 番以下の TCP/IP ポート番号を開くことはできません。これは SoftEther VPN ではなくオペレーティングシステムの制限事項です。

    使用可能なすべてのリスナーポートを停止したり、削除したりしないでください。もしすべてのリスナーポートを停止または削除すると、その管理セッションが終了した後、次回から二度とその VPN Server に接続することができなくなります。その状態を復旧するためには、コンフィグレーションファイルを手動で編集する必要があります。
     

    3-3-5.png

    リスナーポート管理画面

    3.3.7 コンフィグレーションファイル

    SoftEther VPN Server は、すべての設定内容をメモリ中に保持すると共に、この内容を同時にディスク上の設定ファイルに書き込みます。この設定ファイルを「Config ファイル」または「コンフィグレーションファイル」と呼びます。

    コンフィグレーションファイルは、Windows のレジストリや UNIX の設定ファイルによく似ています。Windows のレジストリファイルのような木構造型のデータ構造と、UNIX の設定ファイルのようなテキストエディタで直接編集することができる構造という 2 種類の特徴を持っている、非常に優れた構成データフォーマットです。

    コンフィグレーションファイルの役割

    「コンフィグレーションファイル」は、VPN Server のプロセスの実行可能ファイルが設置されているディレクトリと同じディレクトリ上に「 vpn_server.config」というファイル名で生成されます。コンフィグレーションファイルは、VPN Server の設定変更を行ったり、内部の構成データが変化した場合は、必ず保存されます (ただし、ディスクアクセスの回数を軽減させるための書き込みキャッシュが働いているため、直ちに保存されない場合があります)。VPN Server が一度停止し、次に VPN Server を起動した場合は、起動時に vpn_server.config ファイルの内容を読み込み、その内容に基づいて VPN サーバーを終了前の状態に戻します。コンフィグレーションファイルがあることによって、VPN Server をいつシャットダウンしても、次に VPN Server が起動された際には、前の構成データを復元することができるようになっています。もし、VPN Server が起動する際に、コンフィグレーションファイルがディスク上に存在しない場合は、デフォルトの設定が適用されます。デフォルトの設定とは、下記のとおりです。

    • "DEFAULT" という名前の仮想 HUB が作成されます。仮想 HUB 内のユーザーオブジェクト、グループオブジェクト、その他のオブジェクトは存在せず、また設定はすべてデフォルト状態 (仮想 HUB を新たに作成した状態) となっています。
    • リスナーポートとして 443 番、992 番、5555 番の 3 つが登録されます。
    • ローカルブリッジおよび仮想レイヤ 3 スイッチの定義は登録されません。
    • サーバー証明書としては、乱数によって自動的に生成されます。
    • インターネット接続の維持機能はデフォルト値が設定されます。

    なお、SoftEther VPN Bridge の場合は、コンフィグレーションファイル名は「vpn_bridge.config」という名前になり、デフォルトで作成される仮想 HUB 名は "BRIDGE" になります。

    コンフィグレーションファイルの保護

    コンフィグレーションファイルの内部には、VPN Server や仮想 HUB が使用する構成データがすべて書き込まれています。この中には、暗号化されたパスワードや別の VPN Server へカスケードするための接続設定、証明書の秘密鍵などが含まれています。

    したがって、コンピュータに複数のユーザーがローカルまたはリモートからログインすることができるような場合は、コンフィグレーションファイル自体を適切なセキュリティ機能によって保護してください。コンフィグレーションファイルは、VPN Server のシステム管理者以外のユーザーによって、改変されることはもちろん、参照 (読み取り) をされてもいけません。

    • Windows 版 SoftEther VPN Server をインストールすると、コンフィグレーションファイルは自動的に Administrators グループのユーザーおよび SYSTEM (ローカルシステム権限) でのみ読み書きが可能に設定されます。
    • Linux 版を含む UNIX 版の SoftEther VPN Server は、コンフィグレーションファイルを作成する際に、パーミッションを 700 (オーナーのみ読み書き可能) に設定します。
    • 手動でファイルのパーミッションを変更したい場合は、オペレーティングシステムのファイルシステムの機能を使用してください。Windows ではエクスプローラのプロパティや「cacls」コマンドなどが利用可能です。UNIX では「chmod」コマンドが利用可能です。
    • FAT や FAT32 などの、パーミッション概念がないファイルシステムの使用は避けてください。どうしてもこれらのファイルシステムを使用しなければならない場合は、サーバーコンピュータを物理的に触れられないような場所に設置する必要があります。また、ネットワークを経由しても管理者以外にはアクセスできないように設定する必要があります。

    コンフィグレーションファイルの形式

    「コンフィグレーションファイル (vpn_server.config)」は UTF-8 形式で保存されます。したがって、一般的なテキストエディタで内容を編集することが可能です。ただし、コンフィグレーションファイルの内容を、直接編集することは推奨されていません (VPN Server の設定変更は、「VPN サーバー管理マネージャ」または「vpncmd」コマンドによって行うことを推奨します)。

    コンフィグレーションファイルを直接編集しなければならない場合は、下記のような場合のみです。

    • すべての TCP/IP リスナーポートを削除してしまった場合。
    • VPN Server 全体の「管理者パスワード」を忘れてしまい、パスワードをリセットしたい場合。
    • ごく一部の特殊な設定を行うために、コンフィグレーションファイルを直接編集する場合 。
    • 管理上の理由で、別のソフトウェアを用いてコンフィグレーションファイルを自動処理したい場合。

    デフォルトでは、コンフィグレーションファイルはテキスト形式で保存されます。しかし、大量の仮想 HUB やユーザーを登録するなどの処理を行うと、設定データの量が膨大となります。大量の設定データを書き出す処理を行うには、文字列処理という CPU 時間を消費する処理が必要になりますので、設定データが大きくなるとパフォーマンスが低下します。

    このような場合は、コンフィグレーションファイルの書き出し形式をバイナリファイルに変更することができます。バイナリファイルは、CPU が直接扱うことのできるファイル形式であり、高速処理が可能です。コンフィグレーションファイルのサイズが数十 Mbytes 程度を超える場合は、コンフィグレーションファイルをバイナリファイルとして扱ったほうが効率的です。ただし、バイナリ化した場合は、 コンフィグレーションファイルを直接テキストエディタで編集することは困難になります。

    コンフィグレーションファイルをバイナリ形式で保存するには、「save_binary 」というファイル名の、「内容が空のファイル」を、コンフィグレーションファイルと同じディレクトリに作成してください。このファイルが存在する場合は、次回 VPN Server がコンフィグレーションファイルに書き込む際に、自動的にファイルをバイナリ形式で保存します。また、「save_binary」ファイルが削除された場合は、次回 VPN Server がコンフィグレーションファイルに書き込む際に、自動的にファイルをテキスト形式に戻します。

    バイナリ形式のコンフィグレーションファイルは、バイナリエディタなどを用いて書き換えることも行わないでください。

    コンフィグレーションファイルの例

    VPN Server の「コンフィグレーションファイル」の実際例は、下記のようなものになります。このように "root" という木構造の頂点から順番に木構造的なデータをテキスト形式で管理しています。

    # Software Configuration File
    #
    # You can edit this file when the program is not working.
    #
    declare root
    {
     uint ConfigRevision 1
     bool IPsecMessageDisplayed false
     bool VgsMessageDisplayed false
    
     declare DDnsClient
     {
      bool Disabled false
      byte Key ki/0ARfOguxYuFAwum5NkqtTNiI=
      string LocalHostname PC26
      string ProxyHostName $
      uint ProxyPort 0
      uint ProxyType 0
      string ProxyUsername $
     }
     declare IPsec
     {
      bool EtherIP_IPsec false
      string IPsec_Secret vpn
      string L2TP_DefaultHub DEFAULT
      bool L2TP_IPsec false
      bool L2TP_Raw false
    
      declare EtherIP_IDSettingsList
      {
      }
     }
     declare ListenerList
     {
      declare Listener0
      {
       bool DisableDos false
       bool Enabled true
       uint Port 443
      }
      declare Listener1
      {
       bool DisableDos false
       bool Enabled true
       uint Port 992
      }
      declare Listener2
      {
       bool DisableDos false
       bool Enabled true
       uint Port 1194
      }
      declare Listener3
      {
       bool DisableDos false
       bool Enabled true
       uint Port 8888
      }
     }
     declare LocalBridgeList
     {
      bool EnableSoftEtherKernelModeDriver true
      bool ShowAllInterfaces false
     }
     declare ServerConfiguration
     {
      uint64 AutoDeleteCheckDiskFreeSpaceMin 8589934592
      uint AutoSaveConfigSpan 300
      bool BackupConfigOnlyWhenModified true
      string CipherName RC4-MD5
      uint CurrentBuild 8996
      bool DisableDeadLockCheck false
      bool DisableDosProction false
      bool DisableIntelAesAcceleration false
      bool DisableIPv6Listener false
      bool DisableNatTraversal false
      bool DisableOpenVPNServer false
      bool DisableSSTPServer false
      bool DontBackupConfig false
      bool EnableVpnAzure false
      bool EnableVpnOverDns false
      bool EnableVpnOverIcmp false
      byte HashedPassword +WzqGYrR3VYXrAhKPZLGEHcIwO8=
      string KeepConnectHost keepalive.se2.softether.com
      uint KeepConnectInterval 50
      uint KeepConnectPort 80
      uint KeepConnectProtocol 1
      uint MaxConnectionsPerIP 256
      uint MaxUnestablishedConnections 1000
      bool NoDebugDump false
      bool NoHighPriorityProcess false
      bool NoSendSignature false
      string OpenVPN_UdpPortList 1194
      bool SaveDebugLog false
      byte ServerCert MIIC6DCCAdACAQAwDQYJKoZIhvcNAQEFBQAwOjENMAsGA1UEAxMEUEMyNjENMAsGA1UEChMEUEMyNjENMAsGA1UECxMEUEMyNjELMAkGA1UEBhMCVVMwHhcNMTMwMzAyMDcxMjMzWhcNMzYxMjMxMDcxMjMzWjA6MQ0wCwYDVQQDEwRQQzI2MQ0wCwYDVQQKEwRQQzI2MQ0wCwYDVQQLEwRQQzI2MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKozS1U1Yr3f1wceckua4LLHBLjDuSYQZ3wjfjixzolURxPP8F2L0T7j4F2QOwu+ZFCwT04FpcW8JVx6K3oij+IeYMYWA5mX7MHZHjnMLAQ8oCNV4O5Kju3T2HBGKpGugooYu9GRwPrWx0KiM+SsD3Ifv3KwWPGCwYx9t7Jed4x4Z41cDZH78mdxFFmoyvG4rj78N8L0KofhRhRA0FppBl01tvBsz3faZSbcVE5k0SKvN+CgPgJ4talPzyiHlrP/NKZ7xqJYH7oWbiYtgWX+oFCJ64JKjIgfm11ExYr6NSORzQBfA2YGF+a3NoWWIO3XLH0/6CaYFTlASlvW+UP1BokCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAKky/5DgXQa3FRTuwO762EVBIX+HJUaRLtJV0sUGnqNFQDjq37fa5CkV2tk0Vw5FrHvnPzVQrWISf0QEcNuDIvunI7PcCpFRixOq0fv4d4vXVs8Qm5iGYyD7U2ZycN/Jb/XYo5kbaOan+0q8ngekjuWtNigUYGetrds+xiFRQhfOUwTgPTVMW3akd+8ynv5rE/259j5zWTosmz09oiRlXFMwUJt/vNyAt6htlclfoDb/jP05uZFzCjMHjcf36XhfgnR41qoN4tmgkfEB2kibW0AGnydOkXnp73yB7ueZKPM3YHNJXfdCkids9xZc6p3AfxQVR6bfQ/OOviniFgH8PYQ==
      byte ServerKey MIIEpQIBAAKCAQEAqjNLVTVivd/XBx5yS5rgsscEuMO5JhBnfCN+OLHOiVRHE8/wXYvRPuPgXZA7C75kULBPTgWlxbwlXHoreiKP4h5gxhYDmZfswdkeOcwsBDygI1Xg7kqO7dPYcEYqka6Cihi70ZHA+tbHQqIz5KwPch+/crBY8YLBjH23sl53jHhnjVwNkfvyZ3EUWajK8biuPvw3wvQqh+FGFEDQWmkGXTW28GzPd9plJtxUTmTRIq834KA+Ani1qU/PKIeWs/80pnvGolgfuhZuJi2BZf6gUInrgkqMiB+bXUTFivo1I5HNAF8DZgYX5rc2hZYg7dcsfT/oJpgVOUBKW9b5Q/UGiQIDAQABAoIBAQCe+IwriVKyIMn6N0DwRzgLJALQBNgBqp7N/2Tc1Y8hDBvbcISFC5wkzrl5Csdr36hZCWT5biL5PxPyfZXwXSnhPRiMzHEOXC3incYym/ac+ndkqckPKYq4rv9hVthZ/BKnpBSB2U7TvBqfrVslAmTm5qpuGDLrWYMokyAqNTwacbHkJ6O7yA5shKH3IUOjWYQaF93JTr4q+KHOFPUaS4+pzAy6ubV1Shy4FbLyZ9+4g/sdPlRuDuGWM5HpG/rypvgB0/d6jPrLMR9qxeihdVsshAbgq9RAqYjOpqQSeH504eZJIg2TGsTbcVU/RdvJhXS4uXbBdJQvCYe/Yk1HhWpFAoGBANPfXtgW/8FC+hUfOILFoYm7rT5yGjhNW6fSsbQSIaGKU2vca19NqVxhzqdTPNsmAWCn7oDQBmUvycPXkamfiRytiyirho3nmkc5de1vvek9gLP9mfO9k+3LveURT6fKOOz/3J6adn5V7wEzTFvmYTy0BMiG1tsHEOI3iUmDka0XAoGBAM2mC4dpGEuBDXFGj8Uislwso26pQUNxPdqeKAMa3MvHFDvirPrAeTv7rsQ+6l/eRrx/LYf3JrLvGEelB7EFpgnzXG9ZG+nnv0j4w7EfTwcjKmRX8UCxXJ5smvGeBwGsTVtUDdoT7DV3NjhfMZjEqKCJ0RRpgMHepxqm1eU1RW1fAoGAMei2YNTaHl52pq8aEsQXT2ikYMdkIcsnQhtBvRdgULtS91+O835J3Pc1RPk4pq8HOAuXBUT7nK5rKvUG3Rw1oknHNCdjpN3f29NPUkU2SVExljSxJVeNF0EdVG6FgxMB4eJLyBi+vPflOzUoUaWtVi1ZyxroVeQOOBu4/VY+5LUCgYEAldWzdLfH8ctXhf8JZXMATVRgx5IecQsjLBQrxwdddEPapD9mFVUDgAbCsU296pfDJjfrbrNOyPSX1iuRzRL2hS2BXcepJOWrY3mM65KKPAMNMgs5Rg90EiHDSuP+6uMlgbNeXFRDuDjhknUZZ9txmXaQlbTBEYAudKa2FciYizUCgYEAsk5gyOSatourftMSP62MVQ7amyHDTVtvNuCbZX78OH3ejmzRw1pl6eDqCGo68i4Swu41RFr+K0c1sF119rwD+Z8rNjOhnFkYJ43WC4NspfCdKa9ZTXFkJxdeBQFD89HNFbDabqQE1ay1qIWB44wt95aNbHzXl0eBGgN7/o/8ehg=
      uint ServerType 0
      bool UseKeepConnect true
      bool UseWebTimePage false
      bool UseWebUI false
    
      declare ServerTraffic
      {
       declare RecvTraffic
       {
        uint64 BroadcastBytes 0
        uint64 BroadcastCount 0
        uint64 UnicastBytes 0
        uint64 UnicastCount 0
       }
       declare SendTraffic
       {
        uint64 BroadcastBytes 0
        uint64 BroadcastCount 0
        uint64 UnicastBytes 0
        uint64 UnicastCount 0
       }
      }
      declare SyslogSettings
      {
       string HostName $
       uint Port 0
       uint SaveType 0
      }
     }
     declare VirtualHUB
     {
      declare DEFAULT
      {
       uint64 CreatedTime 1362175953422
       byte HashedPassword +WzqGYrR3VYXrAhKPZLGEHcIwO8=
       uint64 LastCommTime 1362175953408
       uint64 LastLoginTime 1362175953408
       uint NumLogin 0
       bool Online true
       uint RadiusRetryInterval 0
       uint RadiusServerPort 1812
       string RadiusSuffixFilter $
       byte SecurePassword bpw3X/O5E8a6G6ccnl4uXmDtkwI=
       uint Type 0
    
       declare AccessList
       {
       }
       declare AdminOption
       {
        uint allow_hub_admin_change_option 0
        uint deny_bridge 0
        uint deny_change_user_password 0
        uint deny_empty_password 0
        uint deny_hub_admin_change_ext_option 0
        uint deny_qos 0
        uint deny_routing 0
        uint max_accesslists 0
        uint max_bitrates_download 0
        uint max_bitrates_upload 0
        uint max_groups 0
        uint max_multilogins_per_user 0
        uint max_sessions 0
        uint max_sessions_bridge 0
        uint max_sessions_client 0
        uint max_sessions_client_bridge_apply 0
        uint max_users 0
        uint no_access_list_include_file 0
        uint no_cascade 0
        uint no_change_access_control_list 0
        uint no_change_access_list 0
        uint no_change_admin_password 0
        uint no_change_cert_list 0
        uint no_change_crl_list 0
        uint no_change_groups 0
        uint no_change_log_config 0
        uint no_change_log_switch_type 0
        uint no_change_msg 0
        uint no_change_users 0
        uint no_delay_jitter_packet_loss 0
        uint no_delete_iptable 0
        uint no_delete_mactable 0
        uint no_disconnect_session 0
        uint no_enum_session 0
        uint no_offline 0
        uint no_online 0
        uint no_query_session 0
        uint no_read_log_file 0
        uint no_securenat 0
        uint no_securenat_enabledhcp 0
        uint no_securenat_enablenat 0
       }
       declare CascadeList
       {
       }
       declare LogSetting
       {
        uint PacketLogSwitchType 4
        uint PACKET_LOG_ARP 0
        uint PACKET_LOG_DHCP 1
        uint PACKET_LOG_ETHERNET 0
        uint PACKET_LOG_ICMP 0
        uint PACKET_LOG_IP 0
        uint PACKET_LOG_TCP 0
        uint PACKET_LOG_TCP_CONN 1
        uint PACKET_LOG_UDP 0
        bool SavePacketLog true
        bool SaveSecurityLog true
        uint SecurityLogSwitchType 4
       }
       declare Message
       {
       }
       declare Option
       {
        uint AccessListIncludeFileCacheLifetime 30
        uint AdjustTcpMssValue 0
        bool ApplyIPv4AccessListOnArpPacket false
        uint BroadcastStormDetectionThreshold 0
        uint ClientMinimumRequiredBuild 0
        bool DisableAdjustTcpMss false
        bool DisableCheckMacOnLocalBridge false
        bool DisableCorrectIpOffloadChecksum false
        bool DisableHttpParsing false
        bool DisableIPParsing false
        bool DisableKernelModeSecureNAT false
        bool DisableUdpAcceleration false
        bool DisableUdpFilterForLocalBridgeNic false
        bool DisableUserModeSecureNAT false
        bool FilterBPDU false
        bool FilterIPv4 false
        bool FilterIPv6 false
        bool FilterNonIP false
        bool FilterOSPF false
        bool FilterPPPoE false
        bool ManageOnlyLocalUnicastIPv6 true
        bool ManageOnlyPrivateIP true
        uint MaxSession 0
        bool NoArpPolling false
        bool NoDhcpPacketLogOutsideHub true
        bool NoEnum false
        bool NoIpTable false
        bool NoIPv4PacketLog false
        bool NoIPv6AddrPolling false
        bool NoIPv6DefaultRouterInRAWhenIPv6 true
        bool NoIPv6PacketLog false
        bool NoLookBPDUBridgeId false
        bool NoMacAddressLog true
        bool NoManageVlanId false
        bool NoSpinLockForPacketDelay false
        bool RemoveDefGwOnDhcpForLocalhost true
        uint RequiredClientId 0
        uint SecureNAT_MaxDnsSessionsPerIp 0
        uint SecureNAT_MaxIcmpSessionsPerIp 0
        uint SecureNAT_MaxTcpSessionsPerIp 0
        uint SecureNAT_MaxTcpSynSentPerIp 0
        uint SecureNAT_MaxUdpSessionsPerIp 0
        string VlanTypeId 0x8100
        bool YieldAfterStorePacket false
       }
       declare SecureNAT
       {
        bool Disabled true
        bool SaveLog true
    
        declare VirtualDhcpServer
        {
         string DhcpDnsServerAddress 192.168.30.1
         string DhcpDnsServerAddress2 0.0.0.0
         string DhcpDomainName sec.softether.co.jp
         bool DhcpEnabled true
         uint DhcpExpireTimeSpan 7200
         string DhcpGatewayAddress 192.168.30.1
         string DhcpLeaseIPEnd 192.168.30.200
         string DhcpLeaseIPStart 192.168.30.10
         string DhcpSubnetMask 255.255.255.0
        }
        declare VirtualHost
        {
         string VirtualHostIp 192.168.30.1
         string VirtualHostIpSubnetMask 255.255.255.0
         string VirtualHostMacAddress 00-AC-21-11-37-CB
        }
        declare VirtualRouter
        {
         bool NatEnabled true
         uint NatMtu 1500
         uint NatTcpTimeout 1800
         uint NatUdpTimeout 60
        }
       }
       declare SecurityAccountDatabase
       {
        declare CertList
        {
        }
        declare CrlList
        {
        }
        declare GroupList
        {
        }
        declare IPAccessControlList
        {
        }
        declare UserList
        {
        }
       }
       declare Traffic
       {
        declare RecvTraffic
        {
         uint64 BroadcastBytes 0
         uint64 BroadcastCount 0
         uint64 UnicastBytes 0
         uint64 UnicastCount 0
        }
        declare SendTraffic
        {
         uint64 BroadcastBytes 0
         uint64 BroadcastCount 0
         uint64 UnicastBytes 0
         uint64 UnicastCount 0
        }
       }
      }
     }
     declare VirtualLayer3SwitchList
     {
     }
     declare VPNGate
     {
      string Abuse $
      bool IsEnabled false
      bool LogPermanent false
      string Message $
      bool NoLog false
      string Owner PC26.sec.softether.co.jp's$20owner
     }
    }

    コンフィグレーションファイルのデータ構造

    コンフィグレーションファイルは、「declare」で囲まれた部分で新しいノードを定義し、その中にいくつかのデータ型およびノードを格納することができるようになっています。存在すべきノード名およびデータ一覧のスキーマは決められており、それに適合しないデータ構造は無視されます。また無視されたデータ構造は自動的にコンフィグレーションファイルから削除されるため、直接コンフィグレーションファイルを操作する場合は 1 文字タイプミスをした場合でも、コンフィグレーションファイルの内容が大きく損なわれてしまう可能性があります。したがって、どうしてもコンフィグレーションファイルを直接編集したい場合は、必ず事前にバックアップしておく必要があります。

    コンフィグレーションファイル内のデータ型一覧は、次のとおりです。

    データ型名
    内容 データ構造上のサイズ
    uint 符号無し 32 ビット整数型 32 bit
    uint64 符号無し 64 ビット整数型 64 bit
    bool ブール型 1 bit
    string Unicode 文字列型 (UTF-8 エンコード) 0 bit ~ 無制限
    byte バイナリ型 (Base 64 エンコード) 0 bit ~ 無制限

    なお、上記の表で「無制限」となっている部分は「アーキテクチャおよびメモリの限界を超えない範囲」という意味です。

    SoftEther VPN プロジェクトでは、コンフィグレーションファイルの内容を直接書き換えた場合について、その動作を一切保証しておりません。したがって、コンフィグレーションファイルの内容を、テキストエディタなどで直接書き換えることは推奨されません。これは、Windows においてシステムレジストリの内容を直接エディタで書き換えることが推奨されないのと同様の理由です。

    コンフィグレーションファイルの置換

    ある時点でのコンフィグレーションファイルの内容を手動でバックアップしておき、あとから復元したいような場合は、「vpn_server.config」ファイルを復元する際に、下記の手順で操作を行う必要があります。

    1. 現在 VPN Server プログラムが動作している場合は、プログラムを完全に停止します。完全に停止するというのは、vpnserver プロセスを動作していない状態にするという意味です。
    2. 「vpn_server.config」ファイルを置換します。
    3. VPN Server プログラムを開始します。
    4. 正しくコンフィグレーションが置換されているかどうかを確認します。

    別のコンピュータへのコンフィグレーションファイルの移動

    あるコンピュータの VPN Server で「コンフィグレーションファイル」が生成された場合、そのコンフィグレーションファイルの内容を、そのまま別のコンピュータにコピーすることで、コピー先のコンピュータの VPN Server でも同等の構成情報で起動させることが可能です。

    • コピー元の VPN Server とコピー先の VPN Server が、別のオペレーティングシステムや CPU 用のものであっても、基本的には構成情報はそのままコピーされ、両者の間でコンフィグレーションファイルに関する互換性が保たれます。ただし、コピー元のシステムでしかサポートされていない機能は、コンフィグレーションファイルをコピーしたとしても、新しいシステムではサポートされません。
    • コンフィグレーションファイルが「バイナリ形式」の場合でも、コンピュータ間の移動が可能です。バイナリ形式のコンフィグレーションファイルは、CPU の種類やオペレーティングシステムに依存しないように正しくエンディアン変換されているため、システムやマシンのアーキテクチャによって動作したり動作しなかったりすることは原則としてありません。

    コンフィグレーションファイル内容のリモートからの参照および書き換え

    コンフィグレーションファイルの内容 (vpn_server.config) は、通常では VPN Server が動作しているコンピュータにログオンして、テキストエディタで開いたり、またはファイル共有などで接続し、そのファイルを直接ダウンロードしたりアップロードしたりしなければ、取得または変更することはできません。

    しかし、SoftEther VPN Server では、VPN Server 全体の管理者であればいつでもコンフィグレーションファイルをリモートから参照したり、変更したりすることができます。

    「VPN サーバー管理マネージャ」の [Config の編集] をクリックすると、現在の VPN Server 上のコンフィグレーションファイル内容が表示されます。UTF-8 形式でファイルに保存することも可能です。また、同機能から管理者のクライアント端末側で用意したコンフィグレーションファイルをアップロードすることが可能です。コンフィグレーションファイルをアップロードして書き込んだ場合、VPN Server のサーバー機能が自動的に再起動して、新しいコンフィグレーションファイルの内容を読み込みます。手動での再起動や、VPN Server のプロセス自体の再起動は不要です。再起動とコンフィグレーションファイルの再読み込みが完了すると、VPN Server は新しいコンフィグレーションの内容に基づいて動作を開始します。

    「vpncmd」では、「ConfigGet」コマンドおよび「ConfigSet」コマンドで、同様の操作が可能です。

    リモート管理で、コンフィグレーションファイルを取得するように VPN Server に要求した場合、取得されるコンフィグレーションファイルの内容は、たとえ「save_binary」ファイルが存在する場合でも、常に「UTF-8」形式のテキストデータとなります。また、実際には、この要求を発行すると VPN Server がローカルディスク上の vpn_server.config ファイルを読み取るのではなく、その要求処理を VPN Server が受け取った瞬間の VPN Server の内部状態をテキストデータ化し、それを管理端末に返送します。したがって、いかなる場合でも、最新のコンフィグレーションファイルデータが取得可能となります。

     

    3.3.8 コンフィグレーションバージョン番号

    コンフィグレーションバージョン番号について

    VPN Server のコンフィグレーションファイルは、次のような場合に内容が自動的に書き換わります。

    1. VPN Server または仮想 HUB の管理者が、「VPN サーバー管理マネージャ」または「vpncmd」を用いて操作を行った結果、VPN Server の構成データが変化した場合。たとえば、新しいユーザーが作成されたり、設定が変更された場合。
    2. 3.3 VPN Server 管理」 で解説するような、各ユーザーやグループ、仮想 HUB および VPN Server 単位での通信量などの統計データが更新された場合。

    上記の 1 および 2 共に、コンフィグレーションファイルの内容が書き換わりますが、1 で更新されたデータは VPN Server の設定データの一部であり、本質的な意味を持つのに比べて、2 で更新されたデータは多くの場合は、それほど重要でありません。そこで、VPN Server では 1 のような設定内容の変更が行われた場合のみ、コンフィグレーションファイルの「バージョン情報」の値を 1 つずつインクリメント (増加) させることによって、コンフィグレーションファイルの設定がこれまでに何回変更されたのかがシステム管理者に分かるようになっています。

    たとえば、外部のスクリプトを記述することにより、「コンフィグレーションファイルの設定が変更された場合 (1 のような場合) のみ」、コンフィグレーションファイルを自動的にバックアップし、2 のような「統計情報の更新のみ」の変更のような場合は、バックアップをあえて行わないようにするという管理方法を採用したい場合は、コンフィグレーションファイル内の「バージョン情報」を毎回チェックし、その値が前回のチェック時と比較して増加していれば、コンフィグレーションファイルのバックアップを行うといった処理をすると良いでしょう。

     

    コンフィグレーションバージョン番号が書かれている場所

    「コンフィグレーションバージョン番号」は、コンフィグレーションファイルの上のほうに、「ConfigRevision」という名前の「uint 型」で書かれています。

    declare root
    {
      uint ConfigRevision 120
    
      :
      :

    上記の例では、コンフィグレーションファイルが最初に生成されてから「120 回」の設定変更が行われたことがわかります。なお、ConfigRevision の値は VPN Server が起動する度に必ず 1 ずつ増加する場合があります。

    ConfigRevision の値は、コンフィグレーションファイルの設定変更イベントを受信するプログラムを書くなど、一部の高度な知識を持ったシステム管理者にのみ必要な情報であり、一般のユーザーおよび管理者にとっては不要です。

     

    3.3.9 コンフィグレーション履歴

     

    コンフィグレーションファイルの内容は、VPN Server や仮想 HUB の管理者が時間をかけて構成したものであり、大変貴重なものです。コンフィグレーションファイルが、ハードウェアやソフトウェアのバグなどによって破損してしまったり、誤った設定変更を行ってしまい元に戻せなくなってしまった場合は、同じ設定を復元するために大変な労力と時間を消費することになります。

    そこで VPN Server は一定時間おきにコンフィグレーションファイルの内容の「履歴」をとり、これを自動的に「バックアップ」しています。コンフィグレーション履歴のバックアップは、コンフィグレーションファイルが設置されているディレクトリの「backup.vpn_server.config」ディレクトリ内に、ファイル名に日時を付けて保存されています。

    もし、VPN Server の設定情報が破損したり、誤った設定 (たとえば重要な仮想 HUB を削除してしまうなど) を行ってしまった場合は、直前のコンフィグレーションファイルに手動で復元してください。コンフィグレーションファイルの復元方法については、「3.3.7 コンフィグレーションファイル」 の「コンフィグレーションファイルの置換」をお読みください。

    なお、コンフィグレーションファイルのバックアップは 60 分に 1 回、自動的に作成されます。ただし、原則としてコンフィグレーションファイルの内容が変化していない場合は、バックアップは作成されません。バックアップフォルダは、デフォルトではコンフィグレーションファイルと同様のパーミッション設定によって自動的に保護されています。

     

    自動バックアップ機能が不要な場合は、backup.vpn_server.config ディレクトリを誰に対してもアクセス拒否するようなパーミッション設定にすることで、バックアップ機能を停止させることができます。
     

    3-3-6.png

    自動保存されたコンフィグレーション履歴

    3.3.10 統計情報の管理

    統計情報とは

    VPN Server の管理する構成データは、VPN Server 全体の設定、仮想 HUB やユーザー・グループの設定などの設定項目の他に、それぞれのオブジェクトごとの「統計情報」が記録されています。統計情報とは、以下のようなデータを指します (記録の対象となるオブジェクトによって異なります)。

    • 送信ユニキャストパケット数
    • 送信ユニキャスト合計サイズ
    • 送信ブロードキャストパケット数
    • 送信ブロードキャスト合計サイズ
    • 受信ユニキャストパケット数
    • 受信ユニキャスト合計サイズ
    • 受信ブロードキャストパケット数
    • 受信ブロードキャスト合計サイズ
    • 最終ログイン日時
    • 最終通信日時
    • ログイン回数

    統計情報が管理されるオブジェクトは、以下のようになっています。

    • VPN Server 全体
    • 仮想 HUB
    • ユーザーオブジェクト
    • グループオブジェクト

     

    上記の情報は、VPN Server によって自動的に統計処理され、コンフィグレーションファイルの一部として書き込まれます (前述のように、統計情報のみが変更されても、「ConfigRevision」の値は増加しません)。

    VPN Server 全体の統計情報は、VPN Server 全体の管理者および仮想 HUB の管理者であれば読み取ることが可能です。仮想 HUB および仮想 HUB 内の個々のオブジェクトの統計情報は、その仮想 HUB の管理権限を持っている管理者 (VPN Server 全体の管理者を含む) でなければ読み取ることはできません。

    これらの情報は基本的に「読み取り専用」であり、「VPN サーバー管理マネージャ」や「vpncmd」を用いて書き換えることはできません。ただし、コンフィグレーションファイルを、直接テキストエディタなどによって書き換えることは技術的に可能です。

     

    統計情報の利用目的

     

    統計情報は、VPN Server 全体や個々の仮想 HUB、ユーザーなどが、どれくらいの通信を行ったのか、何度 VPN サーバーに接続したか、最後に接続したり通信したりしたのはいつか、といったようなさまざまな情報を、システム管理者に対して提供します。

    この情報により、下記のようなことが可能になります。

     

    • 各仮想 HUB やユーザーが、どれくらいの頻度やデータ量で VPN Server を使用しているかどうかといった情報の取得と統計処理。
    • 一定期間利用していないユーザーの削除・無効化などの管理作業。
    • インターネットサービスプロバイダなどによる、仮想 HUB ホスティングサービスにおける接続回数や通信データ量などに応じた課金。
    • 明らかにログイン回数が多いユーザーについて、そのユーザーのパスワードが盗まれて、第三者が勝手に侵入して使用しているのではないかと疑い始めること。
    • 「vpncmd」を使用して統計情報の差分を自動的に取得することで、VPN Server の利用情報レポートを自動的に生成するプログラムの作成。
    • 苦労して設置した VPN Server が多くのユーザーによって大量の通信に使用されていることを認識することによる「満足感」の生成。

    リアルタイム統計データ

    すべての統計データは、VPN Server によってリアルタイムで更新されています。つまり、「VPN サーバー管理マネージャ」や「vpncmd」から統計データを取得する要求が発生したら、その時点での最新の統計データが得られます。「VPN サーバー管理マネージャ」の GUI で、[最新の状態に更新] をマウスで連打すると、その対象となるオブジェクトが通信中であれば、刻々と値が更新される様子がよくわかります。

    統計情報の取得

    統計情報は、「VPN サーバー管理マネージャ」を用いて VPN Server、仮想 HUB、ユーザーオブジェクトおよびグループオブジェクトを選択して GUI 画面中に表示させることができます。また、コンフィグレーションファイルを取得してそれを機械処理することも簡単です。「vpncmd」で統計情報を取得するには、「ServerStatusGet」コマンド、「StatusGet」コマンド、「UserGet」コマンド、「GroupGet」コマンドを使用します。

    3-3-7.png

    仮想 HUB の統計情報画面

    クラスタ構成時のクラスタ全体の統計情報の取得

    複数台の VPN Server でクラスタを構成している場合は、クラスタ全体のリアルタイムの統計情報は、定期的にクラスタコントローラとなっている VPN Server に集約されます。したがって、クラスタ構成時にクラスタ全体の通信量を知りたい場合などは、クラスタコントローラに管理接続し各種統計情報を取得してください。クラスタ環境でも、各仮想 HUB やユーザーおよびグループごとの統計情報はすべて合計された値が表示されます。

    3.3.11 ディスク容量不足時の自動調整機能

    SoftEther VPN Server が書き出すログファイルの内容

    VPN Server は、動作中に下記のようなファイルを「vpnserver 実行可能ファイル」と同じディレクトリ、またはそのサブディレクトリに書き出します。

    • VPN Server のログファイル
    • 仮想 HUB ごとのセキュリティログおよびパケットログファイル
    • コンフィグレーション履歴バックアップファイル

     

    これらのログファイルや履歴ファイルは、VPN Server を長期間運用していると大量のディスクスペースを消費することになります。しかしながら、VPN Server のログや仮想 HUB のパケットログ、セキュリティログなどのデータは、後から不正アクセスやトラブルの原因の監査などに非常に重要であるため、VPN Server が生成したログファイルを無差別に削除する訳にはいきません。

    このような場合、VPN Server の管理者は、自動的にログファイルを古いものから順に外部メディア (DVD-R やテープなど) にバックアップして保管し、ディスク上から削除するべきです。また、それらの処理を自動化することもできます。

     

    空きディスク容量が不足することによるセキュリティ上の危険性

     

    しかしながら、それらの処理を行わない場合や、バックアップおよび古いログデータの削除を忘れていたような場合では、ディスク容量が圧迫され最後には空き容量が 0 バイトになります。ディスクの空き容量が 0 バイトとなった場合は、VPN Server は新しいログデータをディスクに書き出すことができなくなります。この状態はセキュリティ的に大変危険です。なぜならば、攻撃者は VPN Server が新しいログデータをディスクに書き出すことができない状態であればどのような攻撃を行ってもログに残らず、後から攻撃があったことを VPN Server の管理者が知ることができないからです。

    そこで、SoftEther VPN Server では、ログファイルや履歴ファイルが大量に保存された結果、ディスクの空き容量が圧迫され、事前に設定された容量を空き容量が下回った場合、VPN Server が書き出したあらゆるログファイルおよびコンフィグレーションファイルを、古い順に自動的に削除するような機能が組み込まれています。古くて重要度の低いログファイルを削除することにより、空き容量を常に一定以上確保し、新しいログファイルを書き出せるような状態をできる限り維持します。古いログファイルをバックアップして削除するという管理作業を行わない場合でも、自動的に古いログファイルから削除し、常に空き容量を一定以上保ち続ける機能が動作することで、メンテナンスフリーが実現されています。

     

    この機能は、ハードディスクの空き容量が不足したために VPN Server が新しいログファイルを書き出すことができないという「最悪の事態」を回避するために設けられている、一種の「fail safe 機能」です。この機能にかかわらず、重要な VPN サーバーコンピュータでは、常に SoftEther VPN Server が書き出すすべてのログファイルを、外部メディアなどの安全な場所にバックアップしておくことを推奨します。

    最小空き容量の設定値

     

    VPN Server では、デフォルトではログファイルが書かれるディスクドライブの空き容量が 100 Mbytes (正確には 104,857,600 Bytes) 以下になると、その空き容量を回復するまで、VPN Server が書き出したログファイルを古いものから順番に削除します。

    この値は、コンフィグレーションファイル内の ServerConfiguration ノード内の AutoDeleteCheckDiskFreeSpaceMin 値を書き換えることによって、任意の値に変更できます。ただし、最小の値は 1 Mbytes (正確には 1,048,576 Bytes) であり、それを下回る値は設定できません。具体的には、下記の部分を変更します。

     

    declare ServerConfiguration
    {
    	uint64 AutoDeleteCheckDiskFreeSpaceMin 104857600
    	uint AutoSaveConfigSpan 300
    	string CipherName RC4-MD5
    	bool DisableDosProction false
    	:
    	:
    • VPN Server は、ログファイルの保存場所のディスクの空き容量をオペレーティングシステムの API を呼び出すことによって取得します。
    • Windows 2000 以降のオペレーティングシステムで、VPN Server を動作させているアカウントに対する「ディスククォータ」が設定されている場合は、ディスクの空き容量としてディスククォータの空き容量が使用されます。Linux およびその他の UNIX システムでは、ディスククォータの空き容量は使用されません。したがって UNIX 系システムでディスククォータが設定されている場合は、「ディスク容量不足時の自動調整機能」は正常に動作しない可能性が高いことに注意してください。

    3.3.12 障害回復

    SoftEther VPN Server は、VPN サーバー機能の動作時に発生した障害を、下記のような方法で、可能な限り自動的に回復しようと試みます。

    プログラムエラー発生時の障害回復

    SoftEther VPN Server プログラムや VPN Server が依存する Windows や Linux などのオペレーティングシステムは、高い信頼性と安定性を実現するために慎重に設計し実装されたものであり、プログラム内に存在するエラー数は非常に少ないものになっています。しかしながら、ある程度以上の規模のどのようなプログラムにも、「絶対にエラーが存在しないことを証明することは不可能」であり、システム管理者としては常に、ソフトウェア内に深刻なエラーがあった場合のことについても考慮すべきです。また、仮にソフトウェアに問題がない場合でも、ハードウェアで不具合が発生することも考えられます。たとえばメモリモジュールにエラーがあったり、CPU が計算を間違えたりする可能性もないとは言い切れません。

    このようなソフトウェアまたはハードウェアの不具合によって、多くの場合「メモリアクセス違反」、「不明な命令の呼び出し」および「不正な割り込みの発生」などの修復が困難または不可能なエラーが発生することがあります。

    VPN Server は、これらのプログラムエラーが発生した場合は、直ちに VPN Server のプロセスを終了し、プロセス空間メモリを破棄します。その後、もう一度プロセスを再起動し、コンフィグレーションファイルの内容を再読み込みして動作を継続させようと試行します。これらの処理は通常は一瞬 (数ミリ秒から数秒) で行われるので、大抵の場合は VPN サービスの提供において大きな障害になることはありません。したがって、ユーザーメモリ空間上で「修復不能なエラー」が発生しても、VPN Server の管理者がそれに気付いて VPN Server プロセスを再起動したりする必要は通常はなく、自動的に VPN Server プログラムが障害回復を試行します。

    ただし、プログラムエラーの内容が非常に深刻で、VPN Server プロセスを再起動させる部分のコードを破損してしまった場合や、エラーの発生原因が現在の VPN Server のコンフィグレーション内容に起因するものであり、次回プロセス起動時にも同様の原因でプログラムエラーが発生してしまうような特殊な場合 (特に手動でコンフィグレーションファイルを書き換えた場合に発生する可能性があります) は、自己修復は正しく働かない場合があります。また VPN Server が呼び出しているカーネルモードコード内で深刻なエラーが発生してしまった場合は、それの修復は不可能であり、Windows の場合はブルースクリーン、UNIX の場合は Kernel Panic などを発生させて、コンピュータシステム全体を再起動させることがあります。プログラムエラー発生時の障害回復は、ユーザー空間で発生する深刻なエラー状態を回復することが可能な場合の機能であり、外部のサーバー動作状態監視システムが不必要になるという性質の機能ではありません。

    なお、この機能は「Windows 版 SoftEther VPN Server」が、「サービスモード」で起動していない場合は動作しない場合があります。

    ハードウェア障害発生時の構成データ保護と障害回復

    VPN Server プログラムが、コンフィグレーションファイルに物理的にデータを書き込もうとした瞬間にハードウェア障害 (突然の停電など) が発生した場合は、コンフィグレーションファイルの物理的な内容が破損する可能性があります。そのような場合に備えて、VPN Server がコンフィグレーションファイルを書き出す際には、「常に 2 重の手続き」が行われています。

    まず、現在のコンフィグレーションファイルの内容は、ディスク上に物理的に残しておき、次に新しいコンフィグレーションファイルの内容をディスクに対して書き出します。その後書き出し処理が完了すると、オペレーティングシステムの書き込みバッファをフラッシュさせ、データの書き込みが物理的なディスクに対してコミットされるまで待機します。物理的なコミットが完了した後に古いコンフィグレーションデータを削除します。これらの処理は、ユーザーによって一切意識されない場所で行われています。

    次回システム起動時に、コンフィグレーションファイルが破損している可能性がある場合は、その破損したコンフィグレーションファイルを書き出す直前にログとして「バックアップした 1 つ手前のコンフィグレーションデータ」を用いて、コンフィグレーションの内容を復元しようと試みます。ほとんどの場合、それは成功してコンフィグレーションの内容が復活します。これらの処理は、次回システム復旧時に自動的に行われるため、システム管理者が手動で行う必要はありません。

    なお、この自動障害回復機能が正常に動作しなかった場合は、VPN Server の管理者はコンフィグレーションファイルのバックアップディレクトリから、以前のコンフィグレーションファイルを手動でロールバックする必要があります。またオペレーティングシステムやファイルシステムの仕様によっては、この機能が動作しない場合もあります。

    コンフィグレーションファイルの自動保存

    VPN Server は、コンフィグレーションファイルを「自動保存」します (ただし、コンフィグレーションファイルの内容に、統計情報を含めた一切の情報の変更がない場合は、自動保存しない場合もあります)。これにより、VPN Server プロセスが突然正常にシャットダウンされずに異常終了した場合でも、前回の自動保存時の構成に必ず復元することができます。

    自動保存の間隔は、デフォルトでは 300 秒です。自動保存の間隔はコンフィグレーションファイル内の「 ServerConfiguration」ノード内の「AutoSaveConfigSpan」の値を書き換えることによって変更することができます。具体的には下記の部分を変更します。

    declare ServerConfiguration
    {
    	uint64 AutoDeleteCheckDiskFreeSpaceMin 104857600
    	uint AutoSaveConfigSpan 300
    	string CipherName RC4-MD5
    	bool DisableDosProction false
    	:
    	:

    DoS 攻撃からの自動防衛

    VPN Server がネットワークに対して公開する TCP/IP ポート (リスナーポート) は、インターネットなどの公共 IP ネットワークに接続される場合は常にインターネット上のホストからの攻撃を受ける可能性があります。特に「DoS アタック」(サービス拒否攻撃) の一種である「SYN Flood」と呼ばれる、TCP/IP のポートに対して大量の接続要求を送信するという攻撃が最も危険です。

    多くのオペレーティングシステムでは、SYN Flood 攻撃に対する防衛策が実装されています。また、ファイアウォールや IDP などによって SYN Flood 攻撃がネットワーク上で遮断される場合もあります。しかし、これらの仕組みが正しく動作しなかったり、設定の閾値が大き過ぎたりする場合は、VPN Server に対して TCP/IP の接続要求が到達してしまいます。

    VPN Server が、大量に届いた TCP/IP 接続要求をすべて処理しようとすると、大量のシステムリソースが必要になります。そこで、VPN Server は同一の接続元を発信源とする SYN パケットが TCP/IP リスナーポートに届いた場合は、それを検出して接続を受け付ける処理を開始する前に、そのコネクションを直ちに破棄することができるようになっています。これが VPN Server が持つ「DoS 攻撃からの自動防衛機能」です。この機能はデフォルトで「有効」になっています。

    この機能を「無効」にしたい場合は、コンフィグレーションファイルの「ServerConfiguration」ノード内の「DisableDosProction」値を「true」に書き換えることによって無効化することができます。具体的には下記のように設定します。

    declare ServerConfiguration
    {
    	uint64 AutoDeleteCheckDiskFreeSpaceMin 104857600
    	uint AutoSaveConfigSpan 30
    	string CipherName RC4-MD5
    	bool DisableDosProction true
    	:
    	:
    

     

    3.3.13 インターネット接続の維持機能

    VPN Server をインストールしたコンピュータが、いつでもインターネット側からの VPN 接続要求に応答できるようにするため、VPN Server が起動中は常にインターネットに対して定期的にパケットを送信する機能が組み込まれています。この機能により、一部の ISDN、PHS および ADSL 回線などをインターネット接続に使用している環境で、一定時間無通信状態が続いた場合に回線が切断されるような環境でも、回線が切断されることなく、常にサーバーコンピュータがインターネットに接続されている状態になり、インターネットからの VPN クライアントコンピュータが VPN Server に必ず接続できるようになります。

    インターネット接続の維持機能では、指定されたホストのポート番号に対して一定時間毎に TCP/IP または UDP/IP のパケットを送信することができます。送信するパケットのデータサイズは非常に小さく、内容は乱数によって生成されます。

    「インターネット接続の維持機能」は、デフォルトで「有効」になっており、下記の設定値が使用されます。

    項目名 初期設定値
    ホスト名 keepalive.softether.org
    ポート番号 80
    パケット送出間隔 50 seconds
    プロトコル UDP/IP Protocol

    インターネット接続の維持機能の設定を変更するには、「VPN サーバー管理マネージャ」の [暗号化と通信関係の設定] を開き、[インターネット接続の維持機能] ボックス内の設定項目を入力してください。「vpncmd」では、同様の操作を「KeepEnable」コマンド、「KeepDisable」コマンド、「KeepSet」コマンドおよび「KeepGet」コマンドによって行うことが可能です。

    3-3-8.png

    インターネット接続の維持機能の設定画面

    3.3.14 サーバー情報の取得

    サーバー状態の取得

    「VPN サーバー管理マネージャ」の [サーバー状態の表示] をクリックすると、VPN Server の現在の動的な状態を取得することができます。「vpncmd」では「ServerStatusGet」コマンドを使用してください。

    3-3-9.png

    サーバー状態の表示画面

    表示される項目は次のとおりです。

    項目名 内容
    サーバーの種類 通常は [スタンドアロンサーバー] です。「クラスタ機能」を使用している場合は、[クラスタコントローラ] または [クラスタメンバサーバー] のいずれかになります。
    TCP コネクション数 VPN Server に VPN セッションおよび管理セッションとして接続されているすべての「TCP コネクション数の合計値」が表示されます。なお、クラスタコントローラの場合は、他のすべてのクラスタメンバの TCP コネクション数を合計した値が表示され、その他に [このサーバーの TCP コネクション数] および [他のクラスタメンバサーバーの TCP コネクション数] の 2 項目が表示されます。
    仮想 HUB 数 VPN Server で動作している「仮想 HUB の合計数」が表示されます。クラスタコントローラの場合は、クラスタ内に「定義されている仮想 HUB の合計数」が表示されます。クラスタメンバサーバーの場合は、現在そのサーバー内で「インスタンスが存在する仮想 HUB の個数」が表示されます。また、クラスタ環境の場合は、それぞれ [スタティック仮想 HUB 数] と [ダイナミック仮想 HUB 数] が表示されます。
    セッション数 現在 VPN Server に対して「接続している VPN セッション数」が表示されます。なお、クラスタコントローラの場合は「クラスタ全体での接続されているセッション数」が合計して表示され、また [このサーバーのセッション数] と [他のクラスタメンバサーバーのセッション数] が表示されます。
    MAC アドレステーブル数 VPN Server が管理している「すべての仮想 HUB 内の MAC アドレステーブル数の合計」が表示されます。なお、クラスタコントローラの場合は「クラスタ内のすべての VPN Server の管理する MAC アドレステーブル数の合計」が表示されます。
    IP アドレステーブル数 VPN Server が管理している「すべての仮想 HUB 内の IP アドレステーブル数の合計」が表示されます。なお、クラスタコントローラの場合は「クラスタ内のすべての VPN Server の管理する IP アドレステーブル数の合計」が表示されます。
    ユーザー数 VPN Server が管理している「すべての仮想 HUB に定義されているユーザーオブジェクトの合計数」が表示されます。なお、クラスタメンバサーバーはユーザーデータベースを保有しないため、常に「0」が表示されます。
    グループ数 VPN Server が管理している「すべての仮想 HUB に定義されているグループオブジェクトの合計数」が表示されます。なお、クラスタメンバサーバーはグループデータベースを保有しないため、常に 「0」が表示されます。
    統計情報 これまでの「通信量の統計情報」が表示されます。
    サーバー起動時刻 VPN Server が「起動した時刻」が表示されます。
    現在時刻 VPN Server コンピュータの「現在の時刻」が表示されます。表示する際には、現地時間に変換されます。
    64 bit 高精度論理システム時刻 VPN Server 内部で管理されている「64 bit の時刻データ」が表示されます。
    メモリ使用状況 VPN Server が動作しているコンピュータの「物理メモリおよび仮想メモリの使用状況」が表示されます。なお、Windows オペレーティングシステム以外では表示されません。

    VPN Server に関する情報

    「VPN サーバー管理マネージャ」の [SoftEther VPN Server に関する情報] をクリックすると、VPN Server に関する「静的な情報」を取得することができます。「vpncmd」では「ServerInfoGet」コマンドを使用してください。

    VPN Server に関する静的な情報としては、「VPN Server のバージョン情報」や「製品名」、「オペレーティングシステムに関する情報」および「VPN Server において現在利用することができる機能の一覧と仕様の一覧」が表示されます。たとえば、最大同時接続数などの値も、ここで表示されます。

    3-3-10.png

    VPN Server に関する情報の表示画面

    3.3.15 SSL 通信で使用する暗号化アルゴリズムの選択

    VPN Server は、デフォルトで「RC4-MD5 アルゴリズム」を、SSL 通信で使用する暗号化と電子署名アルゴリズムとして選択しています。このアルゴリズムは別のものを選択することも可能です。

    「VPN サーバー管理マネージャ」の [暗号化と通信関係の設定] で、[暗号化アルゴリズム名] を指定可能な任意の値に設定してください。指定可能なアルゴリズム名はドロップダウンリスト内に表示されています。「vpncmd」では、「ServerCipherSet」コマンドを使用して設定できます。

    3-3-11.png

    SSL 通信で使用する暗号化アルゴリズムの選択画面

    3.3.16 VPN Server サービスの再起動および構成情報の初期化

    VPN Server を「リモートから再起動」することができます。ただし、「VPN サーバー管理マネージャ」には Reboot コマンドに相当するコマンドはありません。リモートから VPN Server を再起動するためには 「vpncmd」から「Reboot」コマンドを使用する必要があります。

    なお「Reboot /RESETCONFIG:YES」と指定すると、再起動時に現在のコンフィグレーションファイルの内容を消去し、再起動によって初期状態の VPN Server が起動します。

     

    3.3.17 syslog 送信機能

    VPN Server の「syslog 送信機能」が使用できる場合、VPN サーバー全体の管理ログ、または仮想 HUB ごとのセキュリティログおよびパケットログの内容を、標準的なログ配信プロトコルである「syslog プロトコル」によって、外部の syslog サーバー等に伝送することができます。

    通常、VPN Server の各種ログはファイルとしてディスク上に記録されましたが、syslog 送信機能を利用することによって、複数のシステムを管理しているシステム管理者が、ログの管理を集約することができ、管理コストの削減が可能になるとともに、syslog の受け側のソフトウェアにおいて、特定のログ内容が発生した場合にアラートを出すといった運用も可能となります。

    デフォルトでは「syslog 送信機能」はオフになっています。「VPN サーバー管理マネージャ」の [暗号化と通信関係の設定] で、「syslog 送信機能」を有効にする設定を行うことができます。「vpncmd」では、「SyslogEnable」コマンドまたは「SyslogDisable」コマンドを使用して設定できます。

    なお、syslog 送信機能を有効にすると、syslog で送信される対象となったログは、ローカルのハードディスクに保存されなくなります。したがって、syslog 送信機能を有効にしたにもかかわらず、syslog サーバーが起動していなかったり、syslog サーバーとの間の通信に問題があったり、または syslog サーバーや途中のネットワークやプロトコルスタックなどの処理能力が十分でない場合は、本来記録されるべきログの内容を消失してしまうことになりますので、十分注意してください。

    3-3-12.png

    syslog 送信機能の設定画面

    3.3.18 IP アドレスによるリモート管理接続元の制限

    管理接続元の限定によるセキュリティの確保

    SoftEther VPN Server の管理はリモート管理ツール (サーバー管理マネージャや vpncmd) からネットワーク経由で行うことができます。「3.3 VPN Server 管理」 で説明されているように、リモート管理の接続の種類としては、VPN Server 全体の管理モードと、仮想 HUB 単体の管理モードの 2 種類があります。

    許可されていないユーザーが不正に VPN Server に接続して管理操作を行ってしまわないように、VPN Server 全体の管理モードに接続するためのパスワードと仮想 HUB 単体の管理モードに接続するためのパスワードの 2 種類により VPN Server は保護されています。しかし、パスワードのみで不正な管理接続を防御するだけでは不安な場合があります。そのような場合、管理接続元の IP アドレスを事前に指定したものに限定させることが可能です。

    VPN Server がインストールされているディレクトリ (vpnserver 実行可能ファイルがあるディレクトリ) 上に adminip.txt という名前のテキストファイルを作成し、そのテキストファイル上に適切に記述を行うことによって、VPN Server 全体、またはそれぞれの仮想 HUB ごとに、サーバー管理マネージャや vpncmd からの接続を許可する IP アドレスを設定することができます。

    adminip.txt ファイルは、vpnserver プログラムと同一のディレクトリ上に作成してください。なお、このファイルの書き換えはリアルタイムで vpnserver プログラムによって認識されますので、このファイルを設置したり内容を書き換えたりした後に vpnserver プログラムを再起動する必要はありません (設定内容は自動的に反映されます)。

    adminip.txt ファイルが存在しない場合は、管理接続元の IP アドレスはフィルタリングされず、すべての IP アドレスからの管理接続が許可されます (デフォルトでは adminip.txt ファイルは存在しません)。

    adminip.txt ファイルの書き方

    adminip.txt ファイルは 1 行に 1 個のルールを書きます。なお、行の最後が # または // で始まる場合はコメントとして扱われ、その行は無視されます。adminip.txt ファイルが存在する場合、デフォルトではすべての接続元 IP アドレスからの管理接続が拒否されます。adminip.txt ファイルには、管理接続を許可したい接続元 IP アドレスを 1 行に 1 個書いていきます。

    仮想 HUB 管理モードにおける各仮想 HUB ごとの接続元 IP アドレスの指定

    各行に IP アドレスを書き、IP アドレスの次にスペースまたはタブ文字で 1 文字以上を空け、その後にその IP アドレスからの管理接続を許可する仮想 HUB 名を書きます。

    たとえば、仮想 HUB "HUB1" には 192.168.3.10 と 130.158.87.87 の 2 つの IP アドレスからの管理接続を許可し、仮想 HUB "HUB2" には 61.197.235.210 からの管理接続を許可したい場合は、下記のように記述します。

    192.168.3.10	HUB1
    130.158.87.87	HUB1
    61.197.235.210	HUB2

    IP アドレスの場所に * ( アスタリスク) を書くと、その行にはすべての接続元 IP アドレスが一致します。したがって、例えば下記のように記述すると、HUB3 に対する仮想 HUB 管理モードでの管理接続はすべての接続元 IP アドレスから許可されます。

    192.168.3.10	HUB1
    130.158.87.87	HUB1
    61.197.235.210	HUB2
    * 	        HUB3

    VPN サーバー全体の管理モードにおける接続元 IP アドレスの指定

    各行に IP アドレスのみを書いた場合は、その IP アドレスからの VPN サーバー全体およびすべての仮想 HUB に対する管理接続が許可されます。例えば下記のように記述すると、VPN サーバー全体を管理できるモードで管理接続することができる接続元 IP アドレスは 192.168.10.10 のみとなります。また、192.168.10.10 からはすべての仮想 HUB に対して管理接続できます。

    192.168.10.10
    192.168.3.10    HUB1
    130.158.87.87   HUB1
    61.197.235.210  HUB2
    *               HUB3

    adminip.txt ファイルのパーミッション

    adminip.txt ファイルは適切なパーミッションで保存してください。例えば、VPN サーバーコンピュータに管理者以外の一般ユーザーもログインできるようになっている場合は、他のユーザーによって adminip.txt ファイルが書き換えられないように、十分注意する必要があります。