NXLog受信用AlmaLinuxを構築する

はじめに

普段はLinuxサーバーを触ることが多い僕ですが、最近は勉強も兼てWindows Serverに触れる機会が増えています。ただ、やはり慣れない部分も多く、特に「ログ」の扱いはLinuxとは勝手が違うようです。

Windowsには標準で「イベントログ」という仕組みがありますが、このログをSyslogのように外部サーバーへ転送する機能は標準では提供されていません。

そこで、今回はサードパーティー製のツール「NXLog」を使い、Windows Serverのイベントログを外部のLinuxサーバーへ転送する実験をしています。

この実験は、以下の4つの記事に分けてお届けする予定です。

  1. Windows ServerへのNXLogインストール
  2. ログ受信サーバー(Linux)の構築(本記事)
  3. NXLogの設定(Windows Server側)
  4. ログ転送の確認

今回の実験環境とゴール

まず、今回の実験で目指す環境を改めて整理します。予算がないため、さくらのVPSの2週間無料お試し期間を最大限に活用します。

  • ゴール: Windows Serverのイベントログを、LinuxサーバーへUDPで転送する
  • ログ送信側: Windows Server 2022/2025
  • ログ受信側: AlmaLinux
  • ログ形式: JSON
  • プロトコル: UDP / ポート 514

受信サーバーの構築

今回はログの受け皿となるLinuxサーバーを構築していきます。OSにはAlmaLinuxを使用し、スペックは一番低いプランを選択しました。

  • OS: AlmaLinux
  • メモリ: 512MB
  • CPU: 1コア
  • ストレージ: 25GB

基本的にはJSON形式のSyslogデータを受け取るだけなので、標準的な環境で十分です。追加のインストール作業はほとんどありません。

jqコマンドの確認

念のため、JSONデータを整形するjqコマンドがインストールされているか確認しておきましょう。さくらのVPSのようなクラウド環境では、最初から入っていることが多いです。

jq --version

もし「コマンドが見つかりません」のように表示されたら、以下のコマンドでインストールしてください。

sudo dnf install jq

rsyslogの設定

Linuxには標準でrsyslogというSyslogを管理する仕組みが入っています。この設定ファイルを編集し、外部からログを受信できるようにします。

まず、設定ファイルを開きます。

sudo vi /etc/rsyslog.conf

ファイルの中から以下の2行を探し、先頭の#(コメントアウト)を削除します。これにより、UDPの514番ポートでSyslogを受け付けられるようになります。

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

受信ログを日付ごとに分割

受信したログは、日付ごとにディレクトリを分けて保存されるように設定すると、後々の管理が楽になります。

/etc/rsyslog.d/ディレクトリに、新しく設定ファイルを作成します。

sudo vi /etc/rsyslog.d/30-nxlog.conf

開いたファイルに、以下の設定を記述してください。

# 動的なファイルパスを生成するためのテンプレートを定義
template(name="DailyLog" type="string"
         string="/var/log/syslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/syslog.log"
        )

# リモートホストからのログにのみ、このルールを適用する
if $fromhost-ip != '127.0.0.1' then {
    # 上で定義したテンプレートを使って、動的に生成されたパスにログを出力
    action(type="omfile"
           dynaFile="DailyLog"
          )
    # 処理をここで終了 (他のログファイルに重複して書かない)
    stop
}

ログ保存用フォルダの作成

上記の設定で指定した/var/log/syslog/というディレクトリは自動では作成されないため、手動で作っておく必要があります。

sudo mkdir /var/log/syslog/

このディレクトリがないと、ログを受信しても保存先がなく、ファイルが作られないので注意してください。

rsyslogの再起動

設定が完了したら、rsyslogサービスを再起動して設定を反映させます。

sudo systemctl restart rsyslog

ファイアウォールの設定

最後に、外部のWindows Serverからログデータが届くように、ファイアウォールのポートを開放します。

以下のコマンドで、publicゾーンのUDP/514ポートを恒久的に許可し、設定をリロードします。

# publicゾーンでUDP/514ポートを恒久的に許可
sudo firewall-cmd --zone=public --add-port=514/udp --permanent

# 設定を再読み込みして反映
sudo firewall-cmd --reload

まとめ

これで、Windows Serverから送られてくるイベントログを受信するLinuxサーバー側の準備が整いました。

次回は、いよいよWindows Server側に戻り、NXLogの設定ファイルにログの転送ルールを記述していきます。

個人支援・寄付について

サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。

  • ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS