SSHD:动态拒绝端口转发

SSHD:动态拒绝端口转发

从服务器上的当前 ssh 会话中,-L客户端指定了哪些参数?

我正在尝试使用 sshd 构建一个可用于端口转发的 jumphost。目标是能够进入安全区域并转发 RDP 端口,以便可以使用远程桌面。

我想在我的工作站上运行

ssh -NL 1234:my-server:3389 the-jumphost

然后将我的 RDP 客户端连接到localhost:1234(或 VNC 或 $whatever_app)。

我想进一步锁定,只允许端口转发到用户在单独系统中可以访问的主机。我试图解决的问题是,我不希望有人通过ssh -NL 1234:sensitive-server:5900 the-jumphost网络访问他们不应该访问的服务。为了支持这一点,假设我有一个可以在 jumphost 上运行的 CLI can_access $user $host

在登录时(或登录后),我如何知道传入连接的端口转发选项是什么。我最接近的方法是将某些内容放入 PAM 中

auth required pam_exec.so seteuid /is_valid_port_forward

但我不知道如何判断正在设置哪些端口转发。我该怎么做?

一些额外的背景信息:

我的服务网络彼此隔离,因此如果您登录my-server,则无法与 通信sensitive-server。但是,如果您登录 jumphost,则可以做任何您想做的事情sensitive-server。我正在做的另一件事是使用脚本锁定 ssh 本身can_access

从数量上看,我有大约 10,000 名用户登录到大约 1,000 个独立网络上的大约 40,000 台主机,这些主机由 DNS 负载平衡器后面的 10 个跳转主机组成。建立PermitOpen列表是不可行的,因此需要动态执行此操作。

答案1

SSH 不提供内置方法来从 SSH 会话本身确定 -L(本地端口转发)参数。但是,您可以利用 SSHD 的日志记录功能来获取此信息。通过设置日志级别详细在你的sshd_配置文件,SSHD 将记录端口转发事件。

例如,当客户端设置端口转发时,SSHD 会记录如下消息:

debug1: Local connections to LOCALHOST:5901 forwarded to remote address 127.0.0.1:5901

您可以监控这些日志以识别端口转发活动。但是,这是一种被动方法,无法阻止未经授权的端口转发。

对于主动方法,请考虑使用许可证开放选择sshd_配置。此选项允许您指定客户端可以转发到哪些主机:端口对。您可以全局设置此选项,也可以按用户或组进行设置。

例如:

'Match User jdoe PermitOpen my-server:3389'

此配置仅允许用户杰多设置端口转发至我的服务器在港口3389. 转发到其他主机或端口的尝试将被拒绝。

如果您需要动态控制用户可以转发到哪些主机:端口对,则可以使用匹配部队指挥指令在登录时运行脚本。此脚本可以查询您的可以访问系统确定允许的主机:端口对,然后动态生成许可证开放用户会话的指令。

然而,这种方法很复杂,而且容易出错。它需要自定义脚本和彻底的测试。

相关内容