在 SSH 换到高位端口后22端口还能做什么

听说过蜜罐吗?想要自己的机器或者说 VPS 上面部署一个蜜罐吗?那太好了,这篇文章会简单地告诉你怎么去简单地多机部署,并且可以看到每天数千或者上万条攻击信息, 这样你就能确认把 SSH 端口改成高位是一件多么聪明的事了

在 SSH 换到高位端口后, 22端口还能做什么?

装个蜜罐吧! 看看在全球互联网流窜的脚本小子们是怎么持续扫你的22的.

蜜罐监控仪表盘:多台服务器的总攻击与成功登录统计、攻击来源国家分布、Top 10 密码和用户名、24 小时攻击热力图与入侵日志

实际上现在可以很轻松在 Github 上找到诸多现成的蜜罐, Beelzebub 便是其一, 它的名字取自”圣经”里的恶魔”别西卜”

嗯, 我也是刚知道的

当初在存在 Cowrie (另一个老牌蜜罐) 和 HFish (国产蜜罐, 有点重) 的情况下选择了它, 一个是比较轻, 再一个的话就是可以原生支持LLM应答, 看上去很有意思

这样做就可以在如果真的有真人攻击者的时候根据它的行动来动态的应答呢

但是吧说实话似乎我一直没有观察到真人攻击者…全是脚本…

顺带一提, 这里是用的LLM是Groq的 Kimi K2 (在部署的时候他还能用, 现在似乎下了吧)

在拿到一个VPS后, 我通常会先将其SSH更换为一个高位端口, 随后配置好秘钥, 并禁止密码登录, 一般来说, 到这一步已经没有什么方法来通过SSH来侵入了

大部分的 Agent Harness 应当允许你的 Agent 去通过 SSH 来控制你的vps, 实际上, 它们有shell能力的话, 使用sshpass(使用密码)或ssh就可以了

所以, 作为懒人的我, 配置好 ssh config 后, 剩下的 Beelzebub 部署实际上是交由 Agent 完成的(嗯, 包括配置LLM的Apikey)

值得一提的是, 这里有几个决策, 首先, 我使用一个newapi用来负载均衡数个(好像是3个?)Groq的Apikey, 并为其单独新建一个Apikey, 限制它只能使用这个模型, 所以就算这个Apikey泄露了, 也不影响我其他设施

这里使用的是Groq的每日免费额度, 是够用的, 说到这里, 隔壁 Cerebras 6天前(26/08/20)似乎是取消了免费额度, 变成绑卡才能使用5刀配额了, 真是遗憾…

另外, 把一切交给LLM是浪费的, 在跑了一天后, 就可以观察大部分脚本的行为, 而对一些高频内容进行迭代, 设定为固定的结果使得蜜罐”更诱人”, 以及减少LLM调用

另外, 我并没有放行所有的弱密码, 不然每天数万次的攻击也挺烦的

比如的话, 我显著观察到很多上来就来就

$ nvidia-smi -q | grep "Product Name" | head -n 1 | awk '{print $4, $5, $6, $7, $8, $9, $10, $11}'

或是

lspci | grep VGA -c

对于这类型请求显卡的家伙们, 显然是挖掘加密货币的, 所以我固定返回了如下内容来省的LLM每次生成

$ nvidia-smi -q | grep "Product Name" | head -n 1 | awk '{print $4, $5, $6, $7, $8, $9, $10, $11}'
> ==============NVSMI LOG==============

Timestamp                                 : Mon Jan 20 12:34:56 2025
Driver Version                            : 570.133.20
CUDA Version                              : 12.8

Attached GPUs                             : 1
GPU 00000000:00:1E.0
    Product Name                          : Tesla T4
    Product Brand                         : NVIDIA
    Product Architecture                  : Turing
(下略...)
$ lspci | egrep VGA | grep Radeon | wc -l | head -c 1
> 00:02.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 52)
00:1e.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)

Beelzebub 的日志会记录在 Beelzebub.log, 然后便可以使用 Grafana 配套的 Promtail, 一个日志采集器来把这个log拆成字段并汇总到其中一个服务器的 Promtail 上

btw, Grafana 是一个知名的可视化平台, 待会儿会用到

我们这里用到了它一整套工具的一部分, Promtail 用来采集, Loki用来汇总, Grafana用来可视化, 它是一个轻量的ELK 栈(Elasticsearch + Logstash + Kibana)替代方案

我们把这个这个通过安装了 Grafana 和 Promtail 的汇总用 Server 称呼为 A子 吧

首先的前提是, 我的服务器们已经通过了Tailscale链接在一起, 所以我使用内网传递这些日志, 不添加鉴权

另外, A子的 Promtail 同时收录它自己的Beelzebub日志

收到日志后, 在A子的 Promtail 这里再解析一遍日志, 并在这里通过 MaxMind 的 Geolite2 城市数据库来分析IP属地, 这也是上图可以看到攻击者来源国家和城市的原因

然后把数据写进A子的 VictoriaLogs…为什么不直接用Loki, 因为数据量大后卡的一笔, 受不了了就迁移了, 就是酱紫

VictoriaLogs 可以简单理解为一个超轻量高性能数据库, 原生提供了 兼容 Loki 的 HTTP 写入接口

在 VictoriaLogs 里, 我配置了保存7d的数据, 大概的话, 占用166MB左右, 并且能极快的检索

好, 现在可以打开 Grafana 了, 然后感受空无一物的它…

这一步依旧是让 Agent 代劳,

首先, 比较重要的是, 可以使用反代加鉴权的方式(比如, Authentik 或 Authelia)来使得只有你能访问到 Grafana 网页, 然后 Agent 走内网访问, 相对安全一点儿

如果你想分享, 可以开匿名访问, 但那得注意修改admin账号和密码别用默认的

到这一步, 在确保安全的情况下, 把亲爱的 Grafana 管理员账号密码交给agent吧, 让他从内网来拉下来面板的json

讨论你想要的效果, 对齐需求

然后本地用 read 和 edit 编辑最后再POST上去, 你看看错误, 截图反馈…

或让他自己用比如 Agent Browser 的浏览器自己截图去看

顺带一提, 如果你想要我当前这个仪表盘的话, 可以找到我的邮箱发个邮件询问, 我会发给你的

说实话, 我几乎忘记了当初是怎么和 opus 一起弄出来这个的

所以这次仅讲大概架构和思路

至此告一段落

可以放几天观察一下情况, 比如我有一个没有套CF的服务器, 可以明显的观察到, 攻击者使用域名以及其变体作为用户名, 使用其名字加年份(从26年一直到19年都有)来爆破

还有使用openclaw作为登录用户名的

并可以根据热力图观察到, 大部分的爆破集中在晚上21点到次日3点(UTC +8)

24 小时攻击热力图:各服务器被攻击的时间分布,以及成功入侵日志、最新密码尝试和 Top 10 攻击 IP

啊, 话说, 之前有台机器换到高位后还是被扫, 不过在22放蜜罐后就不几乎扫真端口了呢

不过的话, 为了安全, 还是用秘钥登录吧