rsyslog가 제대로 작동하지 않는 이유는 무엇입니까?

rsyslog가 제대로 작동하지 않는 이유는 무엇입니까?

rsyslog는 /var/log/messages아래 설명된 대로 외부 syslog 수집기에 메시지를 보낼 수 없습니다.

AWS EC2 RHEL 7 인스턴스와 로컬 RHEL 7 인스턴스가 있습니다. 모두 최소 설치, 표준 AMI 등입니다. 외부 시스템 로그 수집기에 로깅을 보내기 위한 파일을 rsyslog추가하는 것을 제외하고는 구성이 기본값입니다 . 로컬 인스턴스는 시스템 로그를 로컬 수집기로 보냅니다. AWS 인스턴스는 이를 EC2 기반 수집기로 보냅니다. 두 수집기 모두 동일한 구성에서 동일한 소프트웨어를 실행하고, 다른 소스로부터 이벤트를 수신하며, 그 외에는 정상적으로 작동합니다..conf/etc/rsyslog.d/

/etc/rsyslog.conf두 인스턴스 간에 동일합니다. 주석 처리되지 않은 줄은 다음과 같습니다.

# 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

또한 이 두 가지 경우에는 다음과 같습니다 /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로컬 서버 모두에 전달됩니다. 로컬 서버는 이 두 위치에 메시지를 전달할 수 없습니다.

로컬 서버에서 서비스 이름을 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")

관련 정보