我想要将特定于用户的 ssh 和以下 sftp 会话记录到文件名中包含用户名的文件中:
我有这个:
Jan 8 13:43:38 mx1 sshd[84622]: Connection from 17x.xx.xx.xx port 50512 on 199.xx.xx.xx port 2222 rdomain "0"
Jan 8 13:43:39 mx1 sshd[84622]: Accepted key ED25519 SHA256:z6YhMPFiis6PAHg6XaWDj3Yyq4HqRCqv2SjXIP259EI found at /sites/users/<user>/home/<user>/.ssh/authorized_keys:1
Jan 8 13:43:39 mx1 sshd[84622]: Postponed publickey for <user> from 17x.xx.xx.xx port 50512 ssh2 [preauth]
Jan 8 13:43:39 mx1 sshd[84622]: Accepted key ED25519 SHA256:z6YhMPFiis6PAHg6XaWDj3Yyq4HqRCqv2SjXIP259EI found at /sites/users/<user>/home/<user>/.ssh/authorized_keys:1
Jan 8 13:43:39 mx1 sshd[84622]: Accepted publickey for <user> from 17x.xx.xx.xx port 50512 ssh2: ED25519 SHA256:z6YhMPFiis6PAHg6XaWDj3Yyq4HqRCqv2SjXIP259EI
Jan 8 13:43:39 mx1 sshd[84622]: User child is on pid 12325
Jan 8 13:43:39 mx1 sshd[12325]: Changed root directory to "/sites/users/<user>"
Jan 8 13:43:39 mx1 sshd[12325]: Starting session: forced-command (config) 'internal-sftp -u 0002 -l INFO' for <user> from 17x.xx.xx.xx port 50512 id 0
Jan 8 13:43:39 mx1 internal-sftp[9660]: session opened for local user <user> from [17x.xx.xx.xx]
Jan 8 13:43:42 mx1 internal-sftp[9660]: session closed for local user <user> from [17x.xx.xx.xx]
Jan 8 13:43:42 mx1 sshd[12325]: Close session: user <user> from 17x.xx.xx.xx port 50512 id 0
因此,IMO 日志记录应匹配第一行“连接来自”,记住 IP,然后等待“接受的公钥”行并从第一行匹配 IP。然后等待“用户子级在 pid 上”并记住 PID,然后匹配具有 PID 的行。然后等待具有先前匹配和 IP 的“内部 sftp”行并记住 sftp 会话的 PID,匹配所有 SFTP PID 行。最后,如果用户匹配,则“关闭会话:”。
至少可以使用 rsyslog 或 syslog-ng 来实现吗?
答案1
我的理解是,您有一组日志数据,并且想要对这些数据进行事件关联?首先,您处理的日志数据是非结构化的,即“从 17x.xx.xx.xx 端口 50512 到 199.xx.xx.xx 端口 2222 rdomain 的连接“0”“。虽然这对于人类读者来说是有意义的,但它不是结构化的,当你使用其他工具来处理这些数据时会是一个挑战。
该消息中的结构化数据示例如下:
$sourcePort=50512
sourceIP=17x.xx.xx.xx
等等。
我建议研究这些 Syslog 消息并将它们解析/转换为结构化数据,即 JSON。有可用的日志收集器可供您免费下载,以便从 Syslog 解析为 JSON。日志收集器从您的 Rsyslog 接受日志消息,然后从那里解析来自 Syslog 的消息,转换为 JSON 格式(结构化数据),然后发送到某种分析或其他仪表板进行处理。