Шумные соседи
DDoS-атаки, к сожалению, стали обыденностью и, кажется, теперь касаются компаний из практически любых отраслей. Не то чтобы их раньше не было — конечно, были, но за последние годы изменились и частота, и характер, и смысл, а скорее даже бессмысленность таких атак. Например, на нас формально самая крупная из последних, но отнюдь не самая неприятная атака — флуд на 10 Гбит/с — была совершена в конце 2021 года. Её отфильтровал хостинг-провайдер, опцию базовой защиты от L3/L4-атак предоставляют практически все хостеры. Однако здесь обычно есть несколько проблем. Во-первых, это «шумные соседи» и политика справедливого использования даже для базового безлимитного подключения. Внешний канал, как правило, общий для всех или как минимум для группы клиентов, поэтому атака на одного из них может повлиять на остальных. А в случае действительно серьёзной угрозы такого клиента попросту отключают от сети. Забегая вперёд, скажем, что именно это с нами случилось.
Во-вторых, если покупать у хостера защиту отдельно, то ценник может неприятно удивить. Особенно в случае разовых атак, когда приходится платить за очистку трафика потерабайтно. Кроме того, при совсем уж неудачном стечении обстоятельств могут попросить дополнительные деньги и за волну трафика. Масштаб проблем зависит от тарифов хостинга, особенностей атаки и вашей архитектуры. Наконец, в-третьих, базовая защита от хостера обычно не предусматривает никакого особенного контроля и нормального мониторинга, она нередко работает в одностороннем и уведомительном порядке. А уж хоть какую-то защиту от L7 вообще почти никто не предлагает, только в рамках отдельной услуги, которая, скорее всего, является просто перепродажей чьего-то сервиса.
Очевидным решением всех этих проблем является уход непосредственно к специализированному поставщику услуг. Одним из наиболее популярных сервисов является CloudFlare, который за скромные деньги предлагает защиту от DDoS, CDN, WAF и кучу других возможностей. Правда, здесь тоже есть нюансы. Во-первых, далеко не все сервисы нужны каждому, некоторые приятно иметь, но обязательными они не являются. Более того, действительно нужные опции могут оказаться платными и вовсе не безлимитными. Во-вторых, CloudFlare печально известен выставлением астрономических счетов, если посчитает, что вы перебрали с использованием услуг. Ну и в-третьих, с постепенным запретом CloudFlare на территории РФ смысл в нём теряется. Хотя, стоит признать, в целом с CloudFlare работать комфортно. Даже первичная настройка путём переноса DNS-зоны очень проста.
Переезд
Несмотря на то, что наиболее болезненными являются L7-атаки, количество которых с 2022 года существенно возросло, от классического флуда никто не отказывается. Именно с этим нам и пришлось столкнуться. Если ранее хостинг-провайдер достаточно успешно отбивал такие атаки, то этой зимой его сил не хватило. В один не очень прекрасный выходной день на нас началась атака, которая в пике достигла 2996 Мбит/с и 307405 pps. Менее чем через полчаса хостер справедливо решил, что дальше это терпеть не намерен, и отключил нам сеть. К счастью, атака оказалась не слишком изощрённой, так что переезд на другие IP-адреса временно решил проблему. Длительность атаки установить не удалось, но несколько пробных включений в течение нескольких последующих часов показали, что она продолжалась. Продолжилась она и на следующие сутки.
Очевидно, что от перехода под защиту специализированного провайдера отказываться уже никак нельзя. Curator (ранее известный как Qrator Labs) — один из старейших поставщиков таких услуг на рынке. И если раньше казалось, что они нужны только каким-то очень крупным или лакомым для злоумышленников заказчикам, то теперь стало понятно, что пострадать может любая компания, даже такая маленькая и скромная, как наша.
Собственно процесс переезда не так уж сложен. Curator присылает довольно подробное письмо с простыми пошаговыми инструкциями для первичной настройки. В нашем случае это несколько веб-сайтов, т. е. Curator выступает в качестве реверс-прокси до наших серверов (апстримов), так что всё свелось к замене A-записей для нужных доменов, созданию сертификатов Let’s Encrypt на стороне Curator с автоматическим обновлением их в последующем и добавлению апстримов, т. е. подключений к нашим собственным серверам (в том числе с TLS и по HTTP/2). Тут же можно настроить вид страниц, которые будут отдаваться Curator при ошибках 502/503/504.
Также в приветственном письме рекомендуется перенести апстримы на новые IP, желательно из другой подсети, и заблокировать к ним доступ отовсюду, кроме подсетей самого Curator. В особенности когда переезд происходит под атакой. В интерфейсе есть набор утилит для проверки доступности ваших серверов для узлов Curator (и любого другого IP), проходимого им маршрута и корректности настроек доступа. На уровне апстримов можно устроить балансировку посредством Round robin/IP hash с развесовкой запросов и подключить активную проверку доступности апстрима. Ещё одна приятная мелочь — перенаправление с кодом 301/302/307/308 непосредственно на стороне реверс-прокси с возможностью замены имени хоста и пути.
При желании можно принести свои сертификаты и самостоятельно отправлять логи, касающиеся HTTP-трафика, чтобы Curator мог в этом случае также защищать и от некоторых L7-атак. Впрочем, можно и самому управлять доступностью своих ресурсов, наполняя по API белые и чёрные списки IP-адресов с указанием времени действия правил (до суток или навсегда) и опираясь на реальные IP-адреса пользователей, которые отдаёт Curator. Также полезно включить уведомление о превышении заданных порогов (в Мбит/с) для входящего, исходящего и пропущенного трафика, а также количества заблокированных IP-адресов.
Однако этим возможности не ограничиваются. Curator может работать как обратный TCP/Websocket-прокси или же просто прикрывать «отдельное» TCP-подключение. Для очень крупных заказчиков предлагается защита AS и доступ к Curator посредством туннелей IPIP или GRE. Кроме того, доступны услуги WAF и защищённого DNS-сервера (с передачей зоны). Всё это, естественно, предоставляется с расширенной аналитикой и превентивной защитой от атак. Сеть самого Curator имеет ёмкость 4 Тбит/с, включает 18 центров фильтрации по всему миру и имеет прямое подключение к Tier-1-операторам.
Защита от ботов
Помимо защиты от DDoS-атак Curator предлагает и фильтрацию запросов пользователей на своей стороне, в первую очередь для защиты от ботов. Никакой скрытой магии тут нет, всё настраивается самим клиентом, поскольку он лучше знает, каких пользователей пускать, а каких нет. Настройки разделены на две логических части: как фильтровать и кого фильтровать.
Для ответа на первый вопрос используются простые правила ЕСЛИ–ТО. В ЕСЛИ включён набор из трёх последовательно применяемых условий: хост (или группа хостов, которая задаётся в этом же разделе), метод (GET, POST и т.д.), путь (после хоста) или URI. Можно задать частичное совпадение для каждого из параметров или и вовсе написать регулярное выражение. В ТО входит набор из трёх основных реакций: принять и выдать проверку — при первом обращении отдать 401, снять посредством JS цифровой отпечаток с браузера и поставить cookie, при необходимости выдав CAPTCHA; принять только с cookie, т. е. где-то на более раннем этапе они уже должны быть поставлены; ничего не делать. Есть отдельная опция для работы с внешним CDN, которым нужен беспрепятственный доступ ко всему контенту. Curator «знает» про Ngenix, Akamai и G-Core, а также поддерживает аутентификацию G2O.
Настроенные выше правила применяются ко всему приходящему трафику в соответствии с заданным уровнем распределения проверок, за исключением выбранных стран или регионов и заданных IP-адресов или подсетей. Curator рекомендует проверить работу антибота на небольшом проценте пользователей, постепенно перейдя к тотальной проверке всего трафика. Конкретно для тестирования защиты от ботов можно отдельно задать список IP, для которых проверка будет выполняться всегда, и отключить любые проверки для клиентов с предзаданными HTTP-заголовками.
Кроме того, конкретно для защиты обращений не от веб-браузеров (или хотя бы WebView с JS) Curator предлагает задействовать не проверку cookie, которые, например, невозможно поставить при прямом обращении к вашему API из приложения, а проверку хеша, который вычисляется на основе HTTP-заголовков и предзаданного секретного ключа.
CDN
CDN — относительно новая услуга Curator, но весьма полезная, поскольку помогает быстрее доставлять контент до пользователей и экономить на трафике у своего хостинг-провайдера благодаря кешированию на стороне Curator, конвертации изображений в WebP с заданным уровнем сжатия (но если получившаяся на выходе картинка оказалась больше оригинала, то отдаётся оригинал), поддержке HTTP/2 и сжатия gzip/deflate/brotli. Для видео поддерживается работа с потоками HLS и DASH. Ну и конечно, сам CDN тоже находится под защитой от DDoS.
Подключение CDN тоже очень простое — Curator выдаёт домен (точнее, поддомен), который посредством CNAME можно привязать к собственному поддомену (или поддоменам) и, как и выше, выписать на него сертификат Let’s Encrypt прямо в интерфейсе Curator или опять-таки принести свой. Это удобно, поскольку позволяет при необходимости переключиться на другого CDN-провайдера.
Управлять временем жизни объектов в кеше CDN можно посредством заголовков expires и cache-control, а если их нет, то время жизни по умолчанию составляет 6 часов. Также можно принудительно отправлять клиентам cache-control: no-cache. CDN умеет и кешировать ответы с ошибками, как глобально, так и для конкретного клиента, чтобы лишний раз не дёргать апстрим. Дополнительно можно задать регулярные выражения для запрета обращения к конкретным URL (будет отдаваться код 404), а заодно включить перенаправление с кодом 301/302/307/308 непосредственно на стороне CDN. К слову, отдавать апстриму реальный IP-адрес клиента тоже можно в отдельном заголовке.
GET-параметрами можно обрезать, масштабировать или конвертировать изображения на стороне CDN. Сервис поддерживает работу с JPEG, PNG, TIFF, WebP и AVIF, в том числе конвертацию в эти форматы, но если явно операция конвертации не указана, то при любых манипуляциях с изображениями по умолчанию будет отдаваться JPEG или, если эта опция включена, WebP. В тестовом режиме работает возможность выборочно отключать массовую конвертацию в WebP GET-параметром, например когда она даёт слишком плохие результаты (скриншоты, графики и т.п.) или вовсе не нужна (оригиналы фотографий), но при этом отказываться от неё целиком не хочется.
ACL и API
Система прав доступа стандартная, но удобная — есть несколько готовых групп пользователей, однако можно создать и свои, в том числе вложенные, для большего удобства. В рамках каждой группы задаются правила доступа к разделам, подразделам или отдельным функциям. Всего более 30 позиций, причём для некоторых возможна и более гранулярная настройка, например доступ только к определённым сертификатам. Для каждого из правил доступа можно выбрать политики read, update, create, delete (для последних трёх, очевидно, автоматически включается и read). Для повышения защиты рекомендуется у каждого аккаунта включить двойную аутентификацию (TOTP или ключи доступа), а заодно включить уведомления о важных событиях.
Для доступа к API используются токены, которые передаются (строго с HTTPS/TLS/SSL) в отдельном HTTP-заголовке. Для каждого токена можно создать набор из нескольких политик, при необходимости задав доступ только к части принадлежащих клиенту ресурсов. Всего доступно несколько десятков различных API, которые покрывают значительную часть функциональности, доступной в консоли Curator.
Целиком построить собственную консоль, конечно, не выйдет, поскольку некоторые второстепенные разделы вроде финансовой документации в API не представлены. Кроме того, Curator не даёт прямого доступа к аналитике, но предоставляет возможность самому собрать в консоли графики по основным метрикам: трафик, запросы, задержка, ошибки и т. п. Наконец, Curator предоставляет и сборный помесячный отчёт с более детальной информацией о том, что вообще происходило с вашими ресурсами.
Заключение
Ни одного существенного инцидента с момента подключения к Curator весной этого года не произошло — и это главное. Это, конечно, не значит, что их не будет в будущем, но во всяком случае переход к Curator даёт чувство защищённости в неспокойные для Рунета времена, а это важно, особенно для онлайн-СМИ, которые должны быть доступны читателям всегда. Собственно переход под защиту Curator от DDoS никаких сложностей не вызвал.
CDN же помог почти на порядок сократить отдаваемый серверами трафик. Переезд на CDN сам по себе сложностей тоже не вызвал, однако мы, по-видимому, стали одними из первых пользователей данной услуги, так что кое-что пришлось на ходу уточнять и настраивать. Благо техподдержка у Curator адекватная и быстрая, да и в целом приятная в общении, что встречается не так уж часто. Она же, к слову, помогла разобраться с проблемой, которая Curator вовсе не касается, но которая без переезда была бы выявлена нескоро.
Единственное, за что можно пожурить сервис, так это за не совсем полная документация (это только внешняя, есть ещё внутренний FAQ и справка). С одной стороны, понятно, почему так, — сервис постоянно обновляется, где-то по мелочи, где-то заметно. Это видно даже по демоаккаунту, который даёт общее представление об услугах, но всё же отличается от его актуальной версии, более «прилизанной» и удобной. С другой стороны, задавать какие-то элементарные вопросы техподдержке только потому, что буквально одного предложения или ссылки в документации нет, тоже странно.