rsyslogが正しく動作しないのはなぜですか?

rsyslogが正しく動作しないのはなぜですか?

rsyslogは、/var/log/messages以下に説明するように外部syslogコレクタにメッセージを送信できません。

AWS EC2 RHEL 7 インスタンスとローカル RHEL 7 インスタンスがあります。すべて最小インストール、標準AMIなどです。外部システムログコレクタにログを送信するためのファイルを追加するrsyslogことを除いて、設定はデフォルトです。ローカルインスタンスはシステムログをローカルコレクタに送信します。 AWSインスタンスはそれをEC2ベースのコレクタに送信します。両方のコレクタは同じ構成で同じソフトウェアを実行し、異なるソースからイベントを受信し、それ以外は正常に動作します。.conf/etc/rsyslog.d/

/etc/rsyslog.conf2つのインスタンス間で同じです。コメントアウトされていない行は次のとおりです。

# grep -v "^#\|^$" /etc/rsyslog.conf
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.*;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

クラウドインスタンスに追加/etc/rsyslog.d/21-cloudinit.conf:

# Log cloudinit generated log messages to file
:syslogtag, isequal, "[CLOUDINIT]" /var/log/cloud-init.log

# comment out the following line to allow CLOUDINIT messages through.
# Doing so means you'll also get CLOUDINIT messages in /var/log/syslog
& stop

また、これら2つのケースでは次のようになります/etc/rsyslog.d/listen.conf

# cat /etc/rsyslog.d/listen.conf
$SystemLogSocketName /run/systemd/journal/syslog

両方のインスタンスに追加されました/etc/rsylog.d/xdr.conf。これは、syslog メッセージの宛先によって異なります。下記をご覧ください。

クラウドインスタンス:

# cat /proc/version
Linux version 3.10.0-1160.62.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Mar 23 09:04:02 UTC 2022

# yum list installed | grep rsyslog
rsyslog.x86_64               8.24.0-57.el7_9.2 @rhel-7-server-rhui-rpms

# cat /etc/rsyslog.d/xdr.conf
# Forward all log messages to Taegis XDR
# AWS Collector
*.*    @@aws-v-xxxxxx-xxxxxx-xxxxxxxxxxxxx.elb.us-east-1.amazonaws.com:601

# On-Prem Collector
#*.*    @@scwx-collector.xxx.local:601

ローカルインスタンス:

# cat /proc/version
Linux version 3.10.0-1160.62.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Mar 23 09:04:02 UTC 2022

# yum list installed | grep rsyslog
rsyslog.x86_64                    8.24.0-57.el7_9.2          @rhel-7-server-rpms

# cat /etc/rsyslog.d/xdr.conf
# Forward all log messages to Taegis XDR
# AWS Collector
#*.*    @@aws-v-xxxxxx-xxxxxx-xxxxxxxxxxxxx.elb.us-east-1.amazonaws.com:601

# On-Prem Collector
*.*    @@scwx-collector.xxx.local:601

にリストされているエンドポイントは、xdr.confポート601のすべてのインスタンスからアクセスできます。telnetクイックセッションを通じて独立して確認しました。

# telnet scwx-collector.xxx.local 601
Trying 10.100.11.37...
Connected to scwx-collector.xxx.local.
Escape character is '^]'.

# telnet aws-v-xxxxxx-xxxxxx-xxxxxxxxxxxxx.elb.us-east-1.amazonaws.com 601
Trying 10.200.2.89...
Connected to aws-v-xxxxxx-xxxxxx-xxxxxxxxxxxxx.elb.us-east-1.amazonaws.com.
Escape character is '^]'.

AWS インスタンスが正常に実行されています。 Syslog メッセージはコレクタと/var/log/messagesローカルサーバの両方に転送されます。ローカルサーバーはこれら2つの場所にメッセージを転送できません。

ローカルサーバーでサービスの名前をxdr.conf変更してxdr.conf.bak再起動すると、すぐに入力が開始されます。有効にすると空になり、アイテムは表示されなくなります。外部syslogコレクタは、受信したイベントまたはsyslogエンドポイント間で送信されたパケットを表示しません。rsyslog/var/log/messagesxdr.conftcpdump

rsyslogが/var/log/messages外部コレクタにメッセージを送信しないのはなぜですか?唯一の違いは、メッセージを送信するエンドポイントです。私が知っている限り、すべてのエンドポイントにアクセスでき、正しく機能しています。 syslog コレクタのエンドポイントも同じ設定です。どちらのオペレーティングシステムも同じで、rsyslogのバージョンも同じです。この問題をさらに解決するにはどうすればよいですか?

ベストアンサー1

結局、これがSELinuxによる問題であることがわかりました。

SELinuxがファイルへのアクセスを拒否したことがわかりました/etc/rsyslog.d/xdr.conf。さらに調査すると、次のような結果が表示されます。

[root@x rsyslog.d]# ls -Z
-rw-r--r--. root root system_u:object_r:syslog_conf_t:s0 listen.conf
-rw-r--r--. root root unconfined_u:object_r:syslog_conf_t:s0 test.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 xdr.conf
-rw-r--r--. root root unconfined_u:object_r:syslog_conf_t:s0 xdr.orig

xdr.confファイルに無効なコンテキストが適用されていることがわかりました。ただし、xdr.confにコピーすると、xdr.orig正しいコンテキストが適用されることがわかります。

以下を実行してrestorecon -Rv /etc/rsyslog.dコンテキストをリセットしたことがわかりました。

[root@x rsyslog.d]# restorecon -Rv /etc/rsyslog.d
restorecon reset /etc/rsyslog.d/xdr.conf context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:syslog_conf_t:s0

psftpを介してそのフォルダxdr.confにファイルをアップロードし/rootます/etc/rsyslog.d。 AWSインスタンスでは、SSMを使用してファイルをインスタンスにプッシュしましたが、この場合は正しいコンテキストを受け取ったようです。restoreconコンテキストを修正し、問題を修正しました。

調査中、私は古い設定を使用していることに気づき、次のように設定を更新しました。

# Forward all log messages to Taegis XDR
# AWS Collector
#*.*     action(type="omfwd" target="aws-v-xxxxxx-xxxxxx-xxxxxxxxxxxxx.elb.us-east-1.amazonaws.com" port="601" protocol="tcp"
                action.resumeRetryCount="-1"
                queue.type="linkedList" queue.size="10000")

# On-Prem Collector
*.*     action(type="omfwd" target="scwx-collector.xxx.local" port="601" protocol="tcp"
                action.resumeRetryCount="-1"
                queue.type="linkedList" queue.size="10000")

おすすめ記事