在端口 22 上使用 SSH 是否存在安全问题?

在端口 22 上使用 SSH 是否存在安全问题?

SSH 足够安全,不必担心对端口 22 的攻击,对吗?

将一台机器连接到 SSH 服务器后,sshd-config 或 SSH-config 文件中的设置是否需要在创建密钥后进行更改?

答案1

将 sshd 移至另一个端口只是通过隐蔽性来实现安全性。更好的方法是创建分层防御。首先禁用密码验证并限制可以通过 ssh 登录的用户列表。然后限制可以连接的源 IP 或网络,并设置限制规则。确保记录失败的尝试并定期检查日志。如果您可以对暴力攻击发出警报就更好了。有相当多的工具可以做到这一点。

如果您可以腾出一台服务器作为堡垒主机,那么您可以删除对服务器的直接 ssh 访问,并强制所有客户端通过一台您可以监控的主机。一旦客户端成功登录,您可以通过添加受用户或组限制的出站 iptables 规则来限制它们跳转到的位置。

答案2

如果您禁用密码验证,那么您就没问题了。如果您允许,请使用 fail2ban 来阻止暴力破解密码。您将在开放的 ssh 端口上获取它们。

答案3

如果您禁用密码,那就没问题了。您还可以在 sshd_config 文件中限制用户帐户。

MaxStartups 3:60:8
AllowUsers myaccount

作为进一步的限制,您还可以限制可以连接的主机,但您可能不想这样做。

MaxStartups 是我尝试的一种简单的连接“tarpitting”形式,但我不确定它的效果如何。

答案4

对于暴力攻击,这里有一个使用 Iptables 设置的简单规则:

# we create a new chain for bruteforce attack detection
iptables -N BRUTE

# allow 10 new connections in a timeframe of 60 seconds
iptables -A BRUTE -m recent --set --name CHECK --rsource
iptables -A BRUTE -m recent --update --seconds 60 --hitcount 10 \
  --name BRUTE --rsource -j DROP

# add a rule in the INPUT chain to check for SSH against the BRUTE chain
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j BRUTE

它与 Iptables 模块“ipt_recent”配合使用,该模块实际上将文件存储在“/proc/net/ipt_recent/姓名“ (在这种情况下姓名蛮力)。

这些规则将允许新的同一 IP 的连接延迟时间为一分钟,否则将被暂时阻止,并且该 IP 必须停止针对该服务的新连接尝试。虽然设置起来非常简单,但与失败2ban它无法区分成功的连接和失败的尝试。

相关内容