使用ELK搭建社工库
0x01 ELK是什么东西?
ELK是ElasticSearch、Logstash、Kibana三个应用的缩写。 ElasticSearch简称ES,主要用来存储和检索数据。Logstash主要用来往ES中写入数据。Kibana主要用来展示数据。
0x02 为什么用ELK?
传统的社工库通常用MySQL数据库来进行搭建,在相当大的数据下检索效率非常低下。在这种关系型数据库中进行查询需要明确指定列名。而在ES中可用全文检索,并且在大数据的查询中的响应几乎都是毫秒级的,速度相当之快!ELK原本用在日志的大数据收集和分析,其可怕的速度作为社工库也是一种不错的选择。
0x03 安装和配置
前提你需要一个很大的硬盘,大约社工库容量2.5倍的硬盘(ES会创建相关索引)。
你需要安装java至少7以上的版本。并且配置JAVA_HOME环境变量.
因为安装非常简单,只需要下载相应的压缩文件,解压即可。在此不再赘述。
我此次演示的环境在Windows8.1上,ES在Linux中不能使用root权限运行。
ES 2.0.0 Logstash 2.0.0 Kibana 4.2.0
修改配置文件:
ES/config/elasticsearch.yml
cluster.name: esdemo (集群的描述信息)
node.name: 63 (节点名称)
network.host: 192.168.1.5 (绑定的IP地址)
http.port: 9200 (端口号 默认9200)
一些Linux环境需要修改 ES/bin/elasticsearch 文件 增加
export JAVA_HOME=JDK路径
启动 ES/bin/elasticsearch或者elasticsearch.bat 即可启动
然后访问 http://localhost/IP:9200 可查看是否正常运行
Kibana/config/kibana.yml
elasticsearch.url: "http://192.168.1.5:9200" 指定ES地址
执行Kibana/bin/kibana 或者 kibana.bat启动
查看 http://localhost:5601 是否正常启动
ElasticSearch 天生就很好的支持分布式,如果环境允许可以多使用几台负载。
为了方便理解 把ES中的一些概念和MySQL进行对比
ES index(索引) type(类型) document(文档) field(字段)
MySQL database table row column
0x04 社工库搭建
以上工作准备完成之后,就该进入搭建的阶段了.首先确定有哪些列名存在ES中,我自己存了10列,给大家做个参考.
nickname(昵称)、password(密码)、email(邮箱)、qq(QQ号)、telno(手机号码)、idno(身份证号码)、realname(真实姓名)、address(家庭住址)、salt(盐值)、from(数据来源)。相对来说我这样划分的还是蛮详细的。但是在用Logstash写入ES的过程当中就比较费时了。其实如果想偷懒,完全可以把现有的数据只作为一个field写入,也是可以查询出来的。但是这样会比较乱,看着很不舒服。
我现在的主要做法是对一些现有的CSV文件,使用脚本进行清洗,洗成我规定的这些字段的格式。如果是.sql文件,则直接丢进mysql,然后再导出csv文件。也就是说不同的网站数据库最终全部是csv文件,并且是格式相同的csv。有字段不存在的则使用空字符替代。这样的话,可以在不更改logstash配置文件的情况下直接导入ES,也方便进行迁移。
配置logstash 文件(test.conf)
然后在logstash bin目录下面执行
Logstash.bat -f test.conf
就可以看到如下图:
正在往ES中写入数据。
在重复测试时,请注意要删除home目录下的sincedb文件。我提供了一段python代码来进行这些操作。
以上代码主要是用来删除创建的索引中的数据并且删除一些临时文件.
数据写完之后可以查看
http://ip地址:9200/_cat/indices?v
来查看索引的信息
登录 Kibana
http://localhost:5601/
点击settings --- index patterns Add new --输入你创建的index名称,点击create完成.
然后可以在Discover中进行搜索。
也可以指定字段名进行搜索 例如:telno:13588888888.该语法为lucene 语法.
Have fun!!!
PS:
1、如果一亿条数据,本机测试也是毫秒级的查询,目前3亿条数据,速度也是很快。
2、这三款软件全部开源。可以在ES的官方下载,下载之后,简单的配置即可使用。
ELK是ElasticSearch、Logstash、Kibana三个应用的缩写。 ElasticSearch简称ES,主要用来存储和检索数据。Logstash主要用来往ES中写入数据。Kibana主要用来展示数据。
0x02 为什么用ELK?
传统的社工库通常用MySQL数据库来进行搭建,在相当大的数据下检索效率非常低下。在这种关系型数据库中进行查询需要明确指定列名。而在ES中可用全文检索,并且在大数据的查询中的响应几乎都是毫秒级的,速度相当之快!ELK原本用在日志的大数据收集和分析,其可怕的速度作为社工库也是一种不错的选择。
0x03 安装和配置
前提你需要一个很大的硬盘,大约社工库容量2.5倍的硬盘(ES会创建相关索引)。
你需要安装java至少7以上的版本。并且配置JAVA_HOME环境变量.
因为安装非常简单,只需要下载相应的压缩文件,解压即可。在此不再赘述。
我此次演示的环境在Windows8.1上,ES在Linux中不能使用root权限运行。
ES 2.0.0 Logstash 2.0.0 Kibana 4.2.0
修改配置文件:
ES/config/elasticsearch.yml
cluster.name: esdemo (集群的描述信息)
node.name: 63 (节点名称)
network.host: 192.168.1.5 (绑定的IP地址)
http.port: 9200 (端口号 默认9200)
一些Linux环境需要修改 ES/bin/elasticsearch 文件 增加
export JAVA_HOME=JDK路径
启动 ES/bin/elasticsearch或者elasticsearch.bat 即可启动
然后访问 http://localhost/IP:9200 可查看是否正常运行
Kibana/config/kibana.yml
elasticsearch.url: "http://192.168.1.5:9200" 指定ES地址
执行Kibana/bin/kibana 或者 kibana.bat启动
查看 http://localhost:5601 是否正常启动
ElasticSearch 天生就很好的支持分布式,如果环境允许可以多使用几台负载。
为了方便理解 把ES中的一些概念和MySQL进行对比
ES index(索引) type(类型) document(文档) field(字段)
MySQL database table row column
0x04 社工库搭建
以上工作准备完成之后,就该进入搭建的阶段了.首先确定有哪些列名存在ES中,我自己存了10列,给大家做个参考.
nickname(昵称)、password(密码)、email(邮箱)、qq(QQ号)、telno(手机号码)、idno(身份证号码)、realname(真实姓名)、address(家庭住址)、salt(盐值)、from(数据来源)。相对来说我这样划分的还是蛮详细的。但是在用Logstash写入ES的过程当中就比较费时了。其实如果想偷懒,完全可以把现有的数据只作为一个field写入,也是可以查询出来的。但是这样会比较乱,看着很不舒服。
我现在的主要做法是对一些现有的CSV文件,使用脚本进行清洗,洗成我规定的这些字段的格式。如果是.sql文件,则直接丢进mysql,然后再导出csv文件。也就是说不同的网站数据库最终全部是csv文件,并且是格式相同的csv。有字段不存在的则使用空字符替代。这样的话,可以在不更改logstash配置文件的情况下直接导入ES,也方便进行迁移。
配置logstash 文件(test.conf)
然后在logstash bin目录下面执行
Logstash.bat -f test.conf
就可以看到如下图:
正在往ES中写入数据。
在重复测试时,请注意要删除home目录下的sincedb文件。我提供了一段python代码来进行这些操作。
以上代码主要是用来删除创建的索引中的数据并且删除一些临时文件.
数据写完之后可以查看
http://ip地址:9200/_cat/indices?v
来查看索引的信息
登录 Kibana
http://localhost:5601/
点击settings --- index patterns Add new --输入你创建的index名称,点击create完成.
然后可以在Discover中进行搜索。
也可以指定字段名进行搜索 例如:telno:13588888888.该语法为lucene 语法.
Have fun!!!
PS:
1、如果一亿条数据,本机测试也是毫秒级的查询,目前3亿条数据,速度也是很快。
2、这三款软件全部开源。可以在ES的官方下载,下载之后,简单的配置即可使用。
评论79次
@dream9 能否 分享下你的几个配置文件? 。里面只有1-2条测试数据就好了
思路灰常不错 源码共享一下啊
@dream9 为什么我导数据那总是出问题,求大表哥联xi方式,请教一下
楼主浏览器什么版本的,我用最新的kibana,在老一点的chrome上都不兼容。。。
@dream9 我win下报错E:\EKL\logstash-2.4.0\bin>Logstash.bat -f test.conf\n\t}\n\tmutate{\n\tremove_field => \n\t}\n}\n}\noutput{\n\telasticsearch{\n\thosts => \n\tindex => \"sgk\"\n\tdocument_type => sgk\n\t}\n\tstdout{\n\tcodec => rubydebug\n\t}\n}\n", :reason=>"Expected one of #, => at line 12, column 6 (byte303) after filter{\n\tgrok{\n\tpatterns_dir => \"e:/test.txt\"\n\tmatch => { \"message\" =>\"%{DATA:nikename},%{DATA:password},%{DATA:email},%{DATA:qq},%{DATA:tel},%{DATA:nikename},%{DATA:id},%{DATA:realname},%{DATA:address},%{DATA:cardid}%{s}\"\n\t}\n\tgrok", :level=>:error}[0mThe signal HUP is in use by the JVM and will not work correctly on this platform
https://github.com/elastic/logstash/issues/5239
@dream9 我win下 报错 E:\EKL\logstash-2.4.0\bin>Logstash.bat -f test.conf [31mfetched an invalid config {:config=>"input{\n\tfile{\n\tpath => \"e:/test.c sv\"\n\tstart_position => beginning\n\t}\n}\nfilter{\n\tgrok{\n\tpatterns_dir => \"e:/test.txt\"\n\tmatch => { \"message\" =>\"%{DATA:nikename},%{DATA:password} ,%{DATA:email},%{DATA:qq},%{DATA:tel},%{DATA:nikename},%{DATA:id},%{DATA:realnam e},%{DATA:address},%{DATA:cardid}%{s}\"\n\t}\n\tgrok{\n\tmatch => [\"path\",\"e: /%{GREEDYDATA:from\\.csv}\"]\n\t}\n\tmutate{\n\tremove_field => [\"host\",\"path \",\"message\"]\n\t}\n}\n}\noutput{\n\telasticsearch{\n\thosts => [\"120.0.0.1:9 200\"]\n\tindex => \"sgk\"\n\tdocument_type => sgk\n\t}\n\tstdout{\n\tcodec => r ubydebug\n\t}\n}\n", :reason=>"Expected one of #, => at line 12, column 6 (byte 303) after filter{\n\tgrok{\n\tpatterns_dir => \"e:/test.txt\"\n\tmatch => { \"m essage\" =>\"%{DATA:nikename},%{DATA:password},%{DATA:email},%{DATA:qq},%{DATA:t el},%{DATA:nikename},%{DATA:id},%{DATA:realname},%{DATA:address},%{DATA:cardid}% {s}\"\n\t}\n\tgrok", :level=>:error}[0m The signal HUP is in use by the JVM and will not work correctly on this platform
速度是不错,看到要2.5倍硬盘。我默默的放弃
ELK对内存大小有较高要求吧?
不少用redis的 没具体搭建过 不知道在百万级大数据下的 负载能力如何
看了你的思路,准备改到es上,不知道Kibana界面好修改不?另外问下中文和其他的分词怎么样?
关键是没有那么多的数据库
感觉好需要硬盘啊!4T都不大够
等量子计算机出来再说吧
库比较大...mysql带不起来.现在用的Oracle,如果用你这种方式.前提条件硬盘是库的2.5倍,我尼玛要穷疯...
思路不错啊 楼主可否将库共享一把
如果上百亿不知道大概多久 是否也是毫秒
谢谢分享, 只是硬件资源跟不上阿
非常棒的思路,感谢分享 。
学xi到新姿势ElasticSearch、Logstash、Kibana
这个思路是真不错,学xi了。有弄好的ELK,配上看看查询速度如何。