你有没有遇到过这种情况:公司服务器突然变慢,查了半天才发现是有人在半夜偷偷登录后台执行了命令?或者某个员工账号莫名频繁访问敏感文件,却没人察觉?其实这些问题,早该在网络日志里暴露出来。关键就在于——你有没有设好审计告警。
为什么需要网络日志审计告警?
很多人觉得“系统没崩就没事”,但真正的风险往往藏在安静的日志里。比如某次内网扫描、异常的登录IP、特权账户的非工作时间操作,这些都可能是攻击前兆。靠人工翻日志不现实,一天几千条记录谁看得过来?所以得让系统自己“喊人”。
从哪里开始?先找到关键日志源
常见的日志来源包括防火墙、路由器、服务器系统日志(如Linux的/var/log/auth.log)、数据库操作日志、AD域控登录记录等。以Linux服务器为例,重点关注SSH登录行为:
<!-- 查看最近的SSH登录日志 -->
journalctl -u ssh | grep "Accepted"
<!-- 或者直接查auth日志 -->
cat /var/log/auth.log | grep "Failed password"
如果你发现某个IP反复尝试密码,或者凌晨三点有管理员账号登录,这就是典型异常。
用简单工具实现告警推送
不用上昂贵的SIEM系统,小团队也能玩转。比如用rsyslog收集日志,配合fail2ban做自动封禁,再加个脚本发微信或钉钉提醒。
举个例子,写个检测失败登录次数的脚本:
#!/bin/bash
LOG_FILE="/var/log/auth.log"
THRESHOLD=5
FAILED_IPS=$(grep "Failed password" $LOG_FILE | awk '{print $(NF-3)}' | sort | uniq -c | awk "\$1 > $THRESHOLD {print \$2}")
for ip in $FAILED_IPS; do
curl 'https://oapi.dingtalk.com/robot/send?access_token=your_token' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {"content": "⚠️ 检测到暴力破解尝试:'$ip'"}}'
done
把这个脚本加入cron定时任务,每5分钟跑一次,就能实时掌握外网攻击动向。
设置合理的触发规则,别被误报搞崩溃
刚设告警时最容易犯的错就是太敏感。比如一有失败登录就报警,结果运维同事改密码试错了两次,手机就被轰炸十几次。建议根据实际场景调整阈值:同一IP连续失败5次以上再触发,或者只监控非工作时间段的特权操作。
还有种常见情况:公司用固定出口IP,所有员工上网都显示同一个公网IP。这时候就不能只看IP,得结合用户名判断。比如root账号从非值班人员账号登录,立刻告警。
把告警信息变得有用
光说“有异常登录”没用,得让人一眼看出问题在哪。推送内容最好包含时间、IP、用户名、操作类型。例如:
{
"告警类型": "高危登录",
"时间": "2024-03-18 02:15:23",
"用户": "admin",
"来源IP": "123.45.67.89",
"位置": "境外(新加坡)",
"建议动作": "立即检查会话并重置密码"
}
这种格式信息完整,接手的人不用再查一遍日志,节省响应时间。
定期回顾规则,别让它变成摆设
系统上线三个月后,业务变了、人员换了、网络结构也调了,但告警规则还停留在最初版本,自然越来越不准。建议每月花半小时看看最近的告警记录:哪些被忽略了?哪些其实是正常行为?及时调整规则,保持它的敏锐度。
就像家里的烟雾报警器,装了不等于万事大吉,得定期测试、清洁、换电池。网络告警也一样,是个持续维护的过程。