NixOSでrsyslogの設定

前回の記事では、Linuxや*BSDなどUNIX系のOSをWindowsのネットワークに参加させる為のツールであるSambaを導入し、macOS機やWindows機から接続確認を行った。
当ブログの著者の家庭内で稼働しているサーバでは、吐き出されるログの一部をsyslogサーバに飛ばす設定を入れている。今回は、前回の記事にて構築したファイルサーバにて吐き出されるログをsyslogサーバに飛ばす設定を入れて、簡単な動作確認を行った。
2025/4/6追記 NixOSネタの記事の一覧は、当記事内最下部の「NixOS関連の記事」欄内を参照。
 


Syslogサーバについて
Syslogサーバとは、ネットワーク上にある各ネットワーク器(ルータやスイッチやファイアウォール等)やサーバ等の内部で起きている動作のログを収集し、保存する為のサーバである。
今回NixOS側で設定するのは、Linuxのrsyslogの機能でSyslogサーバにログを飛ばす為の設定である。
 
以下は、syslogとrsyslogとの違いを簡単にまとめた表である。
syslogプロトコルのオープンソース実装であるsyslog-ngに関しては触れていない。

項目 syslog rsyslog
プロトコル UDP UDP、TCP (TLS可)
拡張性 限定的 プラグインによる機能拡張可
フィルタリング 基本的なフィルタのみ 正規表現など高度なフィルタリング可
DBとの連携 未対応 MySQL、PostgreSQLなど可
ジャーナリング 未対応 systemd-journaldとの連携可
圧縮機能 未対応 対応
パフォーマンス 高くない 高い
マルチスレッド対応

 


当方の環境
ホスト機:macOS 15.4 / MacBook Pro 2020 / RAM: 16GB / CPU: Intel Core i5 2.0GHz
仮想化環境:Oracle VirtualBox 7.1.4 r165100
ゲストOS:NixOS 24.11 (Vicuna)
Syslogサーバは家庭内のLANにて稼働しているもの(Debian GNU/Linux 12.10)を使用する。NixOS側から受け取ったログをSyslogサーバ側で確認する。
 


今回の要件
NixOSが送信側、Debian GNU/Linuxが受信側(syslogサーバ)。
NixOS側で発生した全てのメッセージの中から、シビリティがalertとemergのメッセージと、認証関連の全てのシビリティのメッセージを自機だけでなくsyslogサーバに転送される設定を投入する。

設定に取り掛かる前に、動作環境を出力。

[testsv99:~ ]# uname -a
Linux testsv99 6.6.82 #1-NixOS SMP PREEMPT_DYNAMIC Sun Mar  9 08:55:04 UTC 2025 x86_64 GNU/Linux
[testsv99:~ ]# 
[testsv99:~ ]# zsh --version
zsh 5.9 (x86_64-pc-linux-gnu)
[testsv99:~ ]# 

 


rsyslogの設定
1. クライアント側(syslog飛ばす方)
rsyslogの設定の前に、rsyslogパッケージの導入設定とrsyslogの設定を済ませる。
/etc/nixos/configuration.nixファイル内の上の方に有るimportsの項目にて、rsyslogの設定ファイル/etc/nixos/rsyslog.nixを読み込ませる設定を追記する。

[testsv99:~ ]# sudo nvim /etc/nixos/configuration.nix

{ config, pkgs, ... }:

{
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
      ./ssh.nix
      ./zsh.nix
      ./nvim.nix
      ./chrony.nix
      ./smb.nix
      ./rsyslog.nix  ◻️◻️この行を追記
    ];
:
省略
:

 
続いて/etc/nixos/configuration.nixファイル内に、以下のようにrsyslogパッケージのインストールの設定を追記する。

:
省略
:
  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
  #  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
    wget
    zsh
    neovim
    git
    curl
    chrony
    neofetch
    samba
    rsyslog  ◻️◻️この行を追記
  ];
:
省略
:

 
/etc/nixos/rsyslog.nixファイルを新規作成。他のLinuxディストリビューションや*BSD等で使用されている、/etc/rsyslog.confファイルと同じような内容を記載する。
全てのメッセージにおいてシビリティがalertとemergのメッセージと、認証関連のメッセージにおいて全てのシビリティのメッセージを自機だけでなくsyslogサーバに転送される設定にした。

出力先のログファイルの指定について。
ハイフン付き(例:-/var/log/mail.log)の場合、ログの書き込みが非同期になる。非同期の場合、ログはある程度貯まってからストレージに保存される。
ハイフン無し(例:/var/log/kern.log)の場合、ログの発生と同時にストレージに保存される。
@SyslogサーバのIPアドレスで、Syslogサーバにログを転送する。

