Node.js 在 Ubuntu 日志中的安全事件监控
一 日志来源与关键信号
- 系统级安全事件:关注 /var/log/auth.log(SSH 登录成功/失败、sudo 提权)、/var/log/syslog(内核/服务异常、AppArmor 拒绝等)。这些日志可帮助发现暴力破解、提权尝试与策略拦截等早期迹象。
- Node.js 应用日志:使用结构化日志(如 Winston、Pino、Bunyan、Log4js)输出到文件与控制台,便于检索与聚合;结合 PM2 的日志聚合能力(如 pm2 logs)统一采集多实例输出。
- 运行时加固信号:启用 AppArmor 并观察其拒绝日志(可在 syslog 中体现),用于发现越权文件/网络访问尝试。
二 采集与存储架构
- 日志标准化:在 Node.js 中统一使用 JSON 格式 与明确的 日志级别(error、warn、info、debug、trace),确保关键字段(如 timestamp、level、msg、ip、url、method、statusCode、user-agent、traceId)齐全,便于后续检索与告警。
- 日志轮转与保留:使用 logrotate 按日/大小切分,压缩归档并设置保留天数,防止磁盘被占满。
- 集中化与备份:将应用与系统日志统一发送到 ELK Stack(Elasticsearch、Logstash、Kibana)/Graylog/Splunk 做检索、可视化与告警;对归档日志做 定期备份与异地保存,满足审计与恢复需求。
三 监控规则与告警示例
- 暴力登录与异常会话
- 规则:在 /var/log/auth.log 中统计单位时间内的 Failed password 与 Accepted 数量(按 IP 分组)。
- 动作:短时间内失败次数超过阈值(如 5 次/1 分钟)触发告警并自动封禁;成功后触发“新登录”通知。
- 可疑进程与权限提升
- 规则:在 auth.log 中匹配 sudo 成功与失败;在 syslog 中匹配 apparmor 拒绝(DENIED)。
- 动作:立即告警并关联到对应 PID/容器/服务。
- Web 层攻击特征
- 规则:在 Node.js 访问日志中匹配常见攻击特征(如 **/etc/passwd、/wp-admin、…/、