【Linux】Ubuntu 20.04でSyslogサーバを構築

Linux
スポンサーリンク

今回は、Ubuntu 20.04でSyslogサーバを構築してみました。

システム構成

今回は、SyslogサーバとSyslogを転送するクライアントの2台で行います。
サーバとクライアントは同一のネットワーク内に存在し、DNSサーバに登録しているので、お互いに名前解決ができる状態となっています。

Syslog Server

  • OS : Ubuntu Server 20.04
  • CPU : 2vCPU
  • MEM : 4GB
  • DISK :40GB
  • Hostname : dev-syslog-srv.willserver.local
  • IP : 192.168.100.171

Syslog Client

  • OS : Ubuntu Server 20.04
  • CPU : 2vCPU
  • MEM : 4GB
  • DISK : 40GB
  • Hostname : dev-syslog-cli.willserver.local
  • IP : 192.168.100.172

なお、本環境ではSyslogはUDPで転送し、Syslogの受信ポートはデフォルトの514としています。

Syslogバージョン確認

Ubuntu Server 20.04では、デフォルトでrsyslogがインストールされています。
以下のコマンドでrsyslogのバージョンを確認します。

~$ rsyslogd -versoion

rsyslogd  8.2001.0 (aka 2020.01) compiled with:
	PLATFORM:				x86_64-pc-linux-gnu
	PLATFORM (lsb_release -d):		
	FEATURE_REGEXP:				Yes
	GSSAPI Kerberos 5 support:		Yes
	FEATURE_DEBUG (debug build, slow code):	No
	32bit Atomic operations supported:	Yes
	64bit Atomic operations supported:	Yes
	memory allocator:			system default
	Runtime Instrumentation (slow code):	No
	uuid support:				Yes
	systemd support:			Yes
	Config file:				/etc/rsyslog.conf
	PID file:				/run/rsyslogd.pid
	Number of Bits in RainerScript integers: 64

今回のrsyslogのバージョンは8.2001.0となります。

Syslog 受信設定

以下のコマンドを実行し、Syslogの設定を行います。

~$ sudo vi /etc/rsyslog.conf

# /etc/rsyslog.conf configuration file for rsyslog
#
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf


#################
#### MODULES ####
#################

module(load="imuxsock") # provides support for local system logging
#module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception

########変更箇所########

module(load="imudp")    		 #→コメントを外す
input(type="imudp" port="514")   	 #→コメントを外す
$AllowedSender UDP, 192.168.100.0/24	  #→追記。Syslogを転送するネットワークを記載する。

########変更箇所########


# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")

# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")

###########################
#### GLOBAL DIRECTIVES ####
###########################

#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# Filter duplicated messages
$RepeatedMsgReduction on

#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

########変更箇所########
#$PrivDropToUser syslog		#→コメントアウト
#$PrivDropToGroup syslog	#→コメントアウト

$PrivDropToUser adm		#→追記。ファイルを書き込むための権限付与
$PrivDropToGroup adm		#→追記。ファイルを書き込むための権限付与
########変更箇所########

#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf



$template Syslog_tmp,"/var/log/syslog/%fromhost%/messages.log"		#→追記。転送されたSyslogを書き込むパスとフォーマットを定義。/var/log/syslog/ホスト名/messages.logに保存するテンプレート。
*.*     -?Syslog_tmp							#→追記。すべてのSyslogに対し、テンプレートのフォーマットを適用

この設定を行うと、Syslogが一カ所に集約されます。
また、以下のパスにファイルが存在する場合は、フォルダが作成できずにrsyslogサービスが正常起動しない場合があるため、以下のコマンドで事前に削除します。

~$ sudo rm -rf /var/log/syslog

以上の設定が完了したら、Syslogサービスを再起動し、正常に起動していることを確認します。

~$ sudo systemctl restart rsyslog
~$ sudo systemctl status rsyslog

● rsyslog.service - System Logging Service
     Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-11-23 00:46:57 UTC; 13h ago
