vlambda博客
学习文章列表

威胁追踪:使用ELK进行日志监控

注:本文为翻译国外的技术文章,部分翻译可能不完全准备,请自行甄别。


Elastic Stack 以前称为 ELK Stack。

Elk Stack 是 Elastic 公司专门为集中式日志设计的免费开源软件集合。它允许搜索、分析和可视化来自不同来源的日志。在本指南中,我们将学习在 ubuntu 上安装 Elastic Stack。

要在您的 Ubuntu 平台中配置 ELK Stack,安装需要一些先决条件。

Ubuntu 20.04根权限

表中的内容

ELK 堆栈组件

安装 Java 和所有依赖项

安装和配置 Elasticsearch

安装和配置 Logstash

安装和配置 Kibana

安装和配置 NGINX

安装和配置 Filebeat

将 Linux 日志路由到 Elasticsearch

在 Kibana 中创建日志仪表板

监控 SSH 条目

ELK 堆栈组件

Elasticsearch:它是一个安静的搜索引擎,用于存储或保存所有收集到的数据。

Logstash:它是将传入数据发送到 Elasticsearch 的数据处理组件。

Kibana:用于搜索和可视化日志的 Web 界面。

Filebeat:轻量级的单一用途数据转发器,可以将数据从数千台机器发送到 Logstash 或 Elasticsearch。

安装 Java 和所有依赖项

Elasticsearch 需要在我们的机器中提供 OpenJDK。使用以下命令安装 Java 以及 APT 的 HTTPS 支持和 wget 包。

apt install -y openjdk-11-jdk wget apt-transport-https curl

威胁追踪:使用ELK进行日志监控

现在,我们要将 Elasticsearch 公钥导入 APT。要导入 GPG 密钥,请输入以下命令:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key 添加 –

威胁追踪:使用ELK进行日志监控

使用以下命令将弹性存储库添加到目录 sources.list.d:

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | 须藤三通 -a /etc/apt/sources.list.d/elastic-6.x.list

威胁追踪:使用ELK进行日志监控

安装和配置 Elasticsearch

更新系统存储库

apt update

使用以下命令安装 Elasticsearch:

apt install elasticsearch

威胁追踪:使用ELK进行日志监控

接下来,我们配置 Elasticsearch。

Elasticsearch 侦听端口 9200 上的流量。我们将限制外部访问我们的 Elasticsearch 实例,以便外部各方无法通过 REST API 访问数据或关闭弹性集群。现在我们要对 Elasticsearch 配置文件——elasticsearch.yml 做一些修改。

输入以下命令:

nano /etc/elasticsearch/elasticsearch.yml


威胁追踪:使用ELK进行日志监控

找到指定 network.host 属性的行并取消注释并添加 localhost 作为其值,同时取消对 http.port 属性的注释。

network.host: localhost

http.port: 9200

威胁追踪:使用ELK进行日志监控

现在,启动并启用 Elasticsearch 服务。

systemctl start elasticsearch

systemctl enable elasticsearch

威胁追踪:使用ELK进行日志监控

让我们验证一下 Elasticsearch 的状态。

systemctl status elasticsearch
curl -X GET "localhost:9200"

威胁追踪:使用ELK进行日志监控

默认情况下,Elasticsearch 侦听端口 9200,您也可以通过 ping https://localhost:9200 在 Web 浏览器上验证它

威胁追踪:使用ELK进行日志监控

现在 Elasticsearch 已启动并运行。

安装和配置 Logstash

Logstash 用于使用 filebeat 从不同服务器收集和集中日志

首先让我们确认 OpenSSL 正在运行,然后通过运行以下命令安装 Logstash:

openssl version -a

apt install logstash -y

威胁追踪:使用ELK进行日志监控

编辑 /etc/hosts 文件并添加以下行

nano /etc/hosts

威胁追踪:使用ELK进行日志监控

让我们生成一个 SSL 证书来保护从客户端 Rsyslog & Filebeat 到 Logstash 服务器的日志数据传输。

为此,在 Logstash 配置目录下创建一个新的 SSL 目录,并通过运行以下命令导航到该目录生成 SSL 证书:

mkdir -p /etc/logstash/ssl
cd /etc/logstash/

openssl req -subj '/CN=elk-master/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt

威胁追踪:使用ELK进行日志监控

