一、问题描述
某次外出在异地工作场所xshell炼乳远程服务器时,报错:Connection closed by foreign host.
D,服务器查看secure日志或sshd服务状态会显示:id not receive identification string from client_ip;
二、分析处理
1)因是云主机,加安全组白名单后,ping server是可通的;telnet和ssh结果一样,被远端断开;
2)tcpdump抓包结果如下:显示服务端没有回包,client多次尝试请求,关闭防火墙无效,非防火墙原因所致
其中:
103.35.105.149.17549>localhost.22: Flags [S],cksum 0xfc6f (correct),seq 3280124262,win 64240,options [mss 1460,nop,
wscale 8, nop ,nop,sackOk],length 0
这是客户端发送的 SYN 报文。SYN 报文用于启动 TCP 连接。此行显示了 SYN 报文的详细信息,包括源 IP 地址、源端口、目标 IP 地址、目标端口、序列号、窗口大小和选项。
103.35.105.149.17549>localhost.22:Flags [.], cksum 0x8bda (correct),seq 3280124263,ack 817658252,win 513,length 0
此行显示了 ACK 报文的详细信息,用于确认已收到 SYN 报文,包括源 IP 地址、源端口、目标 IP 地址、目标端口、序列号、确认号、窗口大小和长度。
103.35.105.149.17549>localhost.22: Flags [R.], cksum 0x8cdd (correct),seq 0, ack 22, win 229, length 0
此行显示了 RST 报文的详细信息,RST 报文用于重置 TCP 连接,包括源 IP 地址、源端口、目标 IP 地址、目标端口、序列号、确认号、窗口大小和长度。
综上,由于服务器没有发送 SYN-ACK 报文,因此 TCP 连接没有建立成功。这可能是由于服务器上的 SSH 服务未运行、未监听默认端口、被防火墙阻止或配置不正确造成的。
关闭防火墙iptables,效果未有任何改善,抓包结果同上:
netstat -s |egrep -e SYNs -e “time stamp” #看看有没有因为时间戳丢弃syn包的情况,显示如下:
因tcp_tw_recycle参数在nat环境下,触发了linux的paws机制会导致丢包,可执行:sysctl -a |egrep -e tcp_tw_recycle -e tcp_timestamps查看。异常情况会显示如下:
3)从4A管理页面测试报如下:非本次原因,但验证了密码问题也会导致报上述错误
上图中的,“device eth0 entered /left promiscuous mode” ,指eth0网卡进入/退出了混杂模式。混杂模式是网卡的一种工作模式,一般在抓取网卡数据包时使用。系统日志里出现这个日志信息,说明在服务器上对网卡进行过抓包的操作,tcpdump抓包命令会产生这个日志信息。也可以使用命令:ifconfig eth0 promisc来启用,ifconfig eth0 -promisc来取消;
4)查看端口监听:未见异常
netstat -ta --numeric-ports --program | grep 22
5)更换网络环境,再次测试:正常;综上,本次故障为第一个工作网络环境中受限导致。