### Security Features: - **Rate Limiting**: Redis-based IP tracking with configurable limits - General: 100 requests/minute (5min block) - Upload: 10 requests/5min (10min block) - Auth: 20 requests/15min (30min block) - **Request Validation**: Path length, header count, suspicious patterns - **Attack Detection**: Admin paths, script injections, bot patterns - **Enhanced JWT**: Format validation, length checks, character filtering - **IP Tracking**: X-Forwarded-For and X-Real-IP support ### Security Headers: - X-Content-Type-Options: nosniff - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - Content-Security-Policy with strict rules - Strict-Transport-Security with includeSubDomains ### CORS Hardening: - Limited to specific domains: discours.io, new.discours.io - Restricted methods: GET, POST, OPTIONS only - Essential headers only ### Infrastructure: - Security middleware for all requests - Local cache + Redis for performance - Comprehensive logging and monitoring - Progressive blocking for repeat offenders ### Documentation: - Complete security guide (docs/security.md) - Configuration examples - Incident response procedures - Monitoring recommendations Version bump to 0.6.0 for major security enhancement.
7.2 KiB
7.2 KiB
🔒 Безопасность и защита от DDoS
Обзор
Система quoter включает многоуровневую защиту от различных типов атак, включая DDoS, брутфорс и эксплуатацию уязвимостей.
🛡️ Уровни защиты
1. Сетевой уровень (HTTP Server)
Ограничения размера запросов
- Максимальный размер payload: 500 МБ
- Максимальный размер JSON: 1 МБ
- Таймаут соединения: настраивается через Actix-web
Заголовки безопасности
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: default-src 'self'; img-src 'self' data: https:; object-src 'none';
Strict-Transport-Security: max-age=31536000; includeSubDomains
CORS Policy
- Разрешенные домены:
discours.io,new.discours.io,localhost:3000 - Разрешенные методы: GET, POST, OPTIONS
- Ограниченные заголовки: Content-Type, Authorization, If-None-Match, Cache-Control
2. Rate Limiting (Лимиты запросов)
Конфигурация по умолчанию
| Тип endpoint | Макс. запросов | Окно времени | Блокировка |
|---|---|---|---|
| Общие запросы | 100 | 60 сек | 5 мин |
| Загрузка файлов | 10 | 300 сек | 10 мин |
| Аутентификация | 20 | 900 сек | 30 мин |
Механизм работы
- IP-based tracking: Отслеживание по IP (учитывает X-Forwarded-For, X-Real-IP)
- Redis storage: Хранение счетчиков в Redis с TTL
- Local cache: Быстрый локальный кэш для частых проверок
- Progressive blocking: Увеличение времени блокировки при повторных нарушениях
3. Валидация запросов
Проверки безопасности
- Длина пути: максимум 1000 символов
- Количество заголовков: максимум 50
- Длина значений заголовков: максимум 8192 символа
- Подозрительные символы: фильтрация
..,\0,\r,\n
Детекция атак
// Подозрительные паттерны
let suspicious_patterns = [
"/admin", "/wp-admin", "/phpmyadmin", "/.env", "/config",
"/.git", "/backup", "/db", "/sql",
"script>", "<iframe", "javascript:", "data:",
];
4. Аутентификация и авторизация
JWT Token Validation
- Формат: 3 части разделенные точками
- Символы: только alphanumeric,
.,-,_ - Длина: 100-2048 символов
- Валидация: проверка подписи и времени жизни
Защита от брутфорса
- Задержки при неудачных попытках аутентификации
- Временная блокировка IP после множественных неудач
- Логирование подозрительной активности
🚀 Производительность
Оптимизации
- Локальный кэш: быстрые проверки без обращения к Redis
- Асинхронная обработка: неблокирующие операции
- ETag caching: сокращение нагрузки на статические файлы
- HTTP/2 support: через reverse proxy
Мониторинг
- Детальное логирование атак и блокировок
- Метрики производительности Redis
- Статистика rate limiting по IP и endpoint
🔧 Конфигурация
Environment Variables
# Redis (для rate limiting)
REDIS_URL=redis://localhost:6379
# Security настройки
MAX_PAYLOAD_SIZE=524288000 # 500MB
MAX_PATH_LENGTH=1000
MAX_HEADERS_COUNT=50
Настройка Rate Limits
let security_config = SecurityConfig {
general_rate_limit: RateLimitConfig {
max_requests: 100,
window_seconds: 60,
block_duration_seconds: 300,
},
upload_rate_limit: RateLimitConfig {
max_requests: 5, // Более строгие лимиты
window_seconds: 300,
block_duration_seconds: 1800,
},
// ...
};
🔍 Обнаружение угроз
Автоматическая блокировка
- Bot detection: по User-Agent заголовкам
- Массовые запросы: временная блокировка агрессивных IP
- Подозрительные пути: немедленная блокировка известных attack vectors
Логирование
WARN Rate limit exceeded for IP 192.168.1.100: 101/100 requests
WARN Suspicious pattern detected from IP 192.168.1.100: /wp-admin
WARN Token validation failed for IP 192.168.1.100
💡 Рекомендации
Развертывание в продакшене
- Reverse Proxy: Nginx/CloudFlare для дополнительной фильтрации
- Firewall: iptables/ufw для блокировки на сетевом уровне
- SSL/TLS: Обязательное использование HTTPS
- Мониторинг: Система алертов для подозрительной активности
Настройка мониторинга
# Проверка заблокированных IP
redis-cli KEYS "rate_limit:*" | wc -l
# Логи безопасности
tail -f /var/log/quoter/security.log | grep "WARN\|ERROR"
Регулярное обслуживание
- Очистка старых записей из Redis
- Анализ логов на предмет новых угроз
- Обновление списков подозрительных паттернов
- Тестирование защиты от DDoS
🚨 Реагирование на инциденты
При обнаружении атаки
- Анализ логов: определение источника и типа атаки
- Блокировка IP: добавление в firewall rules
- Масштабирование: увеличение ресурсов при необходимости
- Документирование: запись деталей для улучшения защиты
Команды для экстренного реагирования
# Блокировка IP через Redis
redis-cli SET "rate_limit:general:192.168.1.100" '{"blocked_until":9999999999}'
# Проверка активных атак
grep "Rate limit exceeded" /var/log/quoter.log | tail -20
# Очистка всех rate limits (экстренная мера)
redis-cli FLUSHDB