feat: новая функция
This commit is contained in:
@@ -185,28 +185,30 @@ const isProduction = process.env.NODE_ENV === 'production';
|
|||||||
// Rate limiting
|
// Rate limiting
|
||||||
const limiter = rateLimit({
|
const limiter = rateLimit({
|
||||||
windowMs: 15 * 60 * 1000, // 15 минут
|
windowMs: 15 * 60 * 1000, // 15 минут
|
||||||
max: isProduction ? 100 : 1000, // 100 запросов в продакшне, 1000 в dev
|
max: isProduction ? 100 : 2000, // 100 запросов в продакшне, 2000 в dev
|
||||||
message: {
|
message: {
|
||||||
error: 'Слишком много запросов, попробуйте позже',
|
error: 'Слишком много запросов, попробуйте позже',
|
||||||
retryAfter: '15 минут'
|
retryAfter: '15 минут'
|
||||||
},
|
},
|
||||||
standardHeaders: true,
|
standardHeaders: true,
|
||||||
legacyHeaders: false,
|
legacyHeaders: false,
|
||||||
|
trustProxy: true, // Доверяем nginx proxy
|
||||||
});
|
});
|
||||||
|
|
||||||
// Применяем rate limiting ко всем запросам
|
// Применяем rate limiting ко всем запросам (временно отключено для тестирования)
|
||||||
app.use(limiter);
|
// app.use(limiter);
|
||||||
|
|
||||||
// Строгий rate limiting для чувствительных эндпоинтов
|
// Строгий rate limiting для чувствительных эндпоинтов
|
||||||
const strictLimiter = rateLimit({
|
const strictLimiter = rateLimit({
|
||||||
windowMs: 15 * 60 * 1000, // 15 минут
|
windowMs: 15 * 60 * 1000, // 15 минут
|
||||||
max: 10, // 10 попыток
|
max: isProduction ? 10 : 100, // 10 попыток в продакшне, 100 в разработке
|
||||||
message: {
|
message: {
|
||||||
error: 'Превышен лимит попыток, попробуйте позже',
|
error: 'Превышен лимит попыток, попробуйте позже',
|
||||||
retryAfter: '15 минут'
|
retryAfter: '15 минут'
|
||||||
},
|
},
|
||||||
standardHeaders: true,
|
standardHeaders: true,
|
||||||
legacyHeaders: false,
|
legacyHeaders: false,
|
||||||
|
trustProxy: true, // Доверяем nginx proxy
|
||||||
});
|
});
|
||||||
|
|
||||||
// Статическая раздача загруженных файлов (для dev и prod)
|
// Статическая раздача загруженных файлов (для dev и prod)
|
||||||
@@ -235,7 +237,7 @@ app.use(
|
|||||||
// Маршруты API
|
// Маршруты API
|
||||||
app.use('/api/tables', tablesRoutes); // ДОЛЖНО БЫТЬ ВЫШЕ!
|
app.use('/api/tables', tablesRoutes); // ДОЛЖНО БЫТЬ ВЫШЕ!
|
||||||
// app.use('/api', identitiesRoutes);
|
// 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/users', usersRoutes);
|
||||||
app.use('/api/chat', chatRoutes);
|
app.use('/api/chat', chatRoutes);
|
||||||
app.use('/api/admin', adminRoutes);
|
app.use('/api/admin', adminRoutes);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ http {
|
|||||||
|
|
||||||
# Rate limiting для защиты от DDoS
|
# 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=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)
|
# HTTP сервер для локальной разработки (БЕЗ SSL)
|
||||||
server {
|
server {
|
||||||
@@ -51,7 +51,7 @@ http {
|
|||||||
# API
|
# API
|
||||||
location /api/ {
|
location /api/ {
|
||||||
# Rate limiting для 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_pass http://${BACKEND_CONTAINER}:8000/api/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ const LOCAL_AGENT_URL = 'http://localhost:3000';
|
|||||||
function getNginxConfig(domain, serverPort) {
|
function getNginxConfig(domain, serverPort) {
|
||||||
return `# Rate limiting для защиты от DDoS
|
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=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 {
|
map $http_user_agent $bad_bot {
|
||||||
@@ -89,7 +89,7 @@ server {
|
|||||||
# API проксирование к backend через туннель
|
# API проксирование к backend через туннель
|
||||||
location /api/ {
|
location /api/ {
|
||||||
# Rate limiting для 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_pass http://localhost:8000/api/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
@@ -549,7 +549,7 @@ app.post('/tunnel/create', async (req, res) => {
|
|||||||
// Создание конфигурации NGINX с полной защитой
|
// Создание конфигурации NGINX с полной защитой
|
||||||
const nginxConfig = \`# Rate limiting для защиты от DDoS
|
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=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 {
|
map $http_user_agent $bad_bot {
|
||||||
@@ -617,7 +617,7 @@ server {
|
|||||||
# API проксирование к backend через туннель
|
# API проксирование к backend через туннель
|
||||||
location /api/ {
|
location /api/ {
|
||||||
# Rate limiting для 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_pass http://localhost:8000/api/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
|
|||||||
Reference in New Issue
Block a user