** Zeek–Suricata–ELK **
一、介绍
Zeek是一个被动的开源网络流量分析器,许多运营商将Zeek用作网络安全监视器(NSM),以支持对可疑或恶意活动的调查。Zeek还支持安全领域以外的各种流量分析任务,包括性能评估和故障排除。 新用户从Zeek获得的第一个好处是描述网络活动的大量日志。这些日志不仅包括网络上看到的每个连接的全面记录,还包括应用程序层记录。这些包括所有HTTP会话及其请求的URI,密钥标头,MIME类型和服务器响应。带回复的DNS请求;SSL证书;SMTP会话的关键内容;以及更多。默认情况下,Zeek将所有这些信息写入结构良好的制表符分隔或JSON日志文件中,这些文件适合使用外部软件进行后处理。用户还可以选择让外部数据库或SIEM产品使用,存储,处理和显示数据以进行查询。 除了日志外,Zeek还具有用于一系列分析和检测任务的内置功能,包括从HTTP会话中提取文件,通过与外部注册表进行接口来检测恶意软件,报告网络上可见的易受攻击的软件版本,识别流行的网络。应用程序,检测SSH暴力破解,验证SSL证书链等。
二、单节点安装(测试模式)
安装包list:
以下安装包可到官网下载(也可以使用rpm包安装)
-
elasticsearch-7.6.2-linux-x86_64.tar.gz
-
kibana-7.6.2-linux-x86_64.tar.gz
-
logstash-7.6.2.tar.gz
-
kafka_2.11-2.0.0.tgz
-
filebeat-7.6.2-linux-x86_64.tar.gz
zeek选择LTS版本使用yum安装
- yum install zeek-lts
1 、elasticsearch安装
1.1 安装配置
tar zxvf elasticsearch-7.6.2-linux-x86_64.tar.gz
# vi /opt/elasticsearch-7.6.2/config/elatsicsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: my-application
node.name: node-1
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
# mkdir -p /data/elasticsearch/{data,logs}
# chown -R ela:ela /data/elasticsearch/ /opt/elasticsearch-7.6.2
#su ela
# nohup bin/elasticsearch &
1.2 系统优化
1.3 集群配置参考
discovery.seed_hosts: ["host1", "host2"]
2、kibana安装
2.1 安装配置
cd /opt
tar zxvf kibana-7.6.2-linux-x86_64
cd /opt/kibana-7.6.2-linux-x86_64
# vi conf/kibana.yml
server.port: 5601
server.host: "178.105.129.x"
elasticsearch.hosts: ["http://178.105.129.x:9200"]
kibana.index: ".kibana"
2.2 kibana启动
(不能使用root用户,创建一个ela用户)
useradd ela
chown -R /opt/kibana-7.6.2-linux-x86_64
su ela
nohup bin/kibana &
访问http://ip:5601 打开kibana
3、kafka安装
kafka和zookeeper也需要JDK支持
3.1 安装zookeeper
zookeeper为kafka集群提供支持,kafka的安装包中自带了zookeeper,我们就使用其中带的ZK
cd /opt
tar zxvf kafka_2.11-2.0.0
cd /opt/kafka_2.11-2.0.0
3.2 zookeeper配置
# vi /opt/kafka_2.11-2.0.0/config/zookeeper.properties
dataDir=/opt/data/zookeeper/data
clientPort=2181
maxClientCnxns=0
以下为集群需要的配置
# mkdir /opt/data/zookeeper/data
3.3 kafka配置
# vi /opt/kafka_2.11-2.0.0/config/server.properties
broker.id=0
listeners=PLAINTEXT://178.105.129.x:9092
zookeeper.connection.timeout.ms=6000
auto.create.topics.enable=true
zookeeper.connect=127.0.0.1:2181
#其余配置按需修改
3.4 zookeeper和kafka启动
cd /opt/kafka_2.11-2.0.0
# 注:注意分辨zookeeper-server-start.sh 和kafka-server-start.sh的shell脚本和对应的配置文件,不要使用错误了,如果使用
kafka-server-start.sh去启动zookeeper.properties会出现错误
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &
3.5 kafka查询topic
bin/kafka-topics.sh --zookeeper 178.105.129.x:2181 --list
3.6 生产消息测试
bin/kafka-console-producer.sh --broker-list 178.105.129.x:9092 --topic newtopic
3.7 消费消息测试
bin/kafka-console-consumer.sh --bootstrap-server 178.105.129.x:9092 --topic newtopic
3.8 集群参考
4、logstash 安装
4.1 安装logstash
cd /opt
tar zxvf logstash-7.6.2
cd /opt/logstash-7.6.2
mkdir /opt/logstash-7.6.2/config.d
在config.d 目录下创建logstash.conf文件(从kafka接受日志,输出到ES)
vi logstash.conf
input {
kafka {
bootstrap_servers => "178.105.129.x:9092"
topics => ["filebeat"]
codec => "json"
#decorate_event => true
type =>"filelog"
}
}
output {
stdout {}
elasticsearch {
hosts => ["http://178.105.129.x:9200"]
index => "filebeatlog-kafka-%{[@metadata][version]}-%{+YYYY.MM}"
#user => "elastic"
#password => "changeme"
}
}
topics => ["filebeat"] #指定从kafka哪个topics获取日志
4.2 启动logstash
cd /opt/logstash-7.6.2
nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
#自动加载配置文件,当配置文件修改时候不需要重新启动logstash
5、filebeat安装
5.1 安装filebeat
到zeek的主机上或者zeek集群的manage节点/logger节点上
cd /opt
tar zxvf filebeat-7.6.2-linux-x86_64.tar.gz
cd /opt/filebeat-7.6.2
修改 filebeat.yml为如下内容(输出到kafka)
filebeat.inputs:
- type: log
paths:
- /opt/zeek/logs/current/*.log
json.keys_under_root: true
json.add_error_key: true
json.message_key: log
json.overwrite_keys: true
output.kafka:
hosts: ["178.105.129.x:9092"]
topic: "filebeat
5.2 启动filebeat
cd /opt/filebeat-7.6.2
nohup ./filebeat -e -c filebeat.yml &
5.3 zeek模块进行日志收集
zeek在 /opt/filebeat/modules.d/zeek.yml 中,默认是没有开启的。
可以使用 ./filebeat modules enable zeek
来启用zeek模块,但启用之前需要再filebeat.yml文件中设置模块路径,不然会报错
vi filebeat.yml
把如下内容添加到文件中
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
reload.period: 10s
使用zeek模板收集日志,就不需要再filebeat.yml中指定input了,需要修改zeek.yml文件,在var.paths中指定日志的绝对路径
[root@testzeek modules.d]# vi zeek.yml
- module: zeek
capture_loss:
enabled: true
var.paths: [ "/opt/zeek/logs/current/capture_loss.log", "/opt/zeek/logs/*.capture_loss.json" ]
connection:
enabled: true
var.paths: [ "/opt/zeek/logs/current/conn.log", "/opt/zeek/logs/*.conn.json" ]
http:
enabled: true
var.paths: [ "/opt/zeek/logs/current/http.log", "/opt/zeek/logs/*.http.json" ]
修改完成后
./filebeat setup #进行初始化设置,会连接kibana下载dashboard等操作
如果报错,按照报错内容在filebeat.yml中添加
setup.kibana:
host: "178.105.129.x:5601"
output.elasticsearch:
hosts: ["178.105.129.x:9200"]
因为初始化时候会连接ES和kibana,如果只有kafka的信息的话会导致连接出错
setup成功之后,可以启动filebeat进行收集
后台启动
nohup ./filebeat -e -c filebeat.yml &
前台启动
./filebeat -e
6、Zeek安装
6.1 yum安装
对于 CentOS 7,请以根用户 root 运行下面命令:
cd /etc/yum.repos.d/
wget https://download.opensuse.org/repositories/security:zeek/CentOS_7/security:zeek.repo
yum install zeek-lts
6.2 rpm安装
下载rpm包安装(可能会有依赖问题)
https://software.opensuse.org/download.html?project=security%3Azeek&package=zeek-lts
6.3 环境变量
添加环境zeek变量(yum安装的目录在/opt/zeek, 源码安装的在/usr/local/zeek/)
export PATH=/opt/zeek/bin:$PATH
6.4 zeek配置文件
zeek的配置文件存放在/opt/zeek/etc/目录中
#networks.cfg 网络配置文件主要配置监听的网段
10.0.0.0/8 Private IP space
172.16.0.0/12 Private IP space
192.168.0.0/16 Private IP space
#node.cfg zeek节点配置文件
[zeek]
type=standalone #类型单机模式
host=localhost #主机
interface=eth0 #监听的网口eth0
#以下配置是配置集群时候使用,集群可以通过zeekctl自动化部署,zeekctl自动化部署要求管理节点和工作节点可以SSH免密登录
#[logger-1]
#type=logger
#host=localhost
#
#[manager]
#type=manager
#host=localhost
#
#[proxy-1]
#type=proxy
#host=localhost
#
#[worker-1]
#type=worker
#host=localhost
#interface=eth0
#
#[worker-2]
#type=worker
#host=localhost
#interface=eth0
#zeekctl.cfg
SitePolicyScripts = local.zeek #zeek启动使用的默认脚本
LogDir = /opt/zeek/logs zeek日志存放的地方
6.5 zeek脚本文件
zeek默认加载 /opt/zeek/share/zeek/site/local.zeek
zeek自带的一些脚本存放在/opt/zeek/share/zeek目录下面,通过在local.zeek中加载来使用
比如希望zeek输出的日志为json格式的,可以再local.zeek中添加如下内容:
# /opt/zeek/share/zeek/site/local.zeek
@load policy/tuning/json-logs.zeek
6.6 zeek启动
zeek可以手动指定参数启动,也可以通过zeekctl来管理,建议使用zeekctl管理
#zeekctl
第一次使用需要先install一下
[ZeekControl] > install
然后开启zeek实例
[ZeekControl] > start
也可以直接使用deploy来启动zeek
[ZeekControl] > deploy
zeek启动成功后会把日志保存在以下目录
/opt/zeek/logs/current/
如果zeek不在running状态,日志会被打包在logs目录下默认以时间命名的文件夹,在文件夹中把各种日志以tar包保存,查看内容可以使用zcat命令查看
启动zeek之后就可以使用filebeat监控current目录的日志文件,收集日志发送到kafka,logstash,ES中。
7、zeek集群安装
8、Suricata
yum install epel-release yum-plugin-copr
yum copr enable @oisf/suricata-6.0
yum install suricata
suricata --build-info
systemctl status suricata
vim /etc/suricata/suricata.yaml
# suricata的配置文件
vars:
# more specific is better for alert accuracy and performance
address-groups:
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
default-log-dir: /var/log/suricata/
af-packet:
- interface: enp1s #监控网络接口
rules规则
主要使用ET/OPEN ptresearch/**AttackDetection等规则,其余规则要付费
#suricata-update
#更新后的规则会存放在以下目录中,流量审计就使用此目录中的规则,每次执行suricata-update都会更新规则到文件中,
/var/lib/suricata/rules/suricata.rules 文件中
load目录/etc/suricata/rules/
启动suricata
systemctl start suricata
检测suricata启动状态
tail /var/log/suricata/suricata.log
alert日志
tail -f /var/log/suricata/fast.log
可以利用 ET 规则库里的 id:2100498这条规则测试
编辑index.html,
#vi index.html
<html>
<head>123</head>
<body>uid=0(root) gid=0(root) groups=0(root)</body>
</html>
在服务器上用python3 启动和http服务,
python3 -m http.server 8001
访问 http://ip:8001/index.html
然后查看告警日志 fast.log
tailf /var/log/suricata/fast.log
suricata-update
列出更新源列表:suricata-update list-sources
更新Suricata规则库:suricata-update
启用某一个更新源的规则集:suricata-update enable-source ptresearch/attackdetection
列出我们使用的规则源:suricata-update list-enabled-sources
使用Suricata-update更新规则时,默认是将所有规则合并在一个规则文件中:/var/lib/suricata/rules/suricata.rules。
在更新规则库的时候,我看到,被更新的规则是存在/etc/suricata/rules路径下。
但是所有更新后的规则会被merge到/var/lib/suricata/rules/suricata.rules这里。
-
使用别的ruleset:执行sudo suricata-update update-sources
会得到:Saved /var/lib/suricata/update/cache/index.yaml
所以这条更新的是别的rulesets。 -
想要enable某个ruleset:
sudo suricata-update enable-source oisf/trafficid
sudo suricata-update
然后重启suricate,就可以使用新的ruleset了。 -
查看已经enabled的规则:
sudo suricata-update list-enabled-sources
https://blog.csdn.net/nunu__/article/details/109136179
alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:”GPL MISC 0 ttl”; **ttl:0;** reference:url,support.microsoft.com/default.aspx?scid=kb#-#-EN-US#-#-q138268; reference:url,www.isi.edu/in-notes/rfc1122.txt; classtype:misc-activity; sid:2101321; rev:9;)