Linux 认证日志监控实战:从 auth.log 到暴力破解告警

Linux 认证日志(auth.log/secure)记录着每一次登录尝试,是发现暴力破解与入侵的第一现场。本文讲解认证日志的关键事件解读、结构化切割方法,以及用观测云实现"采集—看板—告警—加固"的完整监控闭环。

最佳实践
Linux 认证日志监控实战:从 auth.log 到暴力破解告警技术指南封面

Linux 认证日志(Authentication Log)是记录系统身份验证相关事件的安全日志,常见 Debian/Ubuntu 配置写入 /var/log/auth.log,常见 RHEL/CentOS 配置写入 /var/log/secure,具体覆盖范围取决于服务、syslog 与 journal 配置,并不保证记录全过程。 只要服务器暴露在公网,这份日志里就会持续出现来自全球的暴力破解尝试——不监控它,等于蒙着眼睛守门。

核心要点速览

  • 认证日志的核心价值:回答"谁(用户名)在何时从哪里(IP)用什么方式(密码/密钥)登录,结果如何";
  • 重点盯四类事件:Failed password、Invalid user、Accepted(成功登录)、sudo 提权;
  • 单台服务器可用 tail -f/journalctl -u ssh 查看,但监控告警必须集中化;
  • 集中采集前先验证用户名、来源 IP、事件类型和时间;告警按这些已解析字段设置。

认证日志里该盯哪些事件?

实时查看(Ubuntu/Debian):sudo tail -f /var/log/auth.log;RHEL/CentOS 用 /var/log/secure;systemd 系统可按实际 unit 使用 journalctl -u ssh -f 或 -u sshd;这种筛选只覆盖对应 SSH 服务,并不包含全部 sudo/PAM 日志。

一条典型的失败登录记录:

Feb 10 15:45:14 ubuntu-lts sshd[47343]: Failed password for root from 192.0.2.10 port 33990 ssh2

这一行就回答了五个问题:何时(Feb 10 15:45:14)、谁(root)、结果(密码失败)、来源(192.0.2.10:33990)、方式(password;ssh2 表示 SSH 协议版本)。旧式时间戳未含年份和时区,解析时需结合来源补齐。需要重点关注的事件模式:

日志特征 含义 风险解读
Failed password for root from ... root 密码尝试失败 单次可能是输错密码;频率与上下文才支持暴力破解判断
Invalid user xxx from ... 尝试不存在的用户名 扫描探测常见账户名
Accepted publickey/password for ... 登录成功 需核对是否本人/白名单
sudo: ... COMMAND=... sudo 提权执行命令 权限使用审计
authentication failure(PAM) 认证失败明细 配合上文定位账户

为什么必须结构化?

原始 syslog 的消息正文是非结构化文本,"哪个 IP 失败最多"这种问题靠 grep 勉强能答,但无法持续监控、无法做看板。结构化的目标是把每条日志变成统一字段:event_name(failed_login / successful_login / sudo_command...)、username、src_ip、auth_method 等。

使用观测云时,先按日志采集文档指定实际认证日志路径,再用 Pipeline grok 脚本提取字段。例如匹配失败登录的规则应以当前系统的一条真实日志测试:

grok(_, "Failed password for (invalid user )?%{NOTSPACE:username} from %{IP:src_ip} port %{NUMBER:port}")

按已识别的认证事件设置标准字段,例如失败登录映射 status = "error",成功登录映射 status = "info",结合年份和时区提取 time [1]。不要仅靠任意 Failed 子串分类;未提取 status 时的表现取决于采集与解析配置 [2]。

集中化分析:查看器与仪表板

日志上报后,在日志查看器中即可完成原需写 SQL 的分析 [3]:

  • 看趋势:切换图表模式,按 status 堆叠,观察失败登录随时间的分布;
  • 找源头:按 src_ip、username 字段分组统计,快速回答"谁在被扫、谁在扫";
  • 归并噪声:用聚类分析把海量 Failed password 记录按模式聚合,新出现的异常模式(比如开始尝试 Invalid user admin)一眼可见。

