Skip to Content
DocumentationEdge ComputingAWS Lambda@Edge

AWS Lambda@Edge

Proteggi la tua infrastruttura AWS eseguendo il rilevamento dei proxy all'edge all'interno di AWS CloudFront utilizzando Lambda@Edge.

L'Implementazione

Lambda@Edge consente di intercettare le richieste CloudFront sull'evento Viewer Request. Se ProxyTracer contrassegna un IP, interrompiamo anticipatamente la pipeline delle richieste e restituiamo un payload 403 Forbidden personalizzato direttamente dai nodi edge globali di AWS.

export const handler = async (event) => { const request = event.Records[0].cf.request; // 1. Estrai in modo sicuro l'IP del client direttamente da CloudFront const clientIp = request.clientIp; // Lascia passare in caso di test locale o se non viene trovato alcun IP if (!clientIp) { return request; } try { // 2. Interroga l'API ProxyTracer (Lambda Node 18+ supporta fetch nativo) const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, { method: 'GET', headers: { 'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}` }, // Utilizzo di un AbortController per applicare un timeout rigoroso di 500ms signal: AbortSignal.timeout(500) }); if (ptResponse.ok) { const data = await ptResponse.json(); // 3. Interrompi immediatamente la connessione se viene rilevato un proxy if (data.proxy === true) { // La restituzione di una risposta personalizzata interrompe anticipatamente la richiesta 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: se l'API va in timeout, consenti il traffico per garantire l'uptime console.error('ProxyTracer API Error:', error); } // 4. Il traffico è pulito, restituisci l'oggetto request per continuare l'inoltro verso l'origine return request; };

Distribuisci questa funzione come funzione Lambda@Edge associata alla tua distribuzione CloudFront sull'evento Viewer Request. Assicurati che la tua regione di esecuzione sia impostata su us-east-1 (richiesto da AWS per la distribuzione edge globale).

Ultimo aggiornamento il