我正在运行 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>
如果您需要更多帮助,请告诉我。