显然,我有这样的业力:无论我如何在开放源代码上实施某些服务,我肯定会找到一堆手册,在我的特定情况下,每本手册都将无法使用,现成的解决方案将无法启动或喜欢,否则还会发生什么-永不消化,最终您必须自己突破才能获得结果。
这次,所有手册都使用ELK5或更早的版本,但是我真的不想安装以前版本的软件。 我想在最有希望的支持期间获得该软件:最好是稳定版中的最新软件。
因此,为了能够在不重复将来所有麻烦的情况下重复完美的技艺,您必须编写我与您分享的循序渐进的备忘单。
因此,今天Mikrotik(RouterOS),Suricata 4.1,Elasticsearch + Filebeat + Kibana 6.5。
而不是加入
条款:
- i386上的Mikrotik位于主机A上的虚拟机中。Mikrotik上的所有接口都分散在VLAN上,主机具有一个物理网络接口。
- 具有单个物理网络接口的主机B上IDS / IPS / NMS的免费资源。
- 20 MB的频道输出。
- 希望接收有关通过Mikrotik外部接口传递的流量的分析数据。
- 辣根卢布和无花果戈比的预算。
- 一定的空闲时间可以避免麻烦。
在这里我不会谈论什么是IDS / IPS / NMS,为什么需要它以及会发生什么。 没有我,每个人都知道这一点,不知道的人会谷歌。
另外,我不会在Snort和Suricata之间做出选择以支持后者的理由。 这是一个品味问题。
但是从表面上解释它是如何工作的:
Suricata不知何故获得了流量。 共有三个选项:a)以串联模式将其传递给自己,b)从交换机端口接收流量的副本,以及c)分析带有流量的转储。 Suricata分析收到的流量,并根据分析结果提供有关在此流量中发现的数据。
Suricata可以使用JSON发布数据。 因此,具有结构化数据,它们可以被馈送到某个系统以进行处理,系统化,分析和可视化。
据我所知,对于数据的分析和可视化,如果不是该领域的专家,ELK堆栈就是完美的选择。 ELK堆栈最初由Elasticsearch,Logstash,Kibana组成。 现在,Beat已添加到其中(一系列接口程序,充当数据源与Logstash或Elasticsearch之间的中介)。 展望未来,我要说的是没有Logstash,因为Beat完美地将数据直接馈送到Elasticsearch,而Elasticsearch完美地吃了数据。 Elasticsearch将被咬的数据传输到Kibana(整个ELK堆栈的Web界面)。 Kibana使用Filebeat传递给他的模板,为用户提供了数据可视化功能,即所谓的Dashboards。 考虑到Elasticsearch,Logstash,Beat和Kibana是一个制造商的工作成果,因此整个农场之间相互联系良好,并且链接过程也有据可查的文档(当然,采用开源标准)。
因此,基于上述内容,任务可以描述如下:从路由器端口获取流量的副本,将其传输到Suricata,从Suricata接收JSON格式的数据,将其传输到Filebeat,然后依次将其传输到Elasticsearch和帮助Kibana创建了自己的视觉展示。
Mikrotik RouterOS
如果我拥有Mikrotik路由器硬件,那么端口镜像(端口镜像)的问题将根本不会解决。 一切都将通过启用通过外部接口传输到Mikrotik本身的任何自由端口的流量的镜像来决定。 如果Mikrotik上没有空闲端口,则可以在交换机上启用端口镜像。 但是在我的情况下,Mikrotik根本没有物理端口,而交换机上的端口从整个主机接收流量,除了Mikrotik之外,在该主机上还有更多虚拟机。
然后我再次心智地说:“谢谢你,Mikrotik!” 感谢RouterOS中的内置嗅探器。 传统上,我们没有截图,只有控制台命令。
在WinBox中打开终端并打开嗅探器:
/tool sniffer set filter-interface=if-out filter-stream=yes streaming-enabled=yes streaming-server=192.168.1.253
/tool sniffer start
而不是
if-out表示要从中拦截流量的接口
的名称,而不是
192.168.1.253-将通过
TZSP发送拦截流量的计算机的IP地址。
随着Mikrotik'om所有。
苏里卡塔
总的来说,我不是Linux主管,所以我最喜欢pop发行版。 好吧,也许我喜欢较为禁欲的Debian。 所以我开始了。 好吧,当然,由于非Linux的限制,我也想从存储库中安装二进制文件。 组装对我来说总是很懒。 因此,如果可以选择Debian,请-
不要选择 。 我现在不记得在Debian之下将整个农场都安装在哪儿了,但他确实在。 以及有关在Ubunta下安装所有组件的整个后续故事。
创建了具有4 GB RAM的4核虚拟机,下载并安装了
Ubuntu Server 18.04.1 LTS(x64)协议 :所有进一步的操作均代表超级用户执行,因此,请以root用户身份登录或向每个命令添加sudo 。
由于我在每个阶段都制作了快照,然后反复回滚到快照,所以最终,由于虚拟机中的时间与实时不同步,我出现了许多故障。
因此,我们立即设置正确的时区和NTP同步:
systemctl start systemd-timesyncd
systemctl status systemd-timesyncd
dpkg-reconfigure tzdata
为确保在安装Suricata时没有依赖性问题,请将
Universe信息库添加到
/etc/apt/sources.list中 :
nano /etc/apt/sources.list
...
deb archive.ubuntu.com/ubuntu仿生主宇宙
deb archive.ubuntu.com/ubuntu仿生安全主宇宙
deb archive.ubuntu.com/ubuntu仿生更新主宇宙
我们还添加了存储库,我们将在其中获取Suricata:
add-apt-repository ppa:oisf/suricata-stable
更新软件包数据库:
apt-get update
安装Suricata:
apt-get install -y suricata
下一步是设置Suricata及其更新的规则:
apt-get install -y python-pip
pip install pyyaml
pip install https://github.com/OISF/suricata-update/archive/master.zip
我们开始更新
suricata-update本身 :
pip install --pre --upgrade suricata-update
在没有其他配置的情况下运行将为我们提供“新兴威胁开放”规则集:
suricata-update
要查看来源列表,请执行以下操作:
suricata-update list-sources
更新规则源:
suricata-update update-sources
让我们看一下源代码中更新的内容,然后再次运行:
suricata-update list-sources
我们包含所有免费资源:
suricata-update enable-source ptresearch/attackdetection
suricata-update enable-source oisf/trafficid
suricata-update enable-source sslbl/ssl-fp-blacklist
再一次,我们更新规则:
suricata-update
Suricata已安装。
现在您需要获得流量。
特拉弗
Trafr是由Mikrotik编写的将TZSP流量转换为pcap的应用程序。 该应用程序是32位的,因此要启动它,您需要在64位Ubunta中启用对32位应用程序的支持:
dpkg --add-architecture i386
apt-get update && apt-get install -y libc6:i386
下载并解压缩
trafr :
wget http://www.mikrotik.com/download/trafr.tgz
tar xzf trafr.tgz
检查流量是否被捕获:
./trafr -s
这样启动后,图形模式下的符号输出在虚拟机的控制台中中断,我必须重新启动。 通过ssh远程连接到PuTTY没问题。
如果您在屏幕上看到不稳定的闪烁,则表明流量已到达,
trafr捕获了该流量。 如果是这样,
请将trafr转移到永久居留权,并通过管道将捕获的流量立即传输到Suricata来运行它:
mv trafr /usr/local/bin/
/usr/local/bin/trafr -s | suricata -c /etc/suricata/suricata.yaml -r /dev/stdin
现在我们检查流量是否到达了苏里卡塔,为此,我们在邻近的终端中执行以下操作:
tail -f /var/log/suricata/fast.log
您应该看到有意义的文本的智能滚动条-接收猫鼬流量的日志。
确保Suricata流量不仅会收到,而且还会分析以下内容也是不可行的:
tail -f /var/log/suricata/eve.json
这正是来自Suricata的事件输出,我们将以JSON格式将其输出到Filebeat。
Elasticsearch + Filebeat + Kibana 6.5
我们安装使用弹性存储库所需的PGP密钥并安装必要的依赖项:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
apt-get update && apt-get install -y openjdk-8-jre apt-transport-https wget nginx
请注意,Java是版本8。不支持高于8的任何版本。 因此,如果您设法较早地安装了更新的Java,则将其拆除并放入8。
我们确保已安装Java:
java -version
我们大致得出以下结论:
Java版本“ 1.8.0_191”
Java(TM)SE运行时环境(内部版本1.8.0_191-b12)
Java HotSpot(TM)64位服务器VM(内部版本25.191-b12,混合模式)
创建用户和密码以访问Kibana。 代替
管理员,选择您喜欢的东西:
echo "admin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
由于ELK将在localhost上旋转,因此在nginx中配置反向代理:
nano /etc/nginx/sites-available/kibana
服务器{
听80;
server_name suricata.server;
auth_basic“受限制的访问”;
auth_basic_user_file /etc/nginx/htpasswd.users;
位置/ {
proxy_pass localhost :5601;
proxy_http_version 1.1;
proxy_set_header升级$ http_upgrade;
proxy_set_header连接“升级”;
proxy_set_header主机$主机;
proxy_cache_bypass $ http_upgrade;
}
}
rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/kibana
重新启动nginx:
systemctl restart nginx
我们把Elasticsearch:
apt-get install -y elasticsearch
加载操作系统时打开自动运行:
systemctl daemon-reload
systemctl enable elasticsearch.service
我们推出:
systemctl start elasticsearch.service
检查它是否上升:
curl -X GET "localhost:9200/"
根据您的硬件性能,启动ES可能需要一些时间。 如果我们
拒绝连接 ,则只需重复该请求并等待,直到得到类似以下内容:
{
“名称”:“ lcZuxxm”,
“ Cluster_name”:“ elasticsearch”,
“ Cluster_uuid”:“ kmJHqJnlQe2Rk7F-CRi4EA”,
“版本”:{
“ Number”:“ 6.5.1”,
“ Build_flavor”:“默认”,
“ Build_type”:“ deb”,
“ Build_hash”:“ 8c58350”,
“ Build_date”:“ 2018-11-16T02:22:42.182257Z”,
“ Build_snapshot”:否,
“ Lucene_version”:“ 7.5.0”,
“ Minimum_wire_compatibility_version”:“ 5.6.0”,
“最低索引兼容性兼容性”:“ 5.0.0”
},
口号:您知道,要搜索
}
我们把Kibana放在:
apt-get install -y kibana
加载操作系统时打开自动运行:
systemctl daemon-reload
systemctl enable kibana.service
我们推出:
systemctl start kibana.service
现在您可以转到
192.168.1.253 (当然,IP地址是使用猫鼬分配给您的计算机的IP地址)。 Kibana封面应打开。
我们把Filebeat放在:
apt-get install -y filebeat
加载操作系统时打开自动运行:
systemctl daemon-reload
systemctl enable filebeat
我们打开Suricata模块,它是Filebeat模块集的一部分:
filebeat modules enable suricata
在Elasticsearch中安装Suricata插件:
/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent
参见UPD 2019年5月22日。重新启动Elasticsearch:
systemctl restart elasticsearch.service
我们执行Filebeat的初始配置,同时将模板加载到Kibana中:
filebeat setup -e
我们验证Filebeat已找到
/var/log/suricata/eve.json并对其进行处理,为此,请在数据输出模式下使用
publish标记运行Filebeat:
filebeat -e -d "publish"
第一个是Filebeat本身的json格式输出,然后是其日志的简单文本输出,只有一小段时间来自Suricata的输出,因此请等待并确保一切正常。 之后,中止Filebeat并返回bash。
加载操作系统时打开自动运行:
systemctl daemon-reload
systemctl enable filebeat.service
运行Filebeat:
systemctl start filebeat.service
转到Kibana,从左侧菜单中选择“仪表板”,然后选择
filebeat- *索引。 再次选择仪表板,从列表中选择
[Suricata]警报概述 ,并应获得如下信息:

