字数 1518,阅读大约需 8 分钟
往期给飞牛 NAS 上了 WAF、终端防护 wazuh,本期来上一个蜜罐,纵深防御嘛,waf 防 web 端口,那蜜罐就补强一下其他非 web 端口的探测感知能力,资源充足的话,可供参考!
场景演义
假定我手机被植入了不可描述的东西,别人以它为跳板想进一步探测我 NAS 主机,碰到蜜罐就告警给我,通知样式是我自定制的,也还算比较美观吧。

快速部署
蜜罐部署已被我封装成 docker compose 编排项目了,后台自取!包含了服务端和客户端!

服务端搭建方法往期文章 安全建设:如何给家庭 NAS 搭建一套免费社区型蜜罐 HFish 已有介绍,这里再赘述,这里直接切入飞牛主角。
老规矩,在飞牛的 docker 的项目目录/vol1/1000/tools/下克隆我的项目

在服务端获取添加节点链接

点击确定后,即可得到接入安装的链接地址

把这个地址替换到刚刚克隆项目的hfish/client目录下 compose.yaml 文件的环境变量HFISH_INIT_URL

最后直接 docker compose up -d 拉起服务就好啦

不出意外的话,服务端将会多出一个节点来

添加一个蜜罐服务,这里以群晖为例

添加好蜜罐后,飞牛 NAS 将监听一个端口 9194

在飞牛防火墙把这个端口对外开放一下

监控告警
hfish 蜜罐原生的企微告警,格式还算漂亮的,但容易造成消息轰炸,如果有人一直在访问蜜罐,消息会响个不停,曾经一度我将消息通知给关了,现在我引入了全新通知体系,能有效缓解这类消息轰炸问题。通知系统在往期文章 NAS 保卫战之 WAF 安全告警到关小黑屋一条龙实战 也有详细介绍,可供参考学习。
告警思路由蜜罐平台通过 syslog 外发 json 格式的日志,并关闭原生企微消息通知。

勾选 syslog 通知选项

elastalert2 配置elastalert/rules/hfish_alert.yaml如下
name: "蜜罐告警"
type: any
index: logs-syslog-hfish # 你的访问日志索引模式
# ES 8 数据流的时间字段通常是 @timestamp
timestamp_field: "@timestamp"
timestamp_type: iso
# 过滤条件:匹配敏感接口路径
filter:
- bool:
must_not:
- term:
type: "common"
# 对相同IP进行分组,分别计数
query_key: "src_ip"
# 告警触发后,2分钟内抑制相同IP的重复告警
realert:
minutes: 5
# 必须包含这些字段才能在注解中使用
include:
- "src_ip"
- "geo"
- "@timestamp"
- "attack_type"
- "client"
- "client_ip"
- "name"
- "account"
- "threat_level"
# 告警动作:发送到Alertmanager
alert:
- "alertmanager"
alertmanager_api_version: v2
alertmanager_hosts:
- "https://alertmanager.evling.tech"
alertmanager_annotations:
src_ip: "{{ _data.get('src_ip', '') }}"
geo: "{{ _data.get('geo', '') }}"
created_at: "{{ _data.get('@timestamp', '') }}"
attack_type: "{{ _data.get('attack_type', '') }}"
client: "{{ _data.get('client', '') }}"
client_ip: "{{ _data.get('client_ip', '') }}"
name: "{{ _data.get('name', '') }}"
account: "{{ _data.get('account', '') }}"
threat_level: "{{ _data.get('threat_level', '') }}"
alertmanager_labels:
level: "警告"
alert_source: "elastalert"
alert_type: "hfish"
client_ip: "{{src_ip}}"Alertmanager 关键配置示例如下
...
# 路由配置中可以指定使用企微接收器
route:
group_by: ['alertname', 'client_ip']
group_wait: 30s
group_interval: 10s
repeat_interval: 1h
receiver: 'prometheusalert-weixin-hfish'
routes:
- receiver: 'prometheusalert-weixin-hfish'
group_wait: 5s
match:
alert_source: elastalert
alert_type: hfish
receivers:
- name: 'prometheusalert-weixin-hfish'
webhook_configs:
- url: 'https://promealert.evling.tech/prometheusalert?type=wx&tpl=prometheus-wx-hfish&wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_wx_key&at=aaronnellis'
send_resolved: falsePromethusAlert 告警模板如下:
{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}[PROMETHEUS-恢复信息]({{$v.generatorURL}})
> **[{{$v.labels.alertname}}]({{$var}})**
> <font color="info">告警级别:</font> {{$v.labels.level}}
> <font color="info">开始时间:</font> {{$v.startsAt}}
> <font color="info">结束时间:</font> {{$v.endsAt}}
> <font color="info">故障主机IP:</font> {{$v.labels.instance}}
> <font color="info">**{{$v.annotations.description}}**</font>{{else}}[家庭云生活-安全告警]({{$v.generatorURL}})
> **[{{$v.labels.alertname}}]({{$var}})**
> <font color="warning">告警级别:</font> {{$v.labels.level}}
> <font color="warning">告警时间:</font> {{GetCSTtime $v.startsAt}}
> <font color="warning">攻击者IP:</font> {{$v.labels.client_ip}}
{{- if $v.annotations.geo}}
> <font color="warning">地理位置:</font> {{$v.annotations.geo}}
{{- end}}
> <font color="warning">攻击时间:</font> {{GetCSTtime $v.annotations.created_at}}
> <font color="warning">攻击类型:</font> {{$v.annotations.attack_type}}
> <font color="warning">节点名称:</font> {{$v.annotations.client}}
> <font color="warning">节点IP:</font> {{$v.annotations.client_ip}}
> <font color="warning">蜜罐名称:</font> {{$v.annotations.name}}
{{- if $v.annotations.account}}
> <font color="warning">账号信息:</font> {{$v.annotations.account}}
{{- end}}
> <font color="warning">威胁等级:</font> {{$v.annotations.threat_level}}
> <font color="warning">应急处置:</font> [立即封禁该IP](https://api-dc.evling.tech/deny/{{$v.labels.client_ip}}){{end}}{{ end }}
{{ $urimsg:=""}}{{ range $key,$value:=.commonLabels }}{{$urimsg = print $urimsg $key "%3D%22" $value "%22%2C" }}{{end}}[*** 点我屏蔽该告警]({{$var}}/#/silences/new?filter=%7B{{SplitString $urimsg 0 -3}}%7D)打开蜜罐的端口,测试下有效性,不出意外的话,就能看到文章开头的一幕了,收到一封精美的告警通知。

结语
至此,也就完成了飞牛 NAS 接入蜜罐了,一有风吹草动,就能及时收到告警,让内鬼无处遁形!
推荐阅读
• 家庭基建学习交流,欢迎加入! • NAS 党福音:近乎零成本优雅地实现家庭网络异地组网(二十) • 大过年大半夜的有人扫我网站,是想干嘛! • NAS 保卫战之 WAF 安全告警到关小黑屋一条龙实战 • 速更!飞牛 NAS 官方连夜发布重要安全更新
评论区