[testsv99:~ ]# sudo nvim /etc/nixos/rsyslog.nix
{
  services.rsyslogd = {
    enable = true;
    defaultConfig = ''
      # Use default timestamp format
      $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
      # Distributing logs
      *.*;auth,authpriv.none       -/var/log/syslog
      kern.*                       /var/log/kern.log
      mail.*                       -/var/log/mail.log
      cron.*                       -/var/log/cron.log
      user.*                       -/var/log/user.log
      auth,authpriv.*              /var/log/auth.log
      auth,authpriv.*              @192.168.3.251:514
      *.alert                      /var/log/alert.log
      *.alert                      @192.168.3.251:514
      *.emerg                      /var/log/emerg.log
      *.emerg                      @192.168.3.251:514
    '';
  };
}

 

自分の環境では/etc/nixos/configuration.nixファイルと/etc/nixos/rsyslog.nixの2つのファイルに分けてsyslog周りの設定を行ったが、分けずに/etc/nixos/configuration.nixファイルだけで設定を行う事も出来る。
構文はdefaultConfigから下は/etc/nixos/rsyslog.nixと同じである。
以下を/etc/nixos/configuration.nixファイルに追記した後、nixos-rebuildコマンドでリビルド、Sambaの動作確認という流れになる。

services.rsyslogd.enable = true;
services.rsyslogd.defaultConfig = ''
  # Use default timestamp format
  $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
  # Distributing logs
  *.*;auth,authpriv.none       -/var/log/syslog
  kern.*                       /var/log/kern.log
  mail.*                       -/var/log/mail.log
  cron.*                       -/var/log/cron.log
  user.*                       -/var/log/user.log
  auth,authpriv.*              /var/log/auth.log
  auth,authpriv.*              @192.168.3.251:514
  *.alert                      /var/log/alert.log
  *.alert                      @192.168.3.251:514
  *.emerg                      /var/log/emerg.log
  *.emerg                      @192.168.3.251:514
'';

 
設定を終えたら、設定内容を反映させる為にnixos-rebuildコマンドを叩いてリビルドする。

[testsv99:~ ]# sudo nixos-rebuild switch             
building Nix...
building the system configuration...
evaluation warning: The option `services.samba.securityType' defined in `/etc/nixos/smb.nix' has been renamed to `services.samba.settings.global.security'.
these 33 derivations will be built:
  /nix/store/rdvaypahc7fb28zd8wsr504rk12sb2qd-firewall-start.drv
:
省略
:
[testsv99:~ ]# 

 
2. Syslogサーバ側(syslogを受け取る側)
以下はsyslogを受け取る側の設定内容である。
稼働中のサーバにつき設定追加や変更はせず、設定内容の表示に留める。
Debian GNU/Linuxでは、rsyslogサービスの設定は/etc/rsyslog.d/99-remote.confファイルに書かれている。
今回の設定対象であるNixOSを含め自機以外で発生したsyslogは、/var/log/remoteファイルに記録されるという設定内容である。

[root@jpmtkvmsv99 ]# cd /etc/rsyslog.d/
[root@jpmtkvmsv99 rsyslog.d]# ls
99-remote.conf
[root@jpmtkvmsv99 rsyslog.d]#
[root@jpmtkvmsv99 rsyslog.d]#
[root@jpmtkvmsv99 rsyslog.d]# cat 99-remote.conf 
module(load="imudp")
input(type="imudp" port="514")

if $fromhost-ip != '127.0.0.1' and $fromhost-ip != 'localhost' then {
    action(type="omfile" file="/var/log/remote")
    stop
}
[root@jpmtkvmsv99 rsyslog.d]# 

 

3. 動作確認
NixOSにログインした際に生成されるログの転送と、意図的にSambaのサービスを落とした際に生成されるログの転送を確認した。
まず最初に、Syslogサーバ側でtail -f /var/log/remoteコマンドを叩き、NixOS側から受け取ったログがリアルタイムで出力される様子を確認する。今回はテスト用に作成したhogehogeでNixOSにログインを実施した。
ログイン後、管理者権限が無いアカウントhogehogeでsudo nixos-rebuild switchの実行を試み、NixOS側から受け取ったログがリアルタイムで出力される様子を確認する。
以下は、NixOSにてhogehogeアカウントでSSHログインを実施し、続いてsudo nixos-rebuild switchコマンドを叩いた際の出力内容。

apple@jpmtkmbp13 ~ % ssh hogehoge@192.168.3.247
(user@192.168.3.247) Password: 
Last login: Sat Apr  5 10:34:28 2025 from 192.168.3.7
[testsv99:~ ]# 
[testsv99:~ ]# 
[testsv99:~ ]# sudo nixos-rebuild switch 
[sudo] password for hogehoge: 
hogehoge is not in the sudoers file.
[testsv99:~ ]# 

 
以下は、NixOSにて上記が実行された際の、Syslogサーバ側の出力内容。
アカウントhogehogeはsudoと紐付けしていない為、sudoを付けてコマンドを叩くと sudo: user : hogehoge NOT in sudoers というログが出力される。
sshセッションとログイン関連のログとsudo実行関連のログがコマンドの実行とほぼリアルタイムに出力され、想定どおりに動作する事を確認出来た。

