はじめに
この記事は、rsyslogによるログのTCP転送について記載しています。
rsyslogでのTLS(SSL)によるセキュアな送受信に関連している記事になります。
検証環境は CentOS8 と Ubuntu(18.04)です。
- syslog送信側(クライアント):CentOS(rsyslog version 8.37.0)
- syslog受信側(サーバー):Ubuntu(rsyslog version 8.32.0)
受信側(サーバー)の設定
受信側であるUbuntuのrsyslogの設定を行います。
$ sudo nano /etc/rsyslog.conf
module(load="imtcp")
input(type="imtcp" port="514")
TCPで受信するために、"imtcp"というモジュールを読み込み、input で使用可能にします。ポートはデフォルトのままの514を使用します。(コメントを外すだけ)
旧設定の場合
こちらの設定でも受信は可能ですが、現時点では選ぶメリットはあまり無いでしょう。
2020年04月01日追記:
この旧設定ですが、obsolete legacy ということで使用しないよう推奨されています。
詳しくはこちらをご覧ください。
Configuration Formats
https://www.rsyslog.com/doc/v8-stable/configuration/conf_formats.html
$ModLoad imtcp
$InputTCPServerRun 514
設定を保存後、rsyslogサービスを再起動します。
$ sudo systemctl restart rsyslog.service
再起動後は問題が発生していないか確認しておきましょう。
$ sudo systemctl status rsyslog.service
送信側(クライアント)の設定
送信側であるCentOSのrsyslogの設定を行います。
$ sudo nano /etc/rsyslog.conf
*.* とすることで全てのログを転送対象とします。ドット[.] の前がFacility(ファシリティ)、後のことをSeverity(シビアリティ)と言い、転送する対象を限定したい場合は適宜設定してください。
受信側のIPやホスト名に@@ を二つ付けることでTCP転送になります。@が一つだとUDP転送です。
ポート番号を変更した場合は、:(コロン) で設定できます。
*.* @@[受信側のIPアドレスやホスト名]
*.* @@[受信側のIPアドレスやホスト名]:[ポート番号]
検証環境では、UbuntuのIPは 192.168.0.13 でポート番号をデフォルトなので、次のように設定しました。
設定を保存後、rsyslogサービスを再起動します。
$ sudo systemctl restart rsyslog.service
syslog転送が出来ていることの確認
送信側でログを発生させて無事に転送されることを確認します。
$ logger Hello
Ubuntuの場合、デフォルトでは /var/log/syslog にログが保存される設定になっているので、そちらを確認します。
$ tail /var/log/syslog | grep Hello
無事に転送できていることが確認できれば成功です。
余談ですが、デフォルトでUbuntuのログが /var/log/syslog に保存されるのは、rsyslogのconfigファイル"50-default.conf"にその設定があるからです。同じくCentOSでは /var/log/messages になるのもrsyslogで設定されているからです。
転送ログが確認できない時は、こちらの設定の確認もしてみてください。
セキュリティ対策が必要
現状はただログを転送している状態ですから、経路のパケットを覗かれると中身が確認できる状態になっています。これは良くない状況です。
次は、暗号化をしていきたいと思います。
参考
Syslog について。ファシリティ/シビアリティ/プライオリティの違い
https://turningp.jp/network_and_security/syslog-introduction
Configuration Formats
https://www.rsyslog.com/doc/v8stable/configuration/conf_formats.html