WinlogbeatでWindowsのイベントログをFluentdサーバに転送する

投稿者: | 2016/11/04

Windowsイベントログを収集する目的

監査ポリシーを設定することでWindows内で何が起こっているのかを詳細にイベントログに残すことができます。セキュリティの要件としてこのログを監査ログとして収集し、誰にも改ざんされないように保全する仕組みを構築する必要がありました。
監査ポリシーの設定方法は次回の記事で紹介しますが、今回は「ログオン/ログオフ」「誰がどのファイル・フォルダをどういう操作をしているのか」という情報を収集する必要がありました。

WindowsのIISログやアプリケーションログの管理ツールとしてNXLogを今まで使っていましたが、Elasticから出ているデータシッパーツールBeatsの1つである、Winlogbeatを使ってみてとても良かったので紹介したいと思います。

Beatsとは

ここでBeatsとは何かを簡単に説明します。BeatsとはElastic(Elasticsearch, Logstashなどを提供している企業)がリリースしたデータシッパー(収集・加工・転送する)ツールの総称です。Beatsには様々な仲間がいて用途別にツールを使い分けます。例えば、以下に挙げたように、ログファイルを扱うFilebeatや今回紹介するWindowsイベントログを扱うWinlogbeatのようにそれぞれ単機能なツールが揃っています。

  • Packetbeat ・・・ ネットワークデータ(トラフィック、パケット)を収集
  • Topbeat ・・・ OSのメトリクス情報(CPUやメモリなどのリソースなど)を収集
  • Filebeat ・・・ ログファイルを収集。Fluentdのin_tailのようなイメージ
  • Winlogbeat ・・・ Windowsイベントログを収集
  • その他サードパーティ製(nginxbeat, redisbeat, pingbeat, httpbeat etc)

Fluentdみたいにプラグインを組み込んで何でもできるわけではなく、物足りなく感じるかもしれません。しかしBeatsはGo言語で書かれており、1つのバイナリファイルと1つの設定ファイルがあれば動かすことができるためとても身軽です。また、Fluentdなどと比べてリソースをほとんど消費しないため1 リソースが厳しいサーバでも実行することができます。
Elasticの中では、Beatsはログを収集することに専念させて、加工などの細かい処理はLogstashに任せるようになっているようです。そのため、Beatsは簡単な加工やフィルタリングしかできません。

Beatsのメリット

前節で述べているかもしれませんが、改めて整理すると下記の通りです。

  1. インストールが簡単
    • 単体の実行ファイルをダウンロードして、(Windowsの場合)サービス登録するだけで動かせる
  2. 設定がシンプル
    • 設定ファイルが1つしかなく、Yaml形式なので設定が簡単
  3. マルチプラットフォーム
    • Linuxはもちろん、Windowsも動く
    • Windowsでありがちな文字化けを考えなくてもよい(Winlogbeat)
  4. Multiline(複数行)対応 (Filebeatの場合)
    • 収集したいアプリケーションログがバックトレースなど複数行にわたる場合があり、ツールが限定されていたがBeats(Filebeat)では問題ない

今回、Windowsで動作するデータ収集ツールをいくつか調べてみましたが、以下の点でBeatsが勝る点があったため採用を見送りました。

  • NXLog ・・・ インストールが簡単だが、設定しづらい。送信先を複数にした場合、同時に同じログを送ってしまう(Active-Standbyかロードバランスしてほしい)、なぜかたまにMultilineのログが欠損する
  • Fluentd ・・・ v0.14 からWindowsが公式サポートされたが、WindowsにRubyを入れたくない(インストールが面倒なだけだが・・・)
  • Logstash ・・・ Javaを入れたくない(脆弱性が報告される度にアップデートしなければならない)
  • fluent-agent-hydra ・・・ Multilineに対応しているか不明

実行環境

  • Windows Server
    • OS: Windows Server 2012 R2
    • Powershell 5.0.10586.117
    • Winlogbeat 5.0.0
  • Fluentdサーバ(集約用)

Elastic Stack(Elasticsearch、Logstash、Kibana、Beatsの総称)が最近5.0.0が正式リリースされたので、そちらを使います。

Winlogbeatのインストール・設定

Zipファイルをダウンロードし、解凍します。解凍したらフォルダを設置します。置く場所はどこでも良いのですが、今回はC:\Program Files\Winlogbeatに設置します。

次のPowerShellコマンドを実行することでWinlogbeatがサービスとして登録されます。実行完了時点はWinlogbeatは停止状態(Stopped)です。

設定ファイル(winlogbeat.yml)は以下のようにします。設定内容の詳細はドキュメントを確認してください。
event_idで転送するイベントログIDをフィルタリングできるため、ログオン/ログオフやファイル操作に関するイベントのみフィルタするようにします。
転送先はLogstashではなく、Fluentdサーバになります。Fluentdサーバ側の設定は次節で行います。

WindowsのFirewallの設定変更

5044ポートで通信するため、AWSのSecurityGroupでの許可設定はもちろん、Windows内のFirewallも5044ポートで通信できるように設定を変更します。
Firewallの設定はこちらが参考になります。

Windows10 – ファイアウォール – 特定のポート番号の通信を許可 – PC設定のカルマ

Fluentdサーバ側の設定

Beatsから送られてきたデータをFluentdで受け取れるようにします。FluentdのプラグインでBeatsのデータを受信できる fluent-plugin-beats を使います。
Fluentdの設定ファイルは今回は標準出力するだけの簡単なものですが、適宜環境に合わせて変更してください。

Winlogbeatの起動&確認

今までのログ(ignore_olderで指定した時間以降)が大量に流れてくるが、しばらくすると収まるかと思います。
成功すると以下のようなログが流れてくれば成功です。
ログがmessageフィールドにそのまま入っているのが確認できます。パースとかできると嬉しいです。

最後に

Elastic製のデータシッパーツールである、Beatsの1つWinlogbeatを使って監査ログをFluentdサーバに転送してみました。
実行ファイルをダウンロードし、サービス登録して設定ファイルを1つだけ置いて実行すれば良いのでとても簡単にできます。
次はWindowsの監査ログを有効にする方法を紹介したいと思います。

参考URL

  1. Windows Server2012 R2 c4.4xlargeの環境でWindlogbeatのメモリ使用量が約15MBぐらいでした []

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*