我如何保护 SSH?

我如何保护 SSH?

我检查 /var/log/secure 并得到以下日志:

Jul  9 13:02:56 localhost sshd[30624]: Invalid user admin from 223.196.172.1 port 37566
Jul  9 13:02:57 localhost sshd[30624]: Connection closed by invalid user admin 223.196.172.1    port 37566 [preauth]
Jul  9 13:03:05 localhost sshd[30626]: Invalid user admin from 223.196.174.150 port 61445
Jul  9 13:03:05 localhost sshd[30626]: Connection closed by invalid user admin 223.196.174.150 port 61445 [preauth]
Jul  9 13:03:16 localhost sshd[30628]: Invalid user admin from 223.196.169.37 port 62329
Jul  9 13:03:24 localhost sshd[30628]: Connection closed by invalid user admin 223.196.169.37 port 62329 [preauth]
Jul  9 13:03:29 localhost sshd[30630]: Invalid user admin from 223.196.169.37 port 64099
Jul  9 13:03:30 localhost sshd[30630]: Connection closed by invalid user admin 223.196.169.37 port 64099 [preauth]
Jul  9 13:03:45 localhost sshd[30632]: Invalid user admin from 223.196.174.150 port 22816
Jul  9 13:03:46 localhost sshd[30632]: Connection closed by invalid user admin 223.196.174.150 port 22816 [preauth]
Jul  9 13:06:17 localhost sshd[30637]: Invalid user admin from 223.196.168.33 port 33176
Jul  9 13:06:17 localhost sshd[30637]: Connection closed by invalid user admin 223.196.168.33 port 33176 [preauth]
Jul  9 13:07:09 localhost sshd[30639]: Invalid user admin from 223.196.173.152 port 61780
Jul  9 13:07:25 localhost sshd[30641]: Invalid user admin from 223.196.168.33 port 54200
Jul  9 13:07:26 localhost sshd[30641]: Connection closed by invalid user admin 223.196.168.33 port 54200 [preauth]
...

似乎有人试图通过 SSH 登录。我禁用了 root 用户登录并启用了公钥/私钥登录,但这是 DDoS 攻击吗?它会占用 RAM/CPU 吗?

我应该怎么办?

答案1

这只是人们扫描易受攻击的服务器时产生的正常的互联网背景噪音。

您可以添加一个 iptables 规则来限制传入连接的速率(例如,四分钟内四个),以进行简单的修复(但如果您打开了太多连接或有人伪造了来自您的地址的 SYN 数据包,这也会将您锁定):

iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 240 --hitcount 4 --name ssh-v4 --mask 255.255.255.255 --rsource -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name ssh-v4 --mask 255.255.255.255 --rsource -j ACCEPT

正确的解决方案是使用类似失败2ban它会解析日志文件中的失败登录并根据需要创建防火墙规则 - 需要做更多的工作来设置,但它需要建立连接并触发失败的身份验证,因此它不会像简单方法那样对伪造的连接尝试或成功登录做出反应。

答案2

正如@Simon Richter 提到的,那只是互联网背景噪音,您不必担心。您需要确保以下几点:

更改端口可以解决问题,但通过隐蔽性实现安全它会制造出安全的假象,但实际上却不安全。

以下是其他一些建议围绕 SSH,以及对主流“最佳实践”论点的反驳。

答案3

你在印度吗?列出的所有 IP 地址都在以下区块中:

223.196.160.0 - 223.196.191.255   

根据 WHOIS 数据库,该信息分配给

descr:   Andhra Pradesh State FiberNet Limited
address: 10-2-1,III Floor, FDC Complex,AC Guards,Hyderabad,Andhra Pradesh-500028

一个短期的解决方案是223.196.160.0/19在防火墙处阻止整个 IP 地址,但这会对 IP 地址进行微观管理,并且会成为一场艰苦的战斗。


相反,您可以拒绝所有 ssh,但您知道可信的源 IP 除外。只需注意不要将自己锁定在自己的主机之外。如果您没有静态 IP,您可以允许阻止,或者考虑在主机上运行 VPN 服务器。

或者,如果您不需要允许来自互联网的 SSH 连接,则只需拒绝它们并仅在需要时重新启用。

答案4

  1. 仅使用基于密钥的身份验证。许多机器人仅攻击基于密码的系统。无论如何,使用基于密码的身份验证都是坏主意。
  2. 使用https://www.sshguard.net/:几次登录失败后它会阻止 IP。
  3. 使用随机端口(不是 22),它将阻止一些机器人。
  4. 确保您的系统不允许 root 登录
  5. 如果您仅从家里登录,请考虑仅为您的 IP/ISP 或国家/地区打开 SSH。

相关内容