TriggeredBy: ● syslog.socket
       Docs: man:rsyslogd(8)
             https://www.rsyslog.com/doc/
   Main PID: 1569 (rsyslogd)
      Tasks: 5 (limit: 4583)
     Memory: 3.2M
     CGroup: /system.slice/rsyslog.service
             mq1569 /usr/sbin/rsyslogd -n -iNONE

Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' suspended (module 'builtin:omfile'), retry 0. There should be messages before this one giving the reason for suspension. [v8.2001.0 try https://www.rsyslog.com/e/2007 ]
Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' resumed (module 'builtin:omfile') [v8.2001.0 try https://www.rsyslog.com/e/2359 ]
Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' suspended (module 'builtin:omfile'), retry 0. There should be messages before this one giving the reason for suspension. [v8.2001.0 try https://www.rsyslog.com/e/2007 ]
Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' resumed (module 'builtin:omfile') [v8.2001.0 try https://www.rsyslog.com/e/2359 ]
Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' suspended (module 'builtin:omfile'), retry 0. There should be messages before this one giving the reason for suspension. [v8.2001.0 try https://www.rsyslog.com/e/2007 ]
Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' resumed (module 'builtin:omfile') [v8.2001.0 try https://www.rsyslog.com/e/2359 ]
Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' suspended (module 'builtin:omfile'), retry 0. There should be messages before this one giving the reason for suspension. [v8.2001.0 try https://www.rsyslog.com/e/2007 ]
Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' resumed (module 'builtin:omfile') [v8.2001.0 try https://www.rsyslog.com/e/2359 ]
Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' suspended (module 'builtin:omfile'), retry 0. There should be messages before this one giving the reason for suspension. [v8.2001.0 try https://www.rsyslog.com/e/2007 ]
Nov 23 14:17:01 dev-syslog-srv rsyslogd[1569]: action 'action-3-builtin:omfile' suspended (module 'builtin:omfile'), next retry is Tue Nov 23 14:17:31 2021, retry nbr 0. There should be messages before this one giving the reason for suspension. [v8.2001.0 try https://www.rsyslog.com/e/2007 ]

また、正常に起動していてもエラーログが表示されている場合は、確認して原因を究明します。

本検証環境では、syslog起動時に2点ほどエラーが発生しました。

~$ sudo systemctl status rsyslog

● rsyslog.service - System Logging Service
     Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-11-23 00:35:28 UTC; 7s ago
TriggeredBy: ● syslog.socket
       Docs: man:rsyslogd(8)
             https://www.rsyslog.com/doc/
   Main PID: 1416 (rsyslogd)
      Tasks: 5 (limit: 4583)
     Memory: 2.8M
     CGroup: /system.slice/rsyslog.service
             mq1416 /usr/sbin/rsyslogd -n -iNONE

Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: Could not open dynamic file '/var/log/syslog/dev-syslog-srv/messages.log' [state -3000] - discarding message [v8.2001.0 try https://www.rsyslog.com/e/2207 ]
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: omfile: creating parent directories for file  '/var/log/syslog/dev-syslog-srv/messages.log' failed: Permission denied [v8.2001.0 try https://www.rsyslog.com/>
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: Could not open dynamic file '/var/log/syslog/dev-syslog-srv/messages.log' [state -3000] - discarding message [v8.2001.0 try https://www.rsyslog.com/e/2207 ]
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: omfile: creating parent directories for file  '/var/log/syslog/dev-syslog-srv/messages.log' failed: Permission denied [v8.2001.0 try https://www.rsyslog.com/>
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: Could not open dynamic file '/var/log/syslog/dev-syslog-srv/messages.log' [state -3000] - discarding message [v8.2001.0 try https://www.rsyslog.com/e/2207 ]
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: omfile: creating parent directories for file  '/var/log/syslog/dev-syslog-srv/messages.log' failed: Permission denied [v8.2001.0 try https://www.rsyslog.com/>
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: Could not open dynamic file '/var/log/syslog/dev-syslog-srv/messages.log' [state -3000] - discarding message [v8.2001.0 try https://www.rsyslog.com/e/2207 ]
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: omfile: creating parent directories for file  '/var/log/syslog/dev-syslog-srv/messages.log' failed: Permission denied [v8.2001.0 try https://www.rsyslog.com/>
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: Could not open dynamic file '/var/log/syslog/dev-syslog-srv/messages.log' [state -3000] - discarding message [v8.2001.0 try https://www.rsyslog.com/e/2207 ]
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: omfile: creating parent directories for file  '/var/log/syslog/dev-syslog-srv/messages.log' failed: Permission denied [v8.2001.0 try https://www.rsyslog.com/>
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: Could not open dynamic file '/var/log/syslog/dev-syslog-srv/messages.log' [state -3000] - discarding message [v8.2001.0 try https://www.rsyslog.com/e/2207 ]
Nov 23 00:35:35 dev-syslog-srv rsyslogd[1416]: error during config processing: omfile: creating parent directories for file  '/var/log/syslog/dev-syslog-srv/messages.log' failed: Permission denied [v8.2001.0 try https://www.rsyslog.com/>
lines 1-24/24 (END)...skipping...

1点目は[error during config processing: Could not open dynamic file]ということで、syslog.confに設定したsyslogファイルをオープンできないとのエラーです。
これは、検証時に誤って[/var/log/syslog]というファイルを作成してしまい、すでにファイルが存在しているため、フォルダが作成できずにfile openが失敗したとのことです。
この場合は、[/var/log/syslog]を削除することで解消できました。

2点目は、[Permission denied]のエラーです。
これは、Rsyslogdがファイルの作成権限がなく、ファイル作成に失敗しているエラーです。
syslog.confで記載した、

#$PrivDropToUser syslog		#→コメントアウト
#$PrivDropToGroup syslog	#→コメントアウト

の部分で権限が不足しているため、ファイル作成ができなかった模様です。
このファイル書き込み権限は[adm]権限に設定することで回避ができました。
ただし、本来は設定ファイル側の権限を上げるのではなく、書き込みを行うファイルやディレクトリの権限に適切なユーザを追加する。が正しい対処法だと思います。

Syslogクライアントの設定

Syslogサーバの設定が完了したため、Syslogクライアントの設定を行います。

Syslogクライアントは、「Syslogサーバに対し、Syslogを転送する」という設定を行うため、設定項目はSyslogサーバに比べ少ないです。


~$ cat /etc/rsyslog.d/50-default.conf

#  Default rules for rsyslog.
#
#                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files.  Log by facility.
#

########変更箇所########

*.*     @dev-syslog-srv.willserver.local:514		#[*.*]ですべてのログを転送対象に指定。[@dev-syslog-srv.willserver.local:514]で宛先を指定。

########変更箇所########
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
#daemon.*                       -/var/log/daemon.log
kern.*                          -/var/log/kern.log
#lpr.*                          -/var/log/lpr.log
mail.*                          -/var/log/mail.log
#user.*                         -/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info                      -/var/log/mail.info
#mail.warn                      -/var/log/mail.warn
mail.err                        /var/log/mail.err

#
# Some "catch-all" log files.
#
#*.=debug;\
#       auth,authpriv.none;\
#       news.none;mail.none     -/var/log/debug
#*.=info;*.=notice;*.=warn;\
#       auth,authpriv.none;\
#       cron,daemon.none;\
#       mail,news.none          -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg                         :omusrmsg:*

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#       news.=crit;news.=err;news.=notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       /dev/tty8

基本的には、1カ所変更するだけで設定が可能です。
また、転送プロトコルがUDPの場合は、宛先に記載する[@]が1つのみ。
TCPでSyslogサーバに転送する場合は、[@@]と2つ重ねます。(Syslogサーバの受信設定をTCPに設定する必要があります。)

Syslog受信確認

Syslogサーバ側でSyslogクライアントからSyslogが受信できているかを確認します。
はじめにSyslogディレクトリ配下にホスト名毎のディレクトリが作成されているかを確認します。

~$ ls /var/log/syslog/

dev-syslog-cli.willserver.local  dev-syslog-srv

tailコマンドで、[messages.log]の中身を確認し、正常にログが受信されファイルに書き込まれていることを確認します。

~$ tail /var/log/syslog/dev-syslog-cli.willserver.local/messages.log

Nov 23 15:05:54 dev-syslog-cli kernel: [53531.629011] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
Nov 23 15:10:54 dev-syslog-cli kernel: [53831.621517] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
Nov 23 15:15:54 dev-syslog-cli kernel: [54131.611358] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
Nov 23 15:15:54 dev-syslog-cli kernel: [54131.612716] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
Nov 23 15:17:01 dev-syslog-cli CRON[3741]: pam_unix(cron:session): session opened for user root by (uid=0)
Nov 23 15:17:01 dev-syslog-cli CRON[3742]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Nov 23 15:17:01 dev-syslog-cli CRON[3741]: pam_unix(cron:session): session closed for user root
Nov 23 15:20:54 dev-syslog-cli kernel: [54431.609040] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
Nov 23 15:20:54 dev-syslog-cli kernel: [54431.610218] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
Nov 23 15:25:54 dev-syslog-cli kernel: [54731.602617] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.

Syslogサーバ側にクライアントからのSyslogが転送されていることが確認できました。
Syslogサーバ構築の手順は以上です。

まとめ

今回は、Ubuntu Server 20.04でSyslogサーバを構築しました。
家にSyslogサーバが1台あれば、NW機器やVMware製品のログも収集することができます。
あとは、ログ解析のソフトウェアやZabbixのログ監視等で特定のログを収集→検知ができるようになると思います。

コメント

タイトルとURLをコピーしました