当前位置: 首页 > article >正文

lighthouse-fw:一个管理腾讯云轻量服务器防火墙的终端工具

背景一个反复折磨我的问题我有几台腾讯云轻量应用服务器Lighthouse防火墙规则里白名单写的是当前的公网出口 IP。问题是家里的宽带每次重新拨号IP 就会变从办公室访问服务器也是不同的IP。一旦 IP 变了SSH 连不上只能去腾讯云控制台手动改防火墙规则。一台服务器还好多几台就烦了——每台都要登录控制台找到防火墙删旧规则加新规则填 IP选协议端口……重复操作既枯燥又容易出错。我最初写了一个 Python 单文件脚本来自动化这件事。后来功能越加越多脚本从 200 行涨到 483 行开始难以维护。于是我把它重构成了一个完整的 Python 包并开源了出来。这就是 lighthouse-fw[1]。它能做什么核心功能一句话自动获取你的公网 IP然后批量更新多台 Lighthouse 服务器的防火墙白名单规则。具体来说•IP 自动探测从多个源获取当前公网 IPv4单源故障自动切换•增量更新只修改需要变更的规则不动其他规则减少误删风险•多服务器批量操作一次命令更新所有服务器单台失败不影响其他•TUI CLI 双模式终端图形界面和命令行都能用•密钥安全存储优先使用系统钥匙串回退到本地加密文件•Dry-run 预览执行前先看 diff确认后再写入快速开始安装不需要 clone 仓库不需要 pip install。用 uv[2]直接跑uvx lighthouse-fw这会自动下载并运行第一次运行会进入 TUI 界面。如果你更喜欢装成命令uv tool install lighthouse-fw lhfw初始化配置lhfw init这会在系统标准目录下创建配置文件和状态目录。添加凭据# 设置凭据元信息region、endpoint 等 lhfw credential set my-cred --region ap-guangzhou # 交互式输入 SecretId 和 SecretKey输入时不可见 lhfw credential set-secret my-cred密钥会自动存入系统钥匙串Windows Credential Manager / macOS Keychain / Linux Secret Service。如果系统没有安全的钥匙串后端会回退到 Fernet 加密的本地文件。添加服务器lhfw server set my-server \ --instance-id lhins-xxxxxx \ --credential my-cred \ --tag prod \ --tag cn \ --enabled添加防火墙规则# SSH 白名单CIDR 填 AUTO 会自动替换为当前公网 IP/32 lhfw server rule-add my-server \ --protocol TCP \ --port 22 \ --cidr AUTO \ --description SSH # HTTP lhfw server rule-add my-server \ --protocol TCP \ --port 80 \ --cidr 0.0.0.0/0 \ --description HTTP预览和执行# 先预览看看会改什么 lhfw run # 确认没问题后实际写入 lhfw run --applyrun命令会先做一次 dry-run展示 diff 预览红色删除、绿色新增然后询问确认。只有你输入y才会真正调用 API 写入。TUI终端里的图形界面如果你不喜欢敲命令直接运行lhfw或lighthouse-fw不带参数就会进入 TUIuvx lighthouse-fwTUI 基于 Textual[3]构建有四个标签页Servers— 管理服务器列表支持新增、编辑、批量选中、按 tag 过滤。编辑服务器时可以内联管理防火墙规则。Credentials— 管理凭据密钥字段默认隐藏需要时可以临时显示。Run— 执行面板。可以按 tag 批量选中服务器预览 diff一键 Apply。底部的 RichLog 实时显示执行日志。History— 查看最近 20 次执行记录包括时间、模式dry-run/apply、IP、结果摘要。Apply 之前会弹出确认对话框展示完整的变更 diff必须手动确认才会执行。核心设计增量 Diff 引擎lighthouse-fw 最重要的设计决策是增量更新而非全量覆盖。全量覆盖很简单——把现有规则全部删掉再写入新的。但这样做风险很大如果中间出错服务器可能完全失去防火墙保护。增量更新的逻辑是1. 获取服务器当前的所有防火墙规则2. 对比用户定义的managed_rules和现有规则3. 只计算需要变更的部分哪些要删、哪些要加4. 执行变更匹配策略基于 protocol port action 三元组。如果一条规则的协议、端口、动作都匹配但 CIDR 不同比如 IP 变了就删除旧的、创建新的。如果完全一致就跳过。这里有个关键的AUTO机制用户在配置中写cidrAUTO运行时会自动替换为当前公网 IP 的/32地址。这意味着你不需要手动写死 IP工具会自动探测并填充。def _build_desired_rule(managed_rule, current_ipv4): cidr managed_rule.cidr if cidr AUTO: cidr f{current_ipv4}/32 return RuleSpec( protocolmanaged_rule.protocol, portmanaged_rule.port, cidrcidr, actionmanaged_rule.action, descriptionmanaged_rule.description, )另一个细节是腾讯云的乐观锁机制。每次修改防火墙规则时需要传入一个FirewallVersion版本号。lighthouse-fw 在删除规则后会重新查询最新的版本号再执行创建操作避免版本冲突。安全设计密钥存储lighthouse-fw 不会把 API 密钥写在配置文件里。它有三级存储策略1.系统钥匙串优先Windows Credential Manager、macOS Keychain、Linux Secret Service/KWallet2.加密文件回退使用cryptography库的 Fernet 对称加密密钥和加密数据分开存储3.环境变量兼容支持通过secret_id_env/secret_key_env指定环境变量名程序会自动检测当前系统的钥匙串是否安全。如果检测到是plaintext或fail后端会自动切换到加密文件模式。操作确认所有写入操作都需要显式确认• CLI 模式下lhfw run --apply会先展示 diff然后调用typer.confirm()等待输入• TUI 模式下会弹出 Modal 确认对话框• 只有--yes标志才能跳过确认用于自动化脚本场景错误隔离批量执行时每台服务器独立 try/except。一台服务器的 API 调用失败不会阻塞其他服务器的执行。最终所有结果汇总到一份报告中。命令行速查lhfw doctor # 健康检查环境 凭据可达性 lhfw run # 预览所有 enabled 服务器的 diff lhfw run --apply # 实际写入 lhfw run --tag prod --tag sg # 按 tag 过滤 lhfw run --apply --yes # 跳过确认用于脚本 lhfw config show # 查看配置 lhfw config history # 查看执行历史 lhfw credential list # 列出凭据 lhfw server list # 列出服务器 lhfw server rule-list my-srv # 查看某台服务器的规则从旧脚本迁移如果你之前用的是旧版单文件脚本的tencent_lighthouse_fw.toml配置格式可以一键导入lhfw import-legacy ./tencent_lighthouse_fw.toml会自动迁移 defaults、credentials、servers、managed_rules包括环境变量名。技术栈组件选型CLI 框架TyperTUI 框架Textual终端美化Rich配置格式TOML (tomllib tomli-w)密钥加密cryptography (Fernet)系统钥匙串keyring跨平台路径platformdirs腾讯云 SDKtencentcloud-sdk-python构建系统Hatchling hatch-vcs包管理uv发布PyPI Trusted Publishing (OIDC)Python 3.11所有模型使用dataclass(frozenTrue, slotsTrue)保证不可变性。CI/CD项目使用 GitHub Actions 实现完整的 CI/CD•CI每次 push 和 PR 触发跨平台Ubuntu Windows运行单元测试和冒烟测试•CD推送v*.*.*格式的 git tag 后自动构建并发布到 PyPI版本号由 git tag 动态决定通过hatch-vcspyproject.toml中不硬编码版本。发布使用 PyPI Trusted Publishing通过 GitHub OIDC 令牌认证无需维护 API Token。详细配置指南见仓库的docs/pypi-trusted-publisher.md。写在最后这个工具解决了一个很小但很烦的问题。如果你也在用腾讯云轻量服务器遇到过 IP 变化导致 SSH 断连的困扰可以试试看。仓库地址https://github.com/star-plan/tencent-lighthouse-fw欢迎 issue 和 PR。引用链接[1]lighthouse-fw:https://github.com/star-plan/tencent-lighthouse-fw[2]uv:https://docs.astral.sh/uv/[3]Textual:https://textual.textualize.io/

