Сети и протоколы
Сетевая безопасность: пережить эшелонированный DDoS
Читать про defense in depth — не то же самое, что держать сервис на ногах, пока его атакуют. Постройте небольшую мишень, загоните её в перегрузку реалистичной L7-атакой и добавляйте слои юнита по одному — измеряя, что реально даёт каждый слой, прежде чем добавить следующий.
Превратите эшелонированную модель юнита в воспроизводимый цикл: инструментируйте сервис, воспроизведите атаку, обходящую наивные per-IP лимиты, затем добавляйте rate limiting, тюнинг WAF и adaptive concurrency в порядке приоритета — проверяя каждый слой числами до/после при идентичной нагрузке.
Возьмите небольшой HTTP-сервис с одним дорогим кэшируемым эндпоинтом и удержите p99-латентность под целью, а origin живым под распределённым L7-flood с обходом кэша — не просто докупив 10x ёмкости — доказывая каждый слой защиты измерениями.
- Таблица до/после: cache-hit rate, пик in-flight origin, rate 503, p99 легитимных запросов, измеренные при одной нагрузке — не на глаз.
- Доказательство, что per-IP rate limiting в одиночку проваливается против распределённой атаки (зазор показан, а не предположен), и что adaptive concurrency его закрывает.
- Измеренный rate ложных срабатываний WAF/эвристики на легитимном трафике, с заявленным решением, работает ли он в режиме блокировки или детектирования и почему.
- Абзац-разбор: какой слой остановил какой вариант атаки, в каком порядке вы их добавляли и почему adaptive concurrency оказался слоем, реально спасшим origin.
- Добавьте измерение SYN-flood: включите tcp_syncookies и покажите, что хост выживает под спуфнутым SYN-flood, который роняет легитимные соединения с выключенными cookies.
- Добавьте on-call runbook: пять сигналов, пороги эскалации (rate запросов 10x базовой линии, cache-hit ниже 80% при всплеске, падение энтропии source-IP) и порядок дёргания каждого рычага.
- Добавьте mTLS между edge и origin, чтобы origin принимал соединения только от идентичности edge, и покажите, что атака напрямую на origin отвергается на handshake.
- Смоделируйте экономику атаки: оцените стоимость атакующего (аренда ботнета) против стоимости вашей защиты с общим edge и без него и напишите абзац-аргумент, почему защита в одиночку проигрывает.
Это цикл, который вы проходите в каждом реальном DDoS-инциденте: сначала инструментируйте, воспроизведите атаку, обходящую наивную защиту, затем добавляйте слои по приоритету — поглощение на edge, rate limiting, WAF, adaptive concurrency — измеряя, что даёт каждый, прежде чем добавить следующий. Закрепляющийся урок: per-IP rate limiting проваливается против распределённого flood с обходом кэша, а слой, реально спасающий origin, — это adaptive concurrency, реагирующий на реальную перегрузку. Сделав это однажды на игрушечном сервисе, вы превращаете продакшн-версию в мышечную память.