我连接到一个不安全的DMZ网关系统(B)。从这台机器(B)我可以连接到最终目的地(C)。
A->B->C
我创建了一个从A到B的ssh隧道,并转发C的端口22:
ssh -L 2222:C:22 user@B然后我就可以从A连接到C
ssh -p 2222 user@localhost这是安全的,但它并不是非常有效的开销加起来,因为我有一个隧道内隧道。
另一种方法是将ssh作为ssh命令运行:
ssh user@B ssh user@C这样的开销就少了,但是这个安全吗?
如果某人有根目录访问B,他能访问任何信息吗?据我所知,这些信息在内核级别是未加密的?
如果我没有C的公钥呢?
有什么想法或建议可以让我找到有关这方面的信息吗?非常感谢!
发布于 2012-10-16 18:11:47
在尝试用性能来换取安全性之前,我建议实际测量性能。SSH加密的开销很小;它使数据大小增加了不到1%,并且CPU使用率很低,除非您的CPU相当弱或网络非常快( Core2 CPU可以通过使用单个核的15%以下来跟上10 MBytes/s SSH )。因此,使用双隧道的安全方法很可能并不昂贵。
此外,在您的第二个建议中,您的大小开销更小,桌面系统( A )上的CPU开销也更小,但是网关(B)上的CPU开销更多,因为该网关必须解密来自A的数据并对其进行再加密才能将其发送到C。由于网关往往是共享资源,因此B上的空闲CPU可能比A更少,因此,如果性能很重要(我不这么认为,而且无论如何都应该衡量它),那么安全的方法也是最佳的性能方法。
正如@Iszi所指出的,您的第二个方法也是不安全的,因为它允许网关生成一个MitM攻击。我想指出,这也使scp的使用更加困难。因此,您应该使用隧道内的方法:它更安全,更灵活,甚至可能更快。
发布于 2012-10-16 17:55:38
如果某人在给定的场景中能够访问B,他们可以设置一个代理来对从A到C的连接执行中间人攻击,这将允许他们解密A和C之间的任何通信,如果没有在更高的级别上加密它。
攻击者将配置B,使其在使用攻击者的密钥对时将自己显示为C。然后,他也会模仿A到C,这样信息就可以通过B传递,就好像没有什么不寻常的事情发生,除了攻击者现在可以在B处嗅探流量。
检测这一点的唯一方法是A和/或C拥有彼此公钥的预先存在的、经过验证的副本。然后,当攻击者使用他的密钥跳进中间时,可以识别不受信任的实体,并拒绝连接。
发布于 2012-10-16 20:38:19
是的,B上的根用户可以窥探您的流量,尽管您没有确切地说明它是什么操作系统。在Linux上,这可能包括ttysnoop程序或使用针对sshd的调试器。
我经常使用隧道中的隧道(以及SSH上的SSH之上的SSH,这是另一个层),它不一定有一个严重的性能或延迟负担。当然,存在一些开销,但不超过连接的通常可变性。
考虑一下单个字符的最坏情况。在Telnet中,它将作为以太网帧发送,有效负载为46字节(20字节IP报头、20字节TCP报头、1字节数据,但以太网标准需要46字节的最小有效负载,在VLAN环境中为42字节)。在SSH中,它将是68个字节的有效负载(“数据包的最小大小为16 (或密码块大小,以较大者为准)字节”(加号‘mac’)。“,RFC 4253);我看到92个字节在观察与Wireshark的实际连接。在SSH-over-SSH中,存在SSH帧的开销;我看到了140字节的有效负载。
发送大量数据时,SSH使用最多32k字节的帧(通过TCP协议,因此不受数据包大小的限制),因此双隧道的开销可以忽略不计。通过SSH隧道或直接通过SSH将一个2M文件传输到VM需要20多个时间。如果我dd一个36k文本文件,那么从“简单”ssh会话发送大约需要84个数据包--几乎所有的1380字节。
最后,你给出的命令,
ssh user@B ssh user@C这第二个"ssh“可能会给出消息”由于stdin不是终端而不会分配伪终端“,您将得到一个shell,它不会提示您输入或支持命令行编辑。相反,试着
ssh user@B -t ssh user@C还请注意,如果B主机无法跟上进入它的数据,那么实际上可能会产生更多的小数据包(= TCP报头开销和实际延迟)。
https://security.stackexchange.com/questions/22694
复制相似问题