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