拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Memos 如何用 --webhook-private-network-allowlist 放行内网 Webhook 目的地?

Memos 如何用 --webhook-private-network-allowlist 放行内网 Webhook 目的地【免费下载链接】memosOpen-source, self-hosted note-taking tool built for quick capture. Markdown-native, lightweight, and fully yours.项目地址: https://gitcode.com/GitHub_Trending/me/memos在自建环境中你经常希望 Memos 把 memo 变更事件推送到内网的自建服务例如内部自动化脚本、通知网关但 Memos 的 Webhook 投递默认拦截所有私有/保留 IP 目的地以防止 SSRF这类 Webhook 会创建失败或投递失败。--webhook-private-network-allowlist启动参数等价环境变量MEMOS_WEBHOOK_PRIVATE_NETWORK_ALLOWLIST可以精确放行你需要的内网主机名、IP 或网段而不用全局关闭私有网络防护。默认拦截范围哪些 Webhook 目的地会被拒Memos 在发起 Webhook 连接时会在拨号阶段解析目标主机名并拒绝落入保留/私有地址段的目的地internal/webhook/webhook.go 中的safeClient该校验在 DNS 解析后直接连接已校验的 IP因此也能抵御 DNS 重绑定。默认被拦截的地址段internal/webhook/validate.go 中的reservedNetworks包括0.0.0.0/8本网络实际拨号到本机127.0.0.0/8IPv4 环回10.0.0.0/8、172.16.0.0/12、192.168.0.0/16RFC-1918 私有地址169.254.0.0/16链路本地含云环境 IMDS 的 169.254.169.254::/128、::1/128、fc00::/7、fe80::/10IPv6 未指定地址、环回、唯一本地、链路本地未放行的私有目的地在创建/更新 Webhook 时会被 API 拒绝InvalidArgumentwebhook URL must not resolve to a reserved or private IP address即使绕过创建投递时也会在拨号阶段报webhook: connection to reserved/private IP address is not allowed并在日志中记录为Failed to dispatch webhook asynchronously告警。配置允许列表准备条件Memos 已可正常启动。以 Docker 为例README 给出的最小启动方式是docker run -d \ --name memos \ -p 5230:5230 \ -v ~/.memos:/var/opt/memos \ neosmemo/memos:stable在此基础上给 Memos 服务端追加允许列表。两种等价的提供方式命令行参数docs/configuration-provisioning.md 与 cmd/memos/main.go--webhook-private-network-allowlist hooks.internal,10.20.0.0/16环境变量MEMOS_WEBHOOK_PRIVATE_NETWORK_ALLOWLISTDocker 部署时可用-e注入例如-e MEMOS_WEBHOOK_PRIVATE_NETWORK_ALLOWLISThooks.internal,10.20.0.0/16。条目格式规则internal/webhook/validate.go 中ConfigurePrivateDestinationAllowlist的注释与实现每个条目必须是以下三者之一精确主机名、单个 IP 地址、或 CIDR主机名按大小写不敏感匹配条目两侧空白会被去除单个 IP 会被当作单地址 CIDR 处理CIDR 会被规范化掩码到网络地址带作用域zone的 IP 地址如fe80::1%eth0不支持会报错多个条目可以重复传参也可以用逗号分隔逗号分隔的写法在测试TestPrivateWebhookAllowlistSplitsFlagAndEnvironmentFormscmd/memos/main_test.go中被验证hooks.internal, 10.0.0.0/8与独立条目192.168.1.10会被拆分为三个条目。只放行真正需要的目标允许列表只对落入上述保留段的目的生效公网目的地不受它影响。启动时的校验行为允许列表在启动阶段整体校验只有当所有条目都合法时新策略才会生效出现非法条目空条目、带 zone 的 IP、无法解析的主机名等时启动会失败并输出形如webhook: invalid private destination allowlist entry ...的错误原策略保持不变对全新进程而言即启动中止。因此修改参数或环境变量后必须重启 Memos 进程才生效改错了先根据启动报错修正条目不要带着非法条目继续排查其他问题。验证放行是否生效在用户设置中通过 UI 或 API 创建一个指向内网服务的 Webhook例如http://hooks.internal/hook该 URL 需落在你放行的主机名或网段内且使用 http/https 协议。创建成功即说明允许列表对该目的地已生效。反向验证再尝试创建一条指向未放行私有地址的 Webhook应被拒绝并返回webhook URL must not resolve to a reserved or private IP address。触发一次 memo 相关事件观察内网接收端是否收到 POST 请求。若投递仍失败查看 Memos 日志中的Failed to dispatch webhook asynchronously告警确认报错是否为webhook: connection to reserved/private IP address is not allowed目的地未放行还是普通连接错误网络不通等。与已弃用参数 --allow-private-webhooks 的关系旧参数--allow-private-webhooks及环境变量MEMOS_ALLOW_PRIVATE_WEBHOOKS为升级兼容仍可使用但已弃用它会在启动时打印--allow-private-webhooks is deprecated and disables webhook private-network protection; use --webhook-private-network-allowlist警告并把私有网络目的地防护整体关闭而不是精确放行。从旧参数迁移时按内网服务实际使用的主机名/IP 网段改写为--webhook-private-network-allowlist后移除旧参数。限制允许列表是进程级全局配置对实例内所有用户的 Webhook 生效无法按用户或按 Webhook 粒度配置条目只能是主机名、IP 或 CIDR不支持子域名通配新接入的内网主机需要补充条目并重启该校验只在拨号前按解析出的 IP 判断一次不改变 Webhook 请求的超时、重试等投递行为。【免费下载链接】memosOpen-source, self-hosted note-taking tool built for quick capture. Markdown-native, lightweight, and fully yours.项目地址: https://gitcode.com/GitHub_Trending/me/memos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门