捕获特定 SFTP 端口上的流量

捕获特定 SFTP 端口上的流量

我已将 SFTP 服务器配置为在默认 SSH 端口 22 和另一个端口 (X) 上运行。我想监控服务器上默认端口的流量,以检查是否有人仍在使用端口 22。

我尝试检查 var/log 中的日志,但它们没有显示用户正在使用哪个端口。为了清楚起见,我唯一的要求是获取所有尝试连接到端口 22 的用户。提前致谢!

答案1

初步说明

您提到过var/log(您是指/var/log?),所以我猜您的操作系统是 Linux。我假设您使用的是 OpenSSH。


保固溶液

我唯一的要求是让所有用户尝试连接到端口 22。

禁用端口并查看谁抱怨。:D


简单的解决方案

一个简单的解决方案是将LogLevel默认值INFO增加到:VERBOSE/etc/ssh/sshd_config

LogLevel VERBOSE

记住将使用第一个获得的值

重新加载sshd(在我的 Debian 中systemctl reload sshd.service:)。从现在开始sshd将向 syslogd(在我的 Debian 中rsyslogd:)发送更多信息。这取决于 syslogd(在我的 Debian 中:)的配置,/etc/rsyslog.conf这些信息最终会写入哪里(在我的 Debian 中/var/log/auth.log:)。

从现在起,

… sshd[…]: Connection from … port … on … port …

会出现。在你的情况下,后者端口将是22或 X。不幸的是,要判断连接是否成功验证身份、作为哪个用户以及是否使用了 SFTP,你需要分析后面的行。这些行不包含端口。一个合理的过滤器是

grep -F ' sshd[' /var/log/auth.log

过滤掉与之不相关的行sshd,但进一步过滤并不是一项简单的任务。


简单的改进?不

如果你只对 SFTP 用户感兴趣,那么你最好查看来自 SFTP 服务器的日志,而不是来自整个 SSH 服务器的所有日志。在你的命令行中sshd_config有一行

Subsystem sftp internal-sftp

或者

Subsystem sftp /usr/lib/sftp-server

internal-sftp和都sftp-server可以通过附加来配置为详细-l VERBOSE,但即使这样,它们也不会显示您感兴趣的端口。


高级解决方案

或者创建一个包装器sftp-server来记录你想要的内容。就像这样:

#!/bin/sh
/usr/bin/logger -p auth.info "SFTP connected: $SSH_CONNECTION"
exec /usr/lib/sftp-server "$@"

命名它sftp-server-wrapper。它应该由 root 拥有,其模式应该是755。将它放在任何 SFTP 用户都可以访问的目录中(考虑目录权限)。

现在告诉你sshd使用包装器而不是sftp-serverinternal-sftpsshd_config找到该Subsystem sftp …行并使其:

Subsystem sftp /path/to/sftp-server-wrapper

哪里/path/to/是正确的路径。重新加载sshd

从现在起任何成功的请求sftp子系统的连接将记录其参数。您想要了解的端口将位于最后。有用的过滤器:

grep 'SFTP connected: ' /var/log/auth.log

甚至:

grep 'SFTP connected: .* 22$' /var/log/auth.log

笔记:

  • 此方法不能使用internal-sftp
  • 未请求sftp子系统的 SSH 用户将不会被记录。

相关内容