DDoS (Distributed Denial of Service) — это тип кибератаки, при которой злоумышленник пытается сделать сервис или ресурс недоступным для пользователей, перегружая его большим количеством запросов. В отличие от обычной DoS-атаки, DDoS использует множество устройств (ботнет) для генерации трафика, что делает атаку более мощной и сложной для отражения.
CDN распределяет нагрузку между множеством серверов, что помогает справляться с большим количеством запросов. Популярные CDN, такие как Cloudflare или Akamai, также предоставляют защиту от DDoS.
Пример настройки CDN:
# Пример настройки Cloudflare
1. Зарегистрируйтесь на Cloudflare.
2. Укажите DNS-записи вашего домена.
3. Включите защиту от DDoS в панели управления Cloudflare.
Ограничение количества запросов от одного IP-адреса помогает предотвратить перегрузку сервера.
Пример настройки Rate Limiting в Nginx:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=5;
proxy_pass http://backend;
}
}
}
WAF фильтрует входящий трафик, блокируя подозрительные запросы. Это помогает защитить приложение от атак на уровне приложений.
Пример настройки WAF в AWS:
1. Создайте WAF в консоли AWS.
2. Настройте правила для блокировки подозрительного трафика.
3. Привяжите WAF к вашему Application Load Balancer.
Регулярный мониторинг трафика помогает выявить аномалии и быстро реагировать на атаки.
Пример настройки мониторинга с помощью Prometheus и Grafana:
# Конфигурация Prometheus
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'web'
static_configs:
- targets: ['localhost:9090']
Обеспечьте достаточный запас ресурсов (процессор, память, сетевой канал) для обработки пиковых нагрузок.
Облачные провайдеры, такие как AWS, Google Cloud и Azure, предоставляют встроенные механизмы защиты от DDoS.
Пример настройки защиты в AWS:
1. Включите AWS Shield Standard для базовой защиты.
2. Для более серьезной защиты используйте AWS Shield Advanced.
Рассмотрим пример использования Rate Limiting в Spring Boot с помощью библиотеки Bucket4j:
import io.github.bucket4j.Bandwidth;
import io.github.bucket4j.Bucket;
import io.github.bucket4j.Bucket4j;
import io.github.bucket4j.Refill;
import org.springframework.web.bind.annotation.*;
import java.time.Duration;
@RestController
public class RateLimitController {
private final Bucket bucket;
public RateLimitController() {
Bandwidth limit = Bandwidth.classic(10, Refill.greedy(10, Duration.ofMinutes(1));
this.bucket = Bucket4j.builder()
.addLimit(limit)
.build();
}
@GetMapping("/api/resource")
public String getResource() {
if (bucket.tryConsume(1)) {
return "Resource data";
} else {
return "Too many requests";
}
}
}
Следование этим рекомендациям позволит вам минимизировать риски DDoS-атак и поддерживать стабильную работу вашего сервиса.