我在 IP YY.YY.YY.YY 上有一个 ssh 服务器,正在侦听端口 5022,它显示以下流量(使用 TCPDUMP),其中 XX.XX.XX.XX 是外部未知 IP,
10:34:58.879055 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: S 1093512123:1093512123(0) win 29200 <mss 1460,sackOK,timestamp 4152861140 0,nop,wscale 7> (DF) [tos 0x68]
10:34:58.879222 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: S 1017497190:1017497190(0) ack 1093512124 win 16384 <mss 1460,nop,nop,sackOK,nop,wscale 6,nop,nop,timestamp 4107297338 4152861140> (DF)
10:34:58.902942 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: . ack 1 win 229 <nop,nop,timestamp 4152861164 4107297338> (DF) [tos 0x68]
10:34:58.902980 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: P 1:24(23) ack 1 win 229 <nop,nop,timestamp 4152861164 4107297338> (DF) [tos 0x68]
10:34:58.916629 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: P 1:22(21) ack 24 win 271 <nop,nop,timestamp 4107297338 4152861164> (DF)
10:34:58.939061 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: . ack 22 win 229 <nop,nop,timestamp 4152861201 4107297338> (DF) [tos 0x68]
10:34:58.939120 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: P 22:1054(1032) ack 24 win 271 <nop,nop,timestamp 4107297338 4152861201> (DF)
10:34:58.939603 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: P 24:672(648) ack 22 win 229 <nop,nop,timestamp 4152861201 4107297338> (DF) [tos 0x68]
10:34:58.941607 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: F 1054:1054(0) ack 672 win 271 <nop,nop,timestamp 4107297338 4152861201> (DF)
10:34:58.961672 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: F 672:672(0) ack 1054 win 245 <nop,nop,timestamp 4152861223 4107297338> (DF) [tos 0x68]
10:34:58.961721 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: F 1054:1054(0) ack 673 win 271 <nop,nop,timestamp 4107297338 4152861223> (DF)
10:34:58.963932 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: . ack 1055 win 245 <nop,nop,timestamp 4152861226 4107297338> (DF) [tos 0x68]
我担心的是标志 S、P 和 F,这意味着同步、推送、完成......
我不擅长网络,但我可以认为该连接损害了我的服务器吗?该 IP 和我的服务器之间是否有完整的流量,或者只是一次连接尝试?
答案1
Syn、Push、Fin 是 TCP 数据包的正常标志。他们本身并没有说明您的服务器是否受到威胁。
- Syn表示想要开始一个新的连接
- Push 表示想要在连接上发送数据
- Fin表示要关闭连接
查看流量,我猜测它甚至在尝试向服务器进行身份验证之前就失败了:
10:34:58.879055 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: S 1093512123:1093512123(0) win 29200 <mss 1460,sackOK,timestamp 4152861140 0,nop,wscale 7> (DF) [tos 0x68] 10:34:58.879222 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: S 1017497190:1017497190(0) ack 1093512124 win 16384 <mss 1460,nop,nop,sackOK,nop,wscale 6,nop,nop,timestamp 4107297338 4152861140> (DF) 10:34:58.902942 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: . ack 1 win 229 <nop,nop,timestamp 4152861164 4107297338> (DF) [tos 0x68]
这是 3 路 TCP 握手,由想要连接到 YY.YY.YY.YY 的 XX.XX.XX.XX 发起。 Syn 标志表明这是一个新连接的开始。
10:34:58.902980 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: P 1:24(23) ack 1 win 229 <nop,nop,timestamp 4152861164 4107297338> (DF) [tos 0x68] 10:34:58.916629 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: P 1:22(21) ack 24 win 271 <nop,nop,timestamp 4107297338 4152861164> (DF) 10:34:58.939061 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: . ack 22 win 229 <nop,nop,timestamp 4152861201 4107297338> (DF) [tos 0x68]
在每个 SSH 连接开始时,双方都会发送一个“横幅”,这是一段简短的文本,说明其使用哪种 SSH 软件。这些数据包看起来像是 XX.XX.XX.XX 将其横幅发送到 YY.YY.YY.YY;然后 YY.YY.YY.YY 确认它并将其横幅发送到 XX.XX.XX.XX;然后 XX.XX.XX.XX 确认。
10:34:58.939120 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: P 22:1054(1032) ack 24 win 271 <nop,nop,timestamp 4107297338 4152861201> (DF) 10:34:58.939603 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: P 24:672(648) ack 22 win 229 <nop,nop,timestamp 4152861201 4107297338> (DF) [tos 0x68]
根据SSH协议,发送Banner后,双方都会发送一条消息,表明自己支持哪些加密算法、支持哪些密钥交换协议等,以便双方协商对连接进行加密时使用的加密密钥。
10:34:58.941607 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: F 1054:1054(0) ack 672 win 271 <nop,nop,timestamp 4107297338 4152861201> (DF) 10:34:58.961672 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: F 672:672(0) ack 1054 win 245 <nop,nop,timestamp 4152861223 4107297338> (DF) [tos 0x68] 10:34:58.961721 YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: F 1054:1054(0) ack 673 win 271 <nop,nop,timestamp 4107297338 4152861223> (DF) 10:34:58.963932 XX.XX.XX.XX.59800 > YY.YY.YY.YY.5022: . ack 1055 win 245 <nop,nop,timestamp 4152861226 4107297338> (DF) [tos 0x68]
显然 YY.YY.YY.YY 不喜欢 XX.XX.XX.XX 发送的内容(也许没有它们都支持的算法?或者 XX.XX.XX.XX 发送了格式错误的数据包?),所以不是继续对于密钥交换,它决定告诉 XX.XX.XX.XX(通过使用 Fin 标志)它想要关闭连接而不是进一步继续连接。 XX.XX.XX.XX 还使用 Fin 标志来关闭连接(要么因为它也确定密钥交换是不可能的,要么因为它得到了 YY.YY.YY.YY 的 Fin)。
理论上,使用XX.XX.XX.XX的人可以修复XX.XX.XX.XX以支持更多算法,以便成功完成密钥交换并尝试暴力登录。