我对可以分享的实际服务器详细信息和配置非常有限,但我会尽力描述问题以及我想要做的事情。
我面临的问题如下,我有一个运行 Centos 7 的 SFTP 服务器,并使用 sftp 的默认 sshd 服务,所有这些都位于硬件防火墙后面,该服务器已经正常工作了 2 年多了,但最近连接一直在下降。我相信这些问题与服务器根本没有直接关系,但我需要向团队证明这一点,或者至少确认我的信念是否成立。
这些水滴如何出现的一个例子是这样的。客户端建立 3 个单独的连接,同时第一个连接成功并上传文件,而其他 2 个连接失败。在硬件防火墙中,日志记录显示所有 3 个连接打开和关闭,但最后 2 个连接有消息表明服务器重置了连接。当我查看服务器上的/var/日志/安全和/var/日志/消息日志文件中我找到了第一次成功连接的记录,但完全没有第二次失败的记录。
服务器确实有fail2ban,我也检查过,那里没有任何东西被阻止,事实上,这个问题发生在多个IP地址上,并且其中一些地址被设置为被fail2ban完全忽略。
服务器确实启用了 SELinux 并启用了auditd,但是日志对我来说很难阅读并且非常嘈杂(如果有一个干净的方法来查看这些日志,请告诉我)
该问题在一小时内偶尔发生多次,然后 2-3 小时内根本没有问题。
我为不同的客户端设置了相当多的服务器,当我过去遇到这些类型的问题时,我所需要做的就是查看这些日志,但这次我有 2 个独立的系统(防火墙和服务器)给了我相互矛盾的陈述,现在我不知道如何继续。
是否有任何额外的日志记录我可以查看,甚至可以安装一些东西来监视网络流量并确认此失败的流量是否到达我的服务器?
回答
使用 tshark 监控网络流量效果很好
使用下面的命令我过滤了主机的流量,我知道遇到了这个问题并保存了捕获。
tshark -i eth0 -f "host x.x.x.x" -w "capture.pcap" -F pcap
一旦我收到报告,问题再次发生,我停止捕获并将生成的文件传输到我的桌面以在wireshark中打开。捕获的结果显示服务器正在重置连接,正如您在下面的示例捕获中看到的,服务器发出 [RST,ACK](重置,确认)
2467 4501.231127 <CLEINT_IP> <SERVER_IP> TCP 66 58274 → 22 [SYN, ECE, CWR] Seq=0 Win=65535 Len=0 MSS=1460 WS=128
2468 4501.231178 <SERVER_IP> <CLEINT_IP> TCP 62 22 → 58274 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 WS=128
2469 4501.231646 <CLEINT_IP> <SERVER_IP> TCP 60 58274 → 22 [ACK] Seq=1 Ack=1 Win=4194304 Len=0
2470 4501.231737 <CLEINT_IP> <SERVER_IP> SSHv2 85 Client: Protocol (SSH-2.0-WinSCP_release_5.15.3)
2471 4501.231750 <SERVER_IP> <CLEINT_IP> TCP 54 22 → 58274 [ACK] Seq=1 Ack=32 Win=29312 Len=0
2472 4501.232298 <SERVER_IP> <CLEINT_IP> TCP 54 22 → 58274 [RST, ACK] Seq=1 Ack=32 Win=29312 Len=0
答案1
需要调查的一个问题是防火墙是否充当客户端的 ssh 服务器端点,或者是否透明地将流量传递到真实服务器。
在服务器上运行tshark
(或图形) ,并查找从客户端和/或防火墙发起的连接,特别是参考失败的会话。wireshark
如果您没有看到这些失败会话的任何入站流量,则防火墙不会让它们通过,这就是故障点。如果是,那么可能是您的服务器有问题。