LXC 容器的 SSH 流量重定向

LXC 容器的 SSH 流量重定向

我使用 LXC 容器进行 ssh 托管,并希望将 SSH/SFTP 流量(使用端口 22)重定向到容器的私有 IP 地址,但基于用户/IP。也就是说 - 一个源端口,多个目的地。

  1. 远程控制[电子邮件保护]
  2. 我们有用户“ahes”,此用户容器的私有 IP 是 10.10.66.66
  3. 将流量重定向到 10.10.66.66:22

我无法为每个容器分配公共 IP 地址。

我想到的一些可能的解决方案:

  1. 简单方法 - 忘记全局端口 22,使用与特定用户匹配的端口。例如,ahes 的端口为 6666。然后使用简单的 iptables 规则重定向流量:server.com:6666 => 10.10.66.66:22。缺点是某些地方除 22/80/443 以外的端口会被阻止。

  2. 在父服务器上的 sshd 中使用 ForceCommand 指令:

Match Group 用户
   ForceCommand /usr/local/bin/ssh.sh

ssh.sh脚本:

/bin/bash #!/bin/bash
#...这里有一些逻辑来查找用户 IP 地址
# 运行 ssh
exec ssh $USER@$IP $SSH_ORIGINAL_COMMAND

这个解决方案几乎很好,但是我没有找到让 sftp 使用此配置工作的方法。

另一个考虑因素是我无法深入研究协议,因为在发送任何可识别用户的数据之前都会进行加密。此外,我并没有破解 sshd 源代码的技能,出于安全原因,保留带有原始软件包的父服务器是非常可取的。

我还发现 libpam-nufw 包用于连接级别(iptables)的身份验证,但我认为它用于其他目的。

我将非常感激任何线索。谢谢。

答案1

设置一个在端口 443 上监听的 HTTP 代理,并在内部 LXC IP 上启用到端口 22 的转发连接。然后,在使用 ssh/sftp 客户端时,使用 ProxyConnect 选项与 netcat/socat/proxytunnel/whatever 结合使用。

另一个常见的解决方案是设置 SSH 网关(例如,同一台机器上的专用 LXC)。用户首先连接到那里,然后再连接到他们的 LXC 实例。

相关内容