0x01 首先,快速安装配置好jdk 1.8,因为ES基于java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| export JAVA_HOME=/usr/local/jdk/ export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar export TOMCAT_HOME=/usr/local/tomcat
|
0x02 再来熟悉一些必要的关于elasticsearch的基础概念:
0x03 下载配置 elasticsearch:
1 2 3 4
| # wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.7.2.tar.gz # tar -xf elasticsearch-1.7.2.tar.gz # mv elasticsearch-1.7.2 /usr/local/ # ln -s /usr/local/elasticsearch-1.7.2/ /usr/local/elasticsearch
|
0x04 关于 ES 目录下各配置文件作用简要说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| |-- LICENSE.txt |-- NOTICE.txt |-- README.textile |-- bin elasticsearch 自身工具 | |-- elasticsearch | |-- elasticsearch-service-mgr.exe | |-- elasticsearch-service-x64.exe | |-- elasticsearch-service-x86.exe | |-- elasticsearch.bat | |-- elasticsearch.in.bat | |-- elasticsearch.in.sh | |-- plugin | |-- plugin.bat | `-- service.bat |-- config | |-- elasticsearch.yml 主配置文件 | `-- logging.yml 日志配置文件 `-- lib |-- antlr-runtime-3.5.jar |-- asm-4.1.jar |-- asm-commons-4.1.jar |-- elasticsearch-1.4.4.jar |-- groovy-all-2.3.2.jar |-- jna-4.1.0.jar |-- jts-1.13.jar |-- log4j-1.2.17.jar |-- lucene-analyzers-common-4.10.3.jar |-- lucene-core-4.10.3.jar |-- lucene-expressions-4.10.3.jar |-- lucene-grouping-4.10.3.jar |-- lucene-highlighter-4.10.3.jar |-- lucene-join-4.10.3.jar |-- lucene-memory-4.10.3.jar |-- lucene-misc-4.10.3.jar |-- lucene-queries-4.10.3.jar |-- lucene-queryparser-4.10.3.jar |-- lucene-sandbox-4.10.3.jar |-- lucene-spatial-4.10.3.jar |-- lucene-suggest-4.10.3.jar |-- sigar | |-- libsigar-amd64-freebsd-6.so | |-- libsigar-amd64-linux.so | |-- libsigar-amd64-solaris.so | |-- libsigar-ia64-linux.so | |-- libsigar-sparc-solaris.so | |-- libsigar-sparc64-solaris.so | |-- libsigar-universal-macosx.dylib | |-- libsigar-universal64-macosx.dylib | |-- libsigar-x86-freebsd-5.so | |-- libsigar-x86-freebsd-6.so | |-- libsigar-x86-linux.so | |-- libsigar-x86-solaris.so | |-- sigar-1.6.4.jar | |-- sigar-amd64-winnt.dll | |-- sigar-x86-winnt.dll | `-- sigar-x86-winnt.lib `-- spatial4j-0.4.1.jar
|
0x05 编辑修改ES主配置文件
1 2
| # cd /usr/local/elasticsearch/config/ # vi elasticsearch.yml
|
1 2 3 4 5 6 7 8
| cluster.name: xlion 集群名称 node.name: "klionsec" 节点名称,如果是同一个集群中的节点只需要改此名称即可 node.master: true 将此节点作为 master,具备一些管理功能 node.data: true 是否存储数据,如果只是想做一些管理功能,可以不存储数据,即设为false index.number_of_shards: 5 主分片 index.number_of_replicas: 1 副本分片 network.host: 192.168.3.139 监听ip,可直监听内网ip .....
|
定义好一些ES要用到的临时文件路径
1 2 3 4 5 6
| path.conf: /usr/local/elasticsearch/conf path.data: /usr/local/elasticsearch/data path.work: /usr/local/elasticsearch/work path.logs: /usr/local/elasticsearch/logs path.plugins: /usr/local/elasticsearch/plugins bootstrap.mlockall: true 锁住内存
|
创建刚才定义的目录,并仔细检查配置
1 2
| # mkdir -p /usr/local/elasticsearch/{conf,data,work,logs,plugins} # egrep -v "#|^$" elasticsearch.yml
|
0x06 没什么问题之后,就可以启动ES了,它默认会监听9300和9200端口,9300是集群节点之间的通信端口,9200是提供给外部的api接口端口:
1 2 3 4 5
| # /usr/local/elasticsearch/bin/elasticsearch 前台启动 # /usr/local/elasticsearch/bin/elasticsearch -d 后台启动 # curl http://192.168.3.139:9200 # jps | grep Elasticsearch # kill -15 27257 注意如果要关闭elasticsearch,这里直接kill掉jvm进程即可
|
测试查询,看看ES是否真的已经可用
1 2 3 4 5 6 7
| # curl -i -XGET 'http: { "query":{ "match_all":{} } } '
|
0x06 安装一些常用的ES插件:
1 2
| 浏览器访问 http://192.168.3.139:9200/_plugin/marvel/kibana/index.html
|
1 2
| # /usr/local/elasticsearch/bin/plugin -i mobz/elasticsearch-head 一个集群管理插件,节点,数据量较少时还是非常好用的 浏览器访问 http:
|
0x07 配置 Logstash,相当于数据源和ES之间的通道,Logstash把指定的数据源中的数据读过来,然后再通过Logstash把数据写到ES中,可以说是整个套件中最核心的地方:
1 2 3 4 5 6 7 8
| # tar xf logstash-1.5.3.tar.gz # mv logstash-1.5.3 /usr/local/ # ln -s /usr/local/logstash-1.5.3/ /usr/local/logstash # mkdir /usr/local/logstash/etc/ # /usr/local/logstash/bin/logstash -e 'input { stdin{} } output { stdout{codec => rubydebug} }' # /usr/local/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { host => "192.168.3.139" protocol => "http"} }' # vi /usr/local/logstash/etc/logstash.conf # /usr/local/logstash/bin/logstash -f /usr/local/logstash/etc/logstash.conf 直接通过配置文件的方式启动
|
0x08 Logstash[基于jruby] 基本配置语法,还有非常多,更详细的内容请直接参考官方文档,篇幅原因这里不细说了,因为非常重要,所以大家可能要多花些时间来仔细学习:
1
| input[数据源可以是文件,各类数据库...] -> filter -> output[ 一般都是es ]
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| input { file { path => "/var/log/messages" } } output { file { path => "/tmp/%{+YYYY-MM-dd}.messages.gz" gzip => true } }
|
0x09 简单配置 Kibana[基于nodejs] 它主要用来搜索es中的数据,并将其可视化,默认监听5601端口:
1 2 3 4 5 6 7 8
| # tar xf kibana-4.1.1-linux-x64.tar.gz # mv kibana-4.1.1-linux-x64 /usr/local/ # ln -s /usr/local/kibana-4.1.1-linux-x64/ /usr/local/kibana # cd /usr/local/kibana/config/ # vi kibana.yml elasticsearch_url: "http://192.168.3.139:9200" # nohup /usr/local/kibana/bin/kibana 访问 http://192.168.3.139:5601/
|
0x10 平时经常要搜集的一些日志:
1 2 3 4 5 6
| 各类系统平台运行日志 各类服务访问,错误日志 各类程序自身的运行日志 基于web和内网的各种攻击特征日志 其它的各类业务日志等... .....
|
一点小结:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 这里仅仅也只是先把日志搜集平台大体框架搭起来,中间并未涉及任何具体应用 和运维不同的是,他们可能更偏向于去解决各类系统,服务故障,性能调优以及一些实际的业务规划,架构设计等等.... 看日志的大多目的可能也都主要集中在这些点上,安全可能往往只是顺带考虑下而已,毕竟,不是专门做安全的 但作为一名防御者,我们关注更多的,可能还是存在日志中的各种各样的攻击特征 如果能实时捕捉到这些高危入侵特征,并实现可视化及高效报警,我想肯定会是一件非常有意思的事情 但同时也有个非常现实的问题,如果日志量特别大,想做到接近实时就非常困难了 这时,ELK也许会是个非常不错的选择...当然,已经有很多类似的商业产品,如,相对比较成熟的splunk 但splunk并非主要专注安全,不过好在splunk已经提供了非常强大的api 后续我们会再重点介绍它,也是一款非常不错的工具,但就是要收点儿钱 所以,在不想花钱的情况下,ELK绝对是个非常不错的选择 根据自己实际的渗透经验加上py,在此基础上定制一套极具针对性的"入侵日志监控系统"还是非常现实的..... 对了,像ES和logstash,每次这样手工启动,确实比较累,不过别人已经写好对应的系统启动脚本 这里毕竟不是运维,所以也就没仔细说,大家可自行去谷歌上找找,或者自己写写都行.... .....
|