定时健康状态检查是将安全组件状态转化为可量化、可告警、可追溯的运行指标,聚焦SSH、auditd、防火墙、日志轮转、PAM五大核心组件,通过轻量Shell脚本实现自动巡检、哈希比对、多通道告警及基线闭环管理。
定时健康状态检查不是“定期跑个命令看看”,而是把安全组件的状态变成可量化、可告警、可追溯的运行指标。核心在于把被动响应转为主动感知,让防火墙、SSH、审计服务、日志系统等关键组件自己“说话”。
明确要盯住的五大核心组件
不全查,只盯最易失守、最常被绕过的环节:
-
SSH服务:确认是否启用公钥认证、是否禁用root远程登录、MaxAuthTries和LoginGraceTime是否生效
-
系统审计服务(auditd):检查auditd进程是否运行、规则是否加载(auditctl -l | wc -l > 0)、日志文件是否可写且未被清空
-
防火墙(iptables/nftables 或 ufw):验证默认策略是否为DROP、关键端口(如22、443)是否仅允许可信IP、规则链是否未被意外清空
-
日志轮转与存储(logrotate + rsyslog/journald):确认/var/log/目录下关键日志(auth.log、syslog、secure)是否按天归档、是否启用压缩、是否保留≥90天、磁盘空间是否超阈值(如>90%)
-
PAM认证模块:检查/etc/pam.d/common-auth中是否启用pam_faillock.so(防暴力破解)、密码重用限制是否生效
用最小依赖脚本实现自动巡检
避免引入复杂框架,直接用shell+crontab构建轻量闭环:
- 写一个/usr/local/bin/sec-health-check.sh,每15分钟执行一次基础连通性与进程存活检查,每小时执行一次配置比对
- 脚本内嵌校验逻辑:比如用ss -tlnp | grep ':22' | grep -q 'sshd'确认SSH监听;用systemctl is-active auditd | grep -q 'active'确认审计服务运行
- 关键配置做哈希快照:首次运行时生成/etc/ssh/sshd_config.sha256,后续每次检查都重新计算并比对,变化即告警
- 所有输出统一写入/var/log/sec-health.log,并用chattr +a锁定追加权限,防篡改
异常必须触发多通道告警
只写日志等于没告警。发现异常需立即触达责任人:
- 配置简单邮件告警:使用mail -s "SEC-ALERT: auditd down on $(hostname)" [email protected] < /tmp/alert.txt
- 云环境优先走Webhook:curl POST到企业微信/钉钉机器人,带主机名、时间、异常项、建议命令(如systemctl restart auditd)
- 严重项(如防火墙规则清空、PAM模块被删)自动触发临时封锁:执行iptables -P INPUT DROP并记录操作,等待人工介入
把检查结果纳入基线比对闭环
健康检查不是孤立动作,要和加固成果挂钩:
- 每次等保加固或脚本执行后,自动生成新基线:/etc/sec-baseline-$(date +%F).tar.gz,含audit规则、sshd_config、ufw status -v输出等
- 定时检查脚本自动拉取最新基线包,比对当前状态,差异项高亮标出(如“当前允许root登录,基线要求禁止”)
- 每月生成一份health-report-$(date +%Y%m).pdf,汇总各组件稳定性(UP time %)、配置偏移次数、告警响应时效,供安全复盘用