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分钟:

1479721780

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:

1479721781

在箭头处填入filebeat*并点击Create即可完成操作:

1479721782-1

最后在Discover中查看数据。

0x05 结语

安装过程虽然烦琐,但在用过这这个技术栈后会觉得非常值得。这周我再把一些核心的内容做个记录。