高频分析视图(失败登录 TOP IP、被攻击 TOP 用户名、成功登录明细)可从查看器导出到仪表板,形成长期的安全监控看板。

配置告警:让入侵尝试主动找上门

在监控 > 监控器 > 新建监控器 > 日志检测中配置规则检测 [4],以下为逻辑条件示例,并非可直接粘贴的查询语法,需在监控器中配置并验证:

  1. root 成功登录检测:筛选已解析的 username 为 root 且 event_name 为 successful_login,阈值设为"出现 ≥ 1 条即触发",再用测试事件验证检测周期和通知延迟;
  2. 暴力破解告警:筛选 source 为 auth 且 event_name 为 failed_login,检测"同一 src_ip 5 分钟内失败 > 20 次";
  3. 非白名单 IP 登录成功:成功登录事件中 src_ip 不在允许清单内即触发。

告警事件经告警策略路由到钉钉/企业微信/飞书通知对象,在事件中心查看检测结果。还可扩展检测:密码方式登录成功(应全走密钥)、非白名单用户提权到 root、登录凭据填充(同一 IP 尝试大量不同用户名)等场景。

最后一步:把监控结论变成加固动作

监控发现的问题要落地为防御措施,按优先级:

  • sshd_config 设置 PermitRootLogin no,先用 sshd -t 和有效配置检查,再按服务方式重载;保留现有会话并测试新登录;
  • 若只允许密钥认证,除 PasswordAuthentication no 外还需核对 KbdInteractiveAuthentication、PAM 与 Match 配置;MFA 场景要保留所需认证方式并配置 AuthenticationMethods;
  • 修改默认 22 端口只能减少部分扫描噪声,不能替代认证与访问控制;
  • 用防火墙/安全组收敛可访问源,必要时上 Fail2Ban 动态封禁;
  • 开启多因素认证,最小化账户权限。

加固后若监控器再次触发"root 登录成功",需核对实例、有效配置、Match 条件、时间和采集延迟,不能直接判定配置被篡改。

总结

认证日志分析应从事件识别开始,依次验证字段、筛选条件和告警通知,再根据已确认的问题调整访问控制。检查范围应覆盖实际接入的主机,并定期用已知登录事件验证采集是否中断。

常见问题(FAQ)

Q:auth.log 每小时几千条 Failed password,正常吗?
对公网服务器完全正常——全球扫描器 7×24 小时在跑。关键不是"有没有",而是有没有针对真实存在用户名的高频尝试、以及是否出现成功登录。这正是要用监控器而非人眼盯的原因。

Q:sudo 提权操作也需要监控吗?
需要。sudo 记录是内部权限审计的证据,但不一定记录提权 shell 内的每条命令,建议对"COMMAND 含敏感操作(如 visudo、useradd、写 /etc)"配置日志检测规则。

Q:认证日志里会记录密码明文吗?
正常 sshd 认证日志不应记录明文密码,但 PAM 模块、自定义脚本及错误日志仍需核查。但若把 sshd 的 LogLevel 调到 DEBUG3 等过高级别,可能记录敏感细节,生产日志级别应按审计需求确定,并验证脱敏和访问权限。

Q:多台服务器的认证日志能统一告警吗?
可以。DataKit 上报时通过 service/source 与主机标签区分来源,检测规则按查询范围筛选主机,并按主机字段分组;先确认目标主机均有数据,再验证告警中的来源标识。


系列阅读:SSH 日志管理与安全分析 | 防止敏感数据进入日志

[1]: 观测云文档《日志采集》https://docs.guance.com/integrations/logging/
[2]: 观测云文档《DataKit 日志采集综述》https://docs.guance.com/integrations/datakit-logging/
[3]: 观测云文档《日志查看器》https://docs.guance.com/logs/manag-explorer/
[4]: 观测云文档《日志检测》https://docs.guance.com/monitoring/monitor/log-detection/

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台