Защищаемся от DDOS-атаки за 15 центов в сутки

История про то, как Cloudflare и Beget спасали от DDos-атаки маленький блог с отзывами на Вордпрессе. Или как спастись от ДДоса, если у вас нет ни админа, ни денег.

Привет, меня зовут Дмитрий, и у меня есть маленький бложик про грузоперевозки, который сделан на коленке: вордпресс, стандартный шаблон + самый дешёвый тариф хостинга на Бегете.

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

Из более-менее известных компаний-грузоперевозчиков в блоге указаны Газелькин, Грузовичкофф, Деликатный переезд, ну и ещё штук 30 менее известных. Посетители пишут отзывы, ставят лайки, дизлайки, никакой монетизации нет. Какая-то посещаемость появилась в тот момент, когда статья «Квартирный переезд» внезапно заняла первое место в Яндексе в Санкт-Петербурге. На сайте открыл «официальное представительство» Грузовичкофф, некоторые компании стали присылать заказные хвалебные отзывы, в общем, появилась активность.

DDOS часть 1: атака китайцев

В один прекрасный майский день от Бегета приходят три письма: «на вашем сайте большая нагрузка», потом «ваш сайт ДДосят», а потом «мы вам временно отключили все плюшки и картинки, переезжайте на Cloudflare». Сайт открывается без картинок, без CSS, просто текст. Делать нечего, переезжаю на Cloudflare. Это оказалось очень просто - регистрируешься на бесплатном тарифе, меняешь NS-записи, включаешь кнопку «Меня атакуют» и готово. Через 6 часов сайт уже работал, да и ddos к тому времени кончился. Я добавил атакующие китайские и индийские IP в черный список, выключил режим «Меня атакуют» и на этом первая атака завершилась. В пике было что-то около 90 000 запросов в час.

регистрируемся на cloudflare

Сколько стоит DDOS?

Я решил погуглить, сколько же стоит такое удовольствие. В интернете пишут, примерно от 50$ в час за простой ddos, и от 400$ в час за сайт, защищенный анти-ддос системой. Хммм, подумал я, надо немедленно оповестить весь мир, что сайт защищен, чтобы в будущем заказчику такая атака стоила подороже.

Картинка, призванная отпугнуть хакеров

Я был уверен, что мамкины хакеры просто пожалеют деньги, ведь мы говорим о маленьком неизвестном бложике на вордпрессе – ну какой дурак будет его атаковать за 400$ в час? Но, к сожалению, это были только цветочки, настоящая жесть только предстояла.

DDOS часть 2: ополчился весь мир

Снова приходит сообщение от Бегета, на этот раз «Ваш сайт переезжает на другой сервер, потому что ну сколько можно». Захожу в Cloudflare: 65 миллионов запросов за час в пике.

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 центам.

заблокировано 6.5 млн атак за час
оплате подлежит 20 000 запросов, стоимость составляет 10 центов

И, кстати, я даже не оплатил ещё и эти запросы, потому что счёт выставляется раз в месяц, т.е. можно защищаться от атаки в рассрочку. После этого я написал в техническую поддержку Бегета, с сайта сняли все ограничения, всё стало работать так, будто никакого ддоса и нет. Ещё примерно сутки продолжалась массированная атака, после чего ддос перешел в режим атаки раз в несколько часов.

На сегодняшний день примерно раз в сутки наблюдается всплеск в 38 000 запросов, видимо это какой-то «прозвон» на тему «а вдруг сработает»

Из последствий атаки – из поиска выпало 2 страницы – видимо, в момент ддоса Яндекс обходил сайт, но уже всё вернулось.

220 миллионов атак за сутки

Краткая инструкция

Итак, ваш маленький сайт ддосят:

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 свой сайт и не знал о такой проблеме. А оно вон как бывает. Общаемся с Бегетом сейчас.

0
6 комментариев
Написать комментарий...

Комментарий удален модератором

Развернуть ветку
Bond

Бегет так себе хостинг с дурацкими лимитами. За меньшие деньги можно 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 центов в сутки.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Слон Петрович

У вас их 64. Вот что получается с девятью – остальное обрезается, плюс любое нажатие на ссылку ведет пользователя в часовой бан:

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Слон Петрович

На ддосе много денег накрутит. Реально вам надо про аккаунт за 20 долларов, который позволит страны в фаерволл вносить, и Россию в белый список (на белый список rate limiting не распространяется), а после этого понизить до 2/минуту или сколько там минимум.

Ответить
Развернуть ветку
Рома Терехин

Поставьте в фаерволе Блок или Challenge капчу на атакующие страны, либо выносите всю статику сайта на поддомен с жестким кэшированием, RL обычно используют для api, где можно точно определить нужные рамки. Только что 3 клика по ссылкам на сайте без особой спешки и улетел в бан.

Ответить
Развернуть ветку
3 комментария
Раскрывать всегда