1.9.6 日志审计与入侵检测

日志审计与入侵检测的目标是“可追溯、可预警、可取证”。本节给出可落地的日志审计与主机入侵检测方案,包含原理草图、安装与配置、关键命令、排错与练习。

原理草图(日志集中化与检测链路):

文章图片

日志审计范围与策略要点:
- 关键日志:/var/log/secure 或 /var/log/auth.log、/var/log/messages、/var/log/audit/audit.log、/var/log/nginx/.log、/var/log/mysql/.log
- 策略:统一时区、统一格式、保留≥90天;logrotate 轮转+压缩+权限;集中化并防篡改(只写权限、hash 校验)

一、启用与配置审计(auditd)
安装与启动:

# RHEL/CentOS
yum install -y audit
systemctl enable --now auditd

# Debian/Ubuntu
apt-get update && apt-get install -y auditd audispd-plugins
systemctl enable --now auditd

常用审计规则示例(/etc/audit/rules.d/hardening.rules):

# 监控敏感文件
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k scope

# 监控关键命令
-w /usr/bin/sudo -p x -k priv_cmd
-w /bin/su -p x -k priv_cmd

# 监控用户与组管理命令
-w /usr/sbin/useradd -p x -k user_mgmt
-w /usr/sbin/usermod -p x -k user_mgmt
-w /usr/sbin/userdel -p x -k user_mgmt

加载规则与验证:

augenrules --load
auditctl -l

查看审计事件(示例:sudo 相关):

ausearch -k priv_cmd --start today
# 预期:看到执行sudo/su的事件记录(含用户、时间、命令)

排错:
- auditd 未启动:systemctl status auditd,检查 /var/log/audit/audit.log 是否写入
- 规则不生效:auditctl -l 是否包含规则;规则冲突需检查 /etc/audit/rules.d/

二、系统日志轮转与保留(logrotate)
检查系统已有策略:

logrotate -d /etc/logrotate.conf

自定义日志轮转示例(/etc/logrotate.d/custom-app):

/var/log/nginx/*.log /var/log/mysql/*.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
    create 0640 root adm
    sharedscripts
    postrotate
        systemctl reload nginx >/dev/null 2>&1 || true
    endscript
}

手动触发轮转:

logrotate -f /etc/logrotate.d/custom-app

排错:
- 权限错误:检查 create 权限与属主属组
- 轮转不生效:检查日志路径、是否被硬链接、是否有频繁写入导致文件句柄不释放

三、集中化日志(rsyslog)
客户端配置(/etc/rsyslog.d/60-remote.conf):

*.* @@10.0.0.10:514

服务器端接收(/etc/rsyslog.d/10-listen.conf):

module(load="imudp") input(type="imudp" port="514")
module(load="imtcp") input(type="imtcp" port="514")

template(name="RemoteFmt" type="string" string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")
*.* ?RemoteFmt

重启并验证:

systemctl restart rsyslog
ss -lntup | grep 514
# 预期:日志服务器监听514端口

排错:
- 防火墙未放行:firewall-cmd --add-port=514/tcp --permanent && firewall-cmd --reload
- 无日志入库:检查客户端连接(logger "test rsyslog")与模板路径权限

四、主机入侵检测(AIDE 示例)
安装与初始化:

yum install -y aide || apt-get install -y aide
aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

定期检查(手工或计划任务):

aide --check
# 预期:首次为baseline,后续变更会提示新增/修改/删除文件

排错:
- 数据库不存在:确认已执行 aide --init
- 误报过多:编辑 /etc/aide.conf 排除易变目录(/var/log、/tmp)

五、入侵迹象检查的常用命令(含解释)

# 1) 登录失败统计
grep "Failed password" /var/log/secure | tail -n 20
# 预期:出现失败登录的IP、用户

# 2) 最近登录与来源
last -a | head -n 10
# 预期:显示用户、来源IP、时间

# 3) 异常端口与进程
ss -lntup
ps -ef --sort=-%cpu | head -n 10
# 预期:发现占用高CPU或未知进程

# 4) 可疑计划任务
crontab -l
ls -la /etc/cron.* /var/spool/cron
# 预期:排查异常任务

# 5) 包完整性校验
rpm -Va | head -n 20      # RHEL/CentOS
debsums -s | head -n 20   # Debian/Ubuntu

六、Fail2ban 防暴力破解(示例)
安装与配置:

yum install -y fail2ban || apt-get install -y fail2ban

配置 SSH 规则(/etc/fail2ban/jail.local):

[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 600
bantime = 3600
logpath = /var/log/secure

启动与验证:

systemctl enable --now fail2ban
fail2ban-client status sshd
# 预期:显示已监控与封禁计数

排错:
- 规则未生效:检查 logpath 是否正确(Debian 通常为 /var/log/auth.log)
- 误封:fail2ban-client set sshd unbanip <IP>

七、练习(建议动手完成)
1) 在测试机上配置 auditd,审计 /etc/sudoers,并执行一次 sudo,使用 ausearch 查到事件
2) 配置 rsyslog 客户端向日志服务器发送日志,用 logger 发送测试消息验证集中化
3) 初始化 AIDE 基线,手动修改 /etc/hosts,执行 aide --check 观察差异
4) 用脚本模拟 6 次失败登录,检查 fail2ban 是否封禁

简要处置流程建议:
- 发现异常 → 立即隔离主机 → 保存日志与快照 → 分析入口与影响范围 → 修复与复盘
- 重要日志访问与操作权限分离,避免同人同时掌握“操作+审计”权限