假设我有三台机器
A - 我通过 sshing 连接到的服务器
B - 我通过 sshing 连接到的客户端
C - B 子网中的另一个客户端
现在,我通过在客户端 B 中执行此命令为端口 1235 设置动态端口转发
ssh -D 1235 a@A
其中 a 是服务器 A 上的用户名。
现在,我只能从 B 连接到此端口 1235,因为它绑定到 localhost。如果我将命令修改为
ssh -D C:1235 a@A
那么只有 C 可以连接到 B 的 1235 端口,而 B 本身不能连接。我可以使用第三个选项,即
ssh -D 0.0.0.0:1235 a@A
B 和 C 都可以连接到 B 的端口 1235,但与 B 和 C 位于同一子网中的所有其他计算机也可以连接到。我真正想要的是一种绑定动态端口以仅允许 B 和 C 连接的方法它而不是任何其他机器。我怎样才能实现这个目标?
答案1
使用-g
SSH 选项,然后配置防火墙规则以仅允许 C 连接到该端口。
-g Allows remote hosts to connect to local forwarded ports.
命令将是:
ssh -g -D 1235 a@A
答案2
据我所知,SSH 本身在任何情况下都不会检查源 IP 地址(无论如何它们都可能被欺骗)。因此,您可能必须在 B 上使用数据包过滤器(例如 iptables)并对其进行设置,以便目标端口 1235 的传入 TCP 数据包必须将 B 作为其源地址。