问题:限制 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
,然后按照转发方式将其用于一个 socatsocat 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 域套接字。你测试过这个吗?