转载:站着洗澡

http://ksowo.com/2018/02/01/ELK%E6%8E%A5%E6%94%B6paloalto%E6%97%A5%E5%BF%97%E5%B9%B6%E7%94%A8%E9%92%89%E9%92%89%E5%91%8A%E8%AD%A6/

https://www.freebuf.com/articles/others-articles/161905.html

起因

通报漏洞后,开发未能及时修复漏洞,导致被攻击,领导说我发现被攻击的时间晚了,由于一个人安全部精力有限未能及时看IPS告警,于是做了个钉钉告警。

本人环境介绍

ubuntu 14.04
python 2.7
kibana-5.5.2
logstash-5.5.2
elasticsearch-5.5.2
paloalto软件版本7.1.14

1、ELK安装

elasticsearch下载地址:https://www.elastic.co/cn/downloads/elasticsearch

kibana下载地址:https://www.elastic.co/cn/downloads/kibana

Logstash下载地址:https://www.elastic.co/cn/downloads/logstash

elasticsearch和kibana配置就不多说了,比较简单。

2、logstash的配置

新建syslog.conf文件,此版本的paloalto的有50多个字段,暴力配置如下,所有转发过来的日志直接丢到elasticsearch里面,最后用kibana展示(可以大屏装X)

启动logstash:nohup ./bin/logstash -f syslog.conf &

input{
syslog{#输入syslog
type => "syslog"
port => 514
}
} filter {
grok {
match => ["message", "%{DATA:Domain}\,%{DATA:Receive-Time}\,%{DATA:Serial}\,%{DATA:Type}\,%{DATA:Threat-Type}\,%{DATA:Config-Version}\,%{DATA:Generate-Time}\,%{IP:Source-address}\,%{IP:Destination-address}\,%{DATA:NAT-Source-IP}\,%{DATA:NAT-Destination-IP}\,%{DATA:Rule}\,%{DATA:Source-User}\,%{DATA:Destination-User}\,%{DATA:Application}\,%{DATA:Virtual-System}\,%{DATA:Source-Zone}\,%{DATA:Destination-Zone}\,%{DATA:Inbound-Interface}\,%{DATA:Outbound-Interface}\,%{DATA:Log-Action}\,%{DATA:Time-Logged}\,%{DATA:Session-ID}\,%{DATA:Repeat-Count}\,%{DATA:Source-Port}\,%{DATA:Destination-Port}\,%{DATA:NAT-Source-Port}\,%{DATA:NAT-Destination-Port}\,%{DATA:Flags}\,%{DATA:IP-Protocol}\,%{DATA:Action}\,%{DATA:URL}\,%{DATA:Threat-Content-Name}\,%{DATA:Category}\,%{DATA:Severity}\,%{DATA:Direction}\,%{DATA:Sequence-Number}\,%{DATA:Action-Flags}\,%{DATA:Source-Country}\,%{DATA:Destination-Country}\,%{DATA:cpadding}\,%{DATA:contenttype}\,%{DATA:pcap_id}\,%{DATA:filedigest}\,%{DATA:cloud}\,%{DATA:url_idx}\,%{DATA:user_agent}\,%{DATA:filetype}\,%{DATA:xff}\,%{DATA:referer}\,%{DATA:sender}\,%{DATA:subject}\,%{DATA:recipient}\,%{DATA:reportid}\,%{DATA:dg_hier_level_1}\,%{DATA:dg_hier_level_2}\,%{DATA:dg_hier_level_3}\,%{DATA:dg_hier_level_4}\,%{DATA:Virtual-System-Name}\,%{DATA:Device-Name}\,%{DATA:file_url}"]
}
} output{
elasticsearch{
hosts => ["x.x.x.x:9200"]
index => "syslog"
}
# stdout{#控制台打印输出
# codec => rubydebug
# }
}

3、paloalto设置

一共有寄个地方要注意一下,否则日志转发不成功

1、创建syslog,转发到logstash服务器

2、配置转发用syslog

3、配置你想要的日志类型和严重性

4、在安全策略出匹配设置的日志转发

5、最后记得提交配置,否则不生效

kibana最终效果

4、elastalert设置

elastalert:https://github.com/Yelp/elastalert.git钉钉告警:https://github.com/xuyaoqiang/elastalert-dingtalk-plugin部分依赖:

sudo apt-get install python-dev libffi-dev

1、安装过程如下

pip install elastalert
或者
git clone https://github.com/Yelp/elastalert.git
cd elastalert
sudo python setup.py install
sudo pip install -r requirements.txt

其中有部分依赖可能安装错误,请单独下载安装既可。

2、安装完继续在elasticsearch中创建elastalert的日志索引

sudo elastalert-create-index --index elastalert

