一般企业级WEB接口发布都需要信息安全政策,在Nginx上配置访问来源IP白名单是常用的做法。现在大厂服务都实现高可用&CDN应用,来源IP不定期变化,那么要如何来实现白名单限制?
目前微信公众号、企业微信、钉钉都已提供API接口,让用户可以及时获取IP清单。以下介绍API获取及定期更新方法
本文介绍微信公众号对接为例(方法同样适用于企微、钉钉,请参照官方文档变更参数)
流程介绍:
1、获取调用授权参数
2、创建shell脚本,动作:调用官方IP清单=》转为nginx配置格式 *.conf;
3、nginx中server项配置include *.conf;
4、配置shell脚本定时运行;
1.2、关于如何获取微信服务器IP地址,请见微信官方说明 (赶时间可以不看)
2.1、
创建名为get-uat-wxip.sh脚本,以下为脚本内容(微信公众号与企业微信获取选其一即可)
#!微信公众号IP获得方法
AppID="lakshdgosajd " #开发者ID
Secret="kjasdj ladsjglasdldkgsdl" #开发者密码
GURL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$AppID&secret=$Secret"
Token=$(/usr/bin/curl -s -G $GURL |awk -F\": '{print $4}'|awk -F\" '{print $2}')
PURL="https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=$Token"
RESULT=$(curl -s $PURL)
echo $RESULT > get_api_domain_ip.conf
#!企业微信IP获得方法
CorpID="wwwwsdgsdg" #企业ID
Secret="sdjladsjglasdldkgsd" #工作台应用的secret
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CorpID&corpsecret=$Secret"
Token=$(/usr/bin/curl -s -G $GURL |awk -F\": '{print $4}'|awk -F\" '{print $2}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=$Token"
RESULT=$(curl -s $PURL)
echo $RESULT > get_api_domain_ip.conf
#将get_api_domain_ip.conf文件转换为nginx配置格式
find -name 'get_api_domain_ip.conf' | xargs perl -pi -e 's|{"ip_list"\:\["|allow |g'
find -name 'get_api_domain_ip.conf' | xargs perl -pi -e 's|","|;\nallow |g'
find -name 'get_api_domain_ip.conf' | xargs perl -pi -e 's|"]|;\ndeny all;\n#|g'
2.2、在服务器上执行
vi get-api-ip.sh #将前面代码复制后保存
chmod +x get-api-ip.sh #赋予执行权限
sh get-api-ip.sh #执行脚本
2.3、执行后会生成get_api_domain_ip.conf配置文件 (重复执行会覆盖之前内容)
2.4、以下截图为ip清单的转换前后格式变化
转换后的格式 (这内容可直接插入nginx.conf)
3.1、在nginx配置文件中插入该文件,示例为文件绝对路径,请自行修改
PS:要插入配置之前可以将内网IP或固定IP开放访问,如上图
配置完就直接运行#nginx -s reload 即生效了。
4.、以下介绍让get-uat-wxip.sh脚本定时自动运行,腾讯官方建议是每天更新一次
4.1、安装crontab服务,如已安装略过
yum install -y crontabs #安装
systemctl start crond #启动
systemctl enable crond #任务开机自启
4.2、配置crontab规则
vi /etc/crontab #修改配置文件
0 1 * * * /etc/nginx/conf.d/ip_white/get-uat-wxip.sh #文件尾行插入此行
#保存退出
crontab /etc/crontab #使配置生效
crontab -l #查看任务列表
此配置为每天凌晨一点执行,自行修改实际执行时间。
修改参数:前5个数字分别代表
分=》数字:0-59;PS:从0至59分
时=》数字:0-23;PS:从0至23时
日=》数字:1-31;PS:从1到31日
月=》数字:1-12;PS:从1至12月
星期=》数字:0-6;PS:从星期日至星期六
5、结束!