MaxKB 如何安全对接企业微信应用

MaxKB 支持将创建的应用接入企业微信,实现企业内部员工使用对话。当内网部署的 MaxKB 不允许外部网络访问时,一般需要通过防火墙对企业微信的IP进行放行。而企业微信的IP地址会动态变化,所以防火墙很难从IP层面对企业微信请求进行管控。

问题说明

使用接口获取企业微信端接入IP的方法,由于企业微信IP段的动态变化,很难从防火墙层面限制访问,企业需要通过接口及时拉取并更新防火墙中的IP段配置。
https://developer.work.weixin.qq.com/document/path/92520

解决方法

通过访问控制机制,使用Nginx检验来源IP和请求头来判断是否为企业微信的请求,是则放行,否则返回403。参考配置如下:

# 检查HTTP请求的User-Agent头部是否包含MicroMessenger(微信浏览器的标识)。如果包含,就设置变量$a的值为1
if ($http user agent ~ MicroMessenger){set $a 1;}

# 检查X-Forwarded-For头部是否包含以172.20开头的IP地址(这里假设172.20.x.x 的IP地址段是企业内部网络的IP段)。如果包含,设置变量$a的值为1。
if ($proxy add x forwarded for ~^(172)\.(20)\.(.*)\.(.*) ){set $a 1;}

# 检查变量$a的值。如果$a不等于1,返回HTTP状态码403,禁止访问。
if ($a != 1){return 403;}