AWS Lambda@Edge
L'interception du trafic au niveau de votre CDN via AWS Lambda@Edge représente l'approche la plus sécurisée et la plus économique pour exploiter ProxyTracer. En bloquant les requêtes illicites dès l'entrée sur le réseau périmétrique d'AWS, vous préservez intégralement vos serveurs d'origine contre le trafic de botnets et optimisez vos coûts de calcul.
L'Implémentation
Cette fonction s'exécute lors de l'événement CloudFront Viewer Request. Elle extrait l'adresse IP du client directement à partir de l'objet d'événement, effectue une interrogation asynchrone rapide auprès d'ProxyTracer et retourne directement à l'utilisateur une réponse 403 Forbidden construite sur mesure en cas de détection d'un proxy.
export const handler = async (event) => {
const request = event.Records[0].cf.request;
// 1. Safely extract the client IP directly from CloudFront
const clientIp = request.clientIp;
// Pass through if local testing or no IP found
if (!clientIp) {
return request;
}
try {
// 2. Query ProxyTracer API (Lambda Node 18+ supports native fetch)
const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}`
},
// Using an AbortController to enforce a strict 500ms timeout
signal: AbortSignal.timeout(500)
});
if (ptResponse.ok) {
const data = await ptResponse.json();
// 3. Drop the connection immediately if a proxy is detected
if (data.proxy === true) {
// Returning a custom response short-circuits the CloudFront request
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: If the API times out, allow traffic to ensure uptime
console.error('ProxyTracer API Error:', error);
}
// 4. Traffic is clean, return the request object to continue routing to origin
return request;
};Note de Déploiement : Assurez-vous impérativement de déployer cette fonction Lambda dans la région us-east-1, car AWS CloudFront exige que l'ensemble des fonctions Lambda@Edge y soient initiées avant d'être répliquées mondialement sur son réseau.