VDS · Безопасность

Атаки на машину: что делаем мы и что можете вы

Как выглядит атака на канал и на приложение, чем они отличаются, что можно настроить на своей стороне и как понять, что дело вообще не в атаке.

Обновлено 23 августа 2026 г.

Слово «атака» одинаково звучит в двух совершенно разных случаях: когда забивают канал мусорным трафиком и когда несколько сотен запросов в секунду кладут ваше приложение. Лечатся они по-разному, и первое, что нужно сделать, — понять, какой из случаев перед вами.

Отличить одно от другого

ПризнакЗабит каналПерегружено приложение
График трафика в «Обзоре»Упирается в потолокОбычные значения
ПроцессорНе загруженЗагружен полностью
SSHНе подключаетсяРаботает, но медленно
Логи веб-сервераПустоТысячи однотипных запросов

Смотрите графики процессора, памяти и трафика в «Обзоре» на /hosting/vds/<id> за сутки. Если трафик обычный, а процессор в полке — это нагрузка на приложение, и разбирать её нужно у себя.

Что можете сделать вы

Ограничение частоты запросов в nginx:

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;

server {
    limit_req zone=perip burst=20 nodelay;
    limit_conn conn 20;
    client_body_timeout 10s;
    client_header_timeout 10s;
}

Ограничение подключений в брандмауэре:

ufw limit 22/tcp

Более гибкие правила — в статье nftables: там же можно ограничить частоту новых соединений и держать список заблокированных адресов с временем жизни.

Найти источник в логах:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
ss -tn state established | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn | head

Разовая блокировка адреса или сети:

ufw deny from 203.0.113.0/24

Автоматизировать блокировку по логам умеет fail2ban.

Что делаем мы

Инфраструктура фильтрует мусорный трафик на подходе к узлу — до того, как он займёт вашу полосу. Это работает против объёмных атак на канал и не требует от вас настроек.

Чего защита узла не делает: она не разбирает логику вашего приложения. Запросы, которые внешне выглядят обычными, доходят до машины, и от них защищает только ваша настройка.

Если машина становится источником атаки — например, её взломали и она участвует в чужой рассылке, — доступ будет ограничен по правилам использования. Проверьте машину по признакам взлома.

Кеш и статика

Самый действенный приём против наплыва запросов — не считать одно и то же дважды:

location /static/ {
    expires 30d;
    add_header Cache-Control "public";
}

Тяжёлые страницы кешируйте на стороне приложения. Запрос, который обслуживается из кеша, стоит в сотни раз дешевле.

Частые ошибки

  • Ставить limit_req без burst — отсекаются обычные пользователи, у которых страница тянет два десятка файлов.
  • Блокировать адреса по одному вручную при распределённой атаке: их тысячи, вы не успеете.
  • Полностью запрещать ICMP — ломает согласование размера пакета, см. MTU.
  • Принимать за атаку собственную ошибку: цикл в коде, забытый обход каталога поисковым роботом, бесконечные повторы клиента.

Настраивайте ограничения заранее и на спокойной машине. Во время наплыва запросов подобрать значения rate и burst уже не получится: вы будете править конфиг вслепую и по частям.