Andrey Zagoruiko
16 278

Как бороться с DDOS'ом: наш опыт

На протяжении последних 10-12 дней многие заметили перебои в работе с нашим сайтом. Причиной этого стала DDOS атака, которой подверглись не только мы, но и ряд медийных коллег. Приносим извинения всем тем, кто не смог своевременно открыть ту или иную статью - хоть мы и старались решать проблемы оперативно, ряд просчетов в выборе решения доставил определенные неудобства как читателям так и нам.

Хотелось бы вкратце описать наш опыт, возможно это пригодится тем, кому DDOS только предстоит, и по возможности коллективно обсудить оптимальные средства профилактики (в комментариях).


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

В общем случае DDOS (по-простому "дедос") - атака, во время которой злоумышленники атакуют ваш сервер (выделенный, облачный или виртуальный) большим количеством запросов, обработка которых отбирает драгоценные ресурсы у сервера, который в свою очередь не может обслужить обычных посетителей. Я не являюсь техническим специалистом и надеюсь, что профессионалы с пониманием отнесутся к упрощениям и простят неточности формулировок.

Как только мы узнали, что нас атакуют (типичная атака, в зависимости от того, откуда вы на нее смотрите, может выглядеть примерно так, как на скриншоте ниже), мы сразу начали искать доступные и быстрые варианты решения. Первым в поле зрения попал сервис Cloudflare - западный комбайн, который не только защищает от DDOS-атак, но и предлагает кучу других вещей вроде CDN, кэширования, оптимизирования, ускорения и тд.


Мы оперативно купили план за $200 в месяц, настроили все DNS-сервера и стали ждать. У CF есть какое-то подобие аналитики и статистики, но по мнению экспертов она не всегда показывает то, что нужно и доверять этим графикам можно не всегда.


Не буду вдаваться в детали, но решение от Cloudflare ситуацию не исправило. Во-первых, некоторые IP-адреса CF забанены в России Роскомнадзором и сайт случайным образом оказывается недоступен из разных точек страны. Во-вторых, более-менее внятная (но не 100%) защита от DDOS на не самой защищенной платформе Wordpress достигается в случае включения всех настроек на максимум, при которых каждому посетителю сайта показывается вот такое окно, которое на некоторых устройствах после обещанных пяти секунд не пропадает:


В-третьих, разнообразное ускорение и кэширование CF не всегда гладко работало с кэшем в WP, и это тоже доставило немало сложных моментов в разработке и верстке сайта.

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

Получивший недавно $15M сервис, который специализируется на хостинге Вордпресса привлек внимание бурной прессой и широкими возможностями.



К сожалению, позитивные впечатление остались только от напора и профессионализма сейлзов WPEngine. Из-за нашего трафика (3M просмотров, 700K уникальных посещений в месяц) мы попали под непростой тарифный план "Let's talk", в результате чего нам насчитали порядка $2500 в месяц, при том, что для "ускорения работы и защиты от серьезных атак" все равно пришлось бы, по словам саппорта, пользоваться еще и платным тарифом Cloudflare.

С налетом легкого отчаяния пришлось обратиться к последнему варианту - QRATOR.

С самого начала атак я консультировался у нашего хостинг-провайдера Selectel, и QRATOR стоял в списке возможных вариантов, но был отброшен как "слишком дорогой".
Пословица "скупой платит дважды" в нашем случае звучала как "скупой платит трижды и две недели панически смотрит на падающие сервера".

После заведения аккаунта в QRATOR, обновления DNS, защита заработала, но все равно некоторые посетители видели уже привычные читателям ЦП 502 ошибку



К счастью, после оперативой консультации с техническими специалистами QRATOR выяснилось, что проблема возникала на стороне сервера, который настраивался 3-4 различными профессионалами с разным уровнем подготовки. После внесения нужных правок в iptables, донастройки конфигурации nginx и еще нескольких таинственных для стороннего наблюдателя действий все стало работать как часы.

Вот так, например, выглядит наша, по словам специалистов QRATOR, "детская" DDOS-атака:



А вот так выглядит уже что-то более изобретательное:



Хотелось бы заметить, что в последнее время DDOS-атакам стали подвергаться многие медийные ресурсы совершенно разных размеров.

TJournal:


Roem, Lifehacker.ru, 2ch.hk, Ведомости, и другие.

Без работы QRATOR явно не останется.

Отдельное спасибо за помощь в борьбе с DDOS Василию Борисову (Selectel), Александру Лямину, Артему Гавриченкову, Александру Зубкову (все - QRATOR), Константину Ковшенину (Automattic) и Илье Чекальскому (TJournal).

PS: Ведомости:

#хакеры #ддос #защита #вордпресс #дедос #как_защититься_от_ддос #атаки #атака_аниматоров_на_медиа #аниматоры_в_атаке #имя_им_легион #задудосили #1000000_гигабит #qrator #cloudflare

{ "author_name": "Andrey Zagoruiko", "author_type": "self", "tags": ["\u0445\u0430\u043a\u0435\u0440\u044b","\u0434\u0434\u043e\u0441","\u0437\u0430\u0449\u0438\u0442\u0430","\u0432\u043e\u0440\u0434\u043f\u0440\u0435\u0441\u0441","\u0434\u0435\u0434\u043e\u0441","\u043a\u0430\u043a_\u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c\u0441\u044f_\u043e\u0442_\u0434\u0434\u043e\u0441","\u0430\u0442\u0430\u043a\u0438","\u0430\u0442\u0430\u043a\u0430_\u0430\u043d\u0438\u043c\u0430\u0442\u043e\u0440\u043e\u0432_\u043d\u0430_\u043c\u0435\u0434\u0438\u0430","\u0430\u043d\u0438\u043c\u0430\u0442\u043e\u0440\u044b_\u0432_\u0430\u0442\u0430\u043a\u0435","\u0438\u043c\u044f_\u0438\u043c_\u043b\u0435\u0433\u0438\u043e\u043d","\u0437\u0430\u0434\u0443\u0434\u043e\u0441\u0438\u043b\u0438","1000000_\u0433\u0438\u0433\u0430\u0431\u0438\u0442","qrator","cloudflare"], "comments": 0, "likes": 25, "favorites": 0, "is_advertisement": false, "section_name": "default", "id": "2841", "is_wide": "1" }

Прямой эфир

Нейронная сеть научилась читать стихи
голосом Пастернака и смотреть в окно на осень
Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "create", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-158433683", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxbwd&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&fmt=1&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } } ]