Margrop
Articles357
Tags585
Categories7

Categories

1password AC ACL 切换 ACP AI AI Agent AI Coding Assistant AI Tech AI 安全 AI 日记 AI编程助手 AI辅助 AI辅助编程 AP API ASR Agent Agent 检索 Agent 系统 AgentPlan Alertmanager Android 17 Antigravity AppDaemon AppWorld Aqara Attention CC-Switch CI/CD CLI Tools CLI 工具 CLI工具 Cache Hit Rate Caddy Categories 404 Claude Code Claude Sonnet ClawLoader Cloudflare Codex Coding Plan Computer Use Cookie 认证 Cost Optimization Cron D1 DFIR Date Diagrams.net Diary Diffusers Docker Docker Compose Efficiency Tools Electerm Embedding English FSDP2 Fable 5 Fireworks AI FlashAttention GLM 5.2 GPT-4.1 GPT-5.6 GPT-Red GPU 性能分析 Gateway Gemini Gemini 3.5 Flash Gemini API Gemini CLI Gemini Omni Flash Gemma 4 12B GitHub Actions Google AI HA HADashboard Hermes HermesAgent Hexo HomeAssistant Hugging Face IBM Research IP IPv4 Java Kimi Code Kimi K3 LLM Router LVM‑Thin Linux Live Translate LoRA MCP MacOS Managed Agents Markdown Microsoft 365 Copilot MiniMax Model Routing Multi-Agent MySQL NAS NVIDIA NeMo Automodel Nemotron 3 Embed NewAPI Nginx Node-RED Node.js OOM On-device AI Open Source Open Viking OpenAI OpenClaw OpenCode OpenResty OpenWrt PPPoE Portainer PostgreSQL ProcessOn Prometheus Prompt Injection Proxmox VE PyTorch RPC RTEB Red Teaming SOCKS5 SSL Session Shell Subagent TTS TimeMachine UML Uptime Kuma VPN VPS VoiceEQ Web WebSocket Windows Workers activate ad adb adblock agent aligenie aliyun alpine annotation aop authy autofs backup baidupan bash bitwarden boot brew browser caddy2 cdn centos cert certbot charles chat chrome classloader client clone closures cloudflare cmd command commit container crontab ctyun ddsm demo dependency deploy developer devtools dll dns docker domain download draw drawio dsm dump dylib edge exception export fail2ban feign firewall-cmd flow frp frpc frps fuckgfw function gcc gfw git github golang gperftools gridea grub gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https iKuai idea image img img2kvm immortalwrt import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jni jnilib jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live low-code lvm lxc m3u8 mac macos mariadb markdown maven md5 mdadm microcode mirror modem modules monitor mount mstsc mysql n2n n5105 nas network nfs node node-red nodejs nohup notepad++ npm nssm ntp oop openfeign openssl os otp ovz p14 packet capture pat pdf pem perf ping pip plugin png powerbutton print pro proxy pve pvekclean python qcow2 qemu qemu-guest-agent rar reboot reflog remote remote desktop renew repo resize retina root route router rule rules runtime safari sata scipy-notebook scoping scp self-play server slmgr so socks source spk spring springboot springfox ssh ssl stash string supernode support svg svn swagger sync synology systemctl systemd tap tap-windows tapwindows telecom template terminal tls tmux token totp tvbox txt ubuntu udisk ui undertow uninstall unlocker upgrade url v2ray vLLM vhd vim vlmcsd vm vmdk web websocket wechat windows with worker wow xiaoya xml yum zip 个人品牌 中国电信 云电脑 交换机 人机协作 代理 企业 AI 优化 体检 值班 健康检查 光猫 公众号 公网IP 内存 内存优化 内容发布 内网 内网IP 内网渗透 写作 分布式训练 升级 协作 博客 博客改名 博客运维 反向代理 变更审计 启动 告警 告警优化 周一 周一傍晚 周一焦虑 周五 周六 周报 周末 夏令时 多智能体 多节点 多节点管理 天猫精灵 天翼云 字体大小 安全 安全事件 安装 定时任务 容器 容器网络 导入 小米 工作感悟 工程实践 常用软件 广告屏蔽 序列号 应用市场 开放 API 开源模型 异常 异步任务 微信公众号 心智成长 心跳 心跳检查 性能优化 感悟 打工 打工人 打工人日记 扩散模型 技术 抓包 排查 描述文件 故障 故障排查 效率 效率工具 数据 旁路由 无服务器 日记 时区 显卡虚拟化 智能体集成 智能家居 智能音箱 服务器 服务管理 本地安装 权限管理 架构 梯子 模块 模型推理 流程 流程图 浏览器 漫游 激活 火山引擎 火绒 焦虑 玄学 生活 电信 画图 监控 监控系统 直播源 直觉 磁盘 磁盘故障 端口 端口冲突 端口扫描 管理 续期 网关 网络 网络风暴 群晖 群晖 NAS 脚本 脚本优化 腾讯 自动化 自动化运维 自动恢复 自动攻击 虚拟机 认证 证书 评测基准 语雀 语音 AI 质量检查 超时 路由 路由器 软件管家 软路由 运维 运维日常 运维监控 连接保活 连接问题 通信机制 通知 部署 配置 钉钉 镜像 镜像源 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客 需求变更 飞书

Hitokoto

Archive

一台"安静"的服务器,差点让我错过了端口裸奔的重大隐患

一台"安静"的服务器,差点让我错过了端口裸奔的重大隐患

一台”安静”的服务器,差点让我错过了端口裸奔的重大隐患

今天下午收到通知,说某台内网服务器曾在凌晨被 NAS 封了 IP——原因是五分钟内认证失败十次。

表面上看,这台机器运行着 Node-RED,一切都”很正常”。但我上去翻了翻之后,发现问题比想象中大得多。

事情是这样的

NAS 发来告警,说某个内网 IP 在 13:18 因为 Chat API 认证连续失败被封了。

追查来源,是那台跑着 Node-RED 的服务器在反复调用 NAS Chat 的历史记录接口,token 早就过期了,Node-RED 还在傻乎乎地重试,每次失败都算一次认证失败。

这其实是”果”,真正的问题是为什么 token 失效了还在重试——因为这是一个很老旧的 flow,已经很久没人维护了。

但真正让我警觉的不是 token 失效

而是 Node-RED 的 1880 端口对全网监听,没有任何认证。

这意味着,同一内网的任何人,只要知道这台机器的 IP,就能:

  • 访问它的 Node-RED 编辑器界面(虽然编辑器本身没开启,但 HTTP API 是可以调用的)
  • 触发 /chat/gemini/receiveMsg 这个 webhook——让聊天机器人回复任意消息
  • 调用 /oneCallControl/openPort 系列接口——远程开关端口
  • 调用 /push/工单系统/工单——向工单系统推送工单

没有用户名、没有密码、没有任何访问控制。

端口 1880 直接暴露在整个内网里。

来看进程列表

1
2
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
nodered 704 1.8 3.1 21994008 124312 ? Ssl 19:55 0:07 node-red

就一个 Node-RED,没有后门,没有挖矿,没有可疑进程。机器本身很干净。

但干净的机器配上开放端口,就是最大的安全隐患

我怎么处理的

  1. 确认了机器上没有恶意软件(进程干净)
  2. 找到了 token 失效的原因(Chat 历史记录那个 flow 还在跑,但 token 早就过期了)
  3. 标记了 Node-RED 1880 端口无认证的问题,建议用户修复

教训

看到”认证失败”的告警,不要只想着”token 过期”这一层。

认证失败往往是更深层问题的症状——为什么一个过期 token 还在被反复使用? 因为没有人知道它在那里。

老旧的 flow、老旧的 token、老旧的配置——这些才是真正的安全盲区。


这台服务器重启后只运行了 4 分钟就又被我连上去检查了。进程很干净,但它的问题并不在进程里。

本文阅读量 --
Author:Margrop
Link:https://blog.margrop.com/post/2026-04-23-onecallcontrol-exposed-port-no-auth/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可