Hotdry.

Article

SSH 暴力破解检测与防御策略实战:从配置加固到流量分析

解析 SSH 暴力破解的检测机制与防御策略,涵盖 fail2ban 配置、sshd 加固与实时流量分析的工程化实践。

2026-04-30security

互联网上的 SSH 服务器每天都在遭受大量暴力破解攻击。根据安全研究数据,针对 SSH 服务的扫描和暴力尝试占据了服务器安全事件的主要部分。攻击者使用自动化工具对常见用户名和弱密码进行组合尝试,一旦成功突破即可获得服务器控制权。本文将从攻击检测机制、加固配置、工具选型三个维度,提供可落地的工程实践方案。

SSH 暴力破解的攻击特征与检测原理

暴力破解攻击的核心特征是短时间内大量登录失败尝试。攻击者通常使用工具如 Hydra、Medusa 或自定义脚本,对目标 IP 的 22 端口持续发送认证请求。这些请求在日志中表现为连续的失败记录,常见的特征包括:同一 IP 在数分钟内产生数十甚至数百次认证失败;使用的用户名往往是常见默认值如 root、admin、test 等;密码字典涵盖弱密码和历史泄露库。

检测机制主要依赖日志分析。Linux 系统的 SSH 服务通过 syslog 或 systemd journal 记录认证事件,典型的失败日志包含 "Failed password" 或 "authentication failure" 关键字。基于主机的检测工具如 Fail2Ban 通过解析这些日志,识别短时间内超过阈值的失败尝试,从而触发封禁动作。网络层面的检测则通过分析 NetFlow、sFlow 或镜像流量,统计来自同一源 IP 的 TCP 连接频率和 SSH 协议交互模式,识别异常的扫描行为。

值得注意的是,现代攻击者已采用分布式策略,使用僵尸网络或代理池进行低频尝试,单个 IP 的失败次数可能不足以触发传统阈值。针对这类隐蔽攻击,需要结合行为分析、异常检测算法或蜜罐诱捕技术进行防御。

sshd 加固:从配置层面切断攻击路径

最有效的防御是让攻击者根本无法通过 SSH 完成认证。sshd_config 的加固配置是安全纵深的第一道防线。首先必须禁用密码认证,改为仅允许公钥认证。公钥认证基于非对称加密,即使攻击者截获了通信内容也无法推导出私钥。配置方法是在 sshd_config 中设置 PubkeyAuthentication yesPasswordAuthentication no,同时确保 PermitEmptyPasswords no

其次应禁用 root 用户直接登录。root 账户是攻击者的首要目标,禁用 PermitRootLogin yes 后,攻击者即使破解了普通用户密码,也无法获得系统最高权限。管理员需要通过普通用户配合 sudo 进行日常管理操作。

限制认证尝试次数可以显著降低暴力破解的成功率。MaxAuthTries 3 将每次连接允许的认证尝试次数限制为三次,超出后连接将被断开。LoginGraceTime 30 将登录宽限期设为 30 秒,攻击者无法在单次连接中尝试大量密码组合。

此外,建议修改默认 SSH 端口。虽然这只能防止简单的自动化扫描,但对于降低噪音和安全告警复杂度有实际效果。配置 Port 22022 等非标准端口,并确保在防火墙中同步更新。对于暴露在公网的服务器,还应配置防火墙规则,仅允许特定管理 IP 段访问 SSH 端口,结合云安全组的白名单机制实现 Access Control List 级别的访问控制。

Fail2Ban 配置:自动化封禁与告警

Fail2Ban 是最广泛使用的 SSH 暴力破解防护工具,其工作原理是监控日志文件,使用正则表达式匹配失败认证事件,当某个 IP 在配置时间窗口内超过阈值次数时,自动调用 iptables、nftables 或 firewalld 将其封禁。典型的 SSH 监狱配置如下:在 jail.local 中定义 [sshd] 段,enabled = true 启用监狱,port = ssh 指定端口,filter = sshd 使用内置过滤器,findtime = 5m 设置五分钟的检测窗口,maxretry = 3 设置三次失败即触发封禁,bantime = 1h 封禁一小时。生产环境中建议根据业务特点调整阈值,对于管理 IP 应配置 ignoreip 参数将其排除,避免管理员自身被封禁。

对于更严格的场景,可以将 bantime 设置为 24 小时甚至更长,并通过 findtimemaxretry 的组合实现更灵敏的检测。需要注意的是,Fail2Ban 的检测依赖日志写入,现代 Linux 系统多使用 systemd journal,配置 backend = systemd 可确保正确读取日志。Fail2Ban 还能与邮件通知集成,在触发封禁时发送告警,便于安全团队及时响应。

sshguard 是另一个可选方案,它使用相同的检测逻辑但更轻量,支持直接调用 nftables 进行封禁。对于已经部署 nftables 作为防火墙的服务器,sshguard 可以减少组件依赖。

实时流量分析:网络层面的主动防御

除了主机层面的日志检测,网络流量的实时分析可以发现更隐蔽的攻击行为。通过部署网络流量采集探针,收集 SSH 服务的入站连接数据,分析源 IP 的连接频率、会话建立时间、认证序列特征,可以识别分布式暴力破解和低速扫描。常见的分析指标包括:单个 IP 在单位时间内的 TCP 连接数、SSH 协议版本协商中的客户端 / 服务器版本分布、认证失败后的重连行为模式。

基于 NetFlow 或 sFlow 的分析工具如 ntopng、Zeek 可以提供可视化的流量监控。对于大规模基础设施,可以使用 SIEM 平台如 Elastic Security 或开源的 Wazuh,将 SSH 认证日志与网络流量数据关联,实现跨主机的攻击溯源。当同一个攻击者 IP 在多台服务器上出现失败尝试时,可以通过共享的威胁情报库实现联动封禁。

蜜罐技术是另一种有效的补充手段。部署伪装成真实 SSH 服务的蜜罐,诱捕攻击者的用户名、密码和执行的命令,可以获取攻击者的指纹信息和工具特征。这些情报可以反馈到防火墙规则和检测系统中,提升整体防御能力。

工程实践清单与参数建议

综合上述分析,提供可落地的工程实践参数建议。在 sshd 加固方面,推荐配置:PasswordAuthentication noPubkeyAuthentication yesPermitRootLogin noPermitEmptyPasswords noMaxAuthTries 3LoginGraceTime 30X11Forwarding no。在 Fail2Ban 配置方面,推荐参数:findtime = 10mmaxretry = 5bantime = 1h 起,并根据管理需求配置 ignoreip 白名单。在防火墙层面,使用 iptables 或 nftables 限制 SSH 端口仅对管理网段开放,结合云安全组实现多层访问控制。

定期审计 SSH 登录日志,识别异常登录时间和来源 IP;定期更换 SSH 密钥对;使用密钥管理服务或硬件令牌存储私钥;启用双因素认证进一步提升安全性。这些措施共同构成纵深防御体系,即使单一防线被突破,仍有其他层级提供保护。

资料来源

  • Hardening SSH: Fail2Ban, Nftables & Cloud Firewalls | DigitalOcean
  • Protect Your SSH Server from Brute Force Attacks - DEV Community

security