从哪吒监控漏洞说起:我做了一个轻量级 VPS 入侵监控与告警工具 vps-sentinel
最近两天,哪吒监控相关安全事件又在圈子里被讨论起来。公开安全公告里可以看到,Nezha Monitoring 近期有多条访问控制、SSRF 、跨租户权限和 Agent/面板信任边界相关漏洞被披露或更新。
这件事给我的启发很直接:
VPS 上只做“在线监控”是不够的,我们还需要知道机器有没有出现可疑登录、持久化、异常进程、异常监听端口和关键文件漂移。
所以我整理并开源了一个 Rust 写的轻量级 VPS 入侵信号监控工具:
GitHub: https://github.com/cryptoli/vps-sentinel
Release: v0.1.0
为什么需要这个工具
哪吒监控这类工具的核心价值是“服务器状态监控”:CPU 、内存、流量、延迟、在线状态等。
但一旦监控面板、Agent 权限或远程执行能力出现问题,风险就会变成:
- 面板账号被拿下后,影响多台 Agent 机器;
- 低权限用户越权触发任务或访问内部资源;
- Agent 权限过高,导致攻击面扩大;
- 机器被植入后门后,传统在线监控不一定能及时发现;
- 服务器还在线、CPU 也正常,但
authorized_keys、systemd 、cron 、监听端口已经被改了。
vps-sentinel 不是哪吒监控的替代品,它关注的是另一个方向:
主机有没有出现“被入侵的信号”。
vps-sentinel 支持什么
1. SSH 登录监控
可以识别:
- root SSH 登录;
- 密码登录;
- 普通成功登录;
- SSH 爆破行为;
- 基于来源 IP 的聚合告警;
- journalctl / auth.log / secure 日志兼容读取。
默认不是只提醒陌生 IP ,而是可以按配置提醒成功登录。
2. SSH key 和关键文件完整性
重点监控:
authorized_keysauthorized_keys2- 关键系统配置文件
- Web 目录中的疑似 WebShell 内容
- 基线漂移
如果你手动改了 SSH key ,它会作为风险漂移被识别出来,而不是静默忽略。
3. 持久化检测
会检查常见持久化入口:
- cron
- systemd unit
- shell profile
ld.so.preload- 可疑启动命令
- 下载后执行
- base64 解码后执行
- 临时目录自启动
- 网络到 shell 的执行链路
它不是简单字符串匹配,而是基于行为特征组合评分,降低正常运维误报。
4. 进程风险检测
支持识别:
- 临时目录可执行文件;
- deleted executable ;
- memfd / 匿名执行;
- 网络 shell 桥接;
- 已知挖矿/扫描器身份;
- 改名伪装进程;
- 可疑父进程链;
- systemd unit 与 ExecStart 上下文;
- 可执行文件 owner 、大小、hash ;
- cgroup/container 上下文;
- 出站连接画像。
比如普通转发工具不会因为名字像“网络工具”就直接告警,程序会结合 shell 意图、fd 复制、TTY 、socket 、执行路径等多个信号判断。
5. 网络监听检测
会读取 /proc/net/tcp*、/proc/net/udp* 并反查进程,重点关注:
- 新增公网监听;
- 高风险公网端口;
- 监听 owner 相对基线变化;
- 可疑进程监听常见端口;
- 防火墙状态辅助判断。
80 、443 、22 这类常见端口不会被无脑信任,也不会被无脑告警。
如果黑客伪装成常见端口上的服务,仍然会结合进程身份、路径、owner 、systemd 、hash 、出站连接等上下文分析。
6. 通知渠道
目前支持:
- Telegram
- Email SMTP
- Webhook
- ntfy
- Gotify
- Bark
- ServerChan
通知内容支持中英文,并且会带上 VPS 名称,适合多台服务器同时部署。
7. 低资源占用
程序使用 Rust 编写,本地 SQLite 存储。
我在测试 VPS 上通过 systemd 运行,常驻内存大约 5MB 左右,具体会随系统环境和扫描数据略有变化。
安装方式
一键安装:
curl -fsSL https://raw.githubusercontent.com/cryptoli/vps-sentinel/main/install.sh -o install.sh
sudo sh install.sh
安装时启用 Telegram:
sudo TELEGRAM_BOT_TOKEN="<your-bot-token>" \
TELEGRAM_CHAT_ID="<your-chat-id>" \
TELEGRAM_MIN_SEVERITY=Medium \
VPS_NAME="prod-web-1" \
sh install.sh
安装完成后会自动创建:
/usr/local/bin/vps-sentinel
/usr/local/bin/vs
也就是说以后可以直接用简写:
sudo vs doctor
sudo vs scan
sudo vs reload
常用命令
检查运行环境:
sudo vs doctor --config /etc/vps-sentinel/config.toml
校验配置:
sudo vs config validate --config /etc/vps-sentinel/config.toml
执行一次扫描但不发送通知:
sudo vs scan --no-notify --config /etc/vps-sentinel/config.toml
测试通知渠道:
sudo vs notify test --config /etc/vps-sentinel/config.toml
修改配置后重载:
sudo vs reload --config /etc/vps-sentinel/config.toml
更新程序:
curl -fsSL https://raw.githubusercontent.com/cryptoli/vps-sentinel/main/update.sh -o update.sh
sudo sh update.sh
停止服务:
sudo vps-sentinel-stop
和哪吒监控的关系
哪吒监控适合看服务器在线状态和资源指标。
vps-sentinel 更适合做入侵信号监控。
二者关注点不同:
| 类型 | 关注点 |
|---|---|
| 哪吒监控 | 在线状态、CPU 、内存、流量、延迟 |
| vps-sentinel | 登录、进程、端口、持久化、关键文件、WebShell 、通知告警 |
我的建议是:
- 如果你需要状态面板,可以继续用成熟监控工具;
- 如果你担心 VPS 被登录、被植入后门、被加 SSH key 、被改 systemd/cron ,可以加一层
vps-sentinel; - 不建议把主机入侵监控当普通 Docker 容器运行,因为普通容器默认只能看到容器自己的进程和文件系统,不能可靠监控宿主机。
哪吒事件给我们的提醒
这次事件不应该简单理解成“某个项目不能用”。真正的问题是:
只要一个系统拥有跨机器管理能力、远程执行能力或高权限 Agent ,它本身就必须被当成高价值攻击面来看待。
所以除了更新存在漏洞的软件,我们还应该关注这些问题:
- 有没有异常 SSH 登录?
- 有没有新增 SSH key ?
- 有没有新增 systemd/cron 持久化?
- 有没有异常公网监听?
- 有没有可疑进程伪装成正常服务?
- 有没有 WebShell 痕迹?
- 有没有被植入挖矿或扫描工具?
- 告警消息能不能第一时间发到手机?
这正是 vps-sentinel 想解决的问题。
项目地址
GitHub:
https://github.com/cryptoli/vps-sentinel
欢迎测试、提 issue 、提 PR 。
这个项目会继续围绕“低资源占用、低误报、可解释告警、适合普通 VPS 用户”方向优化。