为什么要更改默认 ssh 端口?

she*_*run 50 linux ssh

我注意到很多管理员更改了默认的 ssh 端口。

这样做有什么合理的理由吗?

Dav*_*ett 73

它不像某些人声称的那样有用,但它至少会减少对您的日志文件的影响,因为许多蛮力登录尝试仅使用默认端口,而不是扫描以查看 SSH 是否在其他地方侦听。不过,有些攻击会在其他地方扫描 SSH,因此这不是灵丹妙药。

如果您的服务器将成为某种类型的共享主机,而不仅仅是满足您的项目需求,那么使用非默认端口可能会很痛苦,因为您必须一遍又一遍地向用户解释它当他们忘记并且他们的客户端程序无法连接到端口 22 时就结束了!

在非标准端口上使用 SSH 的另一个可能问题是,如果您遇到具有限制性传出过滤器集的客户端,该客户端无法连接到您的自定义端口,因为他们的过滤器仅允许端口 22、53、80和 443 作为新的传出连接的目的地。这并不常见,但肯定并非闻所未闻。在类似的情况下,某些 ISP 可能会在通常预期的端口(端口 443 或 HTTPS,22 用于 SSH 等)之外的端口上看到加密流量,以试图隐藏 P2P 连接和限制(或阻止)以不方便的方式连接。

为方便起见,我个人将 SSH 保留在标准端口上。只要采取通常的预防措施(强密码/密钥策略,限制 root 登录,...)就不必担心,并且可以使用诸如此类的工具来缓解遭受暴力攻击时的日志文件增长问题作为 fial2ban 临时阻止在给定时间空间内提供太多错误身份验证凭据的主机。

无论您选择什么端口,如果您确实远离 22,请确保它低于 1024。在默认配置中的大多数类 Unix 设置下,只有 root(或 root 组中的用户)可以侦听低于 1024 的端口,但是任何用户都可以监听更高的端口。在更高的端口上运行 SSH 会增加流氓(或被黑)用户设法使您的 SSH 守护程序崩溃并将其替换为他们自己的或代理的机会。

  • +1 表示 >1024 位。 (19认同)

Aln*_*tak 28

这是一种通过默默无闻的简单(但非常有效)的安全形式。

如果您的 SSH 服务器不在端口 22 上,那么扫描整个互联网以寻找默认帐户上的弱密码的人发现它的可能性要小得多。如果您正在扫描整个网络,则无法检查所有 64k 可能的端口来查找 SSH 服务器。

但是,如果有人专门针对您,它不会提供任何好处,因为简单的一次性nmap扫描将显示它实际运行的端口。

  • @John - 实际上我明白@Juliano 的观点。它不会使 SSH 守护进程本身的安全性降低,但在一般情况下,在非特权端口上运行确实使 root _started_ 守护进程的正常假设无效。因此,如果您能以某种方式停止该守护程序(例如通过 DoSing 它),您可以在其位置启动您自己的假守护程序,而无需 root 漏洞利用。然后,该假守护进程可能会捕获足够的详细信息以允许进一步利用。 (5认同)
  • _“检查所有 64k 可能的端口”_...在 1023 以上的任何端口运行 SSH 都是错误的。与让它在默认端口中运行相比,它使系统*更*易受攻击。 (4认同)
  • 顺便说一下,它不是通过默默无闻来保证安全,否则你也必须同样调用密码认证。通过默默无闻的安全性是指不公开实现的情况。在这里,实现是明确的(是“我改变了服务端口”),秘密(“哪个端口?”)仍然是秘密。 (4认同)
  • @Juliano - 请解释一下。仅仅因为你_必须_成为 root 来监听特权端口并不会(AFAIK)使它_不安全_在非特权端口上运行。 (3认同)
  • @John,这是真的 - 它仍然需要攻击者获得足够的访问权限来自己启动一个新的守护进程。关键是他们不再需要 _root_ 访问权限来启动它。 (2认同)
  • @John,请阅读我对这个问题的第二条评论。攻击者需要本地用户访问(通过远程执行漏洞)才能启动他自己的 sshd。之后,*然后*他拒绝原始sshd,*然后*他可以在同一个端口上启动他自己的sshd,无需root权限。如果 sshd 最初在端口 22 上运行,则攻击者将无法运行他自己的 sshd,直到他还发现特权升级漏洞。获得根。 (2认同)

Ali*_*ani 21

