自宅のネットワーク機器のログを Ubuntu Server の syslogサーバーに転送します。
これはネットワークエンジニアの領分かも知れませんが、ログ集約という観点からサーバーエンジニアも関係する事もありますので、簡単だしチョロリとやってみようかと。
ルーターやスイッチングハブといったネットワーク機器・外付けストレージ装置などは、システム構築には欠かせないハードウェアです。
こういった機器も最近では半ばコンピューターみたいなもので、中ではソフトウェア的な動作を色々としています。
ハイエンド製品ではその動作ログを記録できるものがほとんどで、WEBベースの管理画面で参照できるようになっています。
ただログ記録専用のストレージを持つものは少なく、ある程度のサイズまで内部のメモリに格納していて、足りなくなると古いのから消していく仕様になっています。
もしかすると最近は SDカードや SSDを搭載できて、そこに延々と記録できる製品も出てきているかも知れませんけど、伝統的(?)に syslogサーバーにログデータを送信する機能を持っていると思います。
一昔前ならハイエンド製品にしか入っていなかった syslogサーバーへの転送機能は、家庭用のネットワーク機器にも載ってくるようになりました。
ここでは、ネットワークに繋がっているこれらの機器からログデータを syslogサーバーに送ってログファイルに記録をします。
ハイエンドなプロ用製品でも家庭用製品でも仕組みは同じですので、家にあるネットワーク機器でこの機能を試すことで仕事現場でも応用できるはずです。
環境は以下でやります。
我が家の機器を調べた所、NTTの光ルーターには残念ながら syslog機能がありませんでしたが、BUFFALOの Wifiルーターにありました。
syslogサーバーには仮想OSとして作った、Ubuntu Server 22.04.3を使います。
Ubuntu Serverにはデフォルトで「rsyslogd」という syslogサーバーの常駐プロセスが動いていますので、特に新規でのインストールは必要ありません。
また、昨今の Linux OSであれば、どれでも rsyslogdは動いているでしょうから、Ubuntu Serverに限らず同じ手順でやれると思います。
最近の流れで syslog系のデーモンは無くなっていく流れと聞いていますので、いつかは無くなってしまうのかも知れませんが、まだ何年かは syslogの出番は無くならないでしょう。
上記 Amazon Linux 2023も rsyslogdのインストールはされているようです。
ではでは。
1.rsyslogdをネットワークに開放する
Ubuntu serverでの作業です。
他の Linux OSも同じと思いますが、少なくとも Ubuntu Serverの rsyslogdのデフォルト設定ではネットワークに開かれていません。
rsyslogdの設定ファイル [/etc/rsyslogd.conf] を変更して、ネットワーク経由で飛んでくるログデータを受けるようにします。
[/etc/rsyslogd.conf]
# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")
↓
# provides UDP syslog reception
module(load="imudp") ← コメントアウトの[#]を消して有効にしています。
input(type="imudp" port="514") ← コメントアウトの[#]を消して有効にしています。
これで [514/udp] で待ち受けます。
ポートの番号を変えても動きますが、クライアント側でポートを変えられない場合もありますので(私の Wifiルーターはそうでした)、とりあえずこのままに。
設定を有効にするため、rsyslogdを再起動します。
subro@UbuntuServer2204-3:~$ sudo systemctl restart rsyslog
何も出ませんが、再起動しています。
これだけで rsyslogd側は OKです。
2.機器に syslogサーバーの IPアドレスを設定する
個々の機器で違うので、あくまで例になってしまいますが、どこのお家のものでもこんな設定箇所があると思いますので、探してみて下さい。
これが私の家の BUFFALOの Wifiルーターでの設定画面です。
[192.168.1.113] が syslogサーバーたる Ubuntu Serverの IPアドレスです。
ポートに関しては変更や tcpの利用はできません。
3.ログファイル確認
ログファイルの出力先について rsyslogdの設定に変更を加えていない場合は、
[/var/log/syslog]ファイルに出力されます。
[/var/log/syslog]の抜粋
Sep 18 16:19:11 UbuntuServer2204-3 rsyslogd: [origin software="rsyslogd" swVersion="8.2112.0" x-pid="1591" x-info="https://www.rsyslog.com"] start
Sep 18 16:25:01 UbuntuServer2204-3 CRON[1612]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Sep 18 16:34:29 192.168.1.250 [xx:xx:xx:xx:xx:xx] XXXXXXXXXXXXXX : NAT: cleanup /proc/net/netfilter/nf_conntrack_flush
Sep 18 16:35:01 UbuntuServer2204-3 CRON[1639]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Sep 18 16:38:23 UbuntuServer2204-3 kernel: [ 4890.996280] perf: interrupt took too long (4458 > 4210), lowering kernel.perf_event_max_sample_rate to 44750
ピンク行が Wifiルーターのログで、他は Ubuntu Server自身のログです。
Wifiルーターはマシン名を持ってないから、マシン名の箇所に IPアドレスを入れてきていますね。
(MACアドレス・他は私が隠しているだけで、本物にはちゃんと入っています。)
4.おまけ
この設定では、送信元の syslogクライアントが何者でもログデータを受け取ってしまって良くありません。
OSのファイアウオール機能などで、特定の IPアドレスからのみ [512/udp] に繋がるよう制限するべきです。
Ubuntu Serverでは「Ubuntuでもファイアウォール」に、
RHEL系では「Rocky Linux ファイアウォール」に、
それぞれ書いていますのでご参考に。
==========
これを職場の環境に応用すると、複数のネットワーク機器やストレージ機器のログを一箇所に纏めることができます。
一箇所に纏められるということは、ログ監視をする手間が減るという事になりますね。
一般的にはこういった機器の状態監視は SNMPでやりますが、「もっと細かい監視をしたい。ログを見れば分かるんだけど…」って場合は、こうして集めてやると良いです。
ここでは記載しませんが、rsyslogdはログ内容によってログファイルを別にしたり、メール送信につなげるとかできます。
rsyslogdは設定がチョイ難しいながら、結構高機能なので監視には何かと使えると思いますよ。
rsyslogって言ったらこの本しかないんですが、もう電子書籍でしか手に入らなくなってしまったか…。
ブッ●オ●で見つけたら買っておこう…。
いずれはこういう方向へ利用していくことになりますけど、こういう本当に役に立つ本って人気がないのよね…