博客/社区

与OSSEC Homelab安全,洛基,普罗米修斯,Grafana覆盆子π

2019年8月22日10分钟

多年来我一直在使用一个应用程序调用OSSEC监视我的家庭网络。应用程序的输出主要是电子邮件警报在接近实时的看到事件的是完美的。在这篇文章中,我将向您展示如何构建一个好的高级视图与洛基随着时间的推移这些警报,普罗米修斯,Grafana。

换句话说,不再通过ssh登录和梳理日志搜索或查看警报!

下面是一些例子:

Ossec总结仪表板
Ossec警报的热图
Ossec警报5级
Ossec防火墙的行为

设置

有一些运动部件设置,我会通过设置每个工作。但首先,你需要一个覆盆子πRaspbian操作系统运行。(我使用最小安装没有UI节省一些资源。)如果你有很多的主机,你可能想要一个新的3 b + 4模型。我有15个主机在网络和运行在一个年长的模型2 b(四核1 gb的RAM)到目前为止工作正常。RAM似乎紧资源和要抓的一个新模型4覆盆子π的4 gb的RAM可能是个不错的主意。

免责声明:

这个项目对我来说是一个机会与洛基玩耍而解决一个有趣的问题。这不是产品质量的东西。我要从运行π用户的主目录/home/pi,而不是更合适的目录工作,如果,/var/run等。另外,我的目录结构不完全一致:Grafana和普罗米修斯被提取到版本目录和洛基/ Promtail不是,因此升级组件将有点乏味。如果你要考虑这个系统为您的业务,请花时间把东西放到该放的地方和使用合适的标志设置数据目录,等等。

OSSEC

这是一个非常基本的OSSEC安装对于那些不熟悉。我使用安装脚本将从源代码编译OSSEC。

Raspbian应该已经安装了build-essentials包,其中包括一个编译器。不幸的是OSSEC不是最新的文档版本3.3.0,这需要一个附加的步骤下载PCRE。(还有一个方法与系统包,但我找不到合适的包Raspbian。)看到这个问题更多信息。

wget https://github.com/ossec/ossec-hids/archive/3.3.0.tar.gz焦油-zxvf 3.3.0.tar。广州wget https://ftp.pcre.org/pub/pcre/pcre2-10.32.tar.gz焦油-xzf pcre2-10.32.tar。广州- c ossec-hids-3.3.0 / src /外部cd ossec-hids-3.3.0 / sudo。/ install.sh

按照提示;你想要选择的服务器类型。

OSSEC安装之后,您将需要修改配置启用JSON输出。因为所有OSSEC作为根用户所拥有的文件,它会更容易改变根用户。

sudo苏-

编辑/var/ossec/etc/ossec.conf<世界>部分。你要加< jsonout_output >对< / jsonout_output >:

全球> < ossec_config > < < email_notification >对< / email_notification > < email_to > email.com < / email_to > < smtp_server > 127.0.0.1 < / smtp_server > < email_from > ossecm.com < / email_from > < jsonout_output >对< / jsonout_output > < /全球>…

注意:这些都是无效的电子邮件配置。你需要为你的设置是有效的,如果你想收到邮件。

现在你可以(重新)开始OSSEC:

/var/ossec/bin/ossec-control重启

你可以闲逛/var/ossec目录,看看/var/ossec/logs/ossec.log看看OSSEC运行没有问题。你也可以看看/var/ossec/logs/alerts/alerts.json希望看到警报条目。

为了更好的设置,你要开始配置OSSEC代理其他计算机。这是超出了本文的范围,但是过程基本上是一样的安装服务器:下载OSSEC焦油。广州代理机器,和选择代理当运行安装脚本。一些发行版(包括Windows)可能可以使用预构建二进制文件或包。看到OSSEC下载更多信息页面。

Promtail

安装了OSSEC,是时候开始添加我们的组件。我们将从Promtail开始:

