Атаки на машину: что делаем мы и что можете вы
Как выглядит атака на канал и на приложение, чем они отличаются, что можно настроить на своей стороне и как понять, что дело вообще не в атаке.
Обновлено 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уже не получится: вы будете править конфиг вслепую и по частям.