Wi-FiルータのログをRaspberry Piに記録するには

おうちのWi-Fiルータのログを見ますと。

結構、外部からの攻撃が遮断されていることがわかります。上図でもIPv6のUDPパケットが2つブロックされています。

またネットワークのトラブルの際、ルータのログを見ると、原因を切り分けるのにとても役立ちますが。ルータの電源を切ると、ログも消えたりするため、実用性が低いと思います。

ログが消えないように、ルータのログをRaspberry Piに転送、Raspberry Pi側に保存する設定を記録させて頂こうと思います。


Raspberry Pi OSのrsyslogdリモートロギング設定

というわけで、Raspberry Piにrsyslogdをインストールして、リモートロギングが可能になるように設定します。またログが大きくなりすぎないように、logrotatedでローテートする設定も行います。

Wi-Fiルータのログ転送設定

まずは、Wi-Fiルータの設定を変更して、ログをRaspberry Piへ転送するように設定しておきます。syslogサーバにRaspberry PiのIPアドレスを設定します。

ルータの機種によって、ファシリティ(local0~local10)を設定できる機種もありますが、使用しません。テンプレートを使用して、ログの送信側のホスト名/IPアドレスごとにログファイルを分けるようにしますので、ファシリティは気にする必要ありません。


rsyslogd設定

rsyslogインストール

rsyslogdですが、Raspberry Pi OSの場合は、最初からインストールされているようです。

sudo apt install -y rsyslog

リモートロギング用のrsyslog設定ファイル作成

また/etc/rsyslog.d/*.confファイルが既定で有効のため。

設定ファイルは、/etc/rsyslog.d/ディレクトリ内に作成しようと思います。

ずばり。次の内容になります。

cat << EOF | sudo tee /etc/rsyslog.d/01_incoming.conf
# enable UDP
module(load="imudp")
input(type="imudp" port="514")

# enable TCP
module(load="imtcp")
input(type="imtcp" port="514")

# template for remote-iincoming-logs
\$template remote-incoming-logs, "/var/log/remote/%HOSTNAME%"

*.* ?remote-incoming-logs
:fromhost-ip, !isequal, "127.0.0.1" -?remote-incoming-logs
&stop
EOF

ざっと次のような内容です。

  1. UDPとTCPのポート番号514によるロギングを有効化
  2. /var/log/remote/ディレクトリ内に、ホスト名のファイルを作成するテンプレート
  3. ローカルホスト以外のログはテンプレートを適用して処理を停止
    • *.*はすべてのファシリティ.プライオリティの意味
  4. ローカルホストのログは引き続き処理を続行

rsyslogd再起動

rsyslogdを再起動して設定を反映します。

sudo systemctl restart rsyslog.service
sudo systemctl status.rsyslog.service

リモートログは、/var/log/remoteディレクトリに、ホスト名のファイルができるように設定しました。

ルータにログインしてみて、このような感じでルータのホスト名のログが作成されればOKです。

もしもログを外付けストレージ等に保存したい場合は、rsyslog設定のテンプレートを変更すれば、任意のディレクトリに保存が可能です。


logrotate設定

記録したリモートログが大きくなりすぎないように、ローテート設定を行おうと思います。

logrotateインストール

sudo apt install -y logrotate

logrotateも既定でインストールされているかと思います。

リモートロギング用のlogrotate設定ファイル作成

/etc/logrotate.dディレクトリが有効のため、こちらに設定ファイルを作成しようと思います。

cat << EOF |sudo tee /etc/logrotate.d/01_incoming.conf
/var/log/remote/* {
  weekly
  rotate -1
  create
}
EOF

次の内容になります

  1. 週ごとにログを分ける
  2. ログは無限に保存(-1)
    • 0に設定すると毎週消去
    • たとえば5にすれば5週保存
  3. ローテート時に空のファイルを作成
  4. 圧縮は特に設定なし

ローテートの設定確認

logrotatedを再起動後、デバッグオプションでlogrotateを実行して設定を確認します。

sudo systemctl restart logrotate.service
sudo systemctl status logrotate.service
logrotate -d -v /etc/logrotate.d/01_incoming.conf

/var/log/remoteディレクトリ内にあるファイルを認識して、ファイル個別にローテートを行うことが確認できました。


ログを残すデバイスとしては、ルータやWi-Fiアクセスポイント、スイッチ等のネットワーク機器が多い感じでしょうか。

今回はRaspberry Piにリモートログを残すように設定しましたが、ネットワーク機器のログは、どこかに集約して記録したほうが、何かネットワークのトラブルが発生したとき、解析が楽に進むと思います。

というのも、ネットワーク機器本体に保存したログは消える場合があったり、そもそもネットワークトラブル時は、ログが転送できなくなったりして、ログの扱いに影響が及ぶためです。

そのような理由から、Raspberry Piにログを残すのは大変良い管理方法だと思います。

またrsyslogの設定ファイルに、@(UDP)や@@(TCP)によるログの再転送設定を行えば、2重・3重のログ保存が可能になります。

ログの内容も、様々な情報が含まれているため、見ていて勉強になります。

よろしければ設定してみて下さい。

スポンサーリンク

フォローする

スポンサーリンク