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;