![SSH 奇怪的登录行为 - 可能是中间人攻击](https://linux22.com/image/93235/SSH%20%E5%A5%87%E6%80%AA%E7%9A%84%E7%99%BB%E5%BD%95%E8%A1%8C%E4%B8%BA%20-%20%E5%8F%AF%E8%83%BD%E6%98%AF%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB.png)
我家里有一台服务器,并且使用动态 dns,并且已经使用了 10 多年,没有出现任何问题。从外部使用 ssh 登录没有问题,但几个月前我确实禁用了路由器上的端口,因为我不经常使用它。
这是我的问题。我可以使用 ssh 和 192.168.1.xxx 从内部网络的路由器后面登录,但是当我尝试使用我的服务器的域名登录时,它将尝试通过外部 IP 登录,它会显示:“无法协商与 36.xxx.xx.xx 端口 22:找不到匹配的密钥交换方法 他们的报价:diffie-hellman-group1-sha”。
事实上,它应该说存在超时失败,因为路由器上的端口被禁用。
我尝试使用 ubuntu 从外部登录来确认这一点,然后它正确地显示:“ssh:连接到主机 xxxx.com 端口 22:连接超时” 从内部使用 Mac 连接到外部 IP 它让我一路顺利到密码提示,然后当我填写它时,它说它被拒绝?
从内部使用 debian 连接到外部 IP,它会警告可能的中间人攻击。
当我尝试从路由器后面使用外部 IP 登录然后拒绝登录尝试但从外部它会给出应有的超时错误时,为什么它会侦听被阻止的 22 端口并提供连接?路由器是否受到威胁?
答案1
总而言之,从网络内部连接时您观察到了三种不同的行为:
- 在机器 A 上,您甚至无法建立 SSH 连接,因为客户端和服务器不支持匹配的协议选项。
- 在机器 D 上,客户端由于主机密钥不匹配而拒绝连接。
- 从机器 M 建立 SSH 连接,但用户身份验证失败。
所有这些都表明您没有到达您认为可以到达的主机。正如一些人已经在评论中评论的那样,当您从网络内部访问外部 IP 地址时,您实际上正在访问您的路由器。 (更准确地说,你正在达到你的NAT设备— 对于家庭或小型办公室网络,它只是一个执行路由、NAT 的盒子,也可能是调制解调器。)此外:
- 事实上,您无法从 A 建立连接,这表明您所访问的服务器仅支持可用选项的一小部分(在路由器上常见),并且它已经有一段时间没有更新了(同样,在路由器上常见)路由器)—
diffie-hellman-group1-sha1
已弃用。 - D 检测到主机密钥不匹配的事实清楚地表明这不是您正在寻找的主机。
- M 连接没有问题,因为它仍然支持已弃用的协议,并且您从未从该客户端连接到所需的服务器,因此它没有看到任何不匹配。您应该从
known_hosts
文件 ( )中删除相应的公钥ssh-keygen -R 36.xxx.xx.xx
,否则如果您尝试连接到所需的服务器,将会收到错误消息。
当您尝试从网络内部连接到外部 IP 地址时,会发生什么情况取决于 NAT 设备的配置方式。通常,它会看到对其 IP 地址之一的连接请求,并将其视为与其自身的连接。这取决于 NAT 的配置方式;通常它是由接口配置的,因此来自外部的传入连接请求会根据传入重定向规则进行转换,但来自内部的连接请求仅在实际外出时才会进行转换,而不是在到达 NAT 设备时进行转换。
家庭路由器提供 SSH 接口是很常见的,并且没有特别的理由禁用它。即使是已弃用的协议也没有什么值得担心的:针对它的攻击只是“在理论范围内”——最好避免,但不会立即被破坏。事实是软件太旧了是然而,令人担忧的是;它可能还有其他未修补的安全漏洞。确保您的路由器没有在 TCP 之上的协议级别监听其外部接口上的任何内容(即让它执行 NAT,但确保 SSH、Web 接口等仅限于内部 IP 地址)。如果您有 WiFi 或者您不信任您的物理网络,也请加强内部连接。