为什么不将 OpenSSH 的 MaxSessions 设置为 1000000?

为什么不将 OpenSSH 的 MaxSessions 设置为 1000000?

我已将 SSH 客户端配置为多路复用会话:

Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600

我偶尔会遇到默认的 OpenSSH 服务器端MaxSessions限制 10。显而易见的答案是增加到MaxSessions一个比我需要的大得多的数字。

有理由不将其设置为 1000000 吗?默认值 10 表明这是不这样做的一些原因。

我能想到的可能是超过10个左右,繁忙的连接可能会降低效率,但考虑到伤害仅限于我自己,我不确定这就是原因。

答案1

限制任何事情总是有原因的。这10是“理智的默认”。较少是用于限制性更强的用例(阻止 shell 访问或仅允许单个通道),将其增加到更多也有意义,如果您真的知道,您将发出数百万个会话。我很少打开超过4个。

对于这个问题:

有理由不将其设置为 1000000 吗?

max_sessions多变的int类型,因此最大可能值为2147483647。没有什么可以阻止您建立理想的百万。

...但正如已经提到的,没有充分的理由这样做。

使用更多会话不会产生显着的安全影响(一旦攻击者打开单个会话,您就完蛋了),但使用更多会话时可能会出现性能损失。

答案2

有理由不将其设置为 1000000 吗?

是的。因为如果您运行的脚本意外地持续消耗 ssh 会话,您DoS自己的服务器就会面临风险。您真的想遇到同一服务器上的其他应用程序无法再打开文件的情况吗?打开文件描述符的数量受 限制/proc/sys/fs/file-max,通常默认值在1M以下。

您应该将其设置为您认为需要的最大值加上安全缓冲,而不是任意巨大的值。

答案3

每个 SSH 会话都使用资源。一些快速基准测试表明,典型的会话使用一个进程 ID、500 kb 的非共享内存和 7 个文件描述符。所有这些都是有限的资源,如果它们用完,您的服务器将变得无响应或不可用。

请记住,您并不是唯一连接到您的服务器的人。有许多僵尸网络会扫描安全性不够的 SSH 服务器,并且它们也会耗尽资源。

相关内容