如何禁用SSH本地端口转发?

SCO*_*SCO 21 ssh port-forwarding local

我有一台运行 Ubuntu 和 OpenSSH 守护进程的服务器。我们称之为S1。

我使用来自客户端机器的这个服务器(让我们称其中一个为 C1)通过使用远程端口转发来执行 SSH 反向隧道,例如:

ssh -R 1234:localhost:23 login@S1
Run Code Online (Sandbox Code Playgroud)

在 S1 上,我使用默认的 sshd_config 文件。据我所知,任何在 S1 上拥有正确凭据 {login,pwd} 的人都可以登录 S1 并进行远程端口转发本地端口转发。此类凭据将来可能是证书,因此据我所知,任何获取证书的人都可以从其他任何地方(不一定是 C1)登录 S1,从而创建本地端口转发。

对我来说,允许本地端口转发太危险了,因为它允许创建某种公共代理。我正在寻找一种仅禁用 -L 转发的方法。

我尝试了以下操作,但这会禁用本地和远程转发:

AllowTcpForwarding No
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下方法,这只允许 -L 到 SX:1。总比没有好,但仍然不是我需要的,这是一个“无”选项。

PermitOpen SX:1
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有办法,这样我就可以禁止所有本地端口转发写如下内容:

PermitOpen none:none
Run Code Online (Sandbox Code Playgroud)

以下是个好主意吗?

PermitOpen localhost:1
Run Code Online (Sandbox Code Playgroud)

小智 19

另一种解决方案是只允许端口转发给特定用户:

来自 SSH:权威指南

端口转发可以在 sshd 中全局启用或禁用。这是通过 /etc/sshd_config 中的服务器范围配置关键字 AllowTcpForwarding 完成的。关键字的值可能是 yes(默认,启用转发)或 no(禁用转发):

# SSH1, SSH2, OpenSSH
AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)

此外,SSH2还有以下选项:

# SSH2 only
AllowTcpForwardingForUsers
AllowTcpForwardingForGroups
Run Code Online (Sandbox Code Playgroud)

它们的语法与 AllowUsers 和 AllowGroups 选项的语法相同。[第 5.5.2.1 节,“帐户访问控制”] 它们指定了允许使用端口转发的用户或组列表;服务器拒绝接受其他任何人的端口转发请求。请注意,这些是指 SSH 会话的目标帐户,而不是客户端用户名(通常不知道)。

...

重要的是要意识到本节中的指令实际上并不阻止端口转发,除非您还禁用交互式登录并限制可以在远程端运行的程序。否则,知识渊博的用户可以简单地通过 SSH 会话运行他们自己的端口转发应用程序。在非技术社区中,仅这些设置就足以起到威慑作用,但它们不会阻止知道自己在做什么的人。


aki*_*ira 17

任何拥有登录凭据的人都可以启动他们自己的 sshd 实例,在随机端口上运行并允许他们想要的任何内容,包括 -L 本地转发:

% /usr/sbin/sshd -d -f mysshd.config -p 12345
Run Code Online (Sandbox Code Playgroud)

如果您不信任用户用您的机器做某事,那么您首先不应该允许他们登录。

(顺便说一句, -D 标志也是一种“代理问题”)

  • 引自`sshd_config` 手册页:*请注意,禁用 TCP 转发不会提高安全性 **除非用户也被拒绝 shell 访问**,因为他们总是可以安装自己的转发器。*(重点是我的)。 (4认同)
  • 声明“任何拥有登录凭据的人都可以提出自己的<whatever>”是错误的。`ssh` 可用于连接到严格限制登录 shell 的帐户,这些帐户不允许这样做。端口转发是此类受限 shell 中的一个安全漏洞。除了运行允许的命令外,用户还可以创建隧道。 (2认同)

小智 6

现在有一个选项仅允许本地/远程转发。

\n
\n

允许Tcp转发

\n

指定是否允许 TCP 转发。\n可用选项为 \xe2\x80\x9cyes\xe2\x80\x9d 或 \xe2\x80\x9call\xe2\x80\x9d 以允许 TCP 转发,\n\xe2\x80\x9cno \xe2\x80\x9d 阻止所有 TCP 转发,\n\xe2\x80\x9clocal\xe2\x80\x9d 仅允许本地(从 ssh(1) 的角度)转发或\n \xe2\x80\ x9cremote \xe2\x80\x9d 仅允许远程转发。\n默认值为 \xe2\x80\x9cyes\xe2\x80\x9d。\n请注意,禁用 TCP 转发不会提高安全性,除非用户也被拒绝 shell 访问,因为他们可以始终安装自己的转发器。

\n
\n

因此,如前所述,您nologin也应该将 shell 设置为 。

\n