SSH端口频繁被暴力破解?安全组+DenyHosts实战阻断 核心要点图解,安全组设置白名单可大幅减少SSH暴露面。;DenyHosts能自动封禁多次失败登录的IP。;联合使用安全组与DenyHosts可有效阻断暴力破解。;定期检查日志和更新规则是持续防护的关键。
SSH端口频繁被暴力破解?安全组+DenyHosts实战阻断 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • 安全组设置白名单可大幅减少SSH暴露面。
  • DenyHosts能自动封禁多次失败登录的IP。
  • 联合使用安全组与DenyHosts可有效阻断暴力破解。
  • 定期检查日志和更新规则是持续防护的关键。

深夜收到服务器告警,SSH端口每秒都有数十次登录尝试,日志里塞满了来自全球各地的IP——这是很多运维和站长都经历过的噩梦。暴力破解不仅消耗资源,一旦得手,服务器将彻底沦陷。本文从实战出发,手把手教你用安全组和DenyHosts构建双重防线,快速阻断攻击,让SSH回归安宁。

一、确认攻击:你的SSH正在被暴力破解吗?

首先,登录服务器检查日志。CentOS/RHEL查看/var/log/secure,Ubuntu/Debian查看/var/log/auth.log。执行以下命令快速统计失败登录的IP:

grep 'Failed password' /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20

如果输出显示大量IP且尝试次数很高,说明正在被暴力破解。同时,用lastb命令查看失败登录记录,用netstat -tnp | grep :22检查当前SSH连接。确认攻击后,立即行动。

二、第一道防线:安全组精细化管控

安全组是云平台提供的虚拟防火墙,在流量到达服务器前就进行过滤,效率最高。登录云控制台,找到实例的安全组,编辑入站规则:

  • 只允许可信IP访问22端口:将源IP设置为你的办公网络或家庭宽带的公网IP(如203.0.113.0/24),协议TCP,端口22,策略允许。
  • 拒绝其他所有IP:添加一条规则,源0.0.0.0/0,端口22,策略拒绝。注意规则优先级,确保允许规则在前。
  • 如果IP不固定:可临时允许所有IP,但必须配合DenyHosts,并尽快改用密钥登录和修改端口。

配置后,用telnet 服务器IP 22从非白名单IP测试,应显示连接被拒绝。安全组规则修改立即生效,无需重启服务器。

三、第二道防线:DenyHosts自动封禁

DenyHosts通过分析日志,自动将多次失败登录的IP加入/etc/hosts.deny,实现动态防御。安装方法:

# CentOS
 yum install denyhosts -y
# Ubuntu
 apt-get install denyhosts -y

编辑配置文件/etc/denyhosts.conf,关键参数:

SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
BLOCK_SERVICE = sshd
DENY_THRESHOLD_INVALID = 3
DENY_THRESHOLD_VALID = 5
DENY_THRESHOLD_ROOT = 2
PURGE_DENY = 1w

启动并设置开机自启:

systemctl start denyhosts
systemctl enable denyhosts

查看封禁列表:cat /etc/hosts.deny。若误封,可编辑该文件删除对应IP,并重启DenyHosts。

四、联合防护效果对比与检查清单

安全组和DenyHosts各有侧重,联合使用效果最佳。对比见下表:

防护层作用范围响应速度资源消耗适用场景
安全组网络层即时无固定IP管理、粗粒度过滤
DenyHosts主机层分钟级低动态封禁、IP不固定

部署后,按以下清单检查:

  • 安全组是否只允许必要IP访问22端口?
  • DenyHosts服务是否运行?systemctl status denyhosts
  • 日志中是否还有大量失败记录?tail -f /var/log/secure
  • 是否已禁用root登录和密码认证?
  • 是否定期审查封禁列表和规则?

五、进阶加固与行动建议

安全组和DenyHosts能解决大部分暴力破解,但并非万能。建议进一步:修改SSH默认端口(如Port 2222),禁用密码登录(PasswordAuthentication no),使用密钥认证,并安装Fail2ban作为补充。若使用AegisX,其主机安全模块可自动识别并阻断暴力破解行为,提供更智能的防护。

行动建议:立即检查你的SSH日志,配置安全组白名单,安装DenyHosts,并执行上述检查清单。安全无小事,主动防御才能避免灾难。

常见问题(FAQ)

如何判断SSH是否正在被暴力破解?

查看系统日志/var/log/secure(CentOS)或/var/log/auth.log(Ubuntu),搜索'Failed password'。若出现大量来自不同IP的失败记录,且频率很高,说明正在被暴力破解。也可用命令`grep 'Failed password' /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr`统计攻击IP。

安全组和DenyHosts有什么区别,该用哪个?

安全组是云平台层面的网络防火墙,控制入站流量,能直接拒绝特定IP或端口的访问,效率高且不消耗服务器资源。DenyHosts是主机层面的工具,通过分析日志动态封禁多次尝试失败的IP。两者互补:安全组做粗粒度过滤,DenyHosts做细粒度动态防御,建议同时使用。

DenyHosts安装后需要哪些基本配置?

主要修改/etc/denyhosts.conf:设置SECURE_LOG(日志路径)、HOSTS_DENY(黑名单文件)、BLOCK_SERVICE(如sshd)、DENY_THRESHOLD_INVALID(无效用户失败次数)、DENY_THRESHOLD_VALID(有效用户失败次数)、DENY_THRESHOLD_ROOT(root失败次数)以及PURGE_DENY(封禁时长)。配置后启动服务并设置开机自启。

安全组规则如何配置才能既安全又不影响访问?

遵循最小权限原则:只允许特定管理IP访问SSH端口(如公司出口IP),拒绝其他所有IP。如果管理IP不固定,可先允许0.0.0.0/0但配合DenyHosts,并尽快改用密钥登录和修改默认端口。定期审查规则,删除过期条目。

除了安全组和DenyHosts,还有哪些加固措施?

建议:1) 禁用root直接登录,使用普通用户+sudo;2) 启用密钥认证,禁用密码登录;3) 修改SSH默认端口;4) 安装Fail2ban作为替代或补充;5) 定期更新系统和SSH版本;6) 使用堡垒机或跳板机集中管理。