1. 启用结构化详细日志记录
使用Winston、Pino等成熟日志库,配置JSON格式输出(便于后续分析),覆盖请求、响应、错误、关键业务操作(如用户登录、权限变更)等场景。例如,通过Winston记录错误日志到error.log、常规日志到combined.log,开发环境追加控制台输出;通过Morgan记录HTTP请求详情(如请求方法、URL、状态码)。结构化日志能快速定位异常行为,是安全分析的基础。
2. 记录关键安全事件
聚焦用户行为(登录/登出成功/失败、密码修改、权限变更)、系统操作(配置文件修改、依赖安装/更新)、敏感操作(数据删除、批量导出)等关键事件,记录时间戳、用户ID/IP、事件类型、详细描述。例如,用auditLog函数记录用户登录动作:“Audit Log: Login success by admin (IP: 192.168.1.100)”。这些日志是安全审计的核心证据,能还原事件链条。
3. 防止日志污染与敏感信息泄露
通过debug模块控制模块级日志输出,避免无关信息(如开发调试细节)进入主日志流;严格禁止记录敏感数据(如密码、API密钥、信用卡号),使用.env文件存储敏感信息并通过dotenv加载,确保.env文件不被提交到版本控制系统(如Git)。例如,记录错误时仅保留错误消息而非堆栈跟踪(避免泄露系统路径、依赖版本等内部信息)。
4. 实施日志轮转与清理
使用logrotate工具或Winston的winston-daily-rotate-file插件,按时间(如每天)或大小(如20MB)分割日志文件,自动压缩旧日志(如保留7天压缩日志),避免单个日志文件过大占用磁盘空间。例如,logrotate配置可设置为“每日轮转、保留7天、压缩旧日志”,防止日志文件成为系统负担。
5. 集中式日志管理与实时分析
将日志发送到集中式系统(如ELK Stack:Elasticsearch存储+Logstash解析+Kibana可视化,或Splunk),实现日志的统一收集、存储、搜索和可视化。通过Kibana的Dashboard监控关键指标(如错误率飙升、频繁登录失败),快速识别异常模式。集中式管理解决了分布式系统的日志分散问题,提升了分析效率。
6. 设置实时监控与警报
配置警报系统(如PagerDuty、OpsGenie、Sentry),针对关键事件(如连续5次登录失败、未授权访问尝试、错误率超过阈值)触发实时通知(邮件、短信、Slack)。例如,用Sentry捕获前端和后端异常,通过Winston将错误日志同步到Sentry,当出现未处理的异常时立即通知开发团队。实时警报能缩短响应时间,降低安全事件的影响范围。
7. 定期审计与异常行为分析
制定日志审计计划(如每周一次),通过自动化工具(如Logstash的过滤器、ELK的查询语法)分析日志,寻找异常行为。例如,统计同一IP的频繁登录失败次数(如1小时内失败10次)、非工作时间的权限变更操作、异常的数据访问模式(如大量下载用户数据)。结合威胁情报(如已知攻击IP列表),识别潜在的安全威胁(如暴力破解、内部人员滥用权限)。
8. 加强日志文件自身安全
设置日志文件的权限控制(如chmod 640、chown root:adm),确保只有授权用户(如root、运维人员)能访问;将日志存储在安全目录(如/var/log/nodejs/),避免日志文件被篡改或删除。对于敏感日志,可使用GPG加密(通过logrotate的postrotate脚本自动加密新日志),防止数据泄露。