根据自己的情况,填入elasticsearch的相关信息,关于 elastalert_status部分直接回车默认的即可。 如下所示:

Enter Elasticsearch host: localhost
Enter Elasticsearch port: 9200
Use SSL? t/f:
Enter optional basic-auth username (or leave blank):
Enter optional basic-auth password (or leave blank):
Enter optional Elasticsearch URL prefix (prepends a string to the URL of every request):
Name of existing index to copy? (Default None)
Elastic Version:5
Mapping used for string:{'index': 'not_analyzed', 'type': 'string'}
New index elastalert created
Done!

3、创建配置文件

3.1、修改elastalert的配置文件

下载https://github.com/xuyaoqiang/elastalert-dingtalk-plugin

把elastalert-dingtalk-plugin中的elastalert_modules、rules和config.yaml复制到elastalert下

修改config.yaml对应配置

es_host: elasticsearch 地址
es_port: elasticsearch 端口

3.2、修改rules的配置文件

官方有很多rules规则可以去看官方文档:http://elastalert.readthedocs.io/en/latest/ruletypes.html#rule-types

修改xxx.yaml对应配置:

name: IPS安全告警

#唯一值重复告警规则type: cardinality

#es_host: localhost

#es_port: 9200

# Index to search, wildcard supported

index: syslog

cardinality_field: Source-address.keyword

#最小5次触发规则min_cardinality: 5

#max_cardinality: 5

# 60秒内

timeframe: seconds: 60

#5分钟内重复告警不告警realert: minutes: 30

# ES 查询,用以过滤

#filter:

#- term:

# Severity: "high"

# (Required)

# The alert is use when a match is found

alert:

*   "debug"#你自己定义的钉钉告警脚本
* "elastalert_modules.dingtalk_alert.DingTalkAlerter" dingtalk_webhook: 在钉钉群中添加机器人可以获取dingtalk_msgtype: "text"

4、钉钉的配置

5、配置elastalert变为自定义告警内容

5.1、启用钉钉的报警

原生告警比较不友好

修改为:

修改了elastalert-dingtalk-plugin-master\elastalert_modules\dingtalk_alert.py里面的代码,

为了获取告警时间,然后对这个时间变为时间段,到es里面查询,获取对应的字段值,这个里的时间转换比较乱,代码写的渣,大佬可以忽略

# 获取对应时间段,并查询到对应可疑ip地址
get_time = body.split('\n')[4].split(' ')[1]
times = get_time.split('.')[0].split(':')[:2]
t = times[0]
t1 = int(times[1]) - 2
t2 = int(times[1]) + 2
# 将其转换为时间数组
timeStruct = time.strptime(t + ':' + str(t1), "%Y-%m-%dT%H:%M")
# 转换为时间戳:
timeStamp1 = int(time.mktime(timeStruct))
# 时间戳转换为指定格式日期
localTime = time.localtime(timeStamp1)
gt = time.strftime("%Y-%m-%dT%H:%M", localTime)
timeStruct = time.strptime(t + ':' + str(t2), "%Y-%m-%dT%H:%M")
# 转换为时间戳:
timeStamp2 = int(time.mktime(timeStruct))
# 时间戳转换为指定格式日期
localTime = time.localtime(timeStamp2)
lt = time.strftime("%Y-%m-%dT%H:%M", localTime)
# print(gt+'\n'+lt)
es = Elasticsearch("10.11.10.245:9200")
body = {
"query": {
"range" : {
"@timestamp" : {
"gt" : gt,
"lt": lt
}
}
}
}
res = es.search(index="syslog", body=body)
text = res['hits']['hits']
if len(text) != 0:
sip = text[0]['_source']['Source-address']
dip = text[0]['_source']['Destination-address']
dport = text[0]['_source']['Destination-Port']
atype = text[0]['_source']['Threat-Content-Name']
ntime = text[0]['_source']['Time-Logged']
payload = {
"msgtype": self.dingtalk_msgtype,
"text": {
"content": "IPS安全告警\n发现源ip地址: %s 在30秒内,对服务器ip:%s 的 %s 端口进行了5次攻击,攻击类型为 %s,请排除或确认攻击!\n(攻击时间点:%s)" % (sip, dip, dport, atype, ntime)
},
"at": {
"isAtAll":False
}
}

6、最后开启所有组件

./elasticsearch-5.5.2/bin/elasticsearch &
./kibana-5.5.2-linux-x86_64/bin/kibana &
./logstash-5.5.2/bin/logstash -f /xxxx/logstash-5.5.2/syslog.conf &
python -m ./elastalert/elastalert.elastalert --verbose &

至此大功告成,其实elk还可以接收各种日志,自己做分析,然后告警,本文只是其中一个场景,大家可以收集所有日志一起做集中告警。谢谢各位大佬捧场。

一个人的安全部之ELK接收Paloalto日志并用钉钉告警的更多相关文章

  1. ELK接收paloalto防火墙威胁日志并定位城市展示

    ELK接收paloalto防火墙威胁日志并定位城市展示 一.准备环境: 搭建好的ELK环境 palo alto防火墙(企业用的) 二.安装logstash并做好过滤 将palo alto日志打到一台c ...

  2. ELK+kafka构建日志收集系统

    ELK+kafka构建日志收集系统   原文  http://lx.wxqrcode.com/index.php/post/101.html   背景: 最近线上上了ELK,但是只用了一台Redis在 ...

  3. ELK+Kafka 企业日志收集平台(一)

    背景: 最近线上上了ELK,但是只用了一台Redis在中间作为消息队列,以减轻前端es集群的压力,Redis的集群解决方案暂时没有接触过,并且Redis作为消息队列并不是它的强项:所以最近将Redis ...

  4. ELK搭建实时日志分析平台之一ElasticSearch搭建

    文:铁乐与猫 系统:CentOS Linux release 7.3.1611 (Core) 注:我这里为测试和实验方便,ELK整套都装在同一台服务器环境中了,生产环境的话,可以分开搭建在不同的服务器 ...

  5. ELK搭建实时日志分析平台

    ELK搭建实时日志分析平台 导言 ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成,ELK平台可以同时实现日志收集.日志搜索和日志分析的功能.对于生产环境中海量日志 ...

  6. ELK +Nlog 分布式日志系统的搭建 For Windows

    前言 我们为啥需要全文搜索 首先,我们来列举一下关系型数据库中的几种模糊查询 MySql : 一般情况下LIKE 模糊查询  SELECT * FROM `LhzxUsers` WHERE UserN ...

  7. ELK对nginx日志进行流量监控

    ELK对nginx日志进行流量监控 一.前言 线上有一套ELK单机版,版本为5.2.1.现在想把nginx访问日志接入到elk里,进行各个域名使用流量带宽的统计分析.要把nginx日志传输到elk上, ...

  8. 【ELK】elastalert 日志告警

    一.环境 系统:centos7 elk 版本:7.6.2 1.1 ElastAlert 工作原理 周期性的查询Elastsearch并且将数据传递给规则类型,规则类型定义了需要查询哪些数据. 当一个规 ...

  9. ELK Stack企业日志平台文档

                                          ELK Stack企业日志平台文档           实验环境 主机名 IP地址 配置 系统版本 用途 controlno ...

随机推荐

  1. Redis客户端命令

    Redis客户端命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. ...

  2. 关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商)

    关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商) 来源: https://blog.csdn.net/xueyepiaoling/article/details/6243337 ...

  3. freebsd网卡驱动程序详解

    freebsd网卡驱动程序详解 来源 https://blog.csdn.net/h_cszc/article/details/7776116 /* 注释:xie_minix */ /*此处为BSD申 ...

  4. [洛谷P2216][HAOI2007]理想的正方形

    题目大意:有一个$a\times b$的矩阵,求一个$n\times n$的矩阵,使该区域中的极差最小. 题解:二维$ST$表,每一个点试一下是不是左上角就行了 卡点:1.用了一份考试时候写的二维$S ...

  5. 湘潭邀请赛 2018 I Longest Increasing Subsequence

    题意: 给出一个长度为n的序列,序列中包含0.定义f(i)为把所有0变成i之后的Lis长度,求∑ni=1i⋅f(i). 题解: 设不考虑0的Lis长度为L,那么对于每个f(i),值为L或L+1. 预处 ...

  6. BZOJ4032 [HEOI2015]最短不公共子串 【后缀自动机 + 序列自动机 + dp】

    题目链接 BZOJ4032 题解 首先膜\(hb\) 空手切神题 一问\(hash\),二问枚举 三问\(trie\)树,四问\(dp\) 南二巨佬神\(hb\) 空手吊打自动机 \(orz orz ...

  7. 洛谷 P2197 【模板】nim游戏 解题报告

    P2197 [模板]nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以 ...

  8. 数表( table )

    数表( table ) 题目描述 有一张n×m的数表,其第i行第j列(1≤i≤n,1≤j≤m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. 输入 输入包含多组数据. ...

  9. Java代码实现真分页

    在JavaWeb项目中,分页是一个非常常见且重要的一个小方面.本次作为记载和学习,记录项目中出现的分页并做好学习记录.在这里,用的是SSH框架.框架可以理解如下图: 在JSP页面,描写的代码如下: & ...

  10. java基础练习 12

    public class Twelfth { /*海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五 ...