AWS Lambda@Edge
Interceptar o tráfego no nível da CDN usando o AWS Lambda@Edge é a forma mais segura e econômica de usar o ProxyTracer. Ao descartar requisições maliciosas na borda da AWS, você protege completamente seus servidores de origem contra tráfego de botnets e economiza custos de computação.
A Implementação
Esta função conecta-se ao evento Viewer Request do CloudFront. Ela lê o IP do cliente diretamente do objeto de evento, faz uma busca assíncrona rápida ao ProxyTracer e retorna uma resposta 403 Forbidden construída diretamente para o usuário caso um proxy seja detectado.
export const handler = async (event) => {
const request = event.Records[0].cf.request;
// 1. Extraia com segurança o IP do cliente diretamente do CloudFront
const clientIp = request.clientIp;
// Liberar se for teste local ou se nenhum IP for encontrado
if (!clientIp) {
return request;
}
try {
// 2. Consulte a API do ProxyTracer (o Lambda Node 18+ suporta fetch nativo)
const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}`
},
// Usando um AbortController para impor um timeout rigoroso de 500ms
signal: AbortSignal.timeout(500)
});
if (ptResponse.ok) {
const data = await ptResponse.json();
// 3. Encerre a conexão imediatamente se um proxy for detectado
if (data.proxy === true) {
// Retornar uma resposta customizada interrompe a requisição no 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: Se a API expirar por timeout, permita o tráfego para garantir a disponibilidade
console.error('ProxyTracer API Error:', error);
}
// 4. O tráfego é legítimo, retorne o objeto da requisição para continuar o roteamento para a origem
return request;
};Nota de Implantação: Certifique-se de que esta função Lambda seja implantada na região us-east-1, pois o CloudFront exige que todas as funções Lambda@Edge sejam iniciadas a partir de lá antes de serem replicadas globalmente.