转载:站着洗澡

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. ES6 Destructuring Assignment All In One

    ES6 Destructuring Assignment All In One ES6 & Destructuring Assignment Axios, vue https://develo ...

  2. JS XMLHttpRequest.upload.addEventListener 传参,回调

    JS 回调函数,传参的办法. function uploadFile(t) { var fd = new FormData(); fd.append("_netLogo", doc ...

  3. Codeforces Round #388 (Div. 2) 749E(巧妙的概率dp思想)

    题目大意 给定一个1到n的排列,然后随机选取一个区间,让这个区间内的数随机改变顺序,问这样的一次操作后,该排列的逆序数的期望是多少 首先,一个随机的长度为len的排列的逆序数是(len)*(len-1 ...

  4. DLP与上网行为管理的差别总结

    参考网康和深信服的上网行为管理手册,总结了一下DLP与上网行为管理的差别: DLP与上网行为管理在功能和使用目的上有很大不同.主要体现在: 上网行为管理主要是对用户访问目标URL过滤,应用端口限制,上 ...

  5. 在线cron生成器

    什么是cron表达式: cron表达式主要是用在Quartz框架中,Quartz是一个完全由java编写的开源作业调度框架,最主要的功能就是调度器(完成定时任务),可以与javaEE或者javaSE应 ...

  6. vue jsonp解决跨域处理

    1.安装vue jsonp npm i -S vue-jsonp 2.在main.js中导入vue-jsonp import VueJsonp from 'vue-jsonp' 通过use方法,挂载到 ...

  7. 汕头市队赛 SRM1X T2 ——扫描线

    绵津见-终 SRM 13 背景 “西瓜也是可以种在海上的!”——绵津见 然而种在海上的西瓜最需要防范的,是时不时会涌向瓜田的阵阵海浪. 幸好,身为海神的绵津见可以释放魔法“水平如镜”来阻止海浪拍打西瓜 ...

  8. ASIHttprequest-创建同步请求

    ASIHttprequest-创建同步请求 当你发送一个同步请求后,该请求会在当前的应用主线程中运行并获取程序的控制权限,也就说你的程序处于锁定的状态,在这个期间,你进行不了任何的操作,直到该请求返回 ...

  9. CodeForces 659D Bicycle Race (判断点是否为危险点)

    D - Bicycle Race Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u S ...

  10. cms .net webform去服务器控件标签化 pagebase新版本

    这是最近在干一个webform的cms的时候用起来的,原来虽然做过很多技术,什么remoting,wcf,webservice,可是弄来弄去,最后也没个收藏的地儿,全都放在笔记本儿上了,可是人又懒地可 ...