预防 - 来自 IP 的大量登录尝试失败

预防 - 来自 IP 的大量登录尝试失败

我正在运行 CentOS 6.3 服务器,目前大约每 15 分钟从我的服务器收到题为“来自 IP 的大量登录尝试失败”的电子邮件。

当然,通过以下配置,这是否意味着只有使用(我的静态 IP)的人才能尝试登录?

如果是这样的话,这些远程未知用户试图登录哪里并生成这些电子邮件?

现行安全措施:

  • 仅允许 root 登录without-password
  • StrictModes yes
  • SSH 密码登录已禁用 -PasswordAuthentication no
  • 使用 SSH 公钥
  • SSH 端口已更改为大于 40k 的数字
  • cPHulk 已配置并正在运行
  • 登录限制到特定 IP 地址
  • cPanel 和 WHM 仅限于我的静态 IP

sshd_配置

[email protected]

主机允许

ALL : <Static IP>

主机拒绝

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

答案1

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

答案2

使用该配置,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)

也许您的日志警报因此而触发?请检查您的日志以验证是否确实如此。

您可以通过更改警报功能的敏感度/搜索模式来消除这种情况。

您还可以使用防火墙阻止除您的 IP 地址之外的所有传入 SSH 流量,从而消除此问题。如果您使用防火墙,则不会有任何内容到达 sshd,因此您的日志中也不会出现任何内容。

答案3

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

使用防火墙规则,您可以更好地微调最终出现在 (sys)log 中的内容。因此,这是将您的静态 IP 列入白名单并将其他 IP 列入黑名单的地方。

如果您想要将现有规则转换为,iptables则可以使用以下 shell 脚本(将PORTS和替换MYIP为符合您需求的变量):

#!/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

不幸的是,没有很好的方法可以推断出端口号,所以您最终可能会对其进行硬编码。

还请记住,您可能希望INPUT在设置策略之前使用 刷新表格iptables -X INPUT

上面这段话,简单解释一下,就是将INPUT表的默认策略设置为DROP,然后只允许$PORTS从给定的 IP()到给定的端口()建立 TCP 连接$MYIP


您似乎对非常严格的封锁感兴趣,除了您自己的静态 IP 之外,因此可能根本不需要以下内容。

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

我不会在这里重复这些规则,因为它们已经存在了站点。但是,您必须记住,在 IP 自动放入 tarpit 之前,您仍会收到一些日志消息。一般来说,我认为您不必太担心尝试次数,因为您的sshd配置非常完善。调整 tarpit 时间以将攻击者限制更长时间或更早采取行动,但请记住不要将自己锁定在外。

此外,最近我测试了它,并且非常喜欢它安全卫士。虽然很多人将它与 Fail2Ban 进行比较,但我认为它的适用范围更广(也不限于sshd)。此工具可以使用各种工具来解析日志(直接解析或在您的 syslog 工具将其放入文件后解析)以及各种工具来阻止(例如netfilter/ iptables)。

每当人们坚持尝试时,我都会设置全面封锁(防火墙)。

如果只是日志条目让您感到烦恼,请配置您的logcheck(或其他工具)以过滤这些条目或更改绑定的端口sshd。但是,从安全角度来看,我认为这是骗人的把戏。

答案4

我个人使用这个来限制对我的服务器上某些端口的访问:

-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 或任何你想要的),然后系统只为该 IP 打开 SSH 端口几秒钟,然后你就可以 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>

如果您需要更多帮助,请告诉我。

相关内容