Linux审计日志
-
linux审计日志audit配置
默认以centos7的环境进行讲解,和centos6可能有些有些地方略微不同
audit配置文件:/etc/audit/auditd.conf
一般只要注意以下四项:
max_log_file = 50 #每个文件最大大小(MB)
num_logs = 4 #最大保留个数,默认大于4个会根据max_log_file_action 的方式进行处理,默认是rotate
flush = NONE # 默认情况下,审计日志为每20条flush一次,为了防止由于大量后台脚本运行产生的审计日志在频繁flush到磁盘,导致磁盘使用率过高(特别是没有cache直接落盘的RAID卡),所以需要修改flush模式为NONE。
local_events = yes # 是否写到本地,默认yes,如果已经开启了审计日志转发功能,根据需求是否关闭。
Audit的规则配置:/etc/audit/rules.d/audit.rules
-a exit,always -F arch=b64 -S execve -k exec //记录64位系统的所有用户的shell命令
-a exit,always -F arch=b32 -S execve -k exec //记录32位系统的所有用户的shell命令
-w /etc/crontab -p wa -k crontab //监控crontab文件的写权限和属性权限
-w /etc/hosts -p wa -k hosts //监控hosts文件的写权限和属性权限
-w /etc/hosts.allow -p wa -k hosts-allow //监控hosts.allow文件写权限和属性权限
-w /etc/hosts.deny -p wa -k hosts-deny //监控hosts.deny文件写权限和属性权限
-w /etc/fstab -p wa -k fstab //以此类推
-w /etc/passwd -p wa -k passwd
-w /etc/shadow -p wa -k shadow
-w /etc/group -p wa -k group
-w /etc/gshadow -p wa -k gshadow
-w /etc/chrony.conf -p wa -k ntp
-w /etc/sysctl.conf -p wa -k sysctl
-w /etc/security/limits.conf -p wa -k limits
-w:指定需要监控的文件。
-p:指定监控的权限,rwxa,监控用户对这个目录的读写执行或数显变化时间戳的改变。
-k:指定一个key,方便使用ausearch查询。
配置完后需要重启服务audit:
service auditd restart # 注意,不能用systemctl restart auditd ,auditd不支持。
重启后可以使用ausearch -k <key>来列出对应文件的修改记录,如ausearch -k multipath。
重启后audit生成的审计日志默认放在/var/log/audit/audit.log下
-
audit实现日志转发
1、audit配置
audit有个rsyslog插件能实现转发到本地的rsyslog服务中
配置文件:
主要修改以下两项:
active = yes # 开启转发功能,默认不开启
args = LOG_LOCAL2 # 已那个LOCAL2设备转发给rsyslog
service auditd restart # 注意,不能用systemctl restart auditd ,auditd不支持。
2、rsyslog配置
rsyslog配置文件:
/etc/rsyslog.conf # rsyslog程序配置文件
/etc/rsyslog.d/*.conf # 这里讲解用来编写rsyslog的过滤规则。
/etc/rsyslog.conf主要修改以下配置:
*.* @@remote-host:514
*.*:表示所有的设备日志所有的日志等级,包含我上面写的audit local2的这个设备的所有日志
@@:表示tcp协议,一个@表示udp协议。
remote-host:514:发给哪个服务器地址及端口。
然后重启服务即可:systemctl restart rsyslog.
注意:审计日志的还会输出到/var/log/message文件中,如果需要禁止输出到/var/log/message文件,可以修改rsyslog.conf配置项并重启即可:
*.info;mail.none;authpriv.none;cron.none.local2.none /var/log/messages
日志级别:
debug –有调式信息的,日志信息最多
info –一般信息的日志,最常用
notice –最具有重要性的普通条件的信息
warning –警告级别
err –错误级别,阻止某个功能或者模块不能正常工作的信息
crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert –需要立刻修改的信息
emerg –内核崩溃等严重信息
none –什么都不记录
从上到下,级别从低到高,记录的信息越来越少
-
审计日志过滤方法
-
通过audit审计服务过滤
auditctl -a always,exclude -F msgtype=PROCTITLE
-a always,exclude:排除PROCTITLE这种类型的日志
列出规则:auditctl -l
删除规则:auditctl -d always,exclude -F msgtype=SYSCALL
删除所以规则:auditctl -D
使用命令行重启后规则会失效,建议规则写入/etc/audit/rules.d/audit.rules文件中
2、通过rsyslog服务进行过滤
Linux审计日志样例:<150>Feb 18 12:10:01 bogon audispd: node=bogon type=PATH msg=audit(1581999001.279:3434): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=32828 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL
编辑:/etc/rsyslog.d/audit.conf
:msg, regex, "type=PATH" @192.168.43.130:5140 # 通过正则(regex)匹配到type=PATH字段的日志发送给192.168.43.130:5140。
:msg, regex, "type=PATH" ~ # 通过正则(regex)匹配到type=PATH字段的日志并过滤掉。
:msg, regex, "type=PATH" # 通过正则(regex)匹配到type=PATH字段日志并保留,其他过滤。
规则配置好后重启rsyslog即可。
3、通过logstash后端进行过滤
通过logstash插件drop{}可以进行过滤。
Logstash过滤前提解析必须得保证解析规则正确。
比如有一下审计日志:
Feb 18 11:13:32 bogon audispd: node=bogon type=SYSCALL msg=audit(1581995612.358:3187): arch=c000003e syscall=59 success=yes exit=0 a0=2649db0 a1=2766530 a2=27715a0 a3=7fffe5cf1100 items=2 ppid=54597 pid=56011 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=56 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="exec"
而后需要对审计日志进行过滤时,我们可以针对匹配某个字段进行过滤,如下:
Linux审计日志类型网址:https://access.redhat.com/articles/4409591#audit-record-types-2