通过 SSH 隧道传输 Web 流量时可以禁用交互式 shell 访问吗?

通过 SSH 隧道传输 Web 流量时可以禁用交互式 shell 访问吗?

我正在研究实施 SSH 隧道作为一种廉价的 VPN 解决方案,以便外部用户访问仅面向 Intranet 的 Web 应用程序。

我目前正在使用安装了 OpenSSH 的 Ubuntu Server 10.04.1 64 位。

我正在 Windows 机器上使用 Putty 在本地端口上创建到我的 ssh 服务器的隧道。

start putty -D 9999 mysshserver.com -N

然后我告诉 Firefox 在 localhost:9999 上使用 SOCKS 代理。

-N 标志将禁用客户端的交互式 shell。有没有办法在服务器端执行此操作?

除了禁用 root 访问、使用 rsa 密钥身份验证和更改默认端口外,我还应该遵循其他明显的安全做法吗?我的目标是简单地隧道化网络流量。

答案1

四年后,这个答案值得更新。虽然我最初authorized_keys自己使用过,并且可能在某些特定情况下仍会使用它,但您也可以使用中央sshd_config服务器配置文件。

sshd_配置

您可以指定(针对您的特定用例)一个组,例如proxy-onlyMatch单个用户。在 中sshd_config。这是在全局设置之后完成的,并撤销、重复或优化全局设置中给出的一些设置。

笔记:一些语法/指令sshd_config(5)记录在man页面中ssh_config(5)。特别是一定要阅读图案部分ssh_config(5)

对于一个团体来说,这意味着你的Match区块将像这样开始:

Match group proxy-only

您可以满足Match以下条件:,,,,User和。要满足多个条件Group,只需用逗号分隔条件模式对(如上所述)。HostLocalAddressLocalPortAddressgroup proxy-only

在这样的块内,通常会为了简洁而进行相应的缩进(但不需要),您可以声明要为用户组应用的设置,而不必authorized_keys为该组的成员编辑每个文件。

的设置no-pty将由authorized_keys的设置镜像PermitTTY nocommand="/sbin/nologin"变为ForceCommand /sbin/nologin

此外,您还可以设置更多设置以满足管理员的偏执,例如chroot将用户进入他的主文件夹,最终得到如下结果:

Match group proxy-only
    PermitTTY no
    ForceCommand /sbin/nologin
    ChrootDirectory %h
    # Optionally enable these by un-commenting the needed line
    # AllowTcpForwarding no
    # GatewayPorts yes
    # KbdInteractiveAuthentication no
    # PasswordAuthentication no
    # PubkeyAuthentication yes
    # PermitRootLogin no

(请自行检查是否需要或想要注释掉的行,并根据需要取消注释)

%h一个由用户主目录替换的令牌(%u将产生用户名和%%百分号)。我发现它ChrootDirectory对于限制我的sftp-only用户特别有用:

Match group sftp-only
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication no

请注意肯定指令可以在块中使用Match。请参阅man页面sshd_config(5)了解详情(搜索Match)。

授权密钥

注意:这句话下面的部分是我原来的答案。同时 - 但这也取决于您具体版本的功能sshd- 在大多数情况下,我会采用上述方法。

是的,您可以尽可能细粒度地分配公钥。除了 ajdecon 推荐的 nologin 之外,我建议在密钥条目前面设置以下内容authorized_keys

no-pty ssh-rsa ...

no pty 告诉服务器端不应该为该键分配伪终端。

您还可以通过在前面添加以下内容来强制执行某些操作,例如针对特定键执行 nologin 操作:

command="/sbin/nologin",no-pty ssh-rsa ...

答案2

对于任何仅使用隧道的用户,请将其登录 shell 更改为 /sbin/nologin。这样,您的用户将无法访问服务器上的 shell,但仍可以从其客户端运行设置 ssh 隧道。

答案3

如果你准备放弃用户/密码验证并使用密钥登录,你可以指定范围每个公钥。

值得注意的参数包括:

命令=“命令”

指定每当使用此密钥进行身份验证时执行该命令。用户提供的命令(如果有)将被忽略。

限制

启用所有限制,即禁用端口、代理和 X11 转发,以及禁用 PTY 分配和 ~/.ssh/rc 的执行。

最后

转发端口 启用先前通过限制选项禁用的端口转发。

通过这些,您可以很大程度上限制特定密钥对的用户使用 SSH 会话可以执行的操作。

它看起来像这样:

restrict,port-forwarding,command="/sbin/nologin" ssh-rsa <base64-encoded key>

答案4

我建议尝试隧道工. 配置/管理起来要容易得多。

相关内容