suricata + ELK保姆级搭建入侵检测/入侵防御01 --- suricata环境搭建

前言


最近在整理网络安全方面的问题,服务器由于是部署在微软云的原因,所以在微软云中了解到了网络监察程序相关的内容,它使用的是suricata + ELK来进行网络流量的监察,在查找suricata的过程,我发现国内suricata方面的资源太少,以至于花了一些时间才明白是如何进行搭建的。(其实就是菜 = =|||)

本文章搭建的环境为Ubuntu OS,使用的suricata是直接使用apt install方式安装。
由于在微软云上直接看网络监察程序那页实在是没说明白,直接跟着操作会有一些问题存在,所以ELK的组件我是直接使用官网提供的压缩包运行。

其中参考了一位同行的文章,以此参考总结了下这方面的内容。
参考文章

话不多说,让我们开始搭建吧~~

搭建环境


安装suricata

本文章介绍的是Ubuntu OS安装方式,如果需要使用源码包安装或者Centos OS安装等等,可以参考suricata官网文档来进行安装
suricata 官网

# 下载依赖库
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
# 安装suricata 以及 json解析器jq
sudo apt install suricata jq

出现的问题

使用sudo add-apt-repository ppa:oisf/suricata-stable出现问题

  1. sudo apt update
  2. sudo apt-get install software-properties-common
  3. sudo add-apt-repository ppa:oisf/suricata-stable 搞定!

查看安装状态

sudo suricata --build-info
# 查看suricata运行状态
sudo systemctl status suricata

suricata 基本信息配置

suricata的相关目录位置

配置信息目录 /etc/suricata/
日志目录 /var/log/suricata/
规则文件目录 /var/lib/suricata/rules

检查当前网卡信息

ip addr

在这里插入图片描述
从图中看出,我们的网卡名称是eth0, ip地址是172.17.16.11

进入suricata.yaml配置文件

sudo vim /etc/suricata/suricata.yaml

我们可以看到文件的开头部分有段ip范围

vars:
  # more specific is better for alert accuracy and performance
  address-groups:
    HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"

其中配置文件中已经包含了RFC 1918相关的网络(具体可以参考suricata相关文档)
例如: 10.0.0.23 已经包含在10.0.0.0/8网段,如果没有其他网络使用则可以将其从配置文件中移除
简单来说就是只需要配置我们当前所处的网关地址即可,也就是172.16.0.0/12,其他可以去掉(因为我的ip是172.17.16.11
接下来可以看到suricata.yaml中日志文件相关的配置(别跟我说你不会搜索 > . <)
在这里插入图片描述
即可在配置中配置自定义suricata日志文件目录地址

其中有三个日志文件
在这里插入图片描述

  • suricata.log suricata启动过程相关日志,确保suricata正常运行
  • stats.log 查看统计信息的日志文件
  • fast.log 测试suricata的IDS功能(入侵检测),可以使用rules进行测试,rules触发之前,我们可以使用tail -f查看fast.log
  • eve.json 更高级的输出,如果要使用直观的输出来查看这个日志,可以使用sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'

接下来是记录日志的频率
在这里插入图片描述
记录日志的日志名称
在这里插入图片描述
更改af-packet的网络名称
我面前面说到我们的网卡名称是eth0
fa-packet是啥?他是linux的核心功能,类似于接收来自网络的数据包的接口。
在这里插入图片描述
底下的pcap也顺便改改
在这里插入图片描述

更新规则rules

规则是啥,简单来说就是suricata通过这一系列的rules来对从网络获取的网络包进行分析,从而检出网络包的行为。
相关详细内容可以查看suricata官方文档。
通过配置文件suricata的default-rule-path配置中规则目录,rule-files选择启用哪些规则

更新规则集合来源库
这个方式我是参考微软云网络监察程序那章直接下载suricata的一些规则集的,也可以使用suricata update 来更新规则集(这种方式百度会有,这里不再详述)。

# 下载规则集
wget https://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
# 将其解压到/etc/suricata
sudo tar -zxvf emerging.rules.tar.gz -C /etc/suricata

由于suricata默认配置是将规则配置在/var/lib/suricata/rules下,我们需要修改下suricata.yaml中的配置
并且将下载后解压的规则集中的某些需要的规则文件也配置到suricata.yaml中。
在这里插入图片描述
将所有原本警告的规则集调整成彻底丢弃包
如果没有这样做,多数的危险行为还是会被放行,所以我们直接丢弃所有的危险行为。
建立一个将警告转换成丢弃包的调整设定文件:

sudo touch /etc/suricata/modify.conf

编辑modify.conf

sudo vim /etc/suricata/modify.conf

在这个设定文件中,将所有的警告替代为直接的制止行为

re:. ^alert drop

注意:

更新规则集时,请关闭suircata
因为规则集中有恶意程序的特征
会被suricata自己阻挡掉,导致更新失败

更新规则集

sudo suricata-update --modify-conf /etc/suricata/modify.conf

如果全部都阻挡,可能会带来一些困扰
可以不要将所有规则集合进行合并(suricata-update会将所有的规则集合合并到suricata.rules中),直接将需要的rules文件通过配置文件进行配置。

sudo suricata-update --modify-conf /etc/suricata/modify.conf --no-merge

这样suricata就会读取需要的规则文件,而不是单单一个suricata.rules

重新启动suricata

sudo systemctl restart suricata

检查suricata启动日志

sudo tail /var/log/suricata/suricata.log

看到这条信息出现代表正常运行

<Notice> - all 4 packet processing threads, 4 management threads initialized, engine started.

检查每8秒更新一次的统计日志

sudo tail -f /var/log/suricata/stats.log

检查警报是否正常触发
观察警报状态

sudo tail -f /var/log/suricata/fast.log

我在suricata.yaml中配置了icmp协议的警报文件,则我是用另一个计算机进行ping命令时,就能在fast.log中看到警报信息
用漂亮的json格式看到警报

sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'

将suricata设置为IPS(入侵防御系统)

预设的suricata运行时并不是以入侵防御系统(IPS)运行的,而是以入侵检测系统(IDS)运作的。
所以真正遇到某种攻击时,也只会发出警告。
所以我们需要对suricata做出一些改变。

修改参数脚本

sudo vim /etc/default/suricata

这个脚本会定义suircata会用IDS(只有警告)或者IPS(警告+防御)来执行。
将这段:

LISTENMODE=af-packet

修改为:

LISTENMODE=nfqueue

这样就能从IDS转变为IPS了.他就能在NFQUEUE中等待流量传入。

NFQUEUE的作用

NFQUEUE是什么?他是linux的一个核心功能,这个功能简单来说就是将网络中流入系统的网络包,给普通的应用程序进行检查和调整。它是iptables和ip6tables的一种target,用于将数据包委托给用户态应用程序裁决如何处理数据包。
相当于

sequenceDiagram
网络 ->> NFQUEUE ->> 计算机

特别注意
如果没有程序在NFQUEUE中运行时,就算将没办法连接网络
所以步骤一定不能乱,否则会连接不上计算机。(我在测试的时候步骤乱了导致iptables把我的SSH客户端给墙了,无法连接这个计算机…)

设置suricata为IPS

修改参数脚本

sudo vim /etc/default/suricata

这个脚本会定义suircata会用

启动suricata在NFQUEUE中运作

参数q表示suricata 在 NFQUEUE中运行
参数0是因为NFQUEUE可以有几条通道,0表示第0条通道,也就是预设的通道。
参数D代表后台运行

将网路切换为NFQUEUE
确保suricata能正常运行之后,就可以将网络切换到NFQUEUE
如果想要过滤从外部网络到我们的计算机的网络流量,请输入一下命令

sudo iptables -I INPUT -j NFQUEUE

如果想要过滤我们从内部网络向外部流动的流量,请输入这个
如果IPS误判的时候,可能自己会被自己的IPS挡住,无法将讯息传出

sudo iptables -I OUTPUT -j NFQUEUE

检查防火墙配置状态
检查iptables是否存储刚刚的配置

sudo iptables -vnL

如果网络无法连上,可以重置iptables的防火墙设定

sudo iptables -F
正确关闭IPS

由于刚刚设置了NFQUEUE,如果要正确关闭IPS,要先关闭NFQUEUE
清楚防火墙规则

sudo iptables -F

关闭suricata

# 寻找suricata的PID
sudo ps -aux |grep suricata
# 关闭suricata 的PID
sudo kill -15 suricata的PID

我们可以为以上命令创建suricata的启动和关闭脚本
启动脚本suricata-start.sh(不要写错,否则执行错误可能会访问不了计算机了)

這是参考做法,请不要未经评估贸然使用,造成损失概不负责(我自己是用的很开心)

sudo suricata -c /etc/suricata/suricata.yaml -q 0 &
sudo iptables -I INPUT -j NFQUEUE

关闭脚本suricata-stop.sh

sudo killall  sudo suricata -q 0
while true
do
    sudo iptables  -D  INPUT -j NFQUEUE  > /dev/null 2>&1 || break
done

之后启动suricata,使用以上两个脚本即可。

下一篇将会介绍ELK相关的搭建 ELK搭建

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子君ee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值