From 55c362c242629b76153c7aff195e8d18d162016b Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 25 Oct 2025 00:00:03 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BD=D0=BE=D0=B2=D0=B0=D1=8F=20=D1=84?= =?UTF-8?q?=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app.js | 12 +++++++----- frontend/nginx-local.conf | 4 ++-- frontend/src/services/webSshService.js | 8 ++++---- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/backend/app.js b/backend/app.js index 9361e90..f2b10f6 100644 --- a/backend/app.js +++ b/backend/app.js @@ -185,28 +185,30 @@ const isProduction = process.env.NODE_ENV === 'production'; // Rate limiting const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 минут - max: isProduction ? 100 : 1000, // 100 запросов в продакшне, 1000 в dev + max: isProduction ? 100 : 2000, // 100 запросов в продакшне, 2000 в dev message: { error: 'Слишком много запросов, попробуйте позже', retryAfter: '15 минут' }, standardHeaders: true, legacyHeaders: false, + trustProxy: true, // Доверяем nginx proxy }); -// Применяем rate limiting ко всем запросам -app.use(limiter); +// Применяем rate limiting ко всем запросам (временно отключено для тестирования) +// app.use(limiter); // Строгий rate limiting для чувствительных эндпоинтов const strictLimiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 минут - max: 10, // 10 попыток + max: isProduction ? 10 : 100, // 10 попыток в продакшне, 100 в разработке message: { error: 'Превышен лимит попыток, попробуйте позже', retryAfter: '15 минут' }, standardHeaders: true, legacyHeaders: false, + trustProxy: true, // Доверяем nginx proxy }); // Статическая раздача загруженных файлов (для dev и prod) @@ -235,7 +237,7 @@ app.use( // Маршруты API app.use('/api/tables', tablesRoutes); // ДОЛЖНО БЫТЬ ВЫШЕ! // app.use('/api', identitiesRoutes); -app.use('/api/auth', strictLimiter, authRoutes); // Строгий rate limiting для аутентификации +app.use('/api/auth', authRoutes); // Rate limiting временно отключен для тестирования app.use('/api/users', usersRoutes); app.use('/api/chat', chatRoutes); app.use('/api/admin', adminRoutes); diff --git a/frontend/nginx-local.conf b/frontend/nginx-local.conf index fb5034e..d9da413 100644 --- a/frontend/nginx-local.conf +++ b/frontend/nginx-local.conf @@ -8,7 +8,7 @@ http { # Rate limiting для защиты от DDoS limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; - limit_req_zone $binary_remote_addr zone=api_limit_per_ip:10m rate=5r/s; + limit_req_zone $binary_remote_addr zone=api_limit_per_ip:10m rate=50r/s; # HTTP сервер для локальной разработки (БЕЗ SSL) server { @@ -51,7 +51,7 @@ http { # API location /api/ { # Rate limiting для API (более строгое) - limit_req zone=api_limit_per_ip burst=10 nodelay; + limit_req zone=api_limit_per_ip burst=100 nodelay; proxy_pass http://${BACKEND_CONTAINER}:8000/api/; proxy_set_header Host $host; diff --git a/frontend/src/services/webSshService.js b/frontend/src/services/webSshService.js index a7661ce..d8095d1 100644 --- a/frontend/src/services/webSshService.js +++ b/frontend/src/services/webSshService.js @@ -21,7 +21,7 @@ const LOCAL_AGENT_URL = 'http://localhost:3000'; function getNginxConfig(domain, serverPort) { return `# Rate limiting для защиты от DDoS limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; -limit_req_zone $binary_remote_addr zone=api_limit_per_ip:10m rate=5r/s; +limit_req_zone $binary_remote_addr zone=api_limit_per_ip:10m rate=50r/s; # Блокировка известных сканеров и вредоносных ботов map $http_user_agent $bad_bot { @@ -89,7 +89,7 @@ server { # API проксирование к backend через туннель location /api/ { # Rate limiting для API (более строгое) - limit_req zone=api_limit_per_ip burst=10 nodelay; + limit_req zone=api_limit_per_ip burst=100 nodelay; proxy_pass http://localhost:8000/api/; proxy_set_header Host $host; @@ -549,7 +549,7 @@ app.post('/tunnel/create', async (req, res) => { // Создание конфигурации NGINX с полной защитой const nginxConfig = \`# Rate limiting для защиты от DDoS limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; -limit_req_zone $binary_remote_addr zone=api_limit_per_ip:10m rate=5r/s; +limit_req_zone $binary_remote_addr zone=api_limit_per_ip:10m rate=50r/s; # Блокировка известных сканеров и вредоносных ботов map $http_user_agent $bad_bot { @@ -617,7 +617,7 @@ server { # API проксирование к backend через туннель location /api/ { # Rate limiting для API (более строгое) - limit_req zone=api_limit_per_ip burst=10 nodelay; + limit_req zone=api_limit_per_ip burst=100 nodelay; proxy_pass http://localhost:8000/api/; proxy_set_header Host $host;