安全异常告警优先处理的关键在于端到端策略:源头规范日志设施与级别、rsyslog精准匹配+stop终止、专用存储联动自动响应。

要让安全异常告警信息在系统日志中被优先处理,关键不是“提高日志本身的优先级”,而是让高危日志(如认证失败、权限越界、内核崩溃)被更快捕获、更准识别、更早分发、更可靠通知。这是一套端到端的策略,涉及日志产生、过滤、路由和响应四个环节。
明确哪些日志属于“安全异常告警”
不是所有带“error”的日志都需告警,真正需要优先响应的有明确特征: - 来源设施(facility)集中在 auth、authpriv、kern、daemon(如sshd、sudo、crond) - 优先级(severity)为 emerg(0)、alert(1)、crit(2)、err(3) - 具体内容含关键词:`Failed password`、`Invalid user`、`session opened for user root`、`Out of memory`、`kernel panic`、`SELinux is preventing`在应用层规范日志输出(源头可控)
确保程序用 syslog() 正确标注安全事件,避免全打 info 级: - 登录失败:`syslog(LOG_AUTH | LOG_ERR, "Failed login for %s from %s", user, ip);` - 权限拒绝:`syslog(LOG_AUTHPRIV | LOG_ALERT, "sudo access denied for %s", user);` - 关键服务崩溃:`syslog(LOG_DAEMON | LOG_CRIT, "nginx master process exited unexpectedly");` - 不要用 `LOG_INFO` 或 `LOG_DEBUG` 记录可疑行为,否则会被低优先级规则过滤掉用 rsyslog 做精准匹配与加速分发
在 `/etc/rsyslog.d/10-security-alert.conf` 中配置独立规则,**不依赖全局默认路径**: - 匹配高危组合(facility + severity + 内容): ```text if $syslogfacility-text == 'auth' and ($syslogseverity-text == 'err' or $syslogseverity-text == 'alert') and ($msg contains 'Failed password' or $msg contains 'Invalid user') then { action(type="ommail" server="smtp.internal" to="sec-team@corp.com" from="alert@host") stop } if $syslogfacility-text == 'kern' and $syslogseverity-text == 'emerg' then { action(type="omhttp" server="alert-api.corp.com" uri="/v1/emergency" timeout="3") stop } ``` - `stop` 是关键:匹配后立即终止后续规则处理,避免重复投递或降级写入普通文件 - 单独模板提升可读性:`template(name="AlertJSON" type="list") { constant(value="{\"ts\":\"") property(name="timereported" dateformat="rfc3339") constant(value="\",\"host\":\"") property(name="hostname") ... }`隔离存储 + 实时监控联动
高危日志不能只靠邮件或 webhook: - 写入专用文件并启用 logrotate 按秒轮转: `/var/log/security/alerts.log` —— 权限设为 `640`,属组 `adm` - 配合 `inotifywait` 或 `rsyslog` 的 `omfile` + `imfile` 反向监听该文件,触发脚本自动: - 提取 IP 做临时封禁(`iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP`) - 推送至 SIEM 平台(如 Wazuh、Elastic SIEM) - 触发 PagerDuty / 钉钉机器人语音呼叫值班人安全异常告警的“优先处理”,本质是缩短从事件发生到人工介入的时间差。它不靠调大一个数字,而靠源头标注清晰、中间过滤果断、出口通道专用、下游响应自动。











