我已将 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-server
或internal-sftp
。sshd_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 用户将不会被记录。