如何限制 ssh *远程* 端口转发?

如何限制 ssh *远程* 端口转发?

我需要限制ssh -R用户可以远程“”转发哪些端口。

我知道permitopenauthorized_keys上的选项,但正如手册页上所说,它只限制本地“ ssh -L”端口转发

正如所讨论的这里用户会得到相同netcat或类似的结果,但在这种情况下,用户没有 shell 访问权限

我还发现这个线程谈到使用 selinux 或LD_PRELOAD,但我以前从未配置过 selinux,也找不到有关如何使用LD_PRELOAD.

也许有人为 openssh 制作了补丁来实现这一点?

编辑:我发现这个错误报告所以我猜它还没有实施

答案1

这已在 2018 年 8 月 24 日发布的 OpenSSH 7.8p1 中实现。引用发行说明:

将 PermitListen 指令添加到 sshd_config(5) 和相应的 PermitListen=authorized_keys 选项,控制远程转发可以使用哪些侦听地址和端口号 (ssh -R ...)。

答案2

您可以使用一个选项no-port-forwarding来阻止所有端口转发。至少从 OpenSSH 4.3p2 开始(CentOS 5.3 - 我可以访问的最旧的机器)。将其放在您原本要放置的位置permitopen

答案3

使用 ssh 无法对其进行限制。也许可以使用 selinux 或 iptables 来达到此目的。然而,有一种替代策略可能适合也可能不适合您的需求。使用到 UNIX 套接字的绑定。从 openssh 版本 6.8 开始应该可用。

使用套接字时,您可以使用文件系统 ACL(尽管套接字是否尊重这可能与 *nix 相关),并且可以使用它来防止一个用户绑定到另一个用户的套接字。但是,它不会以任何方式阻止绑定到端口,因此根据您的用例,它可能没有帮助,但如果您始终只能使用套接字,则端口可能并不重要。

使用 UNIX 套接字处理悬空套接字文件可能会出现问题,因为反向发布者会尝试重新连接。我对这个问题还有另一个问题(和答案)。简而言之,您可能还想使用StreamLocalBindUnlink yes

连接关闭后如何清理 SSH 反向隧道套接字?

答案4

复制:https://superuser.com/questions/516417/how-to-restrict-ssh-port-forwarding-without-denying-it

看起来您可以使用以下内容?

在服务器配置文件中有一个许可证开放选项。此选项可用于指定可以建立转发的主机和端口。此选项可以在 Match 块内使用,因此可以通过用户、组、主机名或 IP 地址模式进行限制。

编辑:所以在服务器配置中添加以下内容

允许打开主机:端口

允许打开 IPv4_addr:端口

PermitOpen [IPv6_addr]:端口

相关内容