rsyslogでリモートロギング
複数のLinuxマシンのログをまとめて保管しておきたい場合に、rsyslogを用いることで追加のミドルウェア導入なしにログの一元管理が可能になることを確認する。
環境
CentOS 8 * 2(rsyslog clientとrsyslog server)
rsyslog: OSインストール時に標準でインストール済み
概略図
rsyslogの動作確認
rsyslogが動作していることを確認(Activeの項目がactiveになっている)
[root@base ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-30 22:53:07 KST; 2min 54s ago
rsyslogが動作していればjournalctlコマンドでログが確認できる
journalctl --no-pager
rsyslogの設定(rsyslogサーバ側 (ログ受信側))
rsyslogの設定ファイルを開きいくつか修正を加える
vi /etc/rsyslog.conf
TCPプロトコルで514ポートからログの入力を受け付ける設定が、コメントで記載されているのでコメントを外す
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514"
接続元のCIDRを下記のように指定
AllowedSender TCP, 127.0.0.1, 192.168.1.0/24,10.240.0.0/24
設定を反映
systemctl restart rsyslog
nmapを用いて514ポートが空いたことを確認する
[root@base ~]# nmap localhost
PORT STATE SERVICE
~略
514/tcp open shell
もちろんssやnetstatで確認してもいい
他サーバからリモートで確認することもあるため、nmapを利用している
[root@base ~]# ss -ln4 | grep 514
tcp LISTEN 0 25 0.0.0.0:514 0.0.0.0:*
rsyslogの設定(rsyslogクライアント側 (ログ送信側))
rsyslogの設定ファイルを編集する
vi /etc/rsyslog.conf
試しにauthprivファシリティ関連のログを、rsyslogサーバに送付するよう編集する
もともと/var/log/secureに出力しているログが、rsyslogに送信されることになる(sshのログとか)
ここで、rsyslogサーバのIPは10.240.0.1としている
authpriv.* @@10.240.0.1:514
設定を反映させる
systemctl restart rsyslog
サーバ側でログを確認
tailコマンドなどで、サーバ側の/var/log/secureに出力されるログを監視してみます
[root@base ~]# tail -f /var/log/secure
クライアント側にて、authpriv関連の適当なコマンドを叩いてみます
とりあえず架空のユーザでsshアクセスを試行し、authpriv関連ログを出力させます。
[root@controller-0 ~]# ssh testuser@localhost
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
サーバ側のterminalに戻り、ログが下記のように出力されていれば成功です
[root@base ~]# tail -f /var/log/secure
Apr 30 05:22:28 controller-0 sshd[5859]: Invalid user testuser from ::1 port 44604
Apr 30 05:22:28 controller-0 sshd[5859]: input_userauth_request: invalid user testuser [preauth]
Apr 30 05:22:28 controller-0 sshd[5859]: Connection closed by ::1 port 44604 [preauth]
もちろんjournalctlコマンドを用いると、より詳細な情報を確認できます
例えば、出力元のホスト名(ここではcontroller-0)なども出力されています。
Apr 30 05:22:28 controller-0 sshd[5859]: Invalid user testuser from ::1 port 44604
Apr 30 05:22:28 controller-0 sshd[5859]: input_userauth_request: invalid user testuser [preauth]
Apr 30 05:22:28 controller-0 sshd[5859]: Connection closed by ::1 port 44604 [preauth]