Auditbeat是轻量型的审计日志采集器,能够收集linux审计框架的数据、监控文件完整性。可以组合相关消息到一个事件里,生成标准的结构化数据,方便分析,并且可以与Logstash、Elasticsearch和Kibana无缝集成。html
wget https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-6.5.4-linux-x86_64.tar.gz tar zxf auditbeat-6.5.4-linux-x86_64.tar.gz # 或者直接安装auditbeat的rpm包文件
默认的配置文件是auditbeat.yml,Linux平台下,该文件位于解压目录下。
还有一个auditbeat.reference.yml文件,该文件显示了全部的选项,能够根据需求将其拷贝到auditbeat.yml文件中。
auditbeat.yml主要的两部分,一部分模块,另外一部分是输出。
一、模块
目前有两种模块:
(1)auditd:auditd模块接收来自Linux审计框架的审计事件,该框架是Linux内核的一部分。这个模块创建对内核的订阅,以便在事件发生时接收它们。注意使用Auditd模块,有的系统须要先关闭auditd服务,执行” service auditd stop”。
模块相关配置项以下:linux
- module: auditd audit_rule_files: [ '${path.config}/audit.rules.d/*.conf' ] audit_rules: | #-a always,exit -F arch=b64 -S execve,execveat -k exec ……
auditrulefiles:从单独的文件加载审计规则,注意默认提供了36和位64位两种,根据本地系统选择其一。
auditrules:定义审计规则。
执行./auditbeat show auditd-rules能够查看当前的规则,默认的审计规则以下,通常默认规则就能够知足审计需求,若是须要自定义可修改audit.rules.d目录下的审计规则文件。json
#不记录pid为19714的全部系统调用事件,备注:自动根据auditbeat PID定义此规则 -a never,exit -S all -F pid=19714 #记录CPU为32位全部系统调用事件 -a always,exit -F arch=b32 -S all -F key=32bit-abi #记录CPU为64位"程序执行"相关系统调用事件 -a always,exit -F arch=b64 -S execve,execveat -F key=exec #记录CPU为64位"远程链接"相关系统调用事件 -a always,exit -F arch=b64 -S connect,accept,bind -F key=external-access #对/etc/group、/etc/passwd、/etc/gshadow文件作审计,记录用户身份验证的变化 -w /etc/group -p wa -k identity -w /etc/passwd -p wa -k identity -w /etc/gshadow -p wa -k identity #记录文件打开、修改等因没有权限或不被容许的事件 -a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EACCES -F key=access -a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EPERM -F key=access
(2)file_integrity:file_integrity模块实时监控指定目录下的文件更改。注意在linux系统中,须要使用inotify,所以内核必须支持inotify,2.6.13以上内核均已安装inotify。
模块相关配置项以下:bootstrap
- module: file_integrity paths: - /bin - /usr/bin - /sbin - /usr/sbin - /etc
paths:指定被监控文件路径缓存
想了解两个模块更丰富的配置项,参考官方文档:
https://www.elastic.co/guide/en/beats/auditbeat/6.5/auditbeat-modules.htmlapp
二、输出
内容能够输出到Elasticsearch、Logstash、Kafka、Redis、File、Console、Cloud,注意只能配置一种输出方式。
输出到Elasticsearch:框架
output.elasticsearch: hosts: ["ES1:9200,ES2:9200,ES3:9200"] index: "auditbeat-%{[beat.version]}-%{+yyyy.MM.dd}" protocol: "https" username: "elastic" password: "changeme"
输出到Logstashcurl
output.logstash: hosts: ["172.16.1.25:5044"]
输出到Kafkaelasticsearch
output.kafka: hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"] topic: '%{[fields.log_topic]}' partition.round_robin: reachable_only: false required_acks: 1 compression: gzip max_message_bytes: 1000000
hosts:指定Kafka节点。
topic:指定topic名称。
partition.roundrobin:采用轮询的方式依次写到不一样的分区中。
reachable_only:设置为true表示只分发到可用的分区,会增长缓存资源使用,可是能够避免输出阻塞。
requiredacks:Kafka节点返回ACK可靠性级别,0表示不返回、1表示等待本地提交、-1表示等待全部副本同步完成。
compression:是否启用压缩传输,能够为none, snappy, lz4和gzip。
max_message_bytes:容许的json编码消息的最大值,单位是bytes。ide
输出到File
output.file: path: "/tmp/auditbeat" filename: auditbeat
想了解更详细的配置项及含义,请参考官方文档:
https://www.elastic.co/guide/en/beats/auditbeat/6.5/configuring-output.html
本案例是将内容输出到了Kafka
#----------------------------- Kafka output-------------------------------- output.kafka: hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"] topic: 'audit_log' partition.round_robin: reachable_only: false required_acks: 1 compression: gzip max_message_bytes: 1000000
到Kafka消费的Logstash配置以下:
input部分
input { kafka { type => "audit_log" codec => "json" topics => "audit_log" bootstrap_servers => ["kafka1:9092", "kafka2:9092", "kafka3:9092"] } }
output部分
output { if [type] == "audit_log" { elasticsearch { hosts => ["ES1","ES2","ES3"] index => 'logstash-audit_log-%{+YYYY-MM-dd}' } } }
在解压目录下,使用root用户执行以下命令,固然若是你是rpm方式安装的,auditbeat已添加为系统服务。nohup ./auditbeat -e &
在ES节点查看索引
#curl -XGET 'http://127.0.0.1:9200/_cat/indices/?v' green open logstash-audit_log-2019.01.17 mnkCA-QTSVS2wPkwykd_jw 3 1 468 0 2.8mb 1.5mb
kibana上建立logstash-audit_log-*索引后,在Discover有数据输出
一、建立视图
建立视图,须要了解各个字段含义,能够参考官方文档:
https://www.elastic.co/guide/en/beats/auditbeat/6.5/exported-fields.html
(1) 命令审计
视图类型:Data Table
字段:
host.name 主机名称
process.name 命令名称,这里咱们重点记录几个命令,因此要将Advanced中Include设置为mkfs|dd|rm|mv|wget
porcess.args 命令参数,有些命令审计中可能不会记录参数,因此勾选"Show missing values"
user.name_map.uid 执行命令的账号名称
@timestamp 时间戳
视图类型:Data Table
字段:
process.exe 程序名称
(2)用户账户审计
视图类型:Data Table
字段:
event.action 事件动做,咱们统计账户密码修改,因此要将Advanced中Include设置为changed-password
视图类型:Data Table
字段:
这里的event.action字段对应的Include设置为modified-user-account,会包括用的添加、删除、属性修改审计事件
(3)用户登陆审计
视图类型:Data Table
字段:
event.type 事件类型,咱们统计用户登陆事件,因此要将Advanced中Include设置为user_login
auditd.resuld 结果,咱们统计失败的登陆,因此要将Advanced中Include设置为fail
auditd.data.acct 账号名,对端尝试登陆的账号名
source.ip 源IP
(4)重要目录文件审计
视图类型:Data Table
字段:
event.action 事件动做,咱们统计文件的增删改,因此要将Advanced中Include设置为created|deleted|moved|updated
一样,event.action对应的Include设置为created|deleted|moved|updated
最后建立仪表盘