惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
L
Lohrmann on Cybersecurity
Simon Willison's Weblog
Simon Willison's Weblog
P
Proofpoint News Feed
P
Privacy International News Feed
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
S
Securelist
P
Proofpoint News Feed
Recent Announcements
Recent Announcements
GbyAI
GbyAI
B
Blog RSS Feed
A
About on SuperTechFans
C
CXSECURITY Database RSS Feed - CXSecurity.com
Y
Y Combinator Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyberwarzone
Cyberwarzone
I
Intezer
T
Tor Project blog
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
aimingoo的专栏
aimingoo的专栏
Cisco Talos Blog
Cisco Talos Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
W
WeLiveSecurity
D
DataBreaches.Net
U
Unit 42
Project Zero
Project Zero
Martin Fowler
Martin Fowler
V
V2EX
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
C
Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V2EX - 技术
V2EX - 技术
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Threat Research - Cisco Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tenable Blog
F
Full Disclosure
T
The Exploit Database - CXSecurity.com
H
Heimdal Security Blog
Latest news
Latest news
Webroot Blog
Webroot Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Что происходит при DDoS и как отличить атаку от нагрузки
Гэри Сэлдон · 2026-06-25 · via Все публикации подряд на Хабре

Средний

9 мин

8

Почти каждый, кто админит VDS/VPS, хоть раз перезагружал сервер при DDoS-атаках или при подозрительно резком росте трафика. Это не помогает, ну а что ещё делать… Для того, чтобы этого не было, в статье под катом разберу, что происходит при разных видах DDoS, как правильно их диагностировать и с помощью чего можно отличить атаку от органического роста. 

Кто атакует в 2026 году и зачем

Начну с основ. DDoS-атака — это отправка большого количества запросов на ресурс, в результате чего может произойти прекращение работы ресурса («отказ в обслуживании» или DoS). 

Источники такой атаки можно разделить на две категории: 

  • Самые распространённые — это ботнеты из заражённых IoT-устройств (даже солнечных батарей) и роутеров. Сейчас в даркнете такую атаку на несколько часов можно купить за несколько долларов, при этом технические навыки для её организации не нужны.

  • Вторая по распространённости — организованные группы (конкуренты, вымогатели и хактивисты). Конкуренты атакуют перед пиковыми продажами, вымогатели сначала дудосят, а потом шлют письмо с требованием выкупа. В свою очередь, хактивисты атакуют политические сайты, СМИ, госсектор в основном по идеологическим мотивам.

Также за атаку можно принять обычную нагрузку. Например, конкурент мог запустить парсер без лимита, поисковый бот мог зависнуть на календаре с бесконечными страницами или вообще ваш партнёр мог встроить ваш виджет на страницу с миллионом просмотров. Про органические причины роста трафика рассказывать не буду, но и они бывают. 

Зачастую главная цель атаки на VDS — это веб-сервер, SSH, почтовый сервис, DNS или API-эндпоинт. То есть во всех случаях это конкретный сервис, но бывают и многовекторные атаки. Также иногда злоумышленники меняют цель в процессе, например, сначала бьют по 80-му порту, видят защиту, переключаются на 443-й, потом на API, а потом на поддомен. Это нормально, потому что они ищут самое слабое звено.

Виды DDoS-атак и что при них происходит

По данным Cloudflare, в 2025 году в мире было зафиксировано около 47,1 млн DDoS-атак (рост на 121% за год). Рекорд мощности единичной атаки достиг 31,4 Тбит/с — атака длилась всего около 35 секунд. Однако виды таких атак разнятся.

Объёмные атаки 

Это тот самый сценарий, который большинство представляет при слове DDoS. В этом случае на ваш IP льётся трафик, который превышает ширину канала VDS. Обычно это UDP-флуд, ICMP-флуд или DNS amplification (DNS-усиление). В такой атаке злоумышленник шлёт пакеты с поддельным source IP, и ваш сервер либо тратит CPU на обработку, либо канал забивается настолько, что легитимные пакеты просто не доходят.