mkdir promtail cd promtail wget https://github.com/grafana/loki/releases/download/v0.3.0/promtail_linux_arm.gz gunzip promtail_linux_arm。广州chmod + x promtail_linux_arm

接下来,我们需要做一个配置文件。你选择的编辑器,创建promtail.yml在相同的目录中:

服务器:http_listen_port: 8080 grpc_listen_port: 0位置:文件名:/var/ossec/logs/alerts/promtail_positions。yaml客户:url: http://localhost: 3100 / api /舞会/推动scrape_configs: - job_name: ossec_alerts pipeline_stages: - json:表达式:#提取时间戳,水平,集团从json和主机到地图中提取时间戳:时间戳水平:规则。水平组:规则。组主持人:主机名-正则表达式:#主机用括号,括号只提取字符串实际上地带来源:主机表达式:' ^ \ ((? P <主机> \ S +) \)”——模板:#垫与前导零水平,以便grafana会水平增加订单来源:水平模板:“{{printf“% 2”。value}}”——标签:#为水平设置标签,集团和主机水平:主持人:“组:时间戳:#设置时间戳来源:时间戳格式:UnixMs -指标:#出口警报的度量,它将使用上面的标签设置ossec_alerts_total:类型:计数器描述:计数的警报来源:级别配置:行动:公司static_configs: -目标:localhost标签:工作:ossec类型:警报__path__: /var/ossec/logs/alerts/alerts.json - job_name: ossec_firewall pipeline_stages:正则表达式:#防火墙日志不是json,这regex将匹配所有部件和提取组织提取的数据表达:“(?P <时间> \ d {4} \ w {3} \ d {2} \ d {2}: \ d {2}: \ d {2}) (? P <主机> \ S +) {0,1} \ S {0} (? P <行动> \ w +) (? P <协议> \ w +) (? P < src > (\ d。) +) - > (? P < dest > (\ d。) +)”-正则表达式:#这将匹配主机条目用括号,括号去掉来源:主机表达:“^ \ ((? P <主机> \ S +) \) -正则表达式:#一些主机格式的ossec - >…这将匹配那些,只返回主机名来源:主机表达:“^ (? P <主机> \ S +) - >”-模板:#强迫动作(下降或允许)小写来源:行动模板:“{{value |给}}”-模板:#迫使协议小写来源:协议模板:“{{value |给}}”——标签:#为行动,设置标签协议,和主机动作:“协议:主持人:“时间戳:#设置时间戳,我们必须迫使时区因为它不存在于日志时间戳,更新了服务器时区来源:时间戳格式:2006年1月02 15:04:05的位置:“美国/ New_York”——指标:#出口防火墙事件的指标,它将使用上面的标签设置ossec_firewall_total:类型:计数器描述:计数的防火墙事件来源:行动配置:行动:公司static_configs: -目标:localhost标签:工作:ossec类型:防火墙__path__: /var/ossec/logs/firewall/firewall.log

这个配置将尾巴JSON警报日志和non-JSON防火墙日志,设置一些有用的标签查询和导出指标普罗米修斯刮。

以确保Promtail总是运行在重启,我们还将设置一个systemd服务和创建一个文件在同一个目录下promtail.service:

(单位)描述= Promtail洛基代理后=洛基。服务(服务)类型=简单的用户=根ExecStart = / home /π/ promtail / promtail WorkingDirectory = / home /π/ promtail /重启=总是RestartSec = 10(安装)WantedBy = multi-user.target

复制文件(systemd不允许我们符号链接;当我们启用服务,systemd不会遵循符号链接):

sudo cp /home/pi/promtail/promtail.服务/etc/systemd/system/promtail.service

洛基

Promtail非常相似,我们将下载和设置洛基:

mkdir洛基cd洛基wget https://github.com/grafana/loki/releases/download/v0.3.0/loki_linux_arm.gz gunzip loki_linux_arm。广州chmod + x loki_linux_arm

