AWS Lambda@Edge
Interceptar el tráfico a nivel de CDN usando AWS Lambda@Edge es la forma más segura y económica de utilizar ProxyTracer. Al bloquear solicitudes maliciosas en la red perimetral (Edge) de AWS, proteges completamente tus servidores de origen del tráfico de botnets y ahorras costos de computación.
La Implementación
Esta función se conecta al evento Viewer Request de CloudFront. Lee la IP del cliente directamente del evento, realiza una consulta asíncrona rápida a ProxyTracer y devuelve un 403 Forbidden directo al usuario si se detecta un proxy.
export const handler = async (event) => {
const request = event.Records[0].cf.request;
// 1. Extraer de forma segura la IP del cliente directamente desde CloudFront
const clientIp = request.clientIp;
// Permitir el paso si son pruebas locales o no se encuentra ninguna IP
if (!clientIp) {
return request;
}
try {
// 2. Consultar la API de ProxyTracer (Lambda Node 18+ soporta fetch nativo)
const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}`
},
// Uso de un AbortController para aplicar un timeout estricto de 500 ms
signal: AbortSignal.timeout(500)
});
if (ptResponse.ok) {
const data = await ptResponse.json();
// 3. Descartar la conexión inmediatamente si se detecta un proxy
if (data.proxy === true) {
// Devolver una respuesta personalizada interrumpe la solicitud de 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 la API agota el tiempo de espera, permitir el tráfico para garantizar la disponibilidad
console.error('ProxyTracer API Error:', error);
}
// 4. El tráfico está limpio, devolver el objeto request para continuar el enrutamiento hacia el origen
return request;
};Nota de Deploy: Asegúrate de que esta función Lambda se despliegue en la región us-east-1, ya que CloudFront requiere que todas las funciones Lambda@Edge se inicien desde allí antes de replicarse globalmente.
Última actualización el