Защищаемся от DDOS-атаки за 15 центов в сутки
История про то, как Cloudflare и Beget спасали от DDos-атаки маленький блог с отзывами на Вордпрессе. Или как спастись от ДДоса, если у вас нет ни админа, ни денег.
Привет, меня зовут Дмитрий, и у меня есть маленький бложик про грузоперевозки, который сделан на коленке: вордпресс, стандартный шаблон + самый дешёвый тариф хостинга на Бегете.
Дисклеймер: я не админ и не технический специалист – всего лишь блогер. Всё, что я знаю про ДДос и веб-серверы – я нагуглил в день ДДоса. Поэтому если увидите в статье технические ошибки – извините.
Из более-менее известных компаний-грузоперевозчиков в блоге указаны Газелькин, Грузовичкофф, Деликатный переезд, ну и ещё штук 30 менее известных. Посетители пишут отзывы, ставят лайки, дизлайки, никакой монетизации нет. Какая-то посещаемость появилась в тот момент, когда статья «Квартирный переезд» внезапно заняла первое место в Яндексе в Санкт-Петербурге. На сайте открыл «официальное представительство» Грузовичкофф, некоторые компании стали присылать заказные хвалебные отзывы, в общем, появилась активность.
DDOS часть 1: атака китайцев
В один прекрасный майский день от Бегета приходят три письма: «на вашем сайте большая нагрузка», потом «ваш сайт ДДосят», а потом «мы вам временно отключили все плюшки и картинки, переезжайте на Cloudflare». Сайт открывается без картинок, без CSS, просто текст. Делать нечего, переезжаю на Cloudflare. Это оказалось очень просто - регистрируешься на бесплатном тарифе, меняешь NS-записи, включаешь кнопку «Меня атакуют» и готово. Через 6 часов сайт уже работал, да и ddos к тому времени кончился. Я добавил атакующие китайские и индийские IP в черный список, выключил режим «Меня атакуют» и на этом первая атака завершилась. В пике было что-то около 90 000 запросов в час.
Сколько стоит DDOS?
Я решил погуглить, сколько же стоит такое удовольствие. В интернете пишут, примерно от 50$ в час за простой ddos, и от 400$ в час за сайт, защищенный анти-ддос системой. Хммм, подумал я, надо немедленно оповестить весь мир, что сайт защищен, чтобы в будущем заказчику такая атака стоила подороже.
Я был уверен, что мамкины хакеры просто пожалеют деньги, ведь мы говорим о маленьком неизвестном бложике на вордпрессе – ну какой дурак будет его атаковать за 400$ в час? Но, к сожалению, это были только цветочки, настоящая жесть только предстояла.
DDOS часть 2: ополчился весь мир
Снова приходит сообщение от Бегета, на этот раз «Ваш сайт переезжает на другой сервер, потому что ну сколько можно». Захожу в Cloudflare: 65 миллионов запросов за час в пике.
Карта распределения атак: запросы идут вообще со всей планеты.
Делать нечего – снова включаю режим «Меня атакуют», в этом режиме 5-секундная капча показывается всем посетителям. Настраиваю фаервол – просто вручную добавляю все страны и айпишники, с которых идёт атака, чтобы Cloudflare их отсекал: На это ушел примерно час.
Включаю кэш: У Клаудфлэра есть бомбическая фича: Always Online. Это значит, что даже если ваш хостинг лёг, то Клаудфлэр будет показывать посетителям то, что сохранено в кэше. Кстати, если после переезда на клаудфлэр что-то не работает на сайте – скорее всего, надо просто почистить кэш и всё станет хорошо.
«Но это же бесплатные опции, за что ты платишь 15 центов в сутки, Дима?»
Включаем Rate Limiting
Дело в том, что фильтрация по IP и странам не спасает полностью – часть атак идёт из России, и тут уже по айпи страну не отключишь. Rate limiting отсекает все запросы, которые соответствуют определенному паттерну: например, «чаще, чем 3 запроса в секунду», или «чаще, чем 10 запросов в минуту».
Таким образом, клаудфлэр отсекает все запросы, которые подпадают под шаблон, а платишь ты только за те запросы, которые не похожи на ДДос. Стоимость – 5 центов за 10 000 незаблокированных (честных) запросов.
The first 10,000 billable requests across all your websites are free. You will then be charged $0.05 per 10,000 requests thereafter. (цитата из инструкции Cloudflare)
У меня за сутки в самый лютый пик ДДоса набиралось не больше 30 000 «честных» запросов, что примерно и соответствует 15 центам.
И, кстати, я даже не оплатил ещё и эти запросы, потому что счёт выставляется раз в месяц, т.е. можно защищаться от атаки в рассрочку. После этого я написал в техническую поддержку Бегета, с сайта сняли все ограничения, всё стало работать так, будто никакого ддоса и нет. Ещё примерно сутки продолжалась массированная атака, после чего ддос перешел в режим атаки раз в несколько часов.
На сегодняшний день примерно раз в сутки наблюдается всплеск в 38 000 запросов, видимо это какой-то «прозвон» на тему «а вдруг сработает»
Из последствий атаки – из поиска выпало 2 страницы – видимо, в момент ддоса Яндекс обходил сайт, но уже всё вернулось.
Краткая инструкция
Итак, ваш маленький сайт ддосят:
1. Зарегистрируйтесь на Cloudflare
2. Включите режим «Меня атакуют»
3. Сообщите об этом в техподдержку хостинга и настройте NS-записи
4. Включите фильтр по IP и странам
5. Включите кэш
6. Включите rate limiting
7. Если всё работает как надо и Clouflare справляется с атакой – выключите режим «Меня атакуют».
На этом всё.
Апдейт №1
Спасибо пользователю с ником Слон за фидбэк!
Типичный шаблон вордпресс может означать от 50 до 150 запросов при первом посещении.
Да, это действительно так, и на этот счёт есть два соображения
- кэширующий плагин w3 total cache умеет объединять css и js в один большой файл, таким образом это сокращает количество запросов. Что я и настроил.
- инженеры Cloudflare говорят, что Rate Limiting считает только те запросы, которые не может кэшировать - а по умолчанию он кэширует все картинки, скрипты и цсс-ки. Таким образом, из условных 50 запросов при одном обращении к сайту считаются ~10, а не все 50, в зависимости от того всё ли закэшировалось. Опытным путём я подобрал значение 30 запросов, которое позволяет обычным юзерам спокойно пользоваться сайтом.
Из-за скрипта Бегета, который отсекает юзеров без javascript, Cloudflare неправильно кэширует иногда сайт, что выглядит так:
https://cloud.mail.ru/public/Euhj/2LKEbgE1S
Я проверял с нескольких IP свой сайт и не знал о такой проблеме. А оно вон как бывает. Общаемся с Бегетом сейчас.
Бегет так себе хостинг с дурацкими лимитами. За меньшие деньги можно ruweb использовать. Из минусов - старые версии php, из плюсов - доступны все ресурсы сервера и запросы обрабатываются очень быстро.
В свое время при 100к трафика в сутке тариф за 600 рублей справлялся без проблем.
Ihor также неплохой хостинг с недорогими vps, за шаред ничего не скажу, так как не пробовал.
Чтобы вордпресс нормально работал на шареде, нужно поставить кеш обьектов, а ля Em object cache, а также включить opcache. Конкатинацию скриптов можно делать autoptimize.
> кэширующий плагин w3 total cache умеет объединять css и js в один большой файл, таким образом это сокращает количество запросов.
Есть экспойт, который кладет сайт на wordpress, исключительно благодаря кеширующему плагину. Я бы рекомендовал проверять не написаны ли эксплойты к плагинам, которые вы устанавливаете..
Неа, выходит не очень.
https://cloud.mail.ru/public/Euhj/2LKEbgE1S
Вообще один запрос – это один файл с сайта. Типичный шаблон вордпресс может означать от 50 до 150 запросов при первом посещении. Поэтому 9/минуту это заградительный порог, прокатит для статической страницы без графики, если там условно 1 хтмл и 1 цсс файл. А так надо повышать этот уровень, и цена выйдет совсем не 15 центов в сутки.
Комментарий удалён модератором