关键是要通过rsyslog条件路由将auth/authpriv设施中crit及以上级别日志(如emerg/alert/crit/err)单独提取并直送邮件/Webhook/脚本通道,同时屏蔽authpriv写入公共日志文件以保障安全。

要让安全告警信息优先处理,关键不是调高日志“级别”,而是通过 rsyslog 的条件路由机制,把高危日志(如 auth、authpriv 设施中 crit 及以上级别)单独提取出来,走更快、更可靠的通道——比如邮件、Webhook 或脚本通知,同时避免被普通日志淹没。
明确哪些日志属于“安全告警”
Linux 中与安全直接相关的主要设施是:auth(登录、su、sudo 等)和 authpriv(含敏感操作,如 SSH 密钥认证、PAM 验证)。它们产生的 emerg、alert、crit、err 级别日志,就是需优先响应的安全事件。
- emerg / alert / crit:系统崩溃、认证服务宕机、root 账户异常登录——必须立即响应
- err:SSH 登录失败、sudo 权限拒绝、密码错误爆破尝试——需实时感知
- warning 及以下(如 notice、info)通常属于常规行为,可归档或延迟分析
用 if 语句精准捕获高危安全日志
在 /etc/rsyslog.d/30-security-alert.conf 中添加规则,不依赖全局日志级别,只针对目标日志做动作:
- 匹配 auth 和 authpriv 设施中 crit 及以上日志:
if ($syslogfacility-text == 'auth' or $syslogfacility-text == 'authpriv') and ($syslogseverity - 单独拦截暴力破解特征(如连续失败登录):
if $programname == 'sshd' and $msg contains 'Failed password' then action(type="omhttp" server="alert.example.com" ...) - 加一行
& stop阻止后续规则重复处理,避免冗余转发
为安全日志配置专用输出通道
不要把安全告警混在 /var/log/auth.log 里等人工翻查。应直连告警通道:
-
邮件通道(用于 emerg/alert/crit):加载
ommail模块,设置 mail.to 为运维负责人邮箱,模板中包含%timegenerated% %hostname% %msg%,确保关键字段不丢失 -
Webhook 通道(用于 err/warning 类攻击迹象):用
omhttp推送 JSON 到企业微信或钉钉机器人,模板中固定"level":"critical"或"source":"sshd",方便前端自动打标 -
本地脚本通道(用于自动响应):例如触发
fail2ban封禁 IP 或记录到独立审计库,用omprog调用 Python 脚本,传入$fromhost-ip和$msg
验证与防护建议
配置完成后务必测试,避免漏报或误报:
- 用
logger -p auth.err "test security alert"手动注入测试日志,检查邮件/Webhook 是否收到 - 运行
sudo rsyslogd -N1检查语法,无报错再systemctl restart rsyslog - 禁止将 authpriv 日志写入公共可读文件(如默认的 /var/log/auth.log),应在 rsyslog 规则中用
authpriv.none屏蔽,仅保留加密通道输出 - 定期审查
/var/log/rsyslog.log(启用 debug 日志时)确认高危日志未被其他规则拦截或丢弃

















