本記事は2019年12月3日に公開したものをアップデートしたものです。
ジュピターテクノロジー株式会社のブログへようこそ!本連載記事の執筆者螺子(ネジ)です。
本連載企画は、楊枝(ヨウジ)とわたくし螺子2名で全20回に渡ってsyslog-ng Store Box(SSB)及びその最新周辺技術を紹介、読者の皆様と一緒に勉強・検証していくスキルアップブログを目指しております。
まえがき
これまでの連載記事(2021年12月全20回公開)
- 第1回「syslog-ng Store Boxを知る」
- 第2回「syslog-ng Store Boxを仮想環境にインストールする」
- 第3回「syslog-ng Store Boxで出来ることまとめ」
- 第4回「Wiresharkでsyslogプロトコルパケットを覗く」
- 第5回「ciscoスイッチ、fortigateファイアウォールログをSSBで受信!よりログを検索しやすく」
- 第6回「RPC APIを使ってみる、自社システムに統合!ログ検索の自動化!」
- 第7回「Active Directoryと連携して、Active Directoryユーザー認証!」
- 第8回「SSBをHA(High Availability)構成で構築してみる!」
- 第9回「ログをバイナリおよびテキスト形式で保存、違いを比較してみる」
- 第10回「ログファイルを共有して、外部ホストからアクセスしてみる!」
- 第11回「フィルターを使用して、必要なログのみ保存してみる!」
- 第12回「SSBの監視とアラート!SNMPマネージャーで監視およびSNMPトラップを受信してみる」
- 第13回「コンテンツベースアラート。重要なログを見逃さない!」
- 第14回「設定変更履歴。コンプライアンスにも対応!」
- 第15回「トラブルシューティングに役立つ機能。問題を迅速に解決!」
- 第16回「ユーザーアクセス制御。アクセス権限とタイプを設定してみる!」
- 第17回「リライト機能。ログの整形や正規化!」
- 第18回「バックアップリストア。システムデータおよびログデータをバックアップ、リストアしてみる!」
- 第19回「アーカイブ/クリーンアップ。ログデータをアーカイブ、クリーンアップしてみる!」
- 第20回「SSBの有効活用および安定稼働のためのポイントを紹介!」
今回のお題と事前準備
今回は、Wiresharkを使って実際のsyslogプロトコルのネットワークパケットを覗いてみます。メッセージのフォーマットの違いや、SSBでsyslogメッセージがどのように表示されるかがわかりますよ(ただし、Wiresharkを使ってメッセージを盗聴するなどの悪用は厳禁です!)。
syslog-ng Agent for Windowsのダウンロード
ここでは、syslog-ng Agent for Windowsを使用して、Windowsイベントログをsyslogメッセージに変換してSSBに送信します。syslog-ng Agent for Windowsについては、過去記事「syslog-ng Agent for Windowsのご紹介」または、過去記事「syslog-ng Store Box(SSB) ライセンスで無料で利用できるsyslogエージェント!」をご覧ください。syslog-ng Agent for Windowsの評価版はこちらからダウンロードできます。
batファイルの準備
また、”eventcreate”コマンドを使用して下記のようにWindowsイベントログを作成(batファイルに保存して管理者として実行)しています。batファイルはここからダウンロードできます。
rem !LFは改行
SETLOCAL ENABLEDELAYEDEXPANSION
SET LF=^
eventcreate /ID 100 /L APPLICATION /SO testevent /T Information /D "This is test event log from Win10 application info(テストイベントログ)!LF!!LF!IP: 192.168.0.1!LF!セキュリティ ID: NT AUTHORITYSYSTEM!LF!プロセス ID: 0x1068!LF!プロセス名: C:WindowsSystem32CompatTelRunner.exe"
さっそくパケットを覗いてみる
IETF-syslog(RFC 5424)メッセージを覗く
それでは、まず、IETF-syslog(RFC 5424)メッセージのパケットを覗いてみましょう。
syslog-ng Agent for Windowsインストールして、宛先ログサーバーを設定(ここでは、SSBのIPアドレス)した後、[Properties]を確認します。
[Server]タブを開くと、[Server Name or Address (IPv4)]フィールドにはSSBのIPアドレス、[Server Port]は”601″が設定されています(図1)。
[Messages]タブを開くと、[Protocol]セクションの[Protocol]が”Syslog Protocol”になっています(図2)。これは、syslog-ng Agent for Windowsのデフォルトの設定です。
Wiresharkを起動して、パケットをキャプチャします(図3)。
“eventcreate”コマンドを使用してWindowsイベントログを生成します。イベントログはsyslog-ng Agent for Windowsによってsyslogメッセージとしてシスログサーバー(SSB)に送信されます。
キャプチャしたパケットを表示します。イベントログを送信したTCPパケットを特定して、[分析]>[追跡]>[TCPストリーム]を選択します(図4)。
syslogメッセージ(イベントログ)のTCPパケットを特定するには、Wiresharkのフィルター設定で下記のように送信元IPアドレス、宛先IPアドレス、およびポートを指定すると特定しやすくなります。この例では、syslogメッセージ(イベントログ)を送信しているクライアントのIPアドレスが”192.168.93.33″、ログサーバー(SSB)のIPアドレスが”192.168.91.127″、TCPポートを”601″でフィルターしています。
Wiresharkフィルター例:
ip.src == 192.168.93.33 and ip.dst == 192.168.91.127 and tcp.port == 601
“UTF-8形式”を選択すると日本語(マルチバイト文字)も読めるようになります(図5)。syslog-ng Agent for Windowsはマルチバイト文字をUTF-8に変換して送信します。SSBはデフォルトでUTF-8形式を認識します。
では、実際に送信されたログデータを詳しく見てみましょう(図6)。
IETF-syslogメッセージは、以下の部分と値で構成されています。各値は半角スペースで区切られています。IETF-syslog(RFC 5424)メッセージフォーマットについては、過去記事「IETF-syslog(RFC 5424)メッセージフォーマット」も合わせてご覧ください。
HEADER部
- ① プライオリティ: メッセージのファシリティおよびセベリティを表します。プライオリティ値は<>で囲まれています。
- ② バージョン: syslogプロトコルのバージョン番号を表します。現在、この値は1のみになります。
- ③ タイムスタンプ: ISO8901互換のタイムスタンプ形式になります。
- ④ ホスト名: メッセージを最初に送信したマシン名を表します。
- ⑤ アプリケーション: メッセージを生成したデバイスあるいはアプリケーションを表します。
- ⑥ PID: syslogアプリケーションのプロセス名あるいはプロセスIDを表します。
- ⑦ メッセージID: メッセージのID番号を表します。この例では番号が割り当てられていないため’-‘になります。
STRUCTURED-DATA部
- ⑧ 構造化データ: syslog-ngメッセージに関するメタ情報、あるいはトラフィックカウンターやIPアドレスのようなアプリケーション固有の情報を表します。構造化データは[]で囲まれています。
MSG部
- ⑨メッセージ: プログラム[プログラムID]と:(コロン半角スペース)に続いてメッセージテキストを表します。
その他
- ⑩メッセージサイズ: マルチラインメッセージを含むメッセージの境界を認識するためのメッセージサイズを表します。
受信したログメッセージがSSBでどのように表示されるか確認してみましょう(図7)。SSBで受信したログメッセージを閲覧する方法については、過去記事「syslog-ng Store Box(SSB)のログ閲覧・検索」をご覧ください。
- Processed timestamp: SSBがログメッセージを受信したタイムスタンプです。これは、ログメッセージには含まれていません。
- Timestamp: ログメッセージのタイムスタンプの値です※1。
- Host: SSBにメッセージを送信したクライアントのIPアドレスまたはホスト名です※1。
- Program[PID]: Programはメッセージを作成したアプリケーションです。ログメッセージのアプリケーションの値になります。PIDはメッセージを作成したアプリケーションのプログラムIDです。ログメッセージのPIDの値になります。
- Facility: ログメッセージを送信したファシリティ値です。ログメッセージのプライオリティの値から算出されます※2。
- Priority: ログメッセージのプライオリティ値です。ログメッセージのプライオリティの値から算出されます※2。SSBではPriorityと表示されていますが、この値はセベリティ値になります。
- Unique ID: メッセージの一意なIDです。これは、SSBが動的に作成しログメッセージには含まれていません。
- Tags: パターンデータベースに一致したメッセージに割り当てられたタグです。これは、ログメッセージには含まれていません。
- Message: ログメッセージのテキストです。ログメッセージのメッセージの値になります。
- Dynamic columns: ログメッセージの構造化データがname-valueペアとして認識され動的カラムとして利用できます。
[Log]>[Sources]>[<各ソース>]の[Hostname and timestamp related settings]セクション以下の[Trusted]を有効にした場合。無効の場合は、メッセージを受信した時間、およびメッセージの送信元IPアドレスまたはDNSで名前解決している場合はDNSで返されたホスト名になります。
※2 プライオリティ値は=ファシリティx8 + セベリティになります。ここでは、プライオリティ値は134ですので、ファシリティ=16、セベリティ=6になります。
BSD-syslogメッセージを覗く
次に、”BSD-syslog メッセージ”のパケットを覗いてみましょう。
[Server]タブを開いて、[Server Port]は”514″に変更します(図8)。
[Messages]タブで、[Protocol]セクションの[Protocol]を”Legacy BSD Syslog Protocol”に変更します([Template]は自動的に”<${PRI}>${BSDDATE} ${HOST} ${MSGHDR}${MSG}”に設定されます)。[OK]をクリックして設定を保存します。(図9)。
設定を有効にするのに、サービスを再起動します(図10)。
上述と同様に”eventcreate”コマンドを使用してWindowsイベントログを生成し、パケットをキャプチャしてTCPストリームを表示します(図11)。
BSD-syslog メッセージは、以下の部分と値で構成されています。各値は半角スペースで区切られています。BSD-syslog メッセージフォーマットについては、過去記事「BSD-syslog メッセージフォーマット」も合わせてご覧ください
PRI部
- ① プライオリティ値: メッセージのファシリティおよびセベリティを表します。プライオリティ値は<>で囲まれています。
HEADER部
- ② タイムスタンプ: Mmm dd:hh:mm:ss形式で表します。
- ③ ホスト名: ホスト名あるいはデバイスのIPアドレスを表します。
MSG部
- ④ メッセージ: プログラム[プログラムID]と:(コロン半角スペース)に続いてメッセージテキストを表します。
受信したログメッセージがSSBでどのように表示されるか確認してみましょう。SSBで受信したログメッセージを閲覧する方法については、過去記事「syslog-ng Store Box(SSB)のログ閲覧・検索」をご覧ください。
- Processed timestamp: SSBがログメッセージを受信したタイムスタンプです。これは、ログメッセージには含まれていません。
- Timestamp: ログメッセージのタイムスタンプの値です※1。
- Host: SSBにメッセージを送信したクライアントのIPアドレスまたはホスト名です※1。
- Program[PID]: Programはメッセージを作成したアプリケーションです。ログメッセージのアプリケーションの値になります。PIDはメッセージを作成したアプリケーションのプログラムIDです。ログメッセージのPIDの値になります。
- Facility: ログメッセージを送信したファシリティ値です。ログメッセージのプライオリティの値から算出されます※2。
- Priority: ログメッセージのプライオリティ値です。ログメッセージのプライオリティの値から算出されます※2。SSBではPriorityと表示されていますが、この値はセベリティ値になります。
- Unique ID: メッセージの一意なIDです。これは、SSBが動的に作成しログメッセージには含まれていません。
- Tags: パターンデータベースに一致したメッセージに割り当てられたタグです。これは、ログメッセージには含まれていません。
[Log]>[Sources]>[<各ソース>]の[Hostname and timestamp related settings]セクション以下の[Trusted]を有効にした場合。無効の場合は、メッセージを受信した時間、およびメッセージの送信元IPアドレスまたはDNSで名前解決している場合はDNSで返されたホスト名になります。
※2 プライオリティ値は=ファシリティx8 + セベリティになります。ここでは、プライオリティ値は134ですので、ファシリティ=16、セベリティ=6になります。
まとめ
如何でしたでしょうか?
syslogメッセージの内容と受信したsyslogメッセージがSSBでどう表示されるかが理解できたでしょうか?
syslog-ng Agent for Windowsを使用してWindowsのイベントログをsyslogメッセージとして送信する場合、構造化データがあり、柔軟な検索や閲覧が可能なIETF-syslog(RFC 5424)メッセージによる送信をお勧めします。
それでは、次回連載記事をお楽しみに!