AWS Lambda@Edge
Przechwytywanie ruchu na poziomie CDN przy użyciu AWS Lambda@Edge to najbezpieczniejszy i najbardziej optymalny kosztowo sposób korzystania z ProxyTracer. Odrzucając złośliwe żądania na brzegu sieci AWS, całkowicie chronisz swoje serwery źródłowe przed ruchem z botnetów i oszczędzasz na kosztach infrastruktury.
Implementacja
Ta funkcja podłącza się pod zdarzenie CloudFront Viewer Request. Odczytuje adres IP klienta bezpośrednio z obiektu zdarzenia, wykonuje szybkie asynchroniczne zapytanie do ProxyTracer i natychmiast zwraca odpowiedź 403 Forbidden do użytkownika, jeśli wykryto proxy.
export const handler = async (event) => {
const request = event.Records[0].cf.request;
// 1. Bezpiecznie pobierz adres IP klienta bezpośrednio ze zdarzenia CloudFront
const clientIp = request.clientIp;
// Przepuść w przypadku testów lokalnych lub braku adresu IP
if (!clientIp) {
return request;
}
try {
// 2. Odpytaj API ProxyTracer (Node 18+ w Lambdzie obsługuje natywne fetch)
const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}`
},
// Użycie AbortController do wymuszenia ścisłego limitu czasu 500 ms
signal: AbortSignal.timeout(500)
});
if (ptResponse.ok) {
const data = await ptResponse.json();
// 3. Natychmiast odrzuć połączenie, jeśli wykryto proxy
if (data.proxy === true) {
// Zwrócenie niestandardowej odpowiedzi natychmiast kończy przetwarzanie żądania CloudFront (short-circuit)
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: Jeśli minie limit czasu API, przepuść ruch, aby zapewnić ciągłość działania
console.error('ProxyTracer API Error:', error);
}
// 4. Ruch jest czysty, zwróć obiekt żądania, aby kontynuować routing do serwera źródłowego
return request;
};Uwaga dotycząca wdrożenia: Upewnij się, że funkcja Lambda została wdrożona w regionie us-east-1, ponieważ CloudFront wymaga, aby wszystkie funkcje Lambda@Edge były inicjowane z tego regionu przed ich globalną replikacją.