feat: новая функция
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user