现在,我们将为 Logstash 创建名为“filebeat-input.conf”的新配置文件作为来自 filebeat 'syslog-filter.conf' 的输入文件用于系统日志处理,以及用于定义 Elasticsearch 输出的 'output-elasicsearch.conf' 文件.

导航到Logstash目录通过运行命令在conf.d目录中创建一个文件'filebeat-input.conf'

cd /etc/logstash/
nano conf.d/filebeat-input.conf

并粘贴以下配置

input {  beats {    port => 5443    type => syslog    ssl => true    ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"    ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"  }}

威胁追踪:使用ELK进行日志监控

对于系统日志数据处理,我们将使用名为“grok”的过滤器插件。创建一个新的配置文件。文件 'syslog-filter.conf 在同一目录中

nano conf.d/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}" ]    }    date {      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]    }  }}

威胁追踪:使用ELK进行日志监控

最后为elasticsearch的输出创建一个配置文件'output-elasticsearch.conf'。

nano conf.d/output-elasticsearch.conf

并粘贴以下配置

output {  elasticsearch { hosts => ["localhost:9200"]    hosts => "localhost:9200"    manage_template => false    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"    document_type => "%{[@metadata][type]}"  }}

威胁追踪:使用ELK进行日志监控

最后,保存并退出。

现在启动,启用并验证 Logstash 服务的状态。

systemctl start logstash

systemctl enable logstash

systemctl status logstash

威胁追踪:使用ELK进行日志监控

安装和配置 Kibana

使用以下命令安装 Kibana

apt install kibana

威胁追踪:使用ELK进行日志监控

 我们将对 kibana 配置文件进行一些修改。

nano /etc/kibana/kibana.yml

威胁追踪:使用ELK进行日志监控

找到并取消注释以下属性

威胁追踪:使用ELK进行日志监控

现在启动并启用 kibana 服务:

systemctl enable kibana

systemctl start kibana

威胁追踪:使用ELK进行日志监控

安装和配置 NGINX

安装 Nginx 和 'Apache2-utlis'

apt install nginx apache2-utils -y

威胁追踪:使用ELK进行日志监控

现在,创建一个名为 Kibana 的新虚拟主机文件。

nano /etc/nginx/sites-available/kibana

并将以下配置粘贴到文件中。

server {   

    listen 80;   

    server_name localhost;   

    auth_basic "Restricted Access";                auth_basic_user_file /etc/nginx/.kibana-user;   

    location / {       

        proxy_pass https://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;    }}

威胁追踪:使用ELK进行日志监控

让我们为 Kibana 仪表板创建身份验证并激活 Kibana 虚拟主机配置并测试 Nginx 配置,然后使用以下命令启用并重新启动 Nginx 服务。

sudo htpasswd -c /etc/nginx/.kibana-user elastic
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/

nginx -t

systemctl enable nginx

systemctl restart nginx

威胁追踪:使用ELK进行日志监控

安装和配置 Filebeat

我们将在我们的 elk-master 服务器上配置 filebeat 数据传送器。这将用于从各种来源收集数据并将它们传输到 Logstash 和 Elasticsearch。

通过运行以下命令下载并安装 filebeat。

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.11-amd64.deb

威胁追踪:使用ELK进行日志监控

 让我们使用以下命令重新打包下载的文件:

sudo dpkg -i filebeat-6.8.11-amd64.deb

威胁追踪:使用ELK进行日志监控

接下来,打开名为'filebeat.yml'的filebeat配置文件

nano /etc/filebeat/filebeat.yml

编辑配置文件:

我们将使用 Elasticsearch 对 filebeat 收集的数据执行额外的处理。因此,通过将 'enabled' 行值更改为 'true' 来启用 filebeat 探矿者。

威胁追踪:使用ELK进行日志监控

接下来转到 Elasticsearch 输出部分并添加以下几行

输出.elasticsearch:

hosts: ["192.168.0.156:9200"]

username: "elastic"

password: "123"setup.kibana:

host: "192.168.0.156:5601"

威胁追踪:使用ELK进行日志监控

通过运行以下命令启用和配置 Elasticsearch 模块

sudo filebeat 模块启用弹性搜索

让我们开始 filebeat

sudo filebeat setup

sudo service filebeat start

最后通过运行以下命令将 Logstash 证书文件 - logstash-forwarder.crt - 复制到 /etc/filebeat 目录:

cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/sudo service filebeat restart

https://localhost:5601

威胁追踪:使用ELK进行日志监控

将 Linux 日志路由到 Elasticsearch

我们将日志从 rsyslog 路由到 Logstash,这些日志会自动传输到 Elasticsearch

从 Logstash 路由到 Elasticsearch

在首先将日志从 rsyslog 路由到 Logstash 之前,我们需要设置 Logstash 和 Elasticsearch 之间的日志转发。

为此,我们将为 Logstash 创建一个配置文件。创建配置文件到目录 /etc/logstash/conf.d 并创建一个 logstash.conf 文件

cd /etc/logstash/conf.d
nano logstash.conf

将以下配置粘贴到logstash.conf文件中

 
input {                                                                                     
  udp {                                                                                     
    host => "127.0.0.1"                                                                     
    port => 10514                                                                            
    codec => "json"                                                                         
    type => "rsyslog"                                                                       
  }                                                                                          
}    
                                                                                                                                                         
# The Filter pipeline stays empty here, no formatting is done.    
filter { } 

                                                                                     
# Every single log will be forwarded to ElasticSearch. If you are using another port, you should specify it here.                                                                                             
output {                                                                                    
  if [type] == "rsyslog" {                                                                  
    elasticsearch {                                                                          
      hosts => [ "127.0.0.1:9200" ]                                                         
    }                                                                                       
  }
}

威胁追踪:使用ELK进行日志监控

重启 Logstash 服务。

systemctl restart logstash

让我们检查一切是否正常运行,发出以下命令:

netstat -na | grep 10514

威胁追踪:使用ELK进行日志监控

从 rsyslog 路由到 Logstash

Rsyslog 能够使用模板转换日志以转发 rsylog 中的日志,转到目录 /etc/rsylog.d 并创建一个名为 70-output.conf 的新文件

cd /etc/rsyslog.d
nano 70-output.conf

并将以下配置粘贴到70-output.conf文件中

# This line sends all lines to defined IP address at port 10514# using the json-template format.

*.*         @127.0.0.1:10514;json-template

威胁追踪:使用ELK进行日志监控

现在我们有了日志转发,在同一个文件夹中创建一个 01-json-template.conf 文件

nano 01-json-template.conf

并将以下配置粘贴到 01-json-template.conf 文件中

template(name="json-template"  type="list") {    constant(value="{")      constant(value="\"@timestamp\":\"")     property(name="timereported" dateFormat="rfc3339")      constant(value="\",\"@version\":\"1")      constant(value="\",\"message\":\"")     property(name="msg" format="json")      constant(value="\",\"sysloghost\":\"")  property(name="hostname")      constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")      constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")      constant(value="\",\"programname\":\"") property(name="programname")      constant(value="\",\"procid\":\"")      property(name="procid")    constant(value="\"}\n")}

重启 rsyslog 服务并验证日志是否正确转发到 Elasticsearch。

systemctl restart rsyslog
curl -XGET 'http://localhost:9200/logstash-*/_search?q=*&pretty'

威胁追踪:使用ELK进行日志监控

注意:-日志将在名为 logstash-* 的索引中转发。

在 Kibana 中创建日志仪表板

打开浏览器并转到 https://localhost:5601,您应该会看到以下屏幕。

转到管理部分并创建一个名为 logstash-* 的索引模式,然后继续下一步。

威胁追踪:使用ELK进行日志监控

我们已经将 logstash-* 定义为我们的索引模式。现在我们可以在创建之前指定一些设置。在时间过滤器字段名称字段中选择@timestamp 并创建索引模式

威胁追踪:使用ELK进行日志监控

监控 SSH 条目

这个有点特别,因为我们可以进入“发现”选项卡以构建我们的面板。

进入发现选项卡时,选择logstash-*

从那里,在 fiterbar 中,放置一个查询过滤器“programename:ssh*”。

现在我们可以在我们的机器中看到与 SSHd 服务相关的每个日志。

威胁追踪:使用ELK进行日志监控

正如我们所见,现在我们可以直接访问与 SSHd 服务相关的每个日志。例如,我们可以跟踪非法访问尝试或错误登录。

同样,我们可以监控各种非法访问尝试或错误登录,如 ftp、telnet 等……

例如,我从另一台机器通过 Telnet 访问我的服务器。

让我们来看看 Kibana 仪表板上发生了什么。

抓紧!

好的!现在您的面板包含在您的仪表板中。


如需原版,请点击阅读原文