[hechtia@jpmtkvmsv99 ~]$ tail -f /var/log/remote

2025-04-05T10:36:02+09:00 testsv99 sshd-session[3086]: Accepted keyboard-interactive/pam for user from 192.168.3.7 port 50358 ssh2
2025-04-05T10:36:02+09:00 testsv99 sshd-session[3086]: pam_unix(sshd:session): session opened for user hogehoge(uid=1002) by (uid=0)
2025-04-05T10:36:02+09:00 testsv99 systemd-logind[681]: New session 18 of user hogehoge.
2025-04-05T10:36:03+09:00 testsv99 (systemd): pam_unix(systemd-user:session): session opened for user hogehoge(uid=1002) by (uid=0)
2025-04-05T10:36:03+09:00 testsv99 systemd-logind[681]: New session 19 of user hogehoge.
2025-04-05T10:37:08+09:00 testsv99 sudo:     user : hogehoge NOT in sudoers ; TTY=pts/0 ; PWD=/home/hogehoge ; USER=root ; COMMAND=/run/current-system/sw/bin/nixos-rebuild switch
2025-04-05T10:37:08+09:00 testsv99 sudo:     user : hogehoge NOT in sudoers ; TTY=pts/0 ; PWD=/home/hogehoge ; USER=root ; COMMAND=/run/current-system/sw/bin/nixos-rebuild switch

 
NixOS側でも/etc/nixos/rsyslog.nixファイルの記載のとおり、想定通り/var/log/auth.logに同じログが出力されている事を確認出来た。

[testsv99:~ ]# tail -f /var/log/auth.log

Apr  5 10:36:02 testsv99 sshd-session[3086]: Accepted keyboard-interactive/pam for user from 192.168.3.7 port 50358 ssh2
Apr  5 10:36:02 testsv99 sshd-session[3086]: pam_unix(sshd:session): session opened for user user(uid=1002) by (uid=0)
Apr  5 10:36:02 testsv99 systemd-logind[681]: New session 18 of user user.
Apr  5 10:36:03 testsv99 (systemd): pam_unix(systemd-user:session): session opened for user user(uid=1002) by (uid=0)
Apr  5 10:36:03 testsv99 systemd-logind[681]: New session 19 of user user.
Apr  5 10:37:08 testsv99 sudo:     user : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/run/current-system/sw/bin/nixos-rebuild switch

 

続いて、NixOSにて動作しているSambaサービスをsystemctlコマンドで意図的に落とした際に生成されるログの転送を確認した。
以下は、NixOS側にてsudo systemctl stop samba-smbd.serviceコマンドとsudo systemctl start samba-smbd.serviceコマンドを叩いた際の出力内容。

[testsv99:~ ]# sudo systemctl stop samba-smbd.service 
[testsv99:~ ]# sudo systemctl start samba-smbd.service 
[testsv99:~ ]# 

 
以下は、NixOSにて上記が実行された際の、Syslogサーバ側の出力内容。
Sambaサービスをコマンドで落とした際のログとSambaサービスをコマンドで立ち上げた際のログが、コマンドの実行とほぼリアルタイムで出力され、想定通りに動作する事を確認出来た。

[hechtia@jpmtkvmsv99 ~]$ tail -f /var/log/remote

2025-04-05T11:48:24+09:00 testsv99 sudo:  user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/run/current-system/sw/bin/systemctl stop samba-smbd.service
2025-04-05T11:48:24+09:00 testsv99 sudo: pam_unix(sudo:session): session opened for user root(uid=0) by user(uid=1000)
2025-04-05T11:48:24+09:00 testsv99 sudo: pam_unix(sudo:session): session closed for user root
2025-04-05T11:48:52+09:00 testsv99 sudo:  user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/run/current-system/sw/bin/systemctl start samba-smbd.service
2025-04-05T11:48:52+09:00 testsv99 sudo: pam_unix(sudo:session): session opened for user root(uid=0) by user(uid=1000)
2025-04-05T11:48:52+09:00 testsv99 sudo: pam_unix(sudo:session): session closed for user root

 
以下はNixOS側の/var/log/auth.logの内容。
/etc/nixos/rsyslog.nixファイルの記載のとおり、想定通り/var/log/auth.logに同じログが出力されている事を確認出来た。

