p>之前在安全方面有大数据处理方面需求,所以调研了几款处理引擎框架,就看到Apache Metron了,结果发现网上没几个文章写这个的。。。。
其中涉及到的组件会比较多,有部署软件用的Ambari(也可以用cdh)、zookeeper、Storm、HADOOP、KAFKA和数据处理的Nifi
先贴一些看下来总结的流程
Metron数据处理流程

1.Metron介绍
Metron是一种多功能的安全遥测数据捕获、流分析和威胁响应平台,最早由Cisco公司的开源大数据系统安全框架项目OpenSOC迁移为Metron项目,现已晋升为Apache顶级项目。Metron提供的功能包括:日志的聚合、对网络包全面捕获的索引和存储、高级行为分析及数据浓缩,并可以将当前的威胁情报信息应用到安全遥测中。从概念上可划分为四个组件:数据捕获与摄取、实时数据处理、受保证的数据持久化和存储、用于驱动监控和风险报警服务的机器学习模型。
2.Metron架构及功能
作为一个大数据安全分析平台,Metron集合了众多优秀的开源架构和软件,因此具备非常强大的功能如下:可扩展的接收器和分析器能够监视任何遥测数据源;
OpenSOC具备很强的扩展性,且支持各种遥测数据流;
支持对遥测数据流的异常检测和基于规则的实时报警;
通过预设时间使用Hadoop存储遥测收集的数据流;
支持使用ElasticSearch实现自动化实时索引遥测数据流;
支持通过Hive使用SQL查询Hadoop中的数据;
兼容ODBC/JDBC并且继承已有的分析工具;
支持自动生成报告、异常报警;
支持原数据包的抓取、存储和重组;
支持数据驱动的安全模型;
Metron中使用了多个开源架构,存储上基于Hadoop HDFS,实时处理实用Storm,实时索引查找借助ElasticSearch,除此之外还有一些其他的框架,整体如下图所示:
上图从左至右代表平台由下到上的层次,分别是数据源层—>数据采集层—>消息系统层—>实时处理层—>存储层—>分析处理层,下面我们分别就每一层的功能和实现的开源模块做一个简单的介绍。
数据源层:主要设定大数据分析平台的数据来源,基本有两个部分,一类是通过网络路由、网关等设备获取的数据包,将这些数据流量以副本的形式传递给上层的PCAP模块;另一个类则是通过部署遥测(Telemetry)传感器,从系统日志、HTTP流量、文件系统和其他用户/系统行为中获取到的日志信息;这些信息传递给上层的Flume模块;
数据收集层:该层主要收集初步处理获取的大量数据,一方面利用PCAP机制收集数据包,一方面利用Flume框架来收集大量的日志信息。 Flume是遵循Apache授权的开源项目,主要用于高可用、高可靠、分布式海量日志数据的收集、聚合和传输。Flume支持定制数据发送方,即可以定制获取何种类型的源数据,如支持console\RPC\text(文件)\tail(Unix tail)\syslog\exec等。此外Flume还提供对数据进行简单处理,之后写到定制的数据接收方。(即,日志传输两端皆可自定义)。
消息系统层: 数据收集层将捕获的数据包和海量日志信息提交给了消息系统层,该层主要对这些数据包和日志包装为消息队列,可以便于上层Storm的实时处理。这里主要的软件是开源的Kafka,这主要用于日志处理的分布式消息队列,关注用户行为(登录、注销、文件操作等)和系统运行日志(CPU、内存、网络、进程信息等)。
实时处理层:下层处理形成的消息队列交由本层实时处理,OpenSOC使用了著名的Storm框架。Storm 是一个开源的在线流分析系统,可以方便地在一个集群中编写扩展复杂的实时计算,其用于实时处理就好比hadoop用于批处理。所谓实时,是指Storm保证每个消息都会得到处理,而且速度很快,比如在一个小集群中,Storm 每秒可以处理数以百万计的信息,而且用户可以使用任意语言进行mapreduce模型的开发。相较于hadoop,Storm 具有更高的容错性、更好的水平扩展以及快速可靠的消息处理优势,因此在实际中也得到了广泛的应用。
存储层:这个层的主要任务就是有效合理地将前面获得的数据存储到文件系统中。对于结构化数据,OpenSOC使用Hive 来实现;对于非结构化数据,则使用ElasticSearch 来实现。 Hive 是一个基于hadoop的数据仓库,其特点是可以将SQL语句与hadoop架构无缝对接,将SQL语句转换成mapreduce任务,从而实现了在hadoop集群上进行大数据的存储、查询与分析。 ElasticSearch是一个NoSQL搜索引擎,使用JSON通过HTTP来索引数据,可以这样理解,ElasticSearch可以帮助我们更方便地索引查询非结构化数据。 除了上面提到的两类,底层是基于Hadoop 的集群,利用Hbase 数据库来存储PCAP表。
分析处理层:在完成数据的收集、存储、查询之后,接下来就是对数据的分析工作,这里的分析工具可以使用R语言或Python编写,使用了PowerPivot(PP)和Tableau(TB)两类分析工具。其中PP工具是一组应用程序和服务,以极高的性能处理大型数据集;而TB则是一款企业智能化软件,主要用于提供数据分析,比如可视化、关联性分析等,所有的工作都基于浏览器进行。
部署Metron时各个开源软件和模块有一定的版本要求,具体如下:
Apache Flume 1.4.0版本及以上;
Apache Kafka 0.8.1版本及以上;
Apache Storm 0.9版本及以上;
Apache Hadoop 2.x系列版本均可;
Apache Hive 12版本以上,建议13版本;
Apache Hbase 0.94版本及以上;
ElasticSearch 1.1版本及以上;
MySql 5.6版本及以上;
Metron安装1-Ambari
测试环境信息: | ip | 主机名 | 角色 | 额外装的软件 |
---|---|---|---|---|
node6 | 10.0.81.201 | Ambari server+Metron UI+zookeeper+Storm+HADOOP+KAFKA | ||
node7 | 10.0.81.202 | Ambari Agent+Metron Agent+zookeeper+Storm+HADOOP+KAFKA | Nifi(任意选的一台机器) | |
node8 | 10.0.81.203 | Ambari Agent+Metron Agent+zookeeper+Storm+HADOOP+KAFKA | ||
node9 | 10.0.81.204 | ES节点(数据节点,给的磁盘大点) |
一、基础系统环境准备
1、安装基础依赖(所有节点)
yum install epel-release -y
yum update -y
yum -y install gcc vim fish # fish可以不装
yum install git wget curl rpm tar unzip scp bzip2 wget createrepo yum-utils ntp python-pip psutils python-psutil ntp libffi-devel gcc openssl-devel -y
pip install --upgrade pip
pip install requests
2、系统调整
系统安全级别调整
ulimit -n 32768
ulimit -u 65536
echo -e "* - nofile 32768\n* - nproc 65536" >> /etc/security/limits.conf
#### 禁用IPV6sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
echo -e "\n# Disable IPv6\nnet.ipv6.conf.all.disable_ipv6 = 1\nnet.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
关闭大叶内存
编辑/etc/default/grub文件
Change the line:
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
To:
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet transparent_hugepage=never"
改完执行:
grub2-mkconfig -o /boot/grub2/grub.cfg
#关闭防火墙
systemctl enable ntpd
systemctl start ntpd
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
iptables-save > /etc/sysconfig/iptables
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3、设置3台Ambari节点互相免密登录
ssh-keygen -t rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
node6上面:
scp ~/.ssh/id_rsa.pub node6:/tmp/id_rsa6.pub
scp ~/.ssh/id_rsa.pub node7:/tmp/id_rsa6.pub
scp ~/.ssh/id_rsa.pub node8:/tmp/id_rsa6.pub
node7上面:
scp ~/.ssh/id_rsa.pub node6:/tmp/id_rsa7.pub
scp ~/.ssh/id_rsa.pub node7:/tmp/id_rsa7.pub
scp ~/.ssh/id_rsa.pub node8:/tmp/id_rsa7.pub
node8上面:
scp ~/.ssh/id_rsa.pub node6:/tmp/id_rsa8.pub
scp ~/.ssh/id_rsa.pub node7:/tmp/id_rsa8.pub
scp ~/.ssh/id_rsa.pub node8:/tmp/id_rsa8.pub
node4上面:
scp ~/.ssh/id_rsa.pub node6:/tmp/id_rsa4.pub
scp ~/.ssh/id_rsa.pub node7:/tmp/id_rsa4.pub
scp ~/.ssh/id_rsa.pub node8:/