选配
不要忘记进行logrotate,并且无论硬盘驱动器有多大容量,Suricata都会对其进行快速评分:
nano /etc/logrotate.d/suricata
/var/log/suricata/*.log /var/log/suricata/*.json
{
每周一次
旋转3
Missingok
无压缩
创造
共享脚本
后旋转
/ bin / kill -HUP`cat /var/run/suricata.pid 2> / dev / null` 2> / dev / null || 是真的
尾标
}
此外,有传言说有人经常在米克罗蒂克(Mikrotik)嗅探跑步状态的人停止提供交通。 然后,我们编写一个脚本来重新启动嗅探器并根据计划运行它:
/tool sniffer stop
:delay 30s
/tool sniffer start
结论
坦白说,我对上述捆绑包的稳定性不太满意。 即:值得重新启动,奇迹开始出现。 一次,除了一对夫妇,其他所有事物都停止了处理我的规则。 我必须重新安装所有内容。 第二次,Elasticsearch通常停止从Filebeat接收数据,并且必须回滚到状态快照,然后重新引导。
我还没有解决这些问题。
此外,还计划根据由Suricata识别出并转移到Mikrotik的恶棍的IP地址实施IPS。
UPD :不稳定的指控被放弃了。 我关于终止规则处理的结论是错误的。 实际上,重新启动后仪表板中为空的原因是由于Filebeat和Elasticsearch需要非常明显的时间来从meerkat解析一个数千兆字节的json文件。 如果打开包含事件的仪表板的时间段包括
创建eve.json文件的日期,则可以看到图表的列在处理文件时如何增长。 警报与已处理的事件一起显示在相应的仪表板上。 此外,x86上RouterOS上的嗅探器从未挂过。
UPD 2019年5月22日 :从Elasticsearch 6.7版本开始,ingest-geoip和ingest-user-agent插件已转换为模块。 因此,将跳过安装它们的项目。
另外,升级时,您会遇到Elasticsearch启动错误。 您将在日志中看到错误:
预期的数据库[GeoLite2-ASN.mmdb]在[/ etc / elasticsearch / ingest-geoip]中不存在
为了恢复性能,我们执行:
/usr/share/elasticsearch/bin/elasticsearch-plugin remove --purge ingest-geoip