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 函数必须从该区域创建并由系统自动分发至全球边缘节点。
最后更新于