BotBan

Сайт под атакой ботов: что делать прямо сейчас

Короткая инструкция для ситуации, когда разбираться некогда: сайт тормозит или лёг, и подозрение на ботов.

3 мин чтения

Если сайт лежит прямо сейчас, читайте по порядку и не отвлекайтесь на теорию.

1. Понять, боты ли это

Загляните в логи:

tail -n 5000 /var/log/nginx/access.log | awk '{print $1}' \
  | sort | uniq -c | sort -rn | head -10

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

Проверьте заодно, что это не поисковый робот: обвал от внезапного обхода крупным краулером бывает.

awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head

2. Закрыть самое горячее

Если виновников единицы, закройте их на уровне сервера:

deny 203.0.113.7;
deny 198.51.100.0/24;

Перед этим проверьте, кому принадлежит сеть. Диапазон мобильного оператора закрывать нельзя: за ним стоят тысячи живых абонентов.

Если долбятся в конкретный путь, закройте путь целиком:

location = /xmlrpc.php { deny all; }

3. Снять нагрузку с базы

Часто сайт кладут не количеством запросов, а их тяжестью: поиск по каталогу, фильтры, сортировки. Временно отключите тяжёлые страницы для неавторизованных или включите агрессивное кэширование.

4. Не блокировать всё подряд

Соблазн закрыть половину интернета в такой момент велик. Три вещи, которые делать не стоит даже в панике.

Не закрывайте по географии. Ваши покупатели окажутся снаружи, а серьёзный бот ходит с российских адресов.

Не блокируйте поисковых роботов. Проверьте обратным DNS, прежде чем трогать что-то, похожее на Googlebot или YandexBot. Восстановление позиций займёт месяцы.

Не ставьте капчу на всё. Она отсекает и покупателей, а серьёзного бота не остановит.

5. Разобраться, когда отпустит

Когда сайт снова дышит, вернитесь к вопросу «почему это стало возможно». Обычно причин две.

Первая: до сайта доходит всё подряд, и фильтрации нет вовсе. Вторая: фильтрация есть, но реагирует только на явное — например, по списку User-Agent, который бот меняет за минуту.

Устойчивое решение — считать поведение, а не адреса: темп, соотношение запросов к страницам и к картинкам, последовательность путей. Тогда смена адреса не помогает.

6. Подготовиться к следующему разу

Держите под рукой команды из шага 1. В момент аварии искать их некогда.

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

Настройте оповещение. Всплеск нагрузки или доли блокировок должен приходить вам сам, а не обнаруживаться утром.

Читайте также