Что такое DDoS?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
DDoS атаки и защита
DDoS (Distributed Denial of Service) — это кибератака, при которой множество скомпрометированных компьютеров, часто объединённые в ботнет, направляют огромное количество трафика на целевой сервер, делая его недоступным для легитимных пользователей.
Отличие DoS от DDoS
DoS (Denial of Service) — атака с одного источника:
# Простой DoS — одна машина отправляет запросы
import requests
while True:
requests.get("http://target.com") # Один источник атакует
DDoS — атака с множества источников одновременно, что делает её намного опаснее.
Типы DDoS атак
1. Volume-based атаки (Volumetric)
Цель — перегрузить канал связи.
Ботнет (10000+ скомпрометированных машин)
|
├─→ Запрос 1
├─→ Запрос 2
├─→ Запрос 3
└─→ Запрос N (гигабиты трафика)
↓
Сервер жертвы
↓
(Overflow → Offline)
Примеры:
- UDP flood — отправка огромного количества UDP пакетов
- DNS amplification — использование DNS серверов для усиления атаки
- ICMP flood — перегрузка ICMP пакетами (ping)
2. Protocol-based атаки
Цель — эксплуатировать уязвимости в сетевых протоколах.
# Пример: SYN flood — перегрузка TCP handshake
# Нужно отправить столько SYN пакетов, чтобы истощить очередь подключений
# В операционной системе есть лимит на одновременные подключения
# (обычно в файле /proc/sys/net/ipv4/tcp_max_syn_backlog)
# Сервер пытается ответить на все SYN, но его ресурсы истощаются
3. Application-layer атаки
Цель — перегрузить приложение на уровне HTTP.
# DDoS на уровне приложения — запросы выглядят легитимными
import asyncio
import aiohttp
async def attack(target_url):
async with aiohttp.ClientSession() as session:
while True:
# Обычный HTTP запрос, но в огромных масштабах
async with session.get(target_url) as resp:
await resp.text()
# Тысячи botnet узлов делают такие запросы одновременно
Примеры:
- HTTP flood — огромное количество HTTP запросов
- Slowloris — держит медленные соединения открытыми
- Cache busting — запросы к разным URL параметрам для обхода кеша
Защита от DDoS
1. На уровне сетевой инфраструктуры:
Internet
|
DDoS Protection Service
(CloudFlare, AWS Shield, etc.)
|
(Traffic filtering)
|
Легитимный трафик →
Ваш сервер
- Rate limiting — ограничение количества запросов с одного IP
- IP blacklisting — блокировка известных botnet IP адресов
- Geographic filtering — блокировка трафика из определённых стран
- Anycast routing — распределение трафика через сеть серверов
2. На уровне приложения:
# Flask пример с rate limiting
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
limiter = Limiter(
get_remote_address,
default_limits=["200 per day", "50 per hour"]
)
@app.route("/api/data")
@limiter.limit("5/minute")
def get_data():
return {"data": "..."}
3. На уровне инфраструктуры:
# Nginx конфиг для защиты от DDoS
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api burst=20;
proxy_pass http://backend;
}
}
4. Мониторинг и алерты:
import time
from collections import defaultdict
class DDoSDetector:
def __init__(self, threshold=100, window=60):
self.requests_per_ip = defaultdict(int)
self.window = window
self.threshold = threshold
self.last_reset = time.time()
def check_request(self, ip_address):
now = time.time()
# Сбросить счётчик каждую минуту
if now - self.last_reset > self.window:
self.requests_per_ip.clear()
self.last_reset = now
self.requests_per_ip[ip_address] += 1
# Alert если IP отправляет слишком много запросов
if self.requests_per_ip[ip_address] > self.threshold:
return False # Block this IP
return True
Реальные примеры
- GitHub 2018 — 1.3 Tbps DDoS (GitHub временно был недоступен)
- Дин DDoS 2020 — 809 Gbps (рекорд на то время)
- Cloudflare 2014 — 400 Gbps на своей инфраструктуре
Итоги
Для Python разработчика важно понимать:
- DDoS это реальная угроза — защищайте свои приложения
- Rate limiting обязателен — применяй на всех публичных endpoints
- Используй CDN и защиту — CloudFlare, AWS Shield, Yandex DDoS Protection
- Мониторь трафик — устанавливай алерты на аномалии
- Планируй масштабирование — load balancing и автоскейлинг помогут выдержать пики
Python разработчик должен писать code, но понимать и сетевую безопасность.