AWS Lambda@Edge
Das Abfangen von Datenverkehr auf CDN-Ebene mittels AWS Lambda@Edge ist die sicherste und kostengünstigste Methode zur Nutzung von ProxyTracer. Indem bösartige Anfragen direkt am AWS-Edge blockiert werden, schützen Sie Ihre Ursprungsserver vollständig vor Botnetz-Verkehr und sparen Rechenkosten.
Die Implementierung
Diese Funktion hakt sich in das CloudFront Viewer Request-Ereignis ein. Sie liest die Client-IP direkt aus dem Ereignisobjekt aus, führt eine schnelle asynchrone Abfrage an ProxyTracer durch und gibt bei Erkennung eines Proxys direkt eine maßgeschneiderte 403 Forbidden-Antwort an den Nutzer zurück.
export const handler = async (event) => {
const request = event.Records[0].cf.request;
// 1. Client-IP sicher direkt aus CloudFront extrahieren
const clientIp = request.clientIp;
// Bei lokalem Testen oder wenn keine IP gefunden wurde, durchleiten
if (!clientIp) {
return request;
}
try {
// 2. ProxyTracer-API abfragen (Lambda Node 18+ unterstützt natives fetch)
const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}`
},
// Verwendung eines AbortControllers zur Erzwingung eines strikten 500ms-Timeouts
signal: AbortSignal.timeout(500)
});
if (ptResponse.ok) {
const data = await ptResponse.json();
// 3. Verbindung sofort trennen, falls ein Proxy erkannt wird
if (data.proxy === true) {
// Die Rückgabe einer benutzerdefinierten Antwort bricht die CloudFront-Anfrage vorzeitig ab
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: Wenn die API ein Timeout hat, Traffic erlauben, um die Verfügbarkeit sicherzustellen
console.error('ProxyTracer API Error:', error);
}
// 4. Traffic ist sauber, Request-Objekt zurückgeben, um das Routing zum Origin fortzusetzen
return request;
};Deployment-Hinweis: Stellen Sie sicher, dass diese Lambda-Funktion in der Region us-east-1 bereitgestellt wird, da CloudFront erfordert, dass alle Lambda@Edge-Funktionen von dort aus initiiert werden, bevor sie weltweit repliziert werden.