На VDS такие атаки чаще всего фильтруются провайдером на уровне сети, потому что иначе страдают все соседи по стойке. Для понимания того, не была ли она узконаправленной, посмотрите на статистику интерфейса через:

ip -s link show eth0

Если проблема действительно на уровне сети, увидите огромный объём входящего трафика. Дополнительно могут расти счётчики dropped-пакетов. Также для быстрой оценки текущей картины удобно использовать:

iftop -i eth0

Грустная новость: проблема в этом случае вне вашей зоны ответственности, и самостоятельно отбить её невозможно. 

Атаки на протоколы

Эти атаки пытаются забить не канал, а внутренние механизмы ядра, поэтому тут для оценки используем:

ss -s

И проверяем состояние conntrack (таблицы записей о потоках, которую ведёт модуль nf_conntrack):

cat /proc/sys/net/netfilter/nf_conntrack_count 

cat /proc/sys/net/netfilter/nf_conntrack_max 

Дальше разберу по подвидам. При SYN-флуде атакующий отправляет SYN-пакеты с поддельными адресами источника. Для каждого такого запроса сервер выделяет ресурсы, отвечает SYN-ACK и ждёт завершающий ACK, который так и не приходит. В результате соединение остаётся в состоянии SYN-RECV до истечения таймаута (около 60 сек.).

Такая DDoS-атака заметна даже при небольшом потоке трафика. Если сервер получает 1000 SYN-пакетов в секунду, за минуту накапливается около 60 тыс. полуоткрытых соединений. Дальше в игру вступает подсистема conntrack.

На VDS с 2 ГБ оперативной памяти значение nf_conntrack_max зачастую составляет 131072 записей. При потоке 50–100 тысяч пакетов в секунду таблица может заполниться за несколько секунд. После этого ядро начнет отбрасывать новые пакеты, включая подключения пользователей. В этом случае в журнале можно увидеть nf_conntrack: table full, dropping packet.

При этом CPU может быть загружен меньше чем на 20 %, а процессы продолжат работать, но новые подключения уже не пройдут. Всё это из-за того, что отбрасывание происходит ещё на уровне сетевого стека. Для защиты можно (и нужно) использовать SYN cookies. Чтобы включить их, выполните команду:

sysctl -w net.ipv4.tcp_syncookies=1

Так настройка будет работать до первой перезагрузки. Для включения SYN cookies перманентно, нужно внести в конфиг /etc/sysctl.conf или в файл /etc/sysctl.d/: 

net.ipv4.tcp_syncookies = 1

И применить настройки. Если у вас будет включён tcp_syncookies, вместо хранения состояния для каждого полуоткрытого соединения ядро будет кодировать параметры подключения непосредственно в поле sequence number пакета SYN-ACK. Когда клиент пришлёт ACK, ядро проверит куки и восстановит состояние соединения. Однако полностью проблему такая защита не решает, ведь если узким местом стал сам conntrack, записи для отслеживания соединений всё равно продолжат создаваться.

При UDP-флуде протокол UDP не использует процедуру установления соединения и не хранит состояние в привычном для TCP виде. Однако conntrack по умолчанию всё равно пытается отслеживать UDP-потоки, и каждый пакет с уникальным набором адресов и портов создаёт новую запись в таблице. Проверить это можно через:

mpstat -P ALL 1

Или:

cat /proc/softirqs

Из-за отсутствия рукопожатий заполнение conntrack в этом случае происходит быстрее, чем при TCP-флуде. Если сервер не использует NAT и stateful-фильтрацию для UDP, отслеживание таких пакетов лучше отключить через NOTRACK.

ICMP-флуд устроен ещё проще. Тут сервер получает огромное количество ICMP Echo Request и вынужден обрабатывать их на уровне ядра. В большинстве случаев подобные атаки отсекаются ещё на стороне провайдера, поэтому владельцы виртуалок сталкиваются с ними сравнительно редко.

Атаки на уровне приложений (L7-атаки) 

