Skip to Content
DocumentationEdge-вычисленияAWS Lambda@Edge

AWS Lambda@Edge

Перехват трафика на уровне CDN с помощью AWS Lambda@Edge — самый безопасный и экономичный способ использования ProxyTracer. Отбрасывая вредоносные запросы на границе сети AWS, вы полностью защищаете свои серверы от ботнетов и экономите на вычислительных ресурсах.

Реализация

Эта функция подключается к событию CloudFront Viewer Request. Она считывает IP клиента непосредственно из объекта события, выполняет быстрый асинхронный запрос к ProxyTracer и возвращает ответ 403 Forbidden напрямую пользователю в случае обнаружения прокси.

export const handler = async (event) => { const request = event.Records[0].cf.request; // 1. Безопасно извлечь IP клиента напрямую из CloudFront const clientIp = request.clientIp; // Пропустить при локальном тестировании или если IP-адрес не найден if (!clientIp) { return request; } try { // 2. Выполнить запрос к API ProxyTracer (Lambda Node 18+ поддерживает нативный fetch) const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${clientIp}`, { method: 'GET', headers: { 'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}` }, // Использование AbortController для обеспечения строгого таймаута 500 мс signal: AbortSignal.timeout(500) }); if (ptResponse.ok) { const data = await ptResponse.json(); // 3. Немедленно сбросить соединение, если обнаружен прокси if (data.proxy === true) { // Возврат кастомного ответа прерывает обработку запроса 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: если время ожидания API истекло, разрешить трафик для обеспечения непрерывной работы console.error('ProxyTracer API Error:', error); } // 4. Трафик чист, вернуть объект запроса для продолжения маршрутизации к origin return request; };

Заметка по развертыванию: Убедитесь, что эта Lambda-функция развернута в регионе us-east-1, так как CloudFront требует инициировать все функции Lambda@Edge именно оттуда перед глобальной репликацией.

Последнее обновление: