AWS Lambda@Edge
Het onderscheppen van verkeer op CDN-niveau met behulp van AWS Lambda@Edge is de meest veilige en kostenefficiënte manier om ProxyTracer te gebruiken. Door kwaadaardige verzoeken aan de AWS-edge te weren, scherm je je origin-servers volledig af van botnetverkeer en bespaar je op rekenkosten.
De Implementatie
Deze functie haakt in op het CloudFront Viewer Request-event. Het leest het client-IP rechtstreeks uit het event-object, voert een snelle asynchrone fetch uit naar ProxyTracer en retourneert direct een samengestelde 403 Forbidden-respons naar de gebruiker als er een proxy wordt gedetecteerd.
export const handler = async (event) => {
const request = event.Records[0].cf.request;
// 1. Extraheer het client-IP-adres veilig rechtstreeks uit CloudFront
const clientIp = request.clientIp;
// Doorlaten bij lokaal testen of als er geen IP-adres is gevonden
if (!clientIp) {
return request;
}
try {
// 2. Raadpleeg de ProxyTracer API (Lambda Node 18+ ondersteunt native fetch)
const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}`
},
// Gebruik van een AbortController om een strikte timeout van 500ms af te dwingen
signal: AbortSignal.timeout(500)
});
if (ptResponse.ok) {
const data = await ptResponse.json();
// 3. Verbreek de verbinding onmiddellijk als er een proxy wordt gedetecteerd
if (data.proxy === true) {
// Het retourneren van een aangepaste response sluit het CloudFront-verzoek direct kort
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: Als de API een timeout geeft, laat verkeer door om uptime te garanderen
console.error('ProxyTracer API Error:', error);
}
// 4. Verkeer is schoon, retourneer het request-object om routing naar de origin voort te zetten
return request;
};Deployment-opmerking: Zorg ervoor dat deze Lambda-functie wordt geïmplementeerd in de regio us-east-1, aangezien CloudFront vereist dat alle Lambda@Edge-functies van daaruit worden geïnitieerd voordat ze wereldwijd worden gerepliceerd.