0x01 前言
我之前配置了pfsense作为家庭网关,因为pfsense是可以从外网访问的,所以我做了许多防火墙规则,甚至配置了IDS。因此pfsense生成的日志非常多,那么多的日志放着也是放着,倒不如好好分析一番。另外我的网站也有许多日志,为何不好好利用?
在经过查找后,我发现一个叫Elastic Stack的技术栈。这是一款用于数据分析、搜索、图表生成的工具,不过我没有大数据可用,用在小数据倒是挺好的。
0x02 安装
首先得准备一台机器用于安装。我这里使用centos7,需要先安装java jdk:
[root@web ~]# yum install java-1.8.0-openjdk -y
要注意的是,需要安装1.8.0或以上的版本!
然后添加安装源:
#新建文件 vim /etc/yum.repos.d/elasticsearch.repo #插入内容 [elasticsearch-5.x] name=Elasticsearch repository for 5.x packages baseurl=https://artifacts.elastic.co/packages/5.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
再添加KEY:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
最后安装:
yum install elasticsearch kibana logstash filebeat -y
0x03 配置
0x03.1 kibana
kibana是一款可视化工具,让我们可以从Elasticsearch中便捷地提取数据并声称容易理解的图表。
kibana的配置过程很简单,打开文件进行修改:
[root@web ~]# vim /etc/kibana/kibana.yml
#默认的监听端口是5601 server.port: 5601 #默认的监听IP是127.0.0.1 server.host: "localhost" #超时默认时长为30000毫秒,也就是30秒 elasticsearch.requestTimeout: 3000000
其实需要配置的东西并不多,但我推荐将elasticsearch.requestTimeout这个值设大点,如果你的数据很大、很多,这会有利于你的操作。
我并没有将默认的监听端口和IP地址进行修改,而是在kibana前面使用nginx的反向代理。使用nginx反向代理方便我使用HTTPS协议和配置双向身份验证。如果你不需要这些功能,请跳过这一步。
如果你仅仅需要通过域名访问,不需要HTTPS,请使用以下nignx配置信息:
server { listen 80; server_name kibana.t.com; access_log /var/log/nginx/access.log main; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
如果你需要HTTPS和双向身份验证,请使用一下nginx配置信息:
server { listen 443 ssl http2; server_name kibana.t.com ssl on; ssl_certificate /usr/local/nginx/ssl/kibana.t.com.crt; ssl_certificate_key /usr/local/nginx/ssl/kibana.t.com.key; ssl_client_certificate /usr/local/nginx/ssl/cacert.pem; ssl_buffer_size 16k; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:DES-CBC3-SHA; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cache builtin:20480 shared:SSL:10m; ssl_session_timeout 3h; # ssl_stapling on; ssl_session_tickets on; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Strict-Transport-Security "max-age=31536000; preload; includeSubDomains" always; ssl_verify_client on; access_log /var/log/nginx/access.log main; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
如果你仅仅需要HTTPS,而不需要双向身份验证,请将上面配置文件中的ssl_client_certificate和ssl_verify_client两个选项注释掉。
完成后reload nignx和启动kibana:
[root@web ~]# systemctl start kibana
将kibana设为开机启动:
[root@web ~]# systemctl enable kibana
这时候可以通过你的域名或ip进行访问了。
0x03.2 Elasticsearch
Elasticsearch是一款数据存储与搜索的工具,你可以通过他的API对数据进行删减、添加和查询的操作。
Elasticsearch需要手动配置的内容和kibana一样很少,但有几个内容建议手动配置。因为Elasticsearch支持集群,无论你有没有打算使用集群模式,都推荐将cluster.name进行修改:
#打开文件 [root@web ~]# vim /etc/elasticsearch/elasticsearch.yml #集群名,默认为elasticsearch cluster.name: my-application #节点名 node.name: node-1 #日志和数据存放位置,默认在/var/lib/elasticsearch path.data: /usr/local/ELK5/elasticsearch/node1/data path.logs: /usr/local/ELK5/elasticsearch/node1/logs #监听IP,默认是127.0.0.1 network.host: 0.0.0.0
因为稍后需要使用filebeat导入日志,所以还需要添加一下一行:
action.auto_create_index: +filebeat*
允许自动创建filebeat*为前缀的索引。
最后启动并设为开机启动:
#启动 [root@web ~]# systemctl start elasticsearch.service #开机启动 [root@web ~]# systemctl enable elasticsearch.service
这时候就可以访问http://[your domain]/status 获取组建的状态,但要注意的是,Elasticsearch启动比较慢,要等待将近1分钟:
0x03.3 logstash
logstash是一款对数据格式化操作的一款工具,它的配置会比较繁琐。先添加监听端口与输出端口:
#新建文件 [root@web ~]# vim /etc/logstash/conf.d/00-logstash-listen-5044.conf #填入内容 input { beats { port => 5044 } } output { elasticsearch { hosts => "localhost:9200" user => "elastic" password => "changeme" manage_template => true index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }
然后新建一个格式匹配文件来匹配系统日志:
#新建文件 [root@web conf.d]# vim /etc/logstash/conf.d/10-syslog-filter.conf #填入内容 filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } syslog_pri { } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
这样,最基本的两个文件就完成了。随后启动logstash并将其设为开机启动:
#启动 [root@web ~]# systemctl start logstash.service #开机启动 [root@web ~]# systemctl enable logstash.service
0x03.4 filebeat
filebeat是一款读取文件内容并输出的工具,他可以直接输出到elasticsearch进行存档,也可以输出到logstash进行处理再由logstash输出到elasticsearch进行存档。
在这里我需要将日志进行处理后再存档,那么配置文件需要进行如下修改:
#修改文件 [root@web ~]# vim /etc/filebeat/filebeat.yml
默认读取的文件已经包含系统日志:
- input_type: log # Paths that should be crawled and fetched. Glob based paths. paths: - /var/log/*.log
我们需要将Elasticsearch output这一块的内容注释掉,然后修改Logstash output这一块的内容:
output.logstash: # The Logstash hosts hosts: ["localhost:5044"]
保存后即可启动filebeat并将其设为开机启动:
#启动 [root@web ~]# systemctl restart filebeat.service #开机启动 [root@web ~]# systemctl restart filebeat.service
0x04 添加索引
最后还需要到kibana中添加索引,打开kibana>Management>Index Patterns:
在箭头处填入filebeat*并点击Create即可完成操作:
最后在Discover中查看数据。
0x05 结语
安装过程虽然烦琐,但在用过这这个技术栈后会觉得非常值得。这周我再把一些核心的内容做个记录。