В этом случае происходит TCP-рукопожатие, а также есть корректный HTTP-запрос, но… с вредоносной семантикой. Такие атаки проходят через защиту транспортного уровня и падают уже на вашем сервере, поэтому сетевые метрики тут уже не помогут, нужно открывать логи приложения и веб-сервера. Первое, что стоит проверить:

tail -f /var/log/nginx/access.log

И:

tail -f /var/log/nginx/error.log

Если нужно быстро понять, какие URL получают больше всего запросов, поможет:

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

А для анализа трафика в реальном времени удобно использовать:

goaccess /var/log/nginx/access.log

Самый распространённый вариант L7-атаки — HTTP-флуд. В этом случае бот отправляет вполне валидные GET- или POST-запросы на ресурсоёмкие эндпоинты. Каждый такой запрос занимает процессорное время, обращается к базе данных и может создавать дополнительную нагрузку на диск. 

Другой популярный сценарий — Slowloris. Тут атакующий открывает множество соединений и начинает отправлять HTTP-заголовки чрезвычайно медленно, иногда буквально по одному байту каждые несколько секунд. nginx продолжает ждать завершения заголовков и удерживает соединение открытым. 

Посмотреть количество активных соединений можно тут:

ss -tan | grep ESTAB | wc -l

А более подробную картину покажет:

ss -tnp

При Slowloris обычно видно большое количество соединений в состоянии ESTABLISHED, которые существуют долгое время, но практически не передают данные.

Похожим образом работает атака RUDY (R-U-Dead-Yet). Однако в этом случае бот отправляет не заголовки, а тело POST-запроса. Сначала сервер получает огромный Content-Length и готовится принять большой объём данных, после чего злоумышленник начинает передавать тело запроса крайне медленно. В результате веб-сервер или приложение продолжают ждать оставшиеся данные и удерживают ресурсы занятыми.

Есть и обратная техника под названием Slow Read. Здесь запрос отправляется быстро и без ошибок, но клиент начинает чрезвычайно медленно читать ответ сервера. Из-за этого соединение остаётся открытым, а сервер продолжает хранить данные в буферах и обслуживать клиента, который фактически ничего не делает.

Найти проблему можно и по косвенным признакам. Например, в логах nginx могут появляться очень большие значения request_time, один и тот же URL будет получать непропорционально много запросов, а нагрузка на приложение расти быстрее, чем количество пользователей.

Amplification и reflection

В этом случае ваш сервер становится промежуточным звеном в атаке на кого-то другого. Атакующий шлёт запрос с поддельным source IP на открытый DNS/NTP/SSDP, и тот отвечает жертве. На VDS этот вид атак можно обнаружить по всплеску исходящего трафика: 

iftop -i eth0

После проверьте, какой процесс генерирует трафик:

nethogs

Полезно также оценить статистику интерфейса:

ip -s link show eth0

И накопленные объёмы передачи данных:

vnstat -i eth0

Лечится такая атака закрытием порта на файрволе или отключением сервиса. 

Сканеры 

Отдельно упомяну сканеры. Массовое сканирование портов и веб-приложений также принимают за DDoS-атаку, особенно если сервер новый или админ впервые смотрит логи. У таких ботов нет цели «положить» ваш сервис, они ищут открытые сервисы, панели управления и разные уязвимости.

В этом случае в логах вы увидите большое количество коротких соединений или запросов к типовым URL вроде /wp-admin, /phpmyadmin и /.env. Нагрузка и потребление ресурсов при этом будут низкие. 

Как отличить атаку от нагрузки

Начинайте с TCP-состояний (команда ss -s). При нормальной нагрузке соотношение ESTAB к другим состояниям будет 10:1 и выше. При SYN-флуде SYN-RECV взлетает до тысяч. При Slowloris и других L7-атаках будет высокий ESTAB, но не будет пользовательского трафика. Дальше смотрите conntrack (команда выше). 

В нормальной ситуации текущее количество записей редко превышает несколько процентов от лимита. При SYN-флуде это соотношение стремится к 100%. Также помните, что каждая запись занимает примерно 300–400 байт памяти, поэтому бесконтрольное увеличение nf_conntrack_max на небольших VPS часто заканчивается OOM Killer. 

Дальше смотрим на интерфейсные счётчики:

ip -s link show eth0 

При пакетном флуде увидите рост RX dropped. При обычной нагрузке объёмы входящего и исходящего трафика будут симметричны. 

Также полезно заглянуть и в сообщения самого ядра: 

journalctl -k

Или:

dmesg

Там можно встретить подсказки вроде «nf_conntrack: table full, dropping packet» или «possible SYN flooding on port».

Если же система начала испытывать нехватку памяти, в журнале появятся сообщения OOM Killer с указанием завершённого процесса и объёма занятой памяти. 

Хорошо помогает и анализ загрузки CPU по типам времени: 

mpstat -P ALL 1

При сетевом флуде растёт системное время sy (пользовательское us остаётся низким). Всё из-за того, что процессор занят обработкой пакетов и softirq. Во время L7-атак пользовательское время растёт вместе с нагрузкой на nginx, PHP, Python или другое приложение.

Много информации даёт и распределение соединений по IP-адресам.

ss -tan | awk 'NR>1 {split($5,a,":"); print a[1]}' | sort | uniq -c | sort -nr | head

При обычном трафике будет длинный хвост из большого количества адресов, и лишь немногие из них создают десятки соединений одновременно. Во время DDoS-атаки или несколько адресов создают тысячи подключений каждый, или, наоборот, появляются тысячи IP с одним-двумя соединениями.

Окончательно разобраться помогают HTTP-метрики и access-логи:

tail -f /var/log/nginx/access.log

Если один и тот же URL внезапно начинает получать тысячи запросов с одинаковым User-Agent, это 100% бот. Также на это указывает всплеск ошибок 400 Bad Request или большое количество ответов с кодом 499.

И помните, органический трафик отличителен пользовательским поведением. Боты примитивны, поэтому бесконечно обращаются к одному URL, игнорируют статические ресурсы или перебирают страницы по шаблону.

Также для оценки можно использовать утилиты: 

  • tcpdump — консольный сниффер пакетов. Показывает, какие пакеты приходят на сервер, и помогает найти источники SYN flood, UDP flood или другого подозрительного трафика. 

  • Wireshark — графический анализатор pcap-файлов. Полезен, когда нужно детально разобрать трафик после инцидента и посмотреть содержимое пакетов вплоть до прикладного уровня.

  • iftop — показывает самые активные соединения в реальном времени. Особенно удобен в ситуациях, когда нужно быстро понять, кто сейчас забивает канал.

  • nload отображает текущие объёмы входящего и исходящего трафика и позволяет за несколько секунд понять, есть ли аномальный всплеск нагрузки. 

  • nethogs — группирует сетевую активность по процессам.

  • mtr — гибрид ping и traceroute. Полезен, когда нужно понять, проблема находится на сервере или где-то по пути до него.

  • vnStat — демон учёта трафика по интерфейсам с накоплением. Покажет, когда начался аномальный рост.

  • Suricata — работает как IDS/IPS-система и умеет находить известные паттерны атак по сигнатурам.

  • CrowdSec — анализирует логи сервисов, выявляет подозрительную активность и автоматически блокирует источники атак. 

  • bcc-tools — предоставляет набор утилит на базе eBPF для глубокой диагностики ядра.

И как обычно рекомендую Netdata. После её установки сервер получает веб-интерфейс с графиками conntrack, TCP-состояний, сетевых ошибок, загрузки CPU и десятков других метрик. Наконец, никуда не делись iptables и nftables. 

Важно!

DDoS начинается с роста conntrack_count, поэтому смотрите метрики до того, как таблица заполнится. Чем раньше вы заметите атаку, тем меньше времени потеряете на перезагрузки и догадки.

Делитесь в комментариях, как понимали, что вас дудосят, и что делали потом. 

© 2026 ООО «МТ ФИНАНС»