为了真正避免暴力攻击,遵循一些步骤总是很重要的:

  • 安装 denyhosts 或 fail2ban
  • 限制 ssh 端口上每秒的连接数
  • 更改 ssh 端口
  • 拒绝 root 登录
  • 通过密钥而不是密码启用身份验证

  • 似乎是一个很好的列表,除了我不太同意的端口更改部分,这太晦涩了。无论如何,现代端口扫描器会在几秒钟内找到它吗?(许多网络不会让随机端口流量出去,通常仅限于说 22、80 和 443) (11认同)
  • 使用 denyhosts/fail2ban 减少了切换端口或需要密钥的需要。如果您不允许使用密码,那么使用 denyhosts/fail2ban 或更改端口是没有意义的。 (2认同)

Lum*_*uma 12

是的,它很有用,因为它只是有助于避免所有蛮力攻击并有助于保持日志清晰:)

至于由您决定的端口号,我看到公司经常使用 1291。我使用更高的东西只是为了帮助避免一些脚本。

不允许 root ssh 登录和更改端口号,也许像 fail2ban 这样的东西,你应该是金。添加 iptables 以进行良好的衡量并使您的内容保持最新状态,您不应该遇到任何问题。

  • 但是看看 [David Spillett 的回答](http://serverfault.com/questions/189282/why-change-default-ssh-port/232242#232242) 以了解为什么端口 1291(大于 1024)可能是危险的。 (3认同)
  • +1 表示“保持日志清晰” (2认同)

Bor*_*ide 11

使用非标准 ssh 端口需要更多解释和文档,并回答“我无法登录”电子邮件。

我认为在非标准端口上运行 sshd的以下好处比它造成的问题更重要:

  • 99.9999% 的蛮力攻击是由仅查找端口 22 并且从不浪费任何时间尝试发现非标准端口的机器人执行的。蛮力攻击和诸如denyhostsfail2ban 之类的对策会消耗资源,您只需在非标准端口上运行 ssh 服务器即可节省资源。
  • 您将摆脱有关机器人试图闯入您的系统的所有无用报告。如果登录失败报告中出现任何 IP,则很可能是人。

此外,如果你真的很讨厌,你总是可以在标准端口 22 上运行一个假的 sshd(带有DenyUsers *),而你的常规 sshd 在端口 54321 上运行。这将向你保证所有的机器人和入侵者-wannabes 将永远尝试登录拒绝所有登录的服务,因为没有人会想尝试找到您真正的sshd 服务。

我的 2 美分。

  • 这是事实,但增强安全性是有代价的。:) (3认同)

Ant*_*oun 11

出于任何“安全”原因这样做都是虚假的。这是不安全的默默无闻的安全的最好例子。

如果你想让你的日志更轻更干净,那么是的,它很有用,因为你不会得到那么多的端口敲击/脚本小子蛮力尝试。


Dan*_*iel 10

我会在标准端口上运行 ssh 并使用诸如fail2bandenyhosts 之类的东西来限制字典攻击的数量。

另一种选择是禁用使用密码登录,只允许使用 ssh 密钥登录。


Bli*_*izz 8

因为有很多坏人会扫描所有服务器 IP 以查找开放端口以试图利用。我曾经整天对我的 SSH 端口进行锤子攻击,直到我将它移到另一个端口和一个不再链接到我的任何网站的 IP 上。


pjm*_*rse 7

这很有用,因为尝试强力密码猜测攻击的脚本机器人通常专注于端口 22,因此更改端口通常会将它们扔掉。您需要在降低风险的价值与配置 ssh 客户端以连接到非标准端口的痛苦之间取得平衡(诚然,如果您没有很多用户连接,这不是一个很大的痛苦)。

或者,您可以通过关闭密码身份验证并要求使用 RSA 密钥身份验证来降低暴力破解风险。

我通常不会更改 SSHD 上的端口,所以我不能建议另一个号码,但请检查常用端口列表以找到另一个号码(即未被其他设备使用的号码,因此可能会被扫描) .


Chr*_*s S 6

我总是将我的 SSHd 更改为使用端口 2222,每个需要进入我的服务器的人都知道这一点,这已经不是什么秘密了。这样做绝对没有安全收益(除非潜在的黑客是一个绝对的白痴)。

我从中得到的唯一好处是,身份验证日志中没有 100 万次针对“root”、“alice”、“bob”、“sally”、“admin”等的登录尝试失败。


Fab*_*bio 5

通过默默无闻的安全性已被证明是无用的,出于上述所有原因(重新配置中的客户端问题、防火墙和代理问题等),我通常会使用标准端口配置 ssh 访问。

除此之外,我总是禁用 root 登录和密码身份验证,作为最后一步,我使用fail2ban来摆脱系统日志中那些烦人的消息。在 Debian/Ubuntu 中,它就像输入aptitude install fail2ban. 默认配置运行良好,但我通常将一些参数调整为更具限制性,具有更长的禁止时间(至少一天)并且只有 2 次失败的身份验证尝试作为禁止的触发器。