先月、Wifiルーターを入れ替えましたが、このWifiルーターはログ転送が出来るものでした。そこで、最近殆ど出番が無いRaspberry Pi 3B+(以降RasPi) をsyslogサーバにして、WifiルーターのログをRasPiに保存してみることにします。
syslogサーバにログを転送することで、Wifiルーターのログは10000行までだった。とか、メモリ上に記録するため電源が落ちたタイミングでクリアされちゃった。等の不測の状況からログを守る事が出来ます。
ざっくり検証用の内容となっています。実際に現場で使う場合は、他のセキュリティ対策も必ず行なってからご利用ください。
RasPi環境準備
以下の環境で確認しました。
- RasPi 3B+
- USBメモリ起動
- Ubuntu Server 20.04 LTS
Raspberry Pi Imager で起動USBを作成する
いつもの通り、Raspberry Pi Imagerを使ってOSイメージを作って行こうとしましたが。。。
ああ。そうでした。Ubuntuではエラーが出るのを忘れていました。(USBメモリによってはエラーにならないものもあるようです。)
balenaEtcherで起動USBを作成する
balenaEtcherはUbuntuの起動USBが作成出来ます。まずはUbuntu 20.04.2 for Raspberry Pi をダウンロードしておきます。
balenaEtcherを起動して、ダウンロードしたOS、インストール先USBを指定して、Flash!をクリックします。
無事完成です。
USB起動
作成したUSBメモリでRasPiを起動しましょう。
初回ログイン時は、ユーザ:ubuntu、パスワード:ubuntuでログインが出来ます。ログイン時にパスワード変更が求められるので複雑なパスワードに変更します。
ファイアウォールの設定(ufw)
とりあえずufwの設定をしておきます。sshなどを使う方はルールを適時追加してください。
sudo ufw disable
sudo ufw default deny
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 514
sudo ufw allow proto udp from 192.168.1.0/24 to any port 514
sudo ufw enable
rsyslogのセットアップ
ようやく本題のsyslogサーバのセットアップを行なっていきます。syslogサーバとして、rsyslogを使いました。
rsyslogインストール
sudo apt-get install rsyslog -y
バージョン確認
$ rsyslogd -v
rsyslogd 8.2001.0 (aka 2020.01) compiled with:
PLATFORM: aarch64-unknown-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
See https://www.rsyslog.com for more information.
状態確認
$systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-02-08 11:48:06 UTC; 1min 39s ago
TriggeredBy: ● syslog.socket
Docs: man:rsyslogd(8)
https://www.rsyslog.com/doc/
Main PID: 3778 (rsyslogd)
Tasks: 4 (limit: 974)
CGroup: /system.slice/rsyslog.service
└─3778 /usr/sbin/rsyslogd -n -iNONE
systemd[1]: Starting System Logging Service...
rsyslogd[3778]: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from s>
systemd[1]: Started System Logging Service.
rsyslogd[3778]: rsyslogd's groupid changed to 110
rsyslogd[3778]: rsyslogd's userid changed to 104
ubuntu rsyslogd[3778]: [origin software="rsyslogd" swVersion="8.2001.0" x-pid="3778" x-info="http>
lines 1-17/17 (END)
設定の編集
/etc/rsyslog.confに設定を行います。オリジナルのファイルはバックアップしておきましょう。
sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.org
sudo vim /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")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
# allowed
$AllowedSender UDP, 127.0.0.1, 192.168.1.0/24
$AllowedSender TCP, 127.0.0.1, 192.168.1.0/24
# 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
#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog
#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
# logs
$template ClinetMessage,"/var/log/rsyslog/%fromhost%/messages.log"
*.* -?ClinetMessage
変更箇所は、MODULESのコメントを外す、$AllowSenderの追記、$template の追記になります。
(左が変更後、右が変更前です)
rsyslog.confの編集が終わったらrsyslogを再起動します。
$ sudo systemctl restart rsyslog
動作確認
rsyslogのステータスにエラーが表示されていなければOK です。
$ systemctl status rsyslog
あとはクライアント側(wifiルーター、PCなど)にログ転送を仕込んで完成です。
正常に動作した場合、var/log/rsyslog/配下に、クライアント側のログが転送されているのが確認出来ると思います。
うまく行かない場合
ログが転送されて来ない場合は、以下をご参考にしてみてください。
- ファイアウォールの確認
- UFWを一時的に停止し、ログが転送されるかどうか切り分ける
- UFWのログを参照し、転送されたログがブロックされていないこと
- rsyslogの確認
- systemctl status rsyslogに何かエラーが含まれているかどうか
- /etc/rsyslog.confの編集内容の確認
- クライアント側の確認
- 設定の見直し。転送先IPの確認など。