WSL1でsyslogサーバを立てようと思った経緯
ある日NW検証に参加してSyslogサーバを立ててほしいと依頼されました。
最近Vmware Wrokstationにハマっており、Syslog、PPPoE、NTPなどさまざなLinuxサーバを用意したいと思っていたので丁度よい機会かと思っていました。
しかし、社給PCのスペックがたりないため、Vmware Workstationが起動できませんでした。
そのため動作が軽いWSLを使用しSyslogサーバを立てることにしました。
WSLのバージョン選定
今回は時間がなかったためWindowsの物理NICに紐付けるWSL1を選定しました。
WSL2はHyperV型なのでIPアドレス設定に時間がかかると思ったからです。
rsyslogの設定方法
ちなみにrsyslogとはsyslogのデーモン(常駐プログラム)です。
最初にroot権限を付与する。
sudo su -
rsyslogがインストールされていることを確認してください。
# rsyslogd -v
なければインストールします。
# sudo apt install rsyslog
rsyslog.confを開き設定変更します
# vi /etc/rsyslog.conf
TCP、UDPを許可します。行頭の#を削除してください。
# provides UDP syslog reception
module(load="imudp") ←行頭の#を削除
input(type="imudp" port="514") ←行頭の#を削除
# provides TCP syslog reception
module(load="imtcp") ←行頭の#を削除
input(type="imtcp" port="514") ←行頭の#を削除
設定保存します。
コマンドモード(ESC)に移行し":wq"で保存して終了する。
設定反映するためrsyslogシステムを再起動する。
WSLはsystemctlが使用できないためserviceを使用する。
sudo service rsyslog restart
rsyslogが正常に動作していることを確認する
sudo service rsyslog status
もし動いていない場合は、起動するコマンドを使います。
sudo service rsyslog start
syslogがWSL1に送られているか確認します。
NW内にNW機器がある場合はssh、telnetに失敗すれば届くかと思います。
NW機器がない場合の確認方法を以下に示します。
構成図は以下の通りです。
WSL1を動かしているPC1にPC2を結線しています。
+--------+ Ethernet +--------+
| PC1 |------------------| PC2 |
| (WSL1) | | |
+--------+ +--------+
PC2でPowerShellを開きsyslogを送信するコマンドを入力します。
"xxx.xxx.x.x"はPC1のIPアドレスを記載してください。
$UDPClient = New-Object System.Net.Sockets.UdpClient
$UDPClient.Connect("xxx.xxx.x.x", 514)
$Encoding = [System.Text.Encoding]::ASCII
$Bytes = $Encoding.GetBytes("<13>Test message from Windows")
$UDPClient.Send($Bytes, $Bytes.Length)
WSL1にsyslogが届いていることを確認します。
デフォルト格納先は/var/log/syslogです。
sudo cat /var/log/syslog
以上でrsyslogの設定は終わりになりますが、
検証では複数機器のsyslogが届くので機器をディレクトリ別に分け、日付ごとにファイル出力します。
$template DailyPerHostLogs,"/var/log/syslog/%fromhost-ip%-%fromhost%/%$YEAR%-%$MONTH%-%$DAY%.log"
*.* -?DailyPerHostLogs
各リモートマシンからのログが/var/log/syslog/IPアドレス-ホスト名/年-月-日.logというパスのファイルに保存されます。例えば、IPアドレスが192.168.1.2、ホスト名がhost1のマシンからの2023年7月18日のログは/var/log/syslog/192.168.1.2-host1/2023-07-18.logに保存されます。
つまづいた点
デフォルト格納先が/var/log/syslogですが、既に/var/log/ディレクトリにsyslogファイル、syslogディレクトリがあるとエラーが発生しました。
なので既にファイルやディレクトリがある場合は削除します。
sudo rm /var/log/syslog
まとめ
WSL1で作成しましたが、NTPサーバはWSL1ではなくWSL2でしか動きません。
このあとNTPサーバも立ててほしいと依頼があり、WSL2にNTPサーバを立てたあとにrsyslogもWSL2に立てています。
なので検証でWSLを使用する際はWSL2でいいとお思います。