现在我们让洛基配置文件在同一目录中loki-config.yaml:

auth_enabled:假服务器:http_listen_port: 3100摄取:生命周期:地址:127.0.0.1环:kvstore:存储:inmemory replication_factor: 1 final_sleep: 0 chunk_idle_period: 1 m chunk_retain_period: 30年代schema_config:配置:——从:2018-04-15商店:boltdb object_store:文件系统模式:v9指数:前缀:index_时期:168 h storage_config: boltdb:目录:/home/pi/loki/index文件系统:目录:/home/pi/loki/chunks limits_config: enforce_metric_name:假reject_old_samples:真正的reject_old_samples_max_age: 168 h chunk_store_config: max_look_back_period: 0 table_manager: chunk_tables_provisioning: inactive_read_throughput: 0 inactive_write_throughput: 0 provisioned_read_throughput: 0 provisioned_write_throughput: 0 index_tables_provisioning: inactive_read_throughput: 0 inactive_write_throughput: 0 provisioned_read_throughput: 0 provisioned_write_throughput: 0 retention_deletes_enabled:真retention_period: 720 h

这个配置指定一个30天的保留日志。你可以改变retention_period如果你想要这是长还是短。

我们还将为洛基想创建一个systemd服务:

(单位)描述=洛基日志后聚合器=网络。目标[服务]类型=简单的用户=πExecStart = / home /π/洛基loki_linux_arm配置。文件loki-config。yaml WorkingDirectory = / home /π/洛基/重启=总是RestartSec = 10(安装)WantedBy = multi-user.target

然后复制文件:

sudo cp /home/pi/loki/loki.服务/etc/systemd/system/loki.service

普罗米修斯

cd wget https://github.com/prometheus/prometheus/releases/download/v2.11.1/prometheus-2.11.1.linux-armv7.tar.gz焦油-zxvf prometheus-2.11.1.linux-armv7.tar.gz

对于普罗米修斯,我们将编辑现有的prometheus.yml文件,使它看起来像这样:

#我的全球配置全球:scrape_interval: 15秒#刮间隔设置为每15秒。默认是每1分钟。evaluation_interval: 15秒#评估规则每15秒。缺省值是每1分钟。# scrape_timeout设置为全局缺省(10)。# Alertmanager配置报警:alertmanagers: static_configs: -目标:# - Alertmanager: 9093 #加载规则一旦和定期评估它们根据全球“evaluation_interval”。rule_files: #——“first_rules。yml“#——“second_rules。yml“#刮刮配置包含一个端点:#这是普罗米修斯本身。scrape_configs: #工作名称添加为标签的工作= < job_name > '从这个配置任何timeseries刮。——job_name:‘普罗米修斯’# metrics_path默认为“/指标”#方案默认为“http”。 static_configs: - targets: ['localhost:9090'] - job_name: 'ossec' static_configs: - targets: ['localhost:8080'] - job_name: 'ossec-metrics' static_configs: - targets: ['localhost:7070'] - job_name: 'loki' static_configs: - targets: ['localhost:3100']

真正唯一的变化就是底部的三个额外的刮配置。

像其他人一样,我们将创建一个systemd服务;然而,因为我运行普罗米修斯的提取(和版本)目录,我做了一个单独的目录来保存服务文件:

cd mkdir普罗米修斯cd普罗米修斯

编辑prometheus.service并给它以下内容:

(单位)描述=普罗米修斯指标后=网络。目标[服务]类型=简单的用户=πExecStart = / home /π/ prometheus-2.11.1。linux-armv7 /普罗米修斯——storage.tsdb.retention。时间= 30 d WorkingDirectory = / home /π/ prometheus-2.11.1。linux-armv7 /重启=总是RestartSec = 10(安装)WantedBy = multi-user.target

复制文件:

sudo cp /home/pi/prometheus/prometheus。服务/etc/systemd/system/prometheus.service

Grafana

