Сайт под атакой ботов: что делать прямо сейчас
Короткая инструкция для ситуации, когда разбираться некогда: сайт тормозит или лёг, и подозрение на ботов.
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. В момент аварии искать их некогда.
Заведите выключатель. Возможность отключить защиту одним действием нужна не меньше, чем сама защита: если правило окажется неудачным, вы должны уметь его снять за секунды.
Настройте оповещение. Всплеск нагрузки или доли блокировок должен приходить вам сам, а не обнаруживаться утром.
Читайте также
- Белые списки: что в них заносить и как не забыть Самая скучная часть настройки и самая полезная. Что заносить, в каком виде и почему пути надёжнее адресов.
- Семь ошибок при настройке защиты от ботов Каждая из них выглядит разумно в момент настройки и обнаруживается спустя недели, когда убытки уже посчитаны.
- Как посчитать долю ботов на своём сайте Средние цифры по рынку бесполезны: доля ботов зависит от тематики и от того, кому вы интересны. Как получить свою цифру, а не среднюю по рынку.