从服务器上的当前 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. 转发到其他主机或端口的尝试将被拒绝。
如果您需要动态控制用户可以转发到哪些主机:端口对,则可以使用匹配用部队指挥指令在登录时运行脚本。此脚本可以查询您的可以访问系统确定允许的主机:端口对,然后动态生成许可证开放用户会话的指令。
然而,这种方法很复杂,而且容易出错。它需要自定义脚本和彻底的测试。