![无数的(已停止的?) SSH 进程 - 如何阻止它发生?](https://linux22.com/image/676589/%E6%97%A0%E6%95%B0%E7%9A%84%EF%BC%88%E5%B7%B2%E5%81%9C%E6%AD%A2%E7%9A%84%EF%BC%9F%EF%BC%89%20SSH%20%E8%BF%9B%E7%A8%8B%20-%20%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%E5%AE%83%E5%8F%91%E7%94%9F%EF%BC%9F.png)
如果我不停止创建数千个(准确地说是 9000 个)SSH 进程,我的 vServer 托管商威胁要取消我们的合同。我不知道他们是让这些进程失效了,还是他们发现这些进程时就是这样的。他们给我发了一份文件,里面有数千行代码,比如
sshd 19716 0.0 0.0 0 0 ? Z Jan25 0:00 [sshd] <defunct>
sshd 19739 0.0 0.0 0 0 ? Z Jan25 0:00 [sshd] <defunct>
sshd 19753 0.0 0.0 0 0 ? Z Jan25 0:00 [sshd] <defunct>
sshd 19776 0.0 0.0 0 0 ? Z Jan26 0:00 [sshd] <defunct>
我不知道这是怎么发生的,我想知道一个解决方案,这样在再次打开服务器之前,我的账户就不会被取消!
我唯一能想到的是我经常使用非常不稳定的连接连接到服务器。这会导致在几周和几个月内创建数千个进程吗?
我的服务器会被黑客入侵吗?我不使用 fail2ban(我也不知道如何使用),但我确实使用密钥文件。
该服务器在带有 Apache 和 Tomcat 的 Debian 上运行。
答案1
采取预防措施。选项从最好到最坏都有。
选项 1:使用 fail2ban 来限制失败
安装 fail2ban。这是您的最佳选择,因为它会在尝试几次后阻止任何尝试使用无效凭据进行连接的人。
选项 2:限制 iptables 中的失败尝试次数
设置 iptables 来限制与 SSH 的新连接。
# Create new SSHSCAN chain
iptables -N SSHSCAN
# Send new SSH attempts to SSHSCAN chain.
iptables -A INPUT -m tcp -p tcp --dport 22 -m state --state NEW -j SSHSCAN
# Identify a recent-match list, based on the source address
iptables -A SSHSCAN -m recent --set --name SSH --rsource
# Log and drop if there are more than 5
iptables -A SSHSCAN -m recent --update --seconds 10 --hitcount 5 --name SSH --rsource -j LOG --log-prefix "Anti SSH-Bruteforce: " --log-level 6
iptables -A SSHSCAN -m recent --update --seconds 10 --hitcount 5 --name SSH --rsource -j DROP
查看信息有关 iptables 中最近匹配的更多信息。
感谢@gaurav-pundir 提供的命令。
选项 3:限制 SSH 访问的来源
选项 3 是设置防火墙,以确保只有您可以访问:阻止 SSH,以便只有您的 IP(如果是静态的)或您的提供商网络可以访问。网络阻止选项不实用,您可能没有可用的固定 IP。即使它是最糟糕的,对于动态地址,您可能考虑实施它,即使您已经实施了其他选项之一。
问题来源
编辑:从您最近的列表来看,我认为您的不稳定连接正在留下僵尸连接。这不会解决您的问题,但无论如何也不会造成任何伤害。