Zeek--Suricata--ELK

** 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;)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值