奇技淫巧 | 巧用阿里云免费 ESA:获取用户真实IP地址与地理位置

知识是人生的灯塔,只有不断学习,才能照亮前行的道路

📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路 😋 。

0x00 前言简述

首先声明,此文并非广告,也不是为阿里云打广告的文章(PS: 若需投放广告请联系作者,生活所迫), 而是作者在免费(Free)使用阿里云边缘安全加速ESA(Edge Security Acceleration)过程中的一些心得分享,它切实解决了作者内部业务运维安全的一些痛点、难点问题,遂简单整理出来,给遇到同样问题的道友提供一个解决思路。

  • 例如:内网业务通过物理的负载均衡设备四层转发到公网,但是无法获取真实的用户IP地址, 从而导致无法进行有效的用户追踪、溯源等,而依托于阿里云 ESA 边缘安全加速基础,可以解决此问题。

  • 例如:其次在前面实践 Nginx geoip2 模块是依托于 GeoIP2 数据库根据IP地址获取用户IP省份位置,其准确性不高,且无法实时更新,而依托于阿里云 ESA 边缘安全加速函数,则可以完美解决这些问题。

原文地址:https://articles.zsxq.com/id_5ou2v4j8tbzs.html

什么是 ESA ?

阿里云的边缘安全加速 ESA(Edge Security Acceleration)是一个全球分布式的边缘网络平台,它通过遍布全球的3200多个边缘节点,为游戏、电商、金融、媒体等行业提供一站式的网络加速、安全防护和边缘计算服务,旨在解决全球业务访问延迟高、网络攻击频发以及中心化计算带来的性能瓶颈问题。

ESA 产品免费套餐领取地址(复制或文末阅读原文链接直达):https://www.aliyun.com/product/esa?source=5176.29345612\&userCode=uelj47qf
weiyigeek.top-ESA 产品价格图

为什么选择ESA?

目前阿里云ESA提供了免费试用额度,首次使用赠送 50G(基础版,原价格 9.9/50G) + (每日10w次边缘计算能力) ,目前还可参加任务无限免费领取基础版,这对于小型企业和开发者来说是一个非常有吸引力的选择。通过使用ESA,用户可以享受到全球分布式的边缘节点带来的低延迟和高可用性,同时还可以利用其内置的安全防护功能来抵御各种网络攻击,以基础版功能为例:

  • 100%CDN功能,加量不加价

  • 一键防盗刷

  • 支持用量封顶,安心使用

  • 拦截流量不计费

  • HTTPS、WAF请求数不计费,仅计算请求+响应流量。

weiyigeek.top-ESA架构图

应用场景

  • 全球化业务加速:对于业务覆盖多个国家和地区的企业,如跨境电商、全球化游戏、出海应用等,用户访问延迟和网络安全是核心挑战。

  • 高并发应用的边缘计算:对于需要快速响应用户请求的场景,如实时API、在线个性化推荐、物联网数据处理等,将计算逻辑部署在靠近用户的边缘节点可以有效降低回源延迟。

  • 业务安全防护:对于频繁遭受DDoS攻击、CC攻击或流量盗刷的业务,如金融、游戏、政府网站等,需要强大的安全防护能力来保障业务连续性。

废话不多说,实践为王,来看看作者是如何使用 esa 解决上述问题的吧。

0x01 实践操作

1.自定义真实IP地址请求头获取客户端地址

操作步骤

01.使用浏览器访问[ https://www.aliyun.com/product/esa?source=5176.29345612\&userCode=uelj47qf ] esa 产品地址申请免费试用。
weiyigeek.top-阿里云ESA图

02.点击边缘安全加速(ESA)控制台, 站点管理添加一个自己的主域名,例如: 作者的 weiyigeek.top 目前托管在腾讯云中,需要自行在域名解析商那边添加 TXT 记录以验证所属
weiyigeek.top-添加站点图

03.之后,为站点选择免费试用套餐基础版/1个月,原价也只有 9.9/50G,点击完成并支付即可。
weiyigeek.top-选择ESA套餐图

04.完成后点击添加的【站点】,点击【DNS】,为测试站点 test.weiyigeek.top 添加一个 CNAME 记录,注意同样需要在域名解析商按照提示配置即可。
weiyigeek.top-添加DNS记录图

05.虽然,默认加入到 esa 的 test.weiyigeek.top 站点,可以通过 $http_x_forwarded_for 头进行获取,但是考虑到在实践场景中有需要自定真实IP记录头的需要,ESA 也是支持的这里有两种方式可以实现。

方式1.规则 > 转换规则 > 修改请求头 > 设置域名与请求路径条件,例如:在访问 test.weiyigeek.top/ip 时请求头设置为 x-real-ip
weiyigeek.top-修改请求头图

方式2.规则 > 转换规则 > 托管转换 > 添加真实客户端 IP 标头 ,例如:设置为 real-client-ip
weiyigeek.top-添加真实客户端 IP 标头图

06.之后,我们便可到 nginx 服务器中配置,添加一个 test.weiyigeek.top 站点,并添加下述部分 location 配置,

go 复制代码
location = /ip {
    default_type application/json; 
    # 禁止 OPTIONS 方式请求
    if ($request_method ~* ^(OPTIONS)$) {
        access_log off; 
        return 204; 
    }
    # 仅允许 GET|POST 方式请求
    if ($request_method !~* ^(GET|POST)$) {
        return 405; 
    }
    # 限制请求来源,防止盗刷
    valid_referers blocked *.weiyigeek.top *.wygk.eu.org localhost:80 localhost:8080;
      if ($invalid_referer) {
      return 403;
    }
    return 200 '{"code":0, "data": {"x-real-ip":"$http_x_real_ip","x-forwarded-for":"$http_x_forwarded_for","real-client-ip": "$http_real_client_ip"},"success": true}'; 
}

weiyigeek.top-配置nginx站点图

07.尝试使用浏览器访问 test.weiyigeek.top/ip ,由于做了referer 来源限制所以直接请求 403 ,防止其它站点盗刷。
weiyigeek.top-防止被盗刷的安全限制图

08.最后加上 referer: demo.weiyigeek.top 请求头字段与值,再次访问发现已经可以通过 $http_real_client_ip$http_x_forwarded_for 以及 $http_x_real_ip 等 Nginx 变量获取到真实的客户端 IP 地址了。
weiyigeek.top-正常返回客户端IP地址图

2.利用边缘函数实现获取客户端IP地址及地域信息

温馨提示:此处仍在上一小节中添加站点 以及 添加 DNS 记录 步骤之下继续进行实践,前面我们介绍 esa 时提到边缘计算作为其核心功能,可以在请求以及响应阶段,针对数据进行加工处理。

温馨提示:阿里云 ESA 边缘函数提供了每日 10w 次免费边缘计算能力,对于小型企业和开发者已经足够使用了。

操作步骤

01.回到【边缘安全加速 ESA】控制台,首次访问需申请开通,点击侧边栏中【边缘函数】,自定义添加一个边缘函数,例如:作者这里函数名称设置为 get-ip-info 。
weiyigeek.top-边缘函数图

02.将下述边缘函数代码复制到新创建的边缘函数中,其利用预定义对象 request.info 获取客户IP地址及相关运营商与地理位置信息,在进行测试确认无误后,便可保存发布,例如:

go 复制代码
async function handleRequest(request) {
returnnew Response(JSON.stringify(request.info), {
    headers: {
      'content-type': 'application/json',
    },
  })
}

exportdefault {
async fetch(request) {
    return handleRequest(request);
  }
};

weiyigeek.top-修改边缘函数代码图

03.再次点击添加的站点,站点管理 > 函数路由 > 新创建一个路由,内容如下所示.
weiyigeek.top-创建访问路由图

04.配置完成后,便可直接访问 test.weiyigeek.top/ipinfo ,查看真实的客户端IP地址及其运营商和地理位置等信息了。

go 复制代码
{
"ip_city_en": "Chongqing",
"ip_region_id": "CN-CQ",
"ip_country_id": "CN",
"ip_region_en": "Chongqing",
"ip_isp_en": "China-Mobile",
"ip_isp_id": "100025",
"ip_country_en": "China",
"remote_port": "2348",
"remote_addr": "183.226.218.**",
"ip_city_id": "500100"
}

weiyigeek.top-验证边缘函数获取地址信息图

至此,作者通过实践,已经成功利用阿里云边缘安全加速ESA实现了获取真实IP地址及其营运商、省份位置等信息的需求,希望对道友们有所帮助。

END

加入:作者【全栈工程师修炼指南】知识星球

『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。

Q: 加入作者【全栈工程师修炼指南】星球后有啥好处?

✅ 将获得作者最新工作学习实践文章以及网盘资源。

✅ 将获得作者珍藏多年的全栈学习笔记(需连续两年及以上老星球友,也可单次购买)

✅ 将获得作者专门答疑学习交流群,解决在工作学习中的问题。

✅ 将获得作者远程支持(在作者能力范围内且合规)。

获取:作者工作学习全栈笔记

作者整理了10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者微信或者回复【工作学习实践笔记】,当前价格¥299,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

知识推荐 往期文章

若文章对你有帮助,请将它转发给更多的看友,若有疑问的小伙伴,可在评论区留言你想法哟 💬!

相关推荐
Apache Flink1 小时前
打造可编程可集成的实时计算平台:阿里云实时计算 Flink被集成能力深度解析
大数据·阿里云·flink·云计算
碰大点1 小时前
数据库“Driver not loaded“错误,单例模式重构方案
数据库·sql·qt·单例模式·重构
武子康1 小时前
Java-173 Neo4j + Spring Boot 实战:从 Driver 到 Repository 的整合与踩坑
java·数据库·spring boot·后端·spring·nosql·neo4j
哥哥还在IT中1 小时前
深入理解MySQL事务隔离级别与锁机制(从ACID到MVCC的全面解析)
数据库·mysql
李慕婉学姐2 小时前
Springboot智慧旅游管理系统6w63eon8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·旅游
爱吃猫的鱼星3 小时前
SQL 分类
数据库·oracle
x***J3483 小时前
云计算解决方案
云计算
数数科技的数据干货4 小时前
从爆款到厂牌:解读游戏工业化的业务持续增长道路
运维·数据库·人工智能
熊猫在哪4 小时前
macos安装mysql
数据库·mysql·macos