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 标志也是一种“代理问题”)
小智 6
现在有一个选项仅允许本地/远程转发。
\n\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
因此,如前所述,您nologin也应该将 shell 设置为 。