相关文章:

lighthouse-fw:一个管理腾讯云轻量服务器防火墙的终端工具

背景:一个反复折磨我的问题我有几台腾讯云轻量应用服务器(Lighthouse),防火墙规则里白名单写的是当前的公网出口 IP。问题是,家里的宽带每次重新拨号,IP 就会变,从办公室访问服务器,…...

uniCloud云函数参数event和context全解析:从入门到实战,搞懂这俩对象能帮你省多少事?

uniCloud云函数参数event和context全解析:从入门到实战,搞懂这俩对象能帮你省多少事? 在uniCloud开发中,云函数作为核心功能之一,其参数event和context的理解深度直接决定了开发效率与代码质量。很多开发者虽然能够基础…...

LLM专属搜索引擎:混合检索与RAG架构的工程实践

1. 项目概述:一个为LLM打造的专属搜索引擎如果你最近在折腾大语言模型(LLM)应用,比如想做个智能客服或者文档问答机器人,那你肯定遇到过这个头疼的问题:怎么让模型“知道”你私有的、最新的数据&#xff1f…...

Open UI5 源代码解析之1238:SmartBusinessWriteAPI.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.ui.fl\src\sap\ui\fl\write\api\SmartBusinessWriteAPI.js SmartBusinessWriteAPI.js 详细分析 模块定位 SmartBusinessWriteAPI.js 是 sap.ui.fl.write.api 命名空间下的一个受限写接口。它的名字里虽然…...