[testsv99:~ ]# tail -f /var/log/auth.log
:
省略
:
Apr  5 11:48:24 testsv99 sudo:  hechtia : TTY=pts/1 ; PWD=/home/hechtia ; USER=root ; COMMAND=/run/current-system/sw/bin/systemctl stop samba-smbd.service
Apr  5 11:48:24 testsv99 sudo: pam_unix(sudo:session): session opened for user root(uid=0) by hechtia(uid=1000)
Apr  5 11:48:24 testsv99 sudo: pam_unix(sudo:session): session closed for user root
Apr  5 11:48:52 testsv99 sudo:  hechtia : TTY=pts/1 ; PWD=/home/hechtia ; USER=root ; COMMAND=/run/current-system/sw/bin/systemctl start samba-smbd.service
Apr  5 11:48:52 testsv99 sudo: pam_unix(sudo:session): session opened for user root(uid=0) by hechtia(uid=1000)
Apr  5 11:48:52 testsv99 sudo: pam_unix(sudo:session): session closed for user root

 

今回はここまで。
NixOSにて発生したイベントのログがrsyslogの機能を介してSyslogサーバに転送され、Syslogサーバ側で出力出来る事を確認した。
今のところNixOSの設定に関しては深掘りは出来ていないが、RHELやDebian等で出来る事は或る程度まではNix言語で設定を書ける事は分かった。
サーバの基本的な設定が紹介されているServer Worldというサイトで公開されているものは、NixOSでも再現可能ではないか。余力が残っているうちに試してみたい。
 


振り返り
NixOSに出会ってから、まもなく1ヶ月が経とうとしている。
この1ヶ月間、まだ初期設定レベルではあるが、他のNixOSユーザの.nixファイルを参考にしながら自分の環境に適用しつつ、.nixファイルの書き方を学んできた。
気が付けばNixOSの沼に両足を突っ込んでいた。ただし、まだかかとまでしか浸かっていないのでいつでも後戻りはできる。でも、なぜかその生温かさが妙に心地よく感じられる。
もうしばらくの間、このままNixOSの沼に足を突っ込んでいよう。
 


参照サイト
https://nixos.org/ Nix & NixOS Declarative builds and deployments
https://nixos.org/manual/nixos/stable/ NixOS Manual
https://search.nixos.org/packages NixOS Search Packages
https://search.nixos.org/options? NixOS Search Options
https://discourse.nixos.org/t/how-to-send-all-logs-to-a-syslog-server/19003
https://www.rsyslog.com/ rsyslog - The rocket-fast system for log processing
https://www.server-world.info/query?os=Ubuntu_22.04&p=rsyslog Rsyslog:基本設定 - Server World
https://www.skygroup.jp/tech-blog/article/429/ Ubuntuで​syslogサーバーを​構築しました - Sky Tech Blog
 

NixOS関連の記事
https://debslink.hatenadiary.jp/entry/20250311/1741649715 NixOSの沼に片足を突っ込んだ
https://debslink.hatenadiary.jp/entry/20250316/1742128054 NixOSにFlakeを導入した
https://debslink.hatenadiary.jp/entry/20250320/1742459549 NixOSの環境構築
https://debslink.hatenadiary.jp/entry/20250323/1742731080 NixOSでSFTPサーバの設定
https://debslink.hatenadiary.jp/entry/20250328/1743167901 NixOSでSambaによるファイルサーバの構築
https://debslink.hatenadiary.jp/entry/20250405/1743844940 NixOSでrsyslogの設定
https://debslink.hatenadiary.jp/entry/20250411/1744300480 NixOSでDNSサーバの構築
https://debslink.hatenadiary.jp/entry/20250413/1744551596 NixOSのシステムの再現性の検証
https://debslink.hatenadiary.jp/entry/20250418/1744924524 NixOSでPostfixとDovecotによるメールサーバの構築
https://debslink.hatenadiary.jp/entry/20250419/1745062553 NixOSでPostfixとDovecotによるメールサーバの構築 - SASL認証編
https://debslink.hatenadiary.jp/entry/20250421/1745236668 NixOSのパッケージやOSのアップデートに関するメモ
https://debslink.hatenadiary.jp/entry/20250428/1745795434 NixOSをCLIでインストールした
https://debslink.hatenadiary.jp/entry/20250503/1746235454 NixOSでnginxによるWebサーバの構築
https://debslink.hatenadiary.jp/entry/20250508/1746706416 NixOSでPrometheusとGrafanaによる監視基盤の構築
https://debslink.hatenadiary.jp/entry/20250510/1746884897 NixOSの導入にあたり参考になったサイト
https://debslink.hatenadiary.jp/entry/20250524/1748072722 NixOSを24.11から25.05にアップデートした
https://debslink.hatenadiary.jp/entry/20251214/1765688458 NixOSを25.05から25.11にアップデートした
https://debslink.hatenadiary.jp/entry/20260117/1768615582 Raspberry Pi 4BにNixOSを導入しファイルサーバを構築した