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. Extraire en toute sécurité l'IP du client directement depuis CloudFront
const clientIp = request.clientIp;
// Laisser passer en cas de test local ou si aucune IP n'est trouvée
if (!clientIp) {
return request;
}
try {
// 2. Interroger l'API ProxyTracer (Lambda Node 18+ prend en charge fetch en natif)
const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}`
},
// Utilisation d'un AbortController pour appliquer un timeout strict de 500 ms
signal: AbortSignal.timeout(500)
});
if (ptResponse.ok) {
const data = await ptResponse.json();
// 3. Interrompre immédiatement la connexion si un proxy est détecté
if (data.proxy === true) {
// Renvoyer une réponse personnalisée court-circuite la requête 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 : si l'API expire, autoriser le trafic pour garantir la disponibilité
console.error('ProxyTracer API Error:', error);
}
// 4. Le trafic est sain, retourner l'objet request pour poursuivre le routage vers l'origine
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.