防止 – 大量的IP失败login尝试

我正在运行一个CentOS 6.3服务器,目前每十五分钟就会收到来自我的服务器的标题为“大量来自IP的失败login尝试”的电子邮件。

当然,下面的configuration应该意味着只有使用(我的静态IP)的人才能够尝试login?

如果是这种情况,这些远程未知的用户试图login到哪些产生这些电子邮件?

目前的安全步骤:

  • 根login只允许without-password
  • StrictModes yes
  • SSH密码login被禁用 – PasswordAuthentication no
  • 使用SSH公钥
  • SSH端口已被更改为大于40k的数字
  • cPHulk已configuration并正在运行
  • login限于特定的IP地址
  • cPanel和WHM只限于我的静态IP

sshd_config中

 [email protected] 

hosts.allow文件

 ALL : <Static IP> 

hosts.deny中

 ALL : ALL 

iptables的

 iptables -I INPUT -s <Static IP> -p tcp -m tcp --dport 22 -j ACCEPT iptables -I INPUT -p tcp -m tcp --dport 22 -j REJECT 

我会做的是使用Fail2Ban &指向你的SSH日志文件。 这样,如果从同一IP获得指定次数的失败尝试,fail2ban会自动添加防火墙规则,以在指定的时间段内丢弃来自这些IP的数据包。

有了这个configuration,sshd仍然会报告失败的尝试:

 Dec 3 00:56:35 servername sshd[31242]: refused connect from li471-78.members.linode.com (50.116.13.78) Dec 3 00:56:40 servername sshd[31244]: refused connect from li471-78.members.linode.com (50.116.13.78) 

也许你的日志警报正在触发? 检查您的日志,以确认是这种情况。

您可以通过更改警报function的灵敏度/search模式来使其消失。

您也可以使用防火墙阻止除IP地址以外的所有传入SSH通信。 如果你使用防火墙,没有什么会打到sshd,所以没有什么会出现在你的日志中。

前面一点细节。 您看到的日志条目看起来像来自hosts.deny ,因为sshd是“TCP包装”(通常在Linux上)。 有关详细信息,请查阅man tcpd

使用防火墙规则,您可以更好地调整(sys)日志中的结果。 所以这是将您的静态IP列入白名单并将其他人列入黑名单的地方。

如果你想把你现有的规则转换成iptables你可以使用下面的shell脚本(用符合你需要的variablesreplacePORTSMYIP ):

 #!/bin/bash IPT="echo /sbin/iptables" MYIP=1.2.3.4 PORTS="22 443 8080" $IPT -P INPUT DROP for port in $PORTS; do $IPT -I INPUT -p tcp --dport $port -s $MYIP -j ACCEPT done 

…或更短:

 #!/bin/bash IPT="echo /sbin/iptables" MYIP=1.2.3.4 PORTS="22 443 8080" $IPT -P INPUT DROP $IPT -I INPUT -p tcp -m multiport --dports ${PORTS// /,} -s $MYIP -j ACCEPT 

…或两个硬编码行:

 /sbin/iptables -P INPUT DROP /sbin/iptables -I INPUT -p tcp -m multiport --dports 22,443,8080 -s 1.2.3.4 -j ACCEPT 

不幸的是,没有办法推断出端口号,所以你最终可能会对这些端口进行硬编码。

另外请记住,您可能需要在设置策略之前使用iptables -X INPUT刷新您的INPUT表。

上面,用几句话来解释,将INPUT表的默认策略设置为DROP ,然后只允许来自给定IP( $MYIP )的给定端口( $PORTS )的TCP连接。


你似乎对一个非常严格的locking感兴趣,除了你自己的静态IP,所以根本不需要下面的东西。

我一直在使用下面的netfilter规则,正如我之前在ServerFault上发布的一篇文章中指出的那样: 每天有几百次闯入尝试是正常的吗?

我不打算在这里重复规则,因为它们已经存在于这个网站上。 但是,你必须记住,你仍然会得到一些日志消息,直到IP被自动放到tarpit中。 一般来说,我不认为你必须担心这么多的尝试,给你很好的sshdconfiguration。 调整tarpit时间来限制攻击者的时间,或者尽快行动,但要记住不要把自己锁在外面。

而且,最近我经过testing,成长起来相当喜欢sshguard 。 尽pipe很多人将其与Fail2Ban进行比较,但我认为它的范围更广(也不限于sshd )。 这个工具可以使用各种工具来parsing日志(直接或者在你的系统日志工具放入文件之后)以及各种设施(如netfilter / iptables )。

每当人们顽强拼搏的时候,我已经把完整的防火墙(防火墙)。

如果只有日志条目烦人,你可以configuration你的日志logcheck (或其他工具)来过滤这些或更改sshd绑定的端口。 然而,安全的方面,我认为这蛇油。

您可能已被黑客入侵。

在服务器上以root rpm -Vv keyutils-libs执行rpm -Vv keyutils-libs

你看到一个5? 如果这样的话,其中一个库被replace为一个攻击版本。

有关攻击的更多细节(可能使用cPanel)可以在这里find。

我使用这个personnaly限制访问我的服务器上的一些端口:

 -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSHACCESS --rsource -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 20 --name SSHACCESS --rsource -j DROP 

你可以玩--seconds--hitcounts适合你的上下文。

你也可以使用一些更复杂的规则,如端口敲门。 在这种情况下,您可以发送请求(可以是ping,tcp,telnet或任何你想要的),然后系统打开SSH端口实例只有那个IP几秒钟,你可以做ssh到服务器。 检查这个链接来实现这个与iptables

这是一个简单的端口敲1000端口:

 -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 1000 -m recent --set --name KNOCKING --rsource -A INPUT -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 5 --name KNOCKING --rsource -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j DROP 

现在你可以像这样ssh到你的服务器:

 telnet <ip> 1000 ; ssh <ip> 

如果你需要更多的帮助,请让我知道。

你也可以使用-m connlimit来限制不正确的尝试次数来减缓攻击者的攻击速度,就像他们在这里解释的一样: http ://www.cyberciti.biz/faq/iptables-connection-limits-howto/。

为不同的IP块添加排除和/或不同的时间是可能和简单的。

我也会考虑改变默认的sshd端口为任何不常见的东西。

幸运的是,我是一个本地ISP的情况,我知道我付费的静态IP 永远不会改变,没有事先通知,因为我只需要从这个位置更改服务器,因此我可以阻止所有的SSH访问以外的位置通过iptables和一个更高的ssh端口。

因此,我在sshd_config应用了以下更改:

 #example Port 40000 

并使用我的静态IP地址和ssh端口创build了一个iptables条目:

 iptables -A INPUT -p tcp -s 1.1.1.1 --dport 40000 -j ACCEPT 

到目前为止,这似乎已经成功了!