在钉钉群机器人设置中开启「IP 地址(段)白名单」功能,仅允许受信任的服务器出口 IP 调用 webhook 地址。该方案适合出口 IP 固定的服务端场景,若服务器使用动态 IP 或未配置白名单直接请求,钉钉接口会返回安全验证失败错误。
先说结论:开启 IP 白名单是防止 webhook 被恶意调用的有效手段,但必须确保请求源 IP 稳定。
- 先判断:确认调用 webhook 的服务器是否有固定的公网出口 IP。
- 优先做:在钉钉群机器人设置中添加该 IP 到白名单列表。
- 再验证:使用 curl 命令从白名单内外分别测试接口连通性。
快速处理思路
登录钉钉客户端进入目标群聊,点击机器人设置找到安全设置选项,将业务服务器的公网 IP 地址填入白名单保存即可。若服务器位于 NAT 网关后,需填写网关的公网 IP 而非内网 IP。
为什么会这样
钉钉自定义机器人 webhook 地址本身具备一定隐蔽性,但一旦泄露即可被任意调用。IP 白名单机制在 token 验证基础上增加了网络层来源限制,只有命中白名单的请求才会被钉钉服务器接收处理。
分步处理
1. 获取服务器出口 IP:在服务器上执行 curl ifconfig.me 或访问 ipinfo.io 查看当前公网 IP。
2. 进入机器人管理:钉钉群聊右上角设置 -> 智能群助手 -> 找到对应机器人 -> 编辑。
3. 配置安全设置:在「安全设置」栏选择「IP 地址(段)白名单」,填入上一步获取的 IP 地址。
4. 保存配置:点击保存后,非白名单 IP 发起的请求将立即被拦截。
怎么验证是否生效
在白名单外的机器执行 curl -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"test"}}' "webhook_url",应返回 errcode 不为 0 的安全验证失败提示。在白名单内服务器执行相同命令,应返回 errcode: 0。
常见坑
1. 云服务器弹性公网 IP 变更:重启实例或释放重绑 IP 可能导致出口 IP 变化,需同步更新白名单。
2. 多出口网络环境:服务器若有多个网卡或经过多层 NAT,需将所有可能的出口 IP 全部加入白名单。
3. 本地调试受阻:开启白名单后,本地开发环境无法直接调用 webhook,需通过跳板机或临时关闭白名单测试。
常见问题
没有固定 IP 怎么办?
若服务器出口 IP 不固定,建议改用「自定义关键词」安全设置,或在代码层增加签名验证机制。
白名单支持 CIDR 格式吗?
支持,钉钉机器人安全设置允许填写 IP 段,适合整个网段出口固定的场景。
配置后立刻生效吗?
是的,保存配置后安全策略立即生效,无需等待缓存刷新。
参考来源
钉钉开放平台文档 - 自定义机器人接入