配置 syslogd 以接受 OS X Mountain Lion 上的远程连接并为其分配一个类别

Kai*_*lls 5 networking mac syslog osx-mountain-lion macos

从Stack Exchange 上的另一个线程中,我发现在 Lion 或 Mountain Lion 上启用 syslogd 以接受传入连接非常容易。

cd /System/Library/LaunchDaemons
sudo /usr/libexec/PlistBuddy -c "add :Sockets:NetworkListener dict" com.apple.syslogd.plist
sudo /usr/libexec/PlistBuddy -c "add :Sockets:NetworkListener:SockServiceName string syslog" com.apple.syslogd.plist
sudo /usr/libexec/PlistBuddy -c "add :Sockets:NetworkListener:SockType string dgram" com.apple.syslogd.plist
sudo launchctl unload com.apple.syslogd.plist
sudo launchctl load com.apple.syslogd.plist
Run Code Online (Sandbox Code Playgroud)

然而,我遇到的问题是,当我的路由器向 syslogd 发送消息时,它们出现在 OS X 的控制台中,因为它们来自未知 - 例如:

5/3/13 9:19:40.000 AM Unknown[-1]: [WAN-IN-6-A]IN=eth2 OUT=eth0 SRC=141.133.142.260 DST=10.0.00.10 LEN=64 TOS=0x00 PREC=0x00 TTL=53 ID=30298 DF PROTO=TCP SPT=60553 DPT=443 WINDOW=65535 RES=0x00 SYN URGP=0 
Run Code Online (Sandbox Code Playgroud)

而来自本地机器的日志消息指定了发件人:5/3/13 7:38:20.155 AM kdc[67]: LKDC 引用真实的 LKDC 领域名称

在远程日志主机上运行 tcpdump 显示正在发送的消息比控制台中显示的信息多:

    router.example.com.38236 > server.example.com.syslog: SYSLOG, length: 258
Facility kernel (0), Severity warning (4)
Msg: May  3 09:12:39 router kernel: [WAN-LOCAL-default-D]IN=eth2 OUT= MAC=dc:ca:fe:ba:be:17:00:21:a0:ce:66:d9:07:00 SRC=86.86.123.381 DST=130.168.365.128 LEN=60 TOS=0x00 PREC=0x00 TTL=39 ID=26555 DF PROTO=TCP SPT=46635 DPT=62615 WINDOW=5840 RES=0x00 SYN URGP=0 
Run Code Online (Sandbox Code Playgroud)

09:12:45.557613 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 286)

谁能指导我如何在 OS X Mountain Lion 服务器上配置 syslog 以识别传入日志消息中的发件人并对其进行适当分类?

hmi*_*ees 1

我想对于 OP 来说已经太晚了,但我可以报告一下我最近使用 OS X 10.10 Yosemite 的体验。

看起来您无法在 OS X 中配置 syslogd 来直接识别发件人。事实上,一旦日志消息被接收到ASL(Apple系统日志)中,识别它们的唯一方法是因为它们有一些无意义的键:PID是0xFFFFFFFF+1,GID和UID是0xFFFFFFFF+2。当然,该异常允许您间接识别 UDP 消息,因此您可以直接获取具有此类密钥的消息。但您仍然无法区分来自 2 个不同 UDP 源的日志消息。

我们能否在这些消息进入 ASL 之前对其进行一些处理?我没有找到任何方法,我认为没有可能,因为syslogd/ASL中的调试模式显示消息解析已经由ASL函数完成。

请注意,我使用 DD-WRT 路由器(Linux)作为 UDP 系统日志源进行测试,并且我没有尝试直接检查 UDP 数据包的内容;因此问题可能出在 DD-WRT 发送格式错误的数据包上。...虽然我对此表示怀疑。

另外,我想说 OS X 的 syslogd/ASL 相当复杂且有错误(我已经发送了错误报告)。所以我建议传递它们并尝试 syslog-ng。这将是我的下一步。

如果您仍然想尝试使用 OS X 的 syslogd,我在我的博客中写了整个设置,包括如何将所有 UDP 传入消息转储到它们自己的自动旋转日志文件中。