威胁追踪:使用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
现在,我们要将 Elasticsearch 公钥导入 APT。要导入 GPG 密钥,请输入以下命令:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key 添加 –
使用以下命令将弹性存储库添加到目录 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
安装和配置 Elasticsearch
更新系统存储库
apt update
使用以下命令安装 Elasticsearch:
apt install elasticsearch
接下来,我们配置 Elasticsearch。
Elasticsearch 侦听端口 9200 上的流量。我们将限制外部访问我们的 Elasticsearch 实例,以便外部各方无法通过 REST API 访问数据或关闭弹性集群。现在我们要对 Elasticsearch 配置文件——elasticsearch.yml 做一些修改。
输入以下命令:
nano /etc/elasticsearch/elasticsearch.yml
找到指定 network.host 属性的行并取消注释并添加 localhost 作为其值,同时取消对 http.port 属性的注释。
network.host: localhost
http.port: 9200
现在,启动并启用 Elasticsearch 服务。
systemctl start elasticsearch
systemctl enable elasticsearch
让我们验证一下 Elasticsearch 的状态。
systemctl status elasticsearch
curl -X GET "localhost:9200"
默认情况下,Elasticsearch 侦听端口 9200,您也可以通过 ping https://localhost:9200 在 Web 浏览器上验证它
现在 Elasticsearch 已启动并运行。
安装和配置 Logstash
Logstash 用于使用 filebeat 从不同服务器收集和集中日志
首先让我们确认 OpenSSL 正在运行,然后通过运行以下命令安装 Logstash:
openssl version -a
apt install logstash -y
编辑 /etc/hosts 文件并添加以下行
nano /etc/hosts
让我们生成一个 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
现在,我们将为 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" }}
对于系统日志数据处理,我们将使用名为“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" ] } }}
最后为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]}" }}
最后,保存并退出。
现在启动,启用并验证 Logstash 服务的状态。
systemctl start logstash
systemctl enable logstash
systemctl status logstash
安装和配置 Kibana
使用以下命令安装 Kibana
apt install kibana
我们将对 kibana 配置文件进行一些修改。
nano /etc/kibana/kibana.yml
找到并取消注释以下属性
现在启动并启用 kibana 服务:
systemctl enable kibana
systemctl start kibana
安装和配置 NGINX
安装 Nginx 和 'Apache2-utlis'
apt install nginx apache2-utils -y
现在,创建一个名为 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; }}
让我们为 Kibana 仪表板创建身份验证并激活 Kibana 虚拟主机配置并测试 Nginx 配置,然后使用以下命令启用并重新启动 Nginx 服务。
sudo htpasswd -c /etc/nginx/.kibana-user elastic
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -tsystemctl enable nginx
systemctl restart nginx
安装和配置 Filebeat
我们将在我们的 elk-master 服务器上配置 filebeat 数据传送器。这将用于从各种来源收集数据并将它们传输到 Logstash 和 Elasticsearch。
通过运行以下命令下载并安装 filebeat。
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.11-amd64.deb
让我们使用以下命令重新打包下载的文件:
sudo dpkg -i filebeat-6.8.11-amd64.deb
接下来,打开名为'filebeat.yml'的filebeat配置文件
nano /etc/filebeat/filebeat.yml
编辑配置文件:
我们将使用 Elasticsearch 对 filebeat 收集的数据执行额外的处理。因此,通过将 'enabled' 行值更改为 'true' 来启用 filebeat 探矿者。
接下来转到 Elasticsearch 输出部分并添加以下几行
输出.elasticsearch:
hosts: ["192.168.0.156:9200"]
username: "elastic"
password: "123"setup.kibana:
host: "192.168.0.156:5601"
通过运行以下命令启用和配置 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
将 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" ]
}
}
}
重启 Logstash 服务。
systemctl restart logstash
让我们检查一切是否正常运行,发出以下命令:
netstat -na | grep 10514
从 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
现在我们有了日志转发,在同一个文件夹中创建一个 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'
注意:-日志将在名为 logstash-* 的索引中转发。
在 Kibana 中创建日志仪表板
打开浏览器并转到 https://localhost:5601,您应该会看到以下屏幕。
转到管理部分并创建一个名为 logstash-* 的索引模式,然后继续下一步。
我们已经将 logstash-* 定义为我们的索引模式。现在我们可以在创建之前指定一些设置。在时间过滤器字段名称字段中选择@timestamp 并创建索引模式
监控 SSH 条目
这个有点特别,因为我们可以进入“发现”选项卡以构建我们的面板。
进入发现选项卡时,选择logstash-*
从那里,在 fiterbar 中,放置一个查询过滤器“programename:ssh*”。
现在我们可以在我们的机器中看到与 SSHd 服务相关的每个日志。
正如我们所见,现在我们可以直接访问与 SSHd 服务相关的每个日志。例如,我们可以跟踪非法访问尝试或错误登录。
同样,我们可以监控各种非法访问尝试或错误登录,如 ftp、telnet 等……
例如,我从另一台机器通过 Telnet 访问我的服务器。
让我们来看看 Kibana 仪表板上发生了什么。
抓紧!
好的!现在您的面板包含在您的仪表板中。
如需原版,请点击阅读原文。