cd wget https://dl.www.tubolov.com/oss/release/grafana-6.3.3.linux-armv7.tar.gz焦油-zxvf grafana-6.3.3.linux-armv7.tar.gz

我没有修改Grafana配置。我所做的是使systemd服务。像普罗米修斯一样,这将在自己的目录:

cd mdkir grafana cd grafana

创建grafana.service文件与这些内容:

(单位)描述= =网络后Grafana UI。目标[服务]类型=简单的用户=πExecStart = / home /π/ grafana-6.3.3 / bin / grafana-server WorkingDirectory = / home /π/ grafana-6.3.3 /重启=总是RestartSec = 10(安装)WantedBy = multi-user.target

复制文件:

sudo cp /home/pi/grafana/grafana.服务/etc/systemd/system/grafana.service

OSSEC-metrics

我也希望我的仪表盘给我代理连接和断开连接的数量。这不是我能做的事从尾矿OSSEC输出日志我构建了一个简单的应用程序来执行一些OSSEC命令并解析输出ossec-metrics。设置是一样的:

mkdir ossec-metrics cd ossec-metrics wget https://github.com/slim-bean/ossec-metrics/releases/download/v0.1.0/ossec-metrics-linux-armv7.gz gunzip ossec-metrics-linux-armv7。广州chmod + x ossec-metrics-linux-armv7

没有配置。所有我们需要做的是让systemd服务通过创建该文件ossec-metrics.service与这些内容:在同一个目录下

(单位)描述= Ossec指标暴露Ossec信息后刮普罗米修斯=网络。目标[服务]类型=简单的用户=根ExecStart = / home /π/ ossec-metrics / ossec-metrics-linux-armv7 WorkingDirectory = / home /π/ ossec-metrics /重启=总是RestartSec = 10(安装)WantedBy = multi-user.target

复制文件:

sudo cp /home/pi/ossec-metrics / ossec-metrics。服务/etc/systemd/system/ossec-metrics.service

操作

一切设置,是时候开始我们的服务。首先,我们需要重新加载systemd检测新服务文件:

sudo systemctl daemon-reload

那么我建议开始每个服务一次,检查输出错误:

sudo systemctl开始普罗米修斯sudo systemctl状态普罗米修斯

如果一切正常,您将看到以下输出以及一些最近的日志:

主动:主动(运行)自清华2019-08-22 08:54:03美国东部时间;2小时10分钟前

如果服务已经失败了,你可以看看的输出状态也看看/var/log/syslog为更多的信息。

假设一切都是好的,继续启动其他服务。

sudo systemctl开始洛基sudo systemctl地位洛基sudo systemctl开始promtail sudo systemctl地位promtail sudo systemctl开始ossec-metrics sudo systemctl地位ossec-metrics sudo systemctl开始grafana sudo grafana systemctl状态

和一切工作,您可以启用的所有服务开始启动:

sudo systemctl使普罗米修斯sudo systemctl启用洛基sudo systemctl启用promtail sudo systemctl启用ossec-metrics sudo systemctl启用grafana

指示板

所有这些工作,我们最后的步骤,你可以看到一些偿还!

在web浏览器中,您需要导航到你的树莓π的IP地址http://192.168.1.100:3000

注意:你的IP地址可能会有所不同;然而,确保添加:3000港口!

登录Grafana并添加两个新的数据源。首先是普罗米修斯数据源:

普罗米修斯数据源

然后一个洛基数据源:

洛基数据源

现在您可以导入两个仪表盘我由悬停+符号左边的面板并选择进口

OSSEC趋势仪表板,粘贴这个JSON和负载并保存仪表板。

仪表板OSSEC总结,通过去+和重复进口,粘贴这个JSON

结论

希望现在你也可以有自己的OSSEC服务器好的视觉效果和方便地访问历史事件上运行一个便宜的覆盆子π!

当然你不需要运行这个覆盆子π,洛基的可伸缩性,天空是极限对于事件的数量可以存储。