SELKS在CentOS 7的部署实践
数据包捕获是一个重要组件,可以实施网络入侵检测系统 (IDS) 并执行网络安全监视 (NSM)。 可以借助多种开源 IDS 工具来处理数据包捕获,并检查潜在网络入侵和恶意活动的签名。 使用网络观察程序提供的数据包捕获,可以分析网络中是否存在任何有害入侵或漏洞。
Suricata 就是这样的一种开源工具,它是一个 IDS 引擎,可使用规则集来监视网络流量,每当出现可疑事件时,它会触发警报。 Suricata 提供多线程引擎,意味着它能够以更高的速度和效率执行网络流量分析。 有关 Suricata 及其功能的更多详细信息,请访问其网站 https://suricata-ids.org/
环境
实验环境关闭firewalld和selinux即可
机器:10.22.0.188/24
systemctl stop firewalld
setenforce 0
1.安装Suricata
安装依赖包
yum install wget libpcap-devel libnet-devel pcre-devel gcc-c++ automake autoconf libtool make libyaml-devel zlib-devel file-devel jansson-devel nss-devel
下载解压Suricata
下载最新安装包http://suricata-ids.org/download/ (截至18年2月8日,最新版本为4.0.3)
wget http://www.openinfosecfoundation.org/download/suricata-4.0.3.tar.gz
tar zxvf suricata-4.0.3.tar.gz
cd suricata-4.0.3
编译安装
./configure --sysconfdir=/etc --localstatedir=/var
make & make install
Suricata 源代码带有默认的配置文件。按照如下方法安装这些默认配置文件即可
make install-conf
如果没有IDS规则集的话,Suricata 什么用也没有。
Makefile 为我们提供了IDS规则集的安装选项。
安装命令如下,该命令会从http://rules.emergingthreats.net/社区下载可用的社区规则集快照,并且将其存储在/etc/suricata/rules目录下
make install-rules
配置suricata
请注意:不管使用哪个端口, Suricata都能自动检测HTTP流量。所以,正确指定HTTP_PORTS变量并不是很重要。
vim /etc/suricata/suricata.yaml
default-log-dir 指定 Suricata 日志文件所在的位置
vars
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]" #本地网络地址
EXTERNAL_NET: "!$HOME_NET" #除本地网络的其他网络
HTTP_PORTS: "80" #HTTP端口号
SHELLCODE_PORTS: "!80" #网络上开放的SHELL端口
SSH_PORTS: 22 #SSH远程连接端口
部分用于防御利用操作系统网络栈的自身行为来逃避检测的一些知名攻击手段(例如:TCP reassembly)。作为对策,通过针对目标操作系统而对检测引擎算法进行微调,现代 IDC 提供了“基于目标”的检测手段。
因此,如果你知道某台主机运行了什么操作系统的话,将这个信息提供给 Suricata 就可以大幅提高检测的成功率。这就是 host-os-policy 存在的意义。本例中,默认的 IDC 策略是 Linux 系统。如果针对某个 IP 地址没有指定操作系统信息,Suricata 会默认应用基于 Linux 系统的检测策略。如下,当捕获到对 192.168.122.0/28 和 192.168.122.155通讯时,Suricata 就会应用基于 Windows 系统的检测策略。
host-os-policy:
# Make the default policy windows.
windows: [10.22.0.0/24]
bsd: []
bsd-right: []
old-linux: []
linux: [0.0.0.0/0,10.22.0.188]
old-solaris: []
solaris: []
hpux10: []
hpux11: []
irix: []
macos: []
vista: []
windows2k3: []
关闭网卡LGO/GRO功能(网卡名结合实际修改)
ethtool -K ens32 gro off lro off
Cannot change large-receive-offload(说明你的网卡不支持LRO/GRO功能,忽略即可)
查看所有可用的运行模式
/usr/local/bin/suricata --list-runmodes
运行Suricata
/usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i ens32 --init-errors-fatal &
日志记录在/var/log/suricata/fast.log,同时还有json格式方便导入,位置是/var/log/suricata/fast.log
suricata在线WIKI
2.安装ELK
相关软件请到Elasticsearch官方网站下载
Elasticsearch6.2.0下载
Logstash6.2.0下载
Kibana6.2.0下载
安装elasticsearch
rpm -ivh elasticsearch-6.2.0.rpm
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
访问本地9200端口,出现如下内容说明Elasticsearch安装成功
curl 127.0.0.1:9200
{
"name" : "Ic9U2Zp",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "6qLiLUgeTIe_9zOUBCMtaw",
"version" : {
"number" : "6.2.0",
"build_hash" : "37cdac1",
"build_date" : "2018-02-01T17:31:12.527918Z",
"build_snapshot" : false,
"lucene_version" : "7.2.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
安装logstash
rpm -ivh logstash-6.2.0.rpm
systemctl enable kibana.service
添加logstash过滤规则
vim /etc/logstash/conf.d/logstash.conf
input {
file {
path => ["/var/log/suricata/eve.json"]
codec => "json"
type => "SuricataIDPS"
}
}
filter {
if [type] == "SuricataIDPS" {
date {
match => [ "timestamp", "ISO8601" ]
}
ruby {
code => "
if event.get('[event_type]') == 'fileinfo'
event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0])
end
"
}
ruby{
code => "
if event.get('[event_type]') == 'alert'
sp = event.get('[alert][signature]').to_s.split(' group ')
if (sp.length == 2) and /\A\d+\z/.match(sp[1])
event.set('[alert][signature]', sp[0])
end
end
"
}
}
if [src_ip] {
geoip {
source => "src_ip"
target => "geoip"
#database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
}
if ![geoip.ip] {
if [dest_ip] {
geoip {
source => "dest_ip"
target => "geoip"
#database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
}
}
}
}
}
output {
elasticsearch {
hosts => "localhost:9200"
}
}
systemctl enable logstash.service
chmod 775 /var/log/suricata/eve.json
systemctl start logstash.service
安装kibana
rpm -ivh kibana-6.2.0-x86_64.rpm
修改kibana允许访问的主机范围、默认只允许本地访问
vim /etc/kibana/kibana.yml
server.host: "0.0.0.0"
systemctl start kibana.service
systemctl enable kibana.service
浏览器访问IP:5601
进入Kibana,这里应该会要求设置一个索引,这里使用logstash-*
ELK_Discover.png
可视化效果设置
在Kibana找到Management,选择Saved Objects,点击Import上传文件
在此处下载仪表板文件
在此处下载可视化效果文件
在此处下载已保存的搜索文件
在 Kibana 的“Management”(管理)选项卡下,导航到“Saved Objects”(已保存的对象)并导入所有三个文件。 然后,可从“仪表板”选项卡打开并加载示例仪表板
安装完成界面预览
ELK_Dashboard_1.png ELK_Dashboard_2.png通过将网络观察程序提供的数据包捕获与 Suricata 等开源 IDS 工具相结合,可以针对各种威胁执行网络入侵检测。 使用这些仪表板可以快速探查网络中的趋势和异常,以及挖掘数据来发现恶意用户代理或有漏洞的端口触发警报的根本原因。 使用这些提取的数据,可以在如何抵御网络中的任何有害入侵企图方面做出明智的决策,并创建规则来防范网络中将来发生入侵。