Skip to Content
Documentation边缘计算平台AWS Lambda@Edge

AWS Lambda@Edge

借助 AWS Lambda@Edge 在 CDN 层面拦截流量,是使用 ProxyTracer 最安全且最具成本效益的方式。通过在 AWS 边缘节点丢弃恶意请求,您可以彻底保护源服务器免受僵尸网络攻击并大幅降低计算开销。

代码实现

该函数挂载在 CloudFront 的 Viewer Request(查看器请求)事件上。它直接从事件对象中解析客户端 IP,向 ProxyTracer 发起极速异步请求,并在检测到代理时直接向用户返回构造的 403 Forbidden 响应。

export const handler = async (event) => { const request = event.Records[0].cf.request; // 1. 直接从 CloudFront 安全提取客户端 IP const clientIp = request.clientIp; // 若为本地测试或未解析到 IP 则直接放行 if (!clientIp) { return request; } try { // 2. 查询 ProxyTracer API(Lambda Node 18+ 支持原生 fetch) const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, { method: 'GET', headers: { 'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}` }, // 使用 AbortController 强制执行严格的 500ms 超时限制 signal: AbortSignal.timeout(500) }); if (ptResponse.ok) { const data = await ptResponse.json(); // 3. 若检测到代理,立即丢弃连接 if (data.proxy === true) { // 返回自定义响应可提前终止 CloudFront 请求处理管道 return { status: '403', statusDescription: 'Forbidden', headers: { 'content-type': [{ key: 'Content-Type', value: 'application/json' }] }, body: JSON.stringify({ error: "Access Denied: VPN or Proxy detected." }) }; } } } catch (error) { // 故障开放(Fail-open):若 API 超时,放行流量以确保可用性 console.error('ProxyTracer API Error:', error); } // 4. 流量正常,返回请求对象以继续路由至源站 return request; };

部署提示:请确保该 Lambda 函数部署在 us-east-1 区域,因为 CloudFront 要求所有 Lambda@Edge 函数必须从该区域创建并由系统自动分发至全球边缘节点。

最后更新于