SoftEther VPN Server は、動作状況や仮想 HUB を流れるパケットのログを「ログファイル」として自動的に書き出すことにより、後から「正常動作の確認」や、「トラブルの追跡」および「不正アクセスやポリシー違反の発見 」などを、容易かつ確実に行うことができる機能が組み込まれています。ここでは、SoftEther VPN Server に組み込まれている「ロギングサービス」について解説します
3.10.1 ログの保存形式と保存周期
保存されるログの種類
VPN Server は VPN Server 全体のログとして「サーバーログ」を自動的に書き出します。
また、各仮想 HUB は、仮想 HUB に関する管理や VPN 接続の記録、その他重要な動作状況の記録として「セキュリティログ」を書き出すと共に、あらかじめ仮想 HUB の管理者が指定した種類のパケットについて「パケットログ」を書き出します。
すべてのログファイルは、1 項目につき 1 行が使用される「テキストファイル」として書き出されます。また、ログファイルの内容にひらがな・漢字などの多バイト文字が使用される場合は、エンコード方式は 「UTF-8」で統一されます。
ログファイルの保存場所と保存形式
すべてのログファイルは、「vpnserver」プロセス (VPN Bridge では、「vpnbridge」プロセス) の実行可能ファイルが設置されているディレクトリに、「server_log」、「security_log」および「packet_log」の 3 つのサブディレクトリを作成し、そこに各々「サーバーログ」「セキュリティログ」、および「パケットログ」をそれぞれ書き出します。なお、仮想 HUB ごとに書き出されるセキュリティログおよびパケットログについては、さらに「仮想 HUB 名のサブディレクトリ」が作成され、そこに書き出されます。
ログファイルの切り替え周期
仮想 HUB の管理者は、「セキュリティログ」および「パケットログ」について、「ログファイルの切り替え周期」を設定することができます。ログファイルの切り替え周期に基づいて 「新しいファイル名」が生成されます。設定することができる「切り替え周期」および「その規則を適用した場合に生成されるログファイルのファイル名」は、以下のとおりです。なお、VPN Server 全体のログは、常に 1 日周期で切り替えられて保存されます。
切り替え周期 | ファイル名の日時部分の命名規則 (例: 2012年12月7日 午後1時45分10秒の場合) |
切り替えを行わない | なし (同一ファイルに対して、永久に追記されます) |
1 秒単位 | 20121207_014510 |
1 分単位 | 20121207_0145 |
1 時間単位 | 20121207_01 |
1 日単位 | 20121207 |
1 ヶ月単位 | 201212 |
仮想 HUB に関するログファイル設定の変更方法
仮想 HUB の管理者は、「VPN サーバー管理マネージャ」の [ログ保存設定] をクリックすることにより、その仮想 HUB に関する「セキュリティログおよびパケットログの切り替え周期」を設定することができます。ログファイルの保存を希望しない場合は、チェックボックスを「オフ 」にすることによりその種類のログファイルを一切保存しないように設定することができます。パケットログについては、保存すべきパケットログの種類を、詳細に選択することもできます。
デフォルトでは、仮想 HUB のすべてのログは、1 日毎にファイルを切り替えて保存する設定になっています。
「vpncmd」では、「LogEnable」コマンド、「LogDisable」コマンド、「LogSwitchSet」コマンド 、および「LogPacketSaveType」コマンドを使用してください。
ログ保存設定画面
各ログファイルのファイルサイズが 1Gbytes を超えた場合の措置
各ログファイルは、ログの内容や量に応じて増加しますが、ログファイルサイズが 1Gbytes を超える場合 (厳密には 1,073,741,823 Bytes を超える場合) は、そのログファイルは自動的に分割されて約 1Gbytes ごとに保存されます。1 つ目のファイルはそのままのファイル名ですが、2 つ目以降のファイル名には、自動的に "~01"、"~02" というような連番が 付加されます。この最大サイズは設定ファイルの「LoggerMaxLogSize」で変更することが可能です。
3.10.2 サーバーログ
サーバーログは「server_log」ディレクトリの下に保存されます。サーバーログには、VPN Server 全体の動作ログが保存されており、VPN Server の起動や終了の際の「イベント記録」および、いつどのようなコネクションを受け付けたかなどといった詳細な「動作記録」が保存されています。そのため、後からサーバーログを解析して 、「不正アクセス」や「トラブル原因の追跡」を行うことができます。
また、サーバーログには、各仮想 HUB で保存される「セキュリティログの写し」が、まとめてすべて保存されるようになっています。各仮想 HUB の管理者が、仮にセキュリティログを保存しないような設定にしていても、サーバーログには必ず自動的に保存されます。これによって、VPN Server の管理者は、たとえ仮想 HUB のログが保存されていなかったり、削除されてしまったりした場合でも、VPN Server のサーバーログからその内容を確認することができます。
3.10.3 仮想 HUB セキュリティログ
仮想 HUB セキュリティログは、「security_log/仮想 HUB 名」ディレクトリの下に保存されます。セキュリティログには仮想 HUB に接続してきた「セッションに関する情報」や、「仮想 HUB 内での記録 (アドレステーブルデータベースの更新など)」、および仮想 HUB に対する「管理記録 (ユーザーの作成など)」が記録されます。
3.10.4 仮想 HUB パケットログ
仮想 HUB パケットログは、「packet_log/仮想 HUB 名」ディレクトリの下に保存されます。パケットログには仮想 HUB 内を流れる「すべてのパケットのヘッダ部分」、または「ペイロード全体」を保存することができます。
ただし、すべての種類のパケットログを保存した場合は、ログファイルのデータ量が膨大になってしまいます。そのため、パケットログについてはどのような種類のパケットを登録するのかを 、仮想 HUB の管理者が選択できるようになっています。[ログ保存設定] 画面で選択できる、パケットの種類とその内容は下記のとおりです。
パケットの種類名 | この種類を選択した場合に保存されるパケット |
TCP コネクションログ | TCP/IP プロトコルのパケットのうち、クライアントとサーバーとの間で、TCP/IP コネクションが確立または切断される際のパケット。 |
TCP パケットログ | すべての TCP/IP プロトコルのパケット。 |
DHCP パケットログ | UDP/IP プロトコルのパケットのうち、DHCP プロトコルのための制御データであるパケット。 |
UDP パケットログ | すべての UDP/IP プロトコルのパケット。 |
ICMP パケットログ | すべての ICMP プロトコルのパケッし。 |
IP パケットログ | すべての IP プロトコルのパケット。 |
ARP パケットログ | すべての ARP プロトコルのパケット。 |
Ethernet パケットログ | すべてのパケット。 |
パケットログを保存するように設定されている場合、仮想 HUB は仮想 HUB 内を流れたすべての仮想 Ethernet フレームのうち、仮想 HUB の管理者があらかじめ設定した種類のものについてパケットログを保存します。それぞれの Ethernet フレームは、VPN Server が内部で持っている高レベルのパケット解析エンジンを用いることによって、レイヤ 2 からレイヤ 7 までのうちできるだけ高いレイヤまで解析を行い、重要なヘッダ情報をパケットログとして保存します。
また、仮想 HUB 管理者は、ヘッダ情報だけではなく、パケットのすべての内容 (ビット列) を 16 進数の形式で、パケットログに書き出すこともできます。この場合は、「実際に通信が行われたパケットの合計サイズに比例する大量のディスク容量」が必要となりますのでご注意ください。
デフォルト設定では、パケットログのうち「TCP コネクションログ」および「DHCP パケットログ」の 2 種類のパケットのヘッダ情報のみを保存するようになっています。多くの環境ではこの設定値で十分ですが、より詳細なパケット情報を保存したい場合は、必要なものについてのみ保存するように設定を変更してください。すべてのパケットのログを保存することは、通信回線が広帯域になった現在は現実的ではありませんのでご注意ください。
パケットログは以下の書式にて記録されています。
パケットログ例
2006-08-07,12:00:33.764,SID-THISJUN-6,SID-SECURENAT-5,00ACCF078E3B,00AC1F195AE7,0x0800,62,TCP_CONNECT,SYN,192.168.3.137,13999, 130.158.6.56,http(80),3894805527,0,WindowSize=65535,- |
項目順序 | 項目名 | 上記例内での該当部分 |
1 | パケットキャプチャ年月日 | 2006-08-07 |
2 | パケットキャプチャ時間 | 12:00:33.764 |
3 | 送信元セッションID | SID-THISJUN-6 |
4 | 宛先セッションID | SID-SECURENAT-5 |
5 | 送信元MACアドレス | 00ACCF078E3B |
6 | 宛先MACアドレス | 00AC1F195AE7 |
7 | プロトコル番号 | 0x0800 |
8 | パケットサイズ | 62 |
9 | パケット種別 | TCP_CONNECT |
10 | パケットフラグ | SYN |
11 | 送信元IPアドレス | 192.168.3.137 |
12 | 送信元ポート番号(オペレーティングシステムのetc/servicesファイルに登録されている場合は、ネットサービス名も記載されます) | 13999 |
13 | 宛先IPアドレス | 130.158.6.56 |
14 | 接続先ポート番号(分かればネットサービス名も記載) | http(80) |
15 | シーケンス番号 | 0 |
16 | 確認応答番号(ACK番号) | 0 |
17 | プロトコル毎の詳細情報 | WindowSize=65535 |
18 | パケットの16進ダンプ(ただしヘッダ情報のみの場合は記録されません) | - |
3.10.5 ログ書き込み時のパフォーマンスの最適化
VPN Server は、ログファイルに書き出すべきデータがある場合、それをすぐにディスクに対して直接書き出すのではなく、下記のような方法を用いて 2 段階の制御によって書き出しを行います。この仕組みにより、特にパケットログの書き出しにおいて、大量のパケットが瞬時に流れた場合に通信パフォーマンスを低下させず、かつすべてのパケットをログに書き出すことができるようになっています。
パケットログの中間データ形式の生成
すべてのログ保存対象となるパケットは、直ちにパケットログに書き出されるのではなく、一旦コンピュータの CPU が扱いやすい「中間データ形式」に、リアルタイムで変換されます。中間データ形式に変換されたパケットログデータは、「ログバッファ」と呼ばれる一時的なメモリ領域に追加されます。このような 、パケット内容の中間データ形式への変換処理は、非常に高速に行うことができるため、仮想 HUB の通信速度はそれほど低下しません。
中間データ形式のテキスト形式への変換とディスクへの書き出し
一度ログバッファに追加された中間データ形式のパケットデータは、ディスクに対して書き出す前にはログファイルに書き出す内容であるテキストデータに変換する必要があります。しかし、このような 、テキストデータへの変換処理は、多くの CPU 時間を消費するコストの高い処理です。
ログバッファの空き容量が不足する場合の仮想 HUB の通信速度の自動調整
仮想 HUB のパケットログサービスは、上記のような仕組みによって仮想 HUB に保存対象となる大量のパケットがバースト的に大量発生した場合は、そのログデータの生成処理、およびディスクへの書き込み処理を後回しにすることによって CPU 時間を仮想 HUB に対して優先的に割り当て、仮想 HUB がその通信パフォーマンスを最大限に発揮できるように自動調整しています。
しかし、一時的な中間形式データの保存場所であるログバッファ自体もメインメモリを使用しているため、空き容量には限界があります。もし仮想 HUB に保存対象となる大量のパケットが長期間連続して流れ続けると、ロギングサービスが管理するログバッファが溢れてしまい、新しいパケットを取りこぼす可能性が発生します。
このような場合は、ログバッファの空き容量が少なくなると自動的に仮想 HUB の通信速度を調整し、常にログバッファの空き容量が一定以上の余裕を持つように自動調整されます。この機能によって、仮想 HUB に保存対象となる大量のパケットが長期間連続して流れ続けた場合も、すべてのパケットログを確実に保存しつつ、できるだけ仮想 HUB の通信速度を低下させないような努力が行われます。
3.10.6 リモート管理端末でのログファイルの取得
VPN Server や仮想 HUB が書き出すログファイルは、その VPN Server が動作している物理的なコンピュータ上のディスクに書き出されます。しかし、通常物理的なディスクに書き出されたファイルを読んだりダウンロードしたりすることができるのは、そのコンピュータの管理者や 、ローカルログオンすることができるユーザーに限定されています。
SoftEther VPN Server では、VPN Server や各仮想 HUB の管理者が、VPN Server を動作させているコンピュータのシステム管理者とは異なる場合も考慮し、実際にコンピュータにローカルログオンしなくてもログファイルをリモートから読み出すことができる仕組みを 採用しています。これが「リモートログ読み出し機能」です。
リモートログ読み出し機能は、非常に簡単に使用することができます。「VPN サーバー管理マネージャ」を使用している場合は [ログファイル一覧] ボタンをクリックすると、現在の権限で読み出し可能なログファイルのファイル名一覧、ファイルサイズおよび最終更新日時が表示されます。ここから任意のログファイルを選択し、そのログファイルを管理端末にダウンロードすることができます。ログファイルの転送には 、管理接続の TCP/IP コネクションが使用されるため、データ内容は SSL で自動的に暗号化され安全です。
「vpncmd」では、「LogGet」コマンドで、この機能を使用することができます。
なお、VPN Server の管理者は VPN Server のサーバーログ、およびすべての仮想 HUB のセキュリティログ・サーバーログを、リモートから取得することができます。各仮想 HUB の管理者は、管理権限を持っている仮想 HUB のセキュリティログ・サーバーログのみをリモートから取得することができ、それ以外のログファイルは取得することができません。
また、「クラスタリング環境」においてクラスタコントローラに接続した場合は、クラスタコントローラを含めたすべてのクラスタメンバサーバー上のログファイルを一括して列挙し、指定したものをダウンロードすることが可能です。
ログファイル一覧表示画面
3.10.7 syslog 送信機能
「3.3 VPN Server 管理」 で解説されている「syslog 送信機能」を有効にした場合、syslog プロトコルで送信されたログデータ分は、ローカルハードディスクへは保存されなくなります。
参考文献
- 3.3 VPN Server 管理
- 6.3.55 "LogFileList": ログファイル一覧の取得
- 6.3.56 "LogFileGet": ログファイルのダウンロード
- 6.4.12 "LogGet": 仮想 HUB のログ保存設定の取得
- 6.4.13 "LogEnable": セキュリティログまたは パケットログの有効化
- 6.4.14 "LogDisable": セキュリティログまたはパケットログの無効化
- 6.4.15 "LogSwitchSet": ログファイルの切り替え周期の設定
- 6.4.16 "LogPacketSaveType": パケットログに保存するパケットの種類と保存内容の設定