Linux系统日志审计是服务器运维中安全加固与故障排查的基础环节。rsyslog作为syslog的增强替代方案,支持高并发日志处理、多目标转发和结构化输出;auditd则提供内核级别的系统调用审计能力,能够精确记录文件访问、权限变更和用户行为。两者配合使用,可以构建覆盖系统层和应用层的完整日志审计体系,满足服务器安全加固的合规要求。
rsyslog服务配置与远程日志集中采集
rsyslog默认配置文件位于/etc/rsyslog.conf,同时支持/etc/rsyslog.d/目录下的独立配置片段。生产环境中推荐将日志集中到专用日志服务器,便于跨主机关联分析和长期归档。rsyslog支持TCP和UDP两种传输协议,TCP模式提供可靠传输,适合对日志完整性要求高的场景。
# /etc/rsyslog.conf 关键配置项
# 加载必要模块
module(load="imuxsock") # 本地系统日志
module(load="imklog") # 内核日志
module(load="imtcp") # TCP监听
module(load="imudp") # UDP监听
# 日志服务器端:接收远程日志
input(type="imtcp" port="514")
input(type="imudp" port="514")
# 按客户端主机分目录存储
$template("RemoteLogs", "/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")
*.* -?RemoteLogs
# 本地日志规则
auth,authpriv.* /var/log/auth.log
*.info;mail.none;authpriv.none;cron.none /var/log/messages
cron.* /var/log/cron
mail.* /var/log/maillog
# 发送到远程日志服务器(客户端配置)
*.* @@log-server.example.com:514 # TCP
# 或使用非对称加密传输
*.* action(type="omfwd"
target="log-server.example.com"
port="6514"
protocol="tcp"
StreamDriver="gtls"
StreamDriverMode="1"
StreamDriverAuthMode="x509/name"
StreamDriverPermittedPeers="log-server.example.com")
高并发场景下rsyslog可能成为性能瓶颈。通过调整队列参数可以提升吞吐量:主队列设置为磁盘辅助队列(DA queue),避免内存耗尽时日志丢失;工作线程数根据CPU核心数调整。以下配置在每秒10万条日志的写入压力下仍能稳定运行。
# 队列与性能调优
main_queue(
queue.type="LinkedList"
queue.size="100000"
queue.discardMark="80000"
queue.discardSeverity="0"
queue.filename="rsyslog_main"
queue.maxDiskSpace="10G"
queue.saveOnShutdown="on"
)
# 工作线程配置
$WorkDirectory /var/spool/rsyslog
$MaxOpenFiles 4096
auditd审计规则定制与系统调用监控
auditd是Linux审计子系统的用户空间守护进程,通过内核audit框架记录系统调用事件。与rsyslog记录应用日志不同,auditd可以监控到文件级别的访问行为,包括读取、写入、属性变更和权限修改。在等保2.0和ISO27001合规审计中,auditd规则是关键的技术控制手段。
# 安装与启用auditd
yum install audit -y # RHEL/CentOS
apt install auditd -y # Debian/Ubuntu
systemctl enable auditd
systemctl start auditd
# /etc/audit/audit.rules 核心规则
# 监控用户和组操作
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity
# 监控sudo和su使用
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
# 监控SSH配置变更
-w /etc/ssh/sshd_config -p wa -k ssh_config
-w /etc/ssh/sshd_config.d/ -p wa -k ssh_config
# 监控登录相关文件
-w /var/log/lastlog -p wa -k logins
-w /var/log/faillog -p wa -k logins
-w /var/run/utmp -p wa -k session
# 监控系统时间变更
-a always,exit -F arch=b64 -S adjtimex,settimeofday,clock_settime -k time-change
-w /etc/localtime -p wa -k time-change
# 监控网络环境变更
-a always,exit -F arch=b64 -S sethostname,setdomainname -k system-config
-w /etc/hosts -p wa -k system-config
-w /etc/sysconfig/network -p wa -k system-config
# 监控SELinux变更
-w /etc/selinux/ -p wa -k selinux
-w /etc/selinux/targeted/policy/ -p wa -k selinux
# 监控关键目录的文件创建和删除
-a always,exit -F arch=b64 -S mkdir,rmdir -F dir=/etc -k etc-change
-a always,exit -F arch=b64 -S unlink,unlinkat,rename,renameat -F dir=/etc -k etc-change
# 监控特权命令执行
-a always,exit -F arch=b64 -S execve -C uid!=0 -F euid=0 -k privileged-cmd
-a always,exit -F arch=b64 -S execve -C uid!=0 -F egid=0 -k privileged-cmd
通过ausearch和aureport工具可以快速检索审计日志。在生产环境中,建议将审计日志发送到集中化的SIEM平台进行关联分析。
# 按关键词搜索审计日志
ausearch -k identity --start today
ausearch -k ssh_config --start "this week"
# 生成审计报告
aureport --summary # 汇总报告
aureport --failed # 失败事件报告
aureport --user # 用户活动报告
aureport --file # 文件访问报告
aureport --key --summary # 按关键词汇总
# 实时监控特权命令执行
ausearch -k privileged-cmd -ts recent | audit2why
# 导出审计日志到JSON格式(便于SIEM消费)
ausearch -k identity --start today --raw | aureport --node --json
日志轮转与存储策略配置
日志文件持续增长会耗尽磁盘空间,需要通过logrotate进行自动轮转和压缩。生产环境中建议保留90天日志,审计日志根据合规要求可能需要保留180天或更久。
# /etc/logrotate.d/audit
/var/log/audit/audit.log {
daily
rotate 90
missingok
notifempty
compress
delaycompress
postrotate
/sbin/service auditd restart >/dev/null 2>&1 || true
endscript
}
# /etc/logrotate.d/rsyslog-remote
/var/log/remote/*/*.log {
daily
rotate 180
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
# 通过脚本自动清理过期归档
# crontab -e
0 2 * * * find /var/log/remote -name "*.log.*.gz" -mtime +180 -delete
集中化日志分析ELK集成方案
对于多主机环境,将rsyslog和auditd日志统一导入Elasticsearch进行分析是主流方案。Filebeat作为轻量级日志采集器部署在各服务器上,将日志转发到Logstash进行解析和过滤后写入Elasticsearch。
# /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: filestream
id: syslog
paths:
- /var/log/messages
- /var/log/secure
fields:
log_type: syslog
- type: filestream
id: audit
paths:
- /var/log/audit/audit.log
fields:
log_type: audit
processors:
- decode_json_fields:
fields: ["message"]
process_array: true
max_depth: 3
output.logstash:
hosts: ["logstash-server:5044"]
loadbalance: true
bulk_max_size: 2048
# Logstash配置:解析auditd日志
# /etc/logstash/conf.d/audit.conf
input {
beats {
port => 5044
}
}
filter {
if [fields][log_type] == "audit" {
grok {
match => {
"message" => "type=%{WORD:audit_type} msg=audit\(%{NUMBER:audit_epoch}:%{NUMBER:audit_id}\): %{GREEDYDATA:audit_data}"
}
}
date {
match => ["audit_epoch", "UNIX"]
target => "@timestamp"
}
kv {
source => "audit_data"
field_split => " "
value_split => "="
trim_value => """
}
}
}
output {
elasticsearch {
hosts => ["es-cluster:9200"]
index => "audit-%{+YYYY.MM.dd}"
}
}
服务器故障排查中,完整的日志链路可以快速定位问题根因。rsyslog记录的系统和应用日志提供时间线,auditd的审计记录补充了操作行为的细节,两者时间戳对齐后可以完整还原事件过程。在安全事件响应中,这种组合审计能力是追踪攻击路径的关键工具。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-xi-tong-ri-zhi-shen-ji-shi-zhan-rsyslog-ji-zhong-cai/