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/messages
xdr.conf
tcpdump
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")