Files
quoter/docs/security.md
Untone 82668768d0 🔒 Implement comprehensive security and DDoS protection
### 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.
2025-09-02 11:40:43 +03:00

177 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔒 Безопасность и защита от DDoS
## Обзор
Система quoter включает многоуровневую защиту от различных типов атак, включая DDoS, брутфорс и эксплуатацию уязвимостей.
## 🛡️ Уровни защиты
### 1. Сетевой уровень (HTTP Server)
#### Ограничения размера запросов
- **Максимальный размер payload**: 500 МБ
- **Максимальный размер JSON**: 1 МБ
- **Таймаут соединения**: настраивается через Actix-web
#### Заголовки безопасности
```http
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 мин |
#### Механизм работы
1. **IP-based tracking**: Отслеживание по IP (учитывает X-Forwarded-For, X-Real-IP)
2. **Redis storage**: Хранение счетчиков в Redis с TTL
3. **Local cache**: Быстрый локальный кэш для частых проверок
4. **Progressive blocking**: Увеличение времени блокировки при повторных нарушениях
### 3. Валидация запросов
#### Проверки безопасности
- **Длина пути**: максимум 1000 символов
- **Количество заголовков**: максимум 50
- **Длина значений заголовков**: максимум 8192 символа
- **Подозрительные символы**: фильтрация `..`, `\0`, `\r`, `\n`
#### Детекция атак
```rust
// Подозрительные паттерны
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
```bash
# Redis (для rate limiting)
REDIS_URL=redis://localhost:6379
# Security настройки
MAX_PAYLOAD_SIZE=524288000 # 500MB
MAX_PATH_LENGTH=1000
MAX_HEADERS_COUNT=50
```
### Настройка Rate Limits
```rust
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
### Логирование
```log
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
```
## 💡 Рекомендации
### Развертывание в продакшене
1. **Reverse Proxy**: Nginx/CloudFlare для дополнительной фильтрации
2. **Firewall**: iptables/ufw для блокировки на сетевом уровне
3. **SSL/TLS**: Обязательное использование HTTPS
4. **Мониторинг**: Система алертов для подозрительной активности
### Настройка мониторинга
```bash
# Проверка заблокированных IP
redis-cli KEYS "rate_limit:*" | wc -l
# Логи безопасности
tail -f /var/log/quoter/security.log | grep "WARN\|ERROR"
```
### Регулярное обслуживание
- Очистка старых записей из Redis
- Анализ логов на предмет новых угроз
- Обновление списков подозрительных паттернов
- Тестирование защиты от DDoS
## 🚨 Реагирование на инциденты
### При обнаружении атаки
1. **Анализ логов**: определение источника и типа атаки
2. **Блокировка IP**: добавление в firewall rules
3. **Масштабирование**: увеличение ресурсов при необходимости
4. **Документирование**: запись деталей для улучшения защиты
### Команды для экстренного реагирования
```bash
# Блокировка 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
```