Open UI5 源代码解析之1239:SmartVariantManagementWriteAPI.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.ui.fl\src\sap\ui\fl\write\api\SmartVariantManagementWriteAPI.js SmartVariantManagementWriteAPI.js 详细分析 文件定位与总体判断 SmartVariantManagementWriteAPI.js 位于 sap.ui.fl.write.api 命…...

强化学习在海报智能设计中的应用与实践

1. 项目背景与核心价值海报设计一直是视觉传达领域的重要课题。传统设计流程中,设计师需要反复调整元素位置、大小和配色,这个过程往往耗时费力。特别是在需要快速产出大量不同风格海报的营销场景中,人工设计的效率瓶颈尤为明显。PosterCopil…...

Open UI5 源代码解析之1240:TransportSelection.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.ui.fl\src\sap\ui\fl\transport\TransportSelection.js TransportSelection.js 详细分析 文件的直观结论 这个文件本身非常短,几乎没有任何业务逻辑。若只看代码体积,很容易误判它只是一个可有可无的空…...

LLM项目中架构决策记录(ADR)的工程化实践与价值

1. 项目概述:从ADR到智能决策的工程化实践最近在整理过往项目文档时,我重新审视了一个名为“ADR”的文件夹。这个文件夹隶属于一个更大的项目“sirius-777-llm”,乍一看,这个命名充满了神秘感,像是某个科幻项目的一部分…...

终极Veldrid入门指南:如何快速构建跨平台.NET 3D图形应用

终极Veldrid入门指南:如何快速构建跨平台.NET 3D图形应用 【免费下载链接】veldrid A low-level, portable graphics library for .NET. 项目地址: https://gitcode.com/gh_mirrors/ve/veldrid Veldrid是一个面向.NET的低级、可移植图形库,它允许…...

MCP 协议深度解析:如何构建具备工具调用能力的智能 Agent

MCP 协议深度解析:如何构建具备工具调用能力的智能 Agent 摘要 本文深入探讨了 MCP (Model Context Protocol) 的核心原理、工作机制以及它如何通过标准化接口提升 AI Agent 的工具调用能力和生态兼容性。 背景 在 AI Agent 快速发展的今天,如何让大模型…...

如何快速配置GHelper:华硕笔记本性能控制的终极免费指南

如何快速配置GHelper:华硕笔记本性能控制的终极免费指南 【免费下载链接】g-helper Fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Zenbook, ProArt, Ally,…...

Siesta 框架完全指南:iOS/macOS REST 客户端的优雅解决方案

Siesta 框架完全指南:iOS/macOS REST 客户端的优雅解决方案 【免费下载链接】siesta The civilized way to write REST API clients for iOS / macOS 项目地址: https://gitcode.com/gh_mirrors/si/siesta Siesta 是一个专为 iOS 和 macOS 平台设计的 REST A…...

专业NTFS数据恢复:RecuperaBit技术深度解析与实战应用

专业NTFS数据恢复:RecuperaBit技术深度解析与实战应用 【免费下载链接】RecuperaBit A tool for forensic file system reconstruction. 项目地址: https://gitcode.com/gh_mirrors/re/RecuperaBit 面对硬盘分区表损坏、误删分区、格式化丢失等数据灾难&…...

摄影作品专业水印解决方案:智能批量处理工具全面解析

摄影作品专业水印解决方案:智能批量处理工具全面解析 【免费下载链接】semi-utils 一个批量添加相机机型和拍摄参数的工具,后续「可能」添加其他功能。 项目地址: https://gitcode.com/gh_mirrors/se/semi-utils 在数字摄影时代,每张照…...

观察 Taotoken 在多模型间自动路由的稳定性与响应表现

观察 Taotoken 在多模型间自动路由的稳定性与响应表现 1. 多模型路由的核心价值 Taotoken 作为大模型聚合分发平台,其核心能力之一是通过统一 API 接入多个模型供应商。这种设计使得开发者无需关心底层供应商切换细节,只需通过标准接口发送请求即可获得…...

Microverse AI对话系统完全指南:从基础配置到高级定制

Microverse AI对话系统完全指南:从基础配置到高级定制 【免费下载链接】Microverse A god-simulation sandbox game built on Godot 4 as a multi-agent AI social simulation system. In this virtual world, AI characters possess independent thinking and memo…...

掌握八大网盘直链解析:LinkSwift全面实战指南

掌握八大网盘直链解析:LinkSwift全面实战指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...

5步掌握MuseTalk唇同步:从入门到精通的完整指南

5步掌握MuseTalk唇同步:从入门到精通的完整指南 【免费下载链接】MuseTalk MuseTalk: Real-Time High Quality Lip Synchorization with Latent Space Inpainting 项目地址: https://gitcode.com/gh_mirrors/mu/MuseTalk 在数字内容创作和虚拟人技术蓬勃发展…...

终极音频转换方案:3分钟解决微信语音无法播放的困扰

终极音频转换方案:3分钟解决微信语音无法播放的困扰 【免费下载链接】silk-v3-decoder [Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and convert to other format (like mp3). Batch conversion support. 项目…...

题解:AtCoder AT_awc0048_c Streetlights and Blizzard

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

AI辅助开发:让快马平台AI智能生成包含thisisunsafe安全提示的本地测试工具

最近在开发一个本地测试工具时,遇到了不少关于安全限制的问题。特别是在测试HTTPS接口时,浏览器经常会拦截请求,需要手动输入thisisunsafe才能继续。于是我想,能不能开发一个智能工具,自动检测当前环境并给出针对性建议…...

终极指南:5分钟快速上手Sabaki,打造专业级围棋对弈环境

终极指南:5分钟快速上手Sabaki,打造专业级围棋对弈环境 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki Sabaki是一款优雅的围棋棋盘和SGF编辑器&am…...

题解:AtCoder AT_awc0047_b Road Closure on a One-Way Street

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

Transformer核心组件拆解:为什么你的模型需要‘多头’?单头vs多头注意力在NLP任务中的实战对比

Transformer核心组件拆解:单头与多头注意力机制在NLP任务中的实战对比 当我们在构建一个文本分类模型时,常常会面临一个关键选择:是使用简单的单头注意力机制,还是采用更复杂的多头注意力机制?这个问题看似简单&#x…...

内容创作团队如何利用多模型能力提升稿件生成质量与效率

内容创作团队如何利用多模型能力提升稿件生成质量与效率 1. 多模型协作的价值与场景 在内容创作领域,不同环节对生成式AI的需求存在显著差异。头脑风暴阶段需要模型具备发散性思维和创意激发能力,而文案润色则要求精准的语言把控和风格适配。传统单一模…...

多阶段构建效率提升63%?.NET 9 SDK镜像瘦身终极方案——基于mcr.microsoft.com/dotnet/sdk:9.0-alpine的11步精简实录

更多请点击: https://intelliparadigm.com 第一章:.NET 9 容器化演进与 Alpine 镜像价值洞察 .NET 9 将容器原生支持提升至新高度,其 SDK 内置的 dotnet publish --os linux --arch arm64 多平台发布能力,配合对 musl libc 的深度…...

告别像素和线段:MapTRv2如何用‘点集’新思路搞定高精地图实时构建?

MapTRv2:用无序点集重构高精地图的工程革命 在自动驾驶感知领域,高精地图的实时构建一直是制约系统性能的瓶颈。传统方法如同在迷宫中摸索前行——像素级分割需要复杂的后处理才能提取矢量信息,而基于有序序列的建模则受限于固定排列方式带来…...

如何在GAAS中实现激光雷达定位与建图:NDT与ICP算法详解

如何在GAAS中实现激光雷达定位与建图:NDT与ICP算法详解 【免费下载链接】GAAS GAAS is an open-source program designed for fully autonomous VTOL(a.k.a flying cars) and drones. GAAS stands for Generalized Autonomy Aviation System. 项目地址: https://…...

当3D VR视频遇见2D世界:一场沉浸式内容的降维革命

当3D VR视频遇见2D世界:一场沉浸式内容的降维革命 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh_mirror…...

C++ DoIP协议栈开发全链路解析:手把手实现车辆诊断通信、路由激活与UDP/TP over IP封装

更多请点击: https://intelliparadigm.com 第一章:C DoIP协议栈开发全链路解析:手把手实现车辆诊断通信、路由激活与UDP/TP over IP封装 DoIP(Diagnostics over Internet Protocol)是ISO 13400标准定义的车载诊断通信…...