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

she*_*run 19 security ssh

我注意到很多管理员更改了默认的 ssh 端口。这样做有什么合理的理由吗?

Mic*_*zek 27

最可能的原因是让人们更难随意尝试暴力破解他们可以找到的任何 SSH 登录。我的面向互联网的机器使用默认的 SSH 端口,我的日志曾经充满了这样的东西(摘自一个实际的日志文件):

sshd[16359]: Invalid user test from 92.241.180.96
sshd[16428]: Invalid user oracle from 92.241.180.96
sshd[16496]: Invalid user backup from 92.241.180.96
sshd[16556]: Invalid user ftpuser from 92.241.180.96
sshd[16612]: Invalid user nagios from 92.241.180.96
sshd[16649]: Invalid user student from 92.241.180.96
sshd[16689]: Invalid user tomcat from 92.241.180.96
sshd[16713]: Invalid user test1 from 92.241.180.96
sshd[16742]: Invalid user test from 92.241.180.96
sshd[16746]: Invalid user cyrus from 92.241.180.96
sshd[16774]: Invalid user temp from 92.241.180.96
sshd[16790]: Invalid user postgres from 92.241.180.96
sshd[16806]: Invalid user samba from 92.241.180.96
Run Code Online (Sandbox Code Playgroud)

这些天我使用DenyHosts来阻止多次验证失败的 IP,但切换端口可能同样容易;几乎所有此类蛮力攻击都不会费心扫描以查看您的 sshd 是否正在侦听另一个端口,他们只会假设您没有运行一个端口并继续前进


max*_*zig 16

不,这是一种隐匿策略的安全性

如果您的 sshd 设置不足以面对仅尝试端口 22 的愚蠢脚本小子,那么无论如何您都会遇到问题。

更理性的反应是:

  • 确保您的用户使用的是难以猜测/蛮力的好密码
  • 禁用密码验证(至少对于重要帐户)并只使用公钥验证
  • 注意 ssh 安全问题和升级

有些人可能也会对 sshd 写入系统日志的噪音感到恼火,例如:

Jan 02 21:24:24 example.org sshd[28396]: Invalid user guest from 212.129.23.128
Jan 02 21:24:24 example.org sshd[28396]: input_userauth_request: invalid user guest [preauth]
Jan 02 21:24:24 example.org sshd[28396]: error: Received disconnect from 212.129.23.128: 3: com.jcraft.jsch.JSchException: Auth fail [preauth]
Jan 02 21:24:24 example.org sshd[28398]: Invalid user ubnt from 212.129.23.128
Jan 02 21:24:24 example.org sshd[28398]: input_userauth_request: invalid user ubnt [preauth]
Jan 02 21:24:24 example.org sshd[28398]: error: Received disconnect from 212.129.23.128: 3: com.jcraft.jsch.JSchException: Auth fail [preauth
Run Code Online (Sandbox Code Playgroud)

然后可能很想隐藏 sshd 端口或使用自动阻塞解决方案(如 DenyHosts、Fail2ban 或 BlockHosts)以再次提高信噪比

但确实存在更好的替代方案。例如,你可以配置你的 syslog 守护进程,这样 sshd 日志噪音只被写入 - 比如说 -/var/log/sshd-attempts.log并且信号(即剩余的 sshd 日志消息)/var/log/messages像以前一样被写入等等。

自动拦截工具的部署应仔细考虑,因为安全增加了更多的复杂性相关系统的手段也越来越危险剥削。事实上,多年来,每个DenyHostsFail2banBlockHosts都有多个DoS 漏洞报告。

  • 我真的不同意“它是默默无闻的安全性”我认为,在这种情况下,这个答案是一个常见的谬论。@Michael 的推理通常表明在其他地方有更好的理由。这主要是为了摆脱所有脚本化的机器人攻击。并不一定意味着您害怕它们,或者认为它对坚定的攻击者有效。我知道我从不担心他们真的会进来。但所有的原木都令人讨厌。 (4认同)
  • @xenoterracide:如果您只关心日志文件的可读性,那么还有其他更好的选择来排除噪音,而不是改变端口作为一种模糊策略,这就是问题所在。关于 IP 封锁,这不是问题的一部分:请注意,增加安全相关系统的复杂性也意味着增加被利用的风险。例如,考虑 http://seclists.org/fulldisclosure/2007/Jun/121 http://www.ossec.net/main/attacking-log-analysis-tools 。是的,DenyHosts 受到了影响。 (2认同)

Gil*_*il' 5

更改 SSH 端口主要是为了安全。它给你一种已经做了某事的模糊感觉。您已将 SSH 端口隐藏在门垫下。

如果您在互联网上运行 SSH 服务器,您会在日志中看到大量失败的登录尝试,这些尝试来自于在服务器旧版本中寻找愚蠢的弱密码、弱密钥和已知漏洞的机器人。失败的尝试就是:失败的尝试。就评估你的脆弱程度而言,它们完全无关。您需要担心的是成功的入侵尝试,但您不会在日志中看到这些内容。

更改默认端口将减少此类机器人的攻击次数,但这只会挫败最不成熟的攻击者,他们会被任何体面的安全措施(定期应用安全更新、相当强的密码或禁用密码身份验证)阻止。唯一的好处是减少了日志量。如果这是一个问题,请考虑使用DenyhostsFail2ban之类的东西来限制连接速率,它也会对您的带宽有好处。

更改默认端口有一个主要缺点:它使您不太可能从防火墙后面登录。与随机的其他端口相比,防火墙更有可能让服务通过其默认端口。如果您没有运行 HTTPS 服务器,请考虑让 SSH 也侦听端口 443(或将传入的 TCP 请求从端口 443 重定向到端口 22),因为某些防火墙允许在端口 443 上无法解码的流量,因为它看起来就像 HTTPS 一样。