OpenSSH 服务器限制本地转发到仅限 unix 套接字

OpenSSH 服务器限制本地转发到仅限 unix 套接字

问题:限制 SSH-L转发仅到 unix 套接字

  • SSH 服务器 S 是私有网络内部由多个用户使用的共享服务器。
  • 用例:我为每个用户创建一个本地 unix 套接字,用于到达唯一目的地(已完成)。然后用户应该能够通过本地端口将其转发到自己的机器:local -> S -> destination
  • 端口转发仅限于本地转发,以AllowTcpForwarding local最大限度地减少攻击面和不必要的横向网络移动(男人)。
  • 我想将转发限制到最低限度。仅限本地主机,理想情况下仅限用户本地套接字,即用户只能执行-L 12345:/home/user/server-local.sock
  • 许可证开放仅允许host:port符号,即不可能仅允许unix套接字。
  • 不允许用户相互交互,即连接到他们各自的转发端口(如果使用端口而不是套接字)。

有什么想法如何实现这一点吗?

迄今为止还没有最佳想法。

  • 可以使用 socat,即
    • socat TCP4-LISTEN:8443,reuseaddr,fork EXEC:'ssh -T -o ExitOnForwardFailure=yes -A server socat "UNIX-CONNECT:/user/tmp.sock" STDIO'但这仅限于每个 ssh 连接转发一个端口
    • 或者,启动一个主 ssh 隧道ssh -M -S ctrl.sock -fnNT server,然后按照转发方式将其用于一个 socat
      • socat TCP4-LISTEN:8443,reuseaddr,fork EXEC:'ssh -A -S ctrl.sock server socat "UNIX-CONNECT:/user/tmp1.sock" STDIO'
      • socat TCP4-LISTEN:8444,reuseaddr,fork EXEC:'ssh -A -S ctrl.sock server socat "UNIX-CONNECT:/user/tmp2.sock" STDIO'
  • AuthorizedPrincipalsCommand可以在新连接上返回permit-open,将本地转发限制为特定host:port对。我可以为每个用户定义不相交的端口块。然后我必须在服务器端将它们组合在一起。
  • 如果 OpenSSH 服务器能够配置仅允许套接字转发,那将是理想的,但是它却没有这样做。
  • SSH 插件 / iptables / selinux?

谢谢!

答案1

(应该是评论但空间/格式有限)

PermitOpen 仅允许主机:端口符号,即不可能仅允许 unix 套接字。

根据您发布的链接:

可以使用 none 参数来禁止所有转发请求

虽然这里的措辞暗示它也会阻止 Unix 域套接字,但上下文是 TCP 域套接字。你测试过这个吗?

相关内容