Что такое симметричная и асимметричная схема подключения защиты от DDoS-атак? Какие достоинства и недостатки у каждой из них? Какая защита лучше подходит для вашего проекта? Ответы на эти вопросы вы найдете под катом.
Попутно мы поговорим про симметрию в телекоммуникационных сетях в целом. Вы узнаете насколько интернет асимметричен, откуда эта асимметрия берется, и вообще хорошо это или плохо. В качестве бонуса — quick fix для двух самых распростренных проблем, при подключении защиты сети. А еще после прочтения вы точно сможете понять, что я попытался изобразить на КДПВ.
Что такое симметрия?
Все понимают, что такое "симметричный" на уровне "ощущений", но не всего могут сразу сформулировать, что это значит. Давайте попробуем. Если что-то называют симметричным, имеют ввиду, что оно не меняется под действием определенных преобразований — преобразований симметрии. Самый наглядный пример — геометрическая симметрия.
Если повернуть квадрат на 90 градусов вокруг его геометрического центра, он совместится сам с собой. Поэтому говорят: "Квадрат симметричен относительно поворота на 90 градусов". Поворот — это преобразование симметрии. Множество точек квадрата это — "свойство", которое остается неизменным. Поворот относится к точечным преобразованиям симметрии. В результате любого поворота хотя бы одна точка пространства остается неподвижной.
Трансляционная симметрия — это еще один тип преобразований симметрии. Здесь уже неподвижных точек не будет. Соответствующий элемент симметрии — вектор трансляции или попросту некоторый сдвиг. Пример: бесконечный тетрадный лист в клеточку. Перемещаясь вдоль линий на расстояние, кратное одной клетке, мы совмещаем структуру саму с собой. Существует целый раздел математики, занимающийся проблемами симметрии, — теория групп.
Симметрия в телекоммуникационных сетях
Когда говорят о сетях, в роли преобразования симметрии обычно выступает изменение направления передачи информации. Например, от смартфона к серверу Facebook и от сервера Facebook к смартфону. В каких свойствах проявляется симметрия? Это могут быть: маршрут по которому следуют пакеты, емкость канала, потеря пакетов, задержки и т.д.
Хороший пример полностью симметричного соединения — первые телефонные линии. Первые телефоны были напрямую соединены друг с другом. Число номеров в "телефонной книге" равнялось числу проложенных кабелей до других абонентов. Потом появились первые телефонные станции. Вы должны были связаться со станцией и сообщить телефонистке, кому вы хотите позвонить. Она вручную соединяла провода и создавала канал связи. Такое соединение полностью симметрично — пропускная способность в обоих направлениях одинакова, информация следует по одному и тому же заранее заданному маршруту. В 1891 Элмон Стоуджер запатентовал шаговый искатель — электромеханический коммутационный аппарат. В начале XX века эти устройства заменили операторов (людей) на первых АТС (автоматических телефонных станциях). Независимо от того, как соединение устанавливалось, результатом всегда был все тот же "провод" между парой абонентов. Такая сеть называется сетью с коммутацией каналов.
В сетях с коммутацией каналов между двумя узлами устанавливается соединение (канал), которое на протяжении всего сеанса обмена информацией остается неизменным и используется только ими.
Главным недостатком сетей с такой коммутацией являются затраты ресурсов на установление и поддержание соединений, даже когда они не используются или используются не полностью.
Асимметрия в сети и ее причины
Если бы Интернет был сетью с коммутацией каналов, то, учитывая 27 миллиардов подключенных к нему устройств, одновременно бы использовались менее 1% всех канальных мощностей. Стремление к повышению эффективности использования ресурсов сети и развитие электроники привели к появлению сетей с коммутацией пакетов, которые используются сегодня повсеместно.
В сетях с коммутацией пакетов информация передается небольшими частями — пакетами, которые в общем случае доставляются независимо друг от друга.
В привычных нам IP-сетях каждый пакет содержит всю необходимую информацию для его доставки и формирования ответа (IP адреса и порты получателя/отправителя и ID протокола). Необходимость в заранее определенном маршруте следования пакета отпадает. Знакомый всем UDP — пример протокола, работающего в сетях с коммутацией пакетов. Протокол TCP использует виртуальные соединения и, в каком-то смысле, реализует коммутацию каналов в сетях с коммутацией пакетов.
Сети с коммутацией каналов могут быть и аналоговыми, и цифровыми. Коммутация пакетов же возможна только при передаче оцифрованной информации. Буферная память и процессоры в коммутаторах (и маршрутизаторах) позволяют динамически маршрутизировать и балансировать трафик, а также обрабатывать разные типы трафика с разным приоритетом.
Каждый пакет передается независимо. Это позволяет динамически распределять ресурсы сети и использовать несколько маршрутов для доставки данных. С другой стороны, несколько пар узлов могут одновременно использовать одну и ту же физическую линию для обмена информацией.
Достоинства такого подхода к организации сети:
- простая масштабируемость
- отказоустойчивость — из точки А в точку Б можно добраться несколькими путями
- эффективное использование физических каналов связи и вычислительных ресурсов сетевого оборудования
Из-за оптимизации сеть становится асимметричной по отношению к изменению направления движения пакета от узла А к узлу Б.
Асимметрия может проявляться и на уровне отдельных линков, и на уровне маршрутов.
Это может быть пропускная способность, фактический объем трафика, задержки, потеря пакетов или сам маршрут.
Собственно, такая асимметрия и лежит в основе всем известных и даже зафиксированных в "библии интернета" — стандартах RFC — терминах:
- Forward direction — прямое направление или направление передачи данных с большей емкостью, меньшими задержками и меньшим числом ошибок.
- Reverse direction — обратное направление — направление, противоположное прямому.
- Upstream link — аплинк или соединение с меньшей пропускной способностью, чем у связанных с ним и расположенных в прямом направлении соединений — даунлинков или downstream links.
Причиной асимметрии бывают и чисто экономические соображения. Среди операторов хорошо известна практика hot-potato routing. Она заключается в том, чтобы как можно быстрее вывести из своей сети транзитный трафик и, соответственно, снизить расходы по его обслуживанию. Отсюда и название hot-potato — горячая картошка — оператор как можно скорее старается "перекинуть" транзитный трафик соседу по пирингу.
Насколько асимметричен интернет?
Теперь давайте обратимся к исследованиям и попытаемся понять, какая степень у этой асимметрии. Начнем с исследования "Observing routing asymmetry in Internet traffic". Авторы сравнили трафик в прямом и обратном направлениях на линках внутри магистральных сетей операторов связи уровней Tier-2, Tier-1, и между их сетями.
Прежде чем мы посмотрим на результаты, определим термин "поток". Поток (Flow) — это поток пакетов с одинаковым IP адресом источника, IP адресом назначения, номером порта источника, номером порта назначения и ID используемого протокола. Если поменять местами источник и назначение, то это будет тот же поток.
- Авторы посчитали процент потоков с пересылкой пакетов в прямом и обратном направлении.
- В рамках этих потоков они сравнили число пакетов и байт передаваемых в каждом направлении.
- Затем они отфильтровали протоколы, трафик которых может быть принципиально асимметричным, т.е. не требующие подтверждения, вроде UDP.
Вот, что получилось:
- Симметрия потоков — столбцы flows — число потоков с трафиком в обоих направлениях / общее число потоков * 100
- Симметрия по числу пакетов — столбцы packets — (1-|Nab-Nba|/|Nab+Nba|)*100%, где Nab — число пакетов в прямом направлении, а Nba — в обратном.
- Симметрия по числу переданных байт — столбцы bytes — (1-|Nab-Nba|/|Nab+Nba|)*100%, где Nab — число байт в прямом направлении, а Nba — в обратном.
Получается, чем дальше от конечных потребителей, тем трафик через линки более асимметричный. Самый симметричный трафик на edge-маршрутизаторах.
Давайте теперь смотреть на симметрию маршрутов.
Авторы работы "How Asymmetric Is the Internet?" измерили, насколько отличаются сами маршруты в прямом и обратном направлении на уровне АС (автономная система — совокупность IP-сетей и устройств с единой политикой маршрутизации с внешним интернетом).
- Для исследования были выбраны 4000 зондов под управлением RIPE Atlas. Зонды — компьютеры, разбросанные по разным АС. Они используются для измерения характеристик сети в различных точках планеты.
- При помощи Traceroute авторы измерили расстояние между зондами в прямом и обратном направлениях. Программа Traceroute отправляет данные указанному узлу в сети и по пути собирает сведения о всех промежуточных маршрутизаторах, т.е. сохраняет маршрут, по которому данные прошли. Получилось такое распределение по длине маршрута.
- Они установили, что только 12.6% оказались полностью симметричными к изменению направления передачи данных (в аналогичном исследовании, проведенном на 5 лет раньше — 10%).
- Авторы также измерили, насколько маршруты с одинаковой длиной отличаются. Вот, что получилось:
По оси y — вероятность того, что узлы (в данном случае это АС) совпадут при движении из A --> Б и Б --> А. По оси x — положение узла в маршруте.Если мы смотрим на маршрут между парой заданных узлов, то эти узлы останутся неизменными — отсюда и вероятность 1. Чем ближе мы к середине маршрута, тем вероятность совпадения узлов ниже. В статье есть еще много интересной статистики — ссылка.
Итак, что нужно вынести из этих исследований?
- Трафик через большинство линков в интернете асимметричен
- Большинство маршрутов в интернете асимметричны
- Чем дальше мы находимся от концов маршрута, тем он более асимметричен
Запомнили. Теперь переходим к симметрии при подключении защиты от DDoS.
Симметрия при подключении защиты
Когда речь идет о защите от DDoS-атак для сайта, приложения или сети, симметричной называют схему подключения, при которой через систему фильтрации проходит весь трафик в обоих направлениях: входящий и исходящий. Системой фильтрации может быть одно-единственное устройство, обрабатывающее трафик, несколько таких устройств или сеть провайдера защиты. Соответственно, асимметричная схема подключения — это схема, при которой фильтр видит трафик только в одном направлении.
Симметричная схема подключения не означает, что трафик фильтруется в обоих направлениях. Но при таком подключении решение о блокировке пакетов принимается на основании анализа всего трафика. Почему важно видеть оба направления передачи данных? Давайте рассмотрим простой пример.
Зная лишь половину реплик, тяжело понять о чем говорится в переписке.
А: Привет, ну, что, все в силе?
Б:…
А: А кто еще будет?
Б:…
А: Намечается настоящее побоище!
Б: ...
Из этих сообщений картина складывается не очень-то радужная. Но вот мы смотрим на весь диалог целиком и понимаем, что опасения, что опасения были напрасны, и это просто друзья собираются поиграть "по локалке" как в старые добрые.
А: Привет, ну, что, все в силе?
Б: Привет. Конечно. Не забудь взять ноутбук.
А: А кто еще будет?
Б: Серега, Ваня, Дима и Саня.
А: Намечается настоящее побоище!
Б: А то.
Конечно, иногда и половины диалога достаточно, чтобы понять, о чем идет речь, но вероятность ошибиться в таком случае гораздо выше. Аналогичная ситуация и с выявлением и блокировкой DDoS-атак.
Пример: защита от SYN flood
Точность фильтрации симметричной и асимметричной схемы особенно сильно отличается при работе с протоколами с установлением соединения, например TCP. Прежде чем начать обмениваться данными в рамках этого протокола, клиент и сервер должны пройти процедуру трехэтапного рукопожатия (3-way handshake).
- Клиент посылает SYN пакет и случайным номером передающей последовательности А, чтобы инициировать соединение.
- Сервер сохраняет номер А, и формирует ответный SYN-ACK пакет. В нем содержится подтверждение получения SYN пакета от клиента, номер A+1, и номер случайной последовательности B, которую на этот раз генерирует сервер.
- Клиент отвечает ACK пакетом содержащим B+1, чтобы подтвердить получение ответа от сервера и завершить открытие TCP соединения.
Сервер хранит информацию об открытом соединении в таблице соединений до тех пор, пока оно не будет закрыто (автоматически или по запросу).
SYN flood — это DDoS-атака, цель которой — исчерпать память таблицы соединений. Атакующий отправляет множество SYN запросов с поддельным (spoofed) IP адресом источника. Сервер отвечает на запросы SYN-ACK пакетами и ждет ответа с ACK'ом, который никогда не придет… В итоге память переполняется такими ожидающими ответа соединениями. Для новых TCP соединений не остается ресурсов и легитимные пользователи просто не могут подключиться.
Как отразить такую атаку? Если у вас есть доступ к обоим направлениям трафика, то наиболее эффективное решение — использовать механизмы SYN cookie и SYN proxy.
SYN cookie позволяет не расходовать ресурсы таблицы соединений на еще неустановленные соединения. Вместо того, чтобы сохранять данные об инициируемом SYN пакетом соединении (IP адрес, TCP порт и т.д.), сервер кодирует их, записывает в последовательность B и отправляет SYN-ACK пакетом клиенту. Такой SYN-ACK еще называют TCP cookie. Если запрос был легитимным и клиент ответил серверу (3 стадия 3-way handshake), сервер восстанавливает данные о соединении из значения B+1, пришедшего в ACK пакете. Только после этого соединение заносится в таблицу.
Функции по генерации и валидации таких сookie можно реализовать на отдельном устройстве. Но проблема в том, что ответный ACK пакет не получится сразу переслать на защищаемый сервер. Целевой сервер разорвет соединение, ведь он не участвовал в генерации подтверждающих последовательностей. Поэтому, после того, как от клиента был получен ACK пакета с валидной cookie, открытие соединения происходит между защищающей и защищаемой машиной уже без использования механизма SYN cookie. После этого номера подтверждающих последовательностей будут заменяться в каждом пакете от клиента к серверу и от сервера к клиенту. На картинке ниже показано, как это работает.
По факту побеждаем spoofing spoofing'oм. Это не означает, что при асимметричной схеме подключения защиты отражать подобные атаки в принципе невозможно. Цель примера — показать, насколько точно и просто можно фильтровать определенные типы атак, когда есть доступ к обоим направлениям передачи данных.
Отличить легитимный трафик он атакующего для протоколов без установления соединения (UDP, QUIC, ICMP) значительно сложнее чем для того же TCP. Но и в случае отсутствия реальных сессий информация об исходящем трафике оказывается очень полезной. Анализируя активность в рамках одного и того же потока и сравнивая число пришедших с IP и отправленных на него дейтаграмм, можно достаточно просто перейти от обычного шейпинга к реальной фильтрации.
Точность фильтрации при симметричном подключении защиты выше, чем при асимметричном.
Подключение фильтрующего оборудования
Что если вы сами решили установить оборудование для фильтрации трафика, либо вам просто интересно, как оно может быть подключено у вашего провайдера защиты.
Если в сети один edge-маршрутизатор, то все сообщение с "внешним миром" будет осуществляться через него. Следовательно, трафик будет полностью симметричным относительно потоков. Тут все просто: ставим фильтрующее устройство на соответствующий линк и используем его в симметричном режиме (так точность фильтрации выше).
Все гораздо интереснее, когда у нас есть несколько edge-маршрутизаторов, и трафик через них асимметричный. Давайте рассмотрим такую схему:
В этом случае для провайдера гораздо дешевле поставить несколько фильтрующих устройств, работающих в асимметричном режиме. Такую схему удобнее масштабировать, риски влияния на остальную сеть в случае сверхмощных атактак ниже. Появился еще один edge маршрутизатор? — купил еще одну "коробку", поставил на него, и готово! Но за все эти достоинства приходится платить точностью фильтрации.
Что делать, если мы хотим видеть оба направления трафика при его очистке? Из схемы видно, что трафик будет симметричным на маршрутизаторе 3. Но в таком случае придется тащить через свою сеть атакующий трафик, а это дорого. Еще один недостаток — единая точка отказа. Можно копировать весь трафик из защищаемой сети на каждое фильтрующее устройство, т.е. весь входящий через маршрутизатор 3 трафик. Это даст возможность устройствам 1 и 2 увидеть недостающую часть входящих через них потоков и повысит точность фильтрации.
Более экономичный, но, в тоже время, более сложный в реализации способ — синхронизация фильтрующих устройств и выборочный обмен данными между ними. Это могут быть сами пакеты, либо только метаданные для экономии ресурсов сети. Более того, такой подход позволит иметь всю информацию о потоке, даже если входящие пакеты в рамках одного потока приходят и на маршрутизатор 1, и на маршрутизатор 2. Такое тоже бывает. Если вспомнить пример с диалогом, то тут уже будет не половина реплик, а, скажем, всего треть. Чтобы уменьшить объем пересылаемых данных при проектировании сети фильтрации, нужно помнить о свойствах сети Интернет, которые мы рассмотрели в главе "Насколько асимметричен интернет".
Защита от DDoS как сервис
Когда вы используете сервис по защите от DDoS, вы организуете соединение с провайдером, а как расположить фильтрующее оборудование в своей сети — думает уже он. Вы передаете анонсы своих сетей по BGP, организуете виртуальный туннель или включаетесь напрямую. Все. Провайдер в этом случае берет на себя обязательства по доставке и очистке вашего трафика. Добавьте к этому более высокую точность фильтрации, и решение напрашивается само собой — симметрия. Во многих случаях это действительно так, но давайте посмотрим, когда асимметричная схема может оказаться более выгодной.
- Вы — провайдер и хотите иметь максимум возможностей по управлению исходящим трафиком по BGP. Вас связывают обязательства по peering'у с другими провайдерами или контракты с вашими аплинками по соотношению входящего и исходящего трафика.
- Одновременное подключение нескольких провайдеров защиты. Мультивендорное решение, конечно, звучит хорошо, но на практике при одновременном использовании нескольких защитников можно получить больше проблем, чем пользы. Это связано, прежде всего, с разделением зон ответственности, сложностью оперативного troubleshooting'а и одновременной коммуникации c несколькими сторонами. Чтобы повысить отказоустойчивость, можно просто иметь провайдеров защиты "про запас". Если у вашего основного защитника возникнут проблемы, вы просто переключитесь на запасного.
- В вашей сети есть приложение или приложения, которые сильно зависят от задержки, например, онлайн игры.. Если провайдер расположен далеко от вас и ваших клиентов, асимметричная схема подключения может сократить задержки практически в два раза. Еще задержки могут негативно сказываться на скорости работы протоколов с гарантированной доставкой, вроде TCP. Это связанно с повышением времени между отправкой пакета и получением подтверждения от принимающей стороны или RTT (англ. Round Trip Time). Подробнее об этом можно почитать тут.
- Экономические соображения. Обычно проблема высоких задержек из-за географической удаленности защитника идет бок о бок с высокой стоимостью трафика и оборудования. В Латинской Америке, например, пошлины на ввозимое оборудование и лицензии на его использование могут достигать 100% от стоимости. В таких случаях использование асимметричной схемы подключения может существенно сэкономить деньги.
Пункты 2-4 не только повод задуматься об асимметричном подключении, но и повод еще раз изучить рынок защиты от DDoS и найти поставщика с бОльшими возможностями по доставке вашего трафика и более выгодными ценами.
При подключении любой схемы защиты нужно убедиться, что ваше оборудование поддерживает необходимые технологии. Никакая защита от DDoS не может обеспечить 100% точность фильтрации. В этом смысле английский термин mitigation — смягчение, уменьшение — гораздо более точный. Поэтому оцените, сможет ли ваше оборудование выдержать повышение нагрузки из-за проникающего в сеть во время массивных атак вредоносного трафика. В случае асимметричной схемы подключения "запас прочности" должен быть больше, чем в случае симметричной.
Что в итоге?
В 95% случаев, если вы задумались над тем, какую схему подключения защиты от DDoS использовать, мы рекомендуем подключать симметрию. Она одинаково хорошо подходит и для защиты инфраструктуры, и для защиты сервисов. Точность фильтрации и простота подключения (если вы подключаете защиту от DDoS как услугу) — слишком веские преимущества, чтобы их игнорировать. У нас, например, стоимость симметричной защиты такая же, как и у асимметричной.
Мы рекомендуем использовать симметричную схему подключения
Подключение и эксплуатация асимметричной схемы требует глубокого понимания принципов маршрутизации и работы сетевого оборудования. Если у вас в штате нет опытных сетевых инженеров, то лучше использовать симметричную схему подключения со статической маршрутизацией или маршрутизацией по BGP.
DDoS-GUARD предоставляет услуги по защите сетей, сайтов и приложений, вне зависимости от предпочитаемой схемы подключения. Наши инженеры всегда готовы принять участие в разработке оптимального решения для клиента.
BONUS: две распространенные проблемы при подключении защиты сети, которые легко исправить
Проблемы с исходящим трафиком при подключении защиты по асимметричной схеме
Прежде всего, попросите вашего Интернет-провайдера изменить режим работы uRPF со strict на loose. Что это значит? Механизм uRPF (Unicast Reverse Path Forwarding) используется для борьбы с атакующим трафиком. Грубо говоря, он проверяет, действительно ли пакет пришел из той сети, которая указана в source IP.
Роутер с uRPF проверяет IP-адрес источника приходящих на него пакетов. В режиме strict если интерфейс, на который пришел пакет не совпадает c интерфейсом, который бы сам роутер использовал при пересылке ответов на этот IP, пакет отбрасывается. Это позволяет бороться с атакующим трафиком со spoof'ленным IP адресом источника. Но, если в сети используется асимметричная маршрутизация, в таком режиме может отбрасываться и легитимный трафик. В режиме loose IP-адрес источника просто должен содержаться в таблице маршрутизации, и проблем с легитимным трафиком возникнуть не должно.
Потери трафика / снижение скорости при подключении защиты через GRE / IPIP-туннель
Эта проблема часто связана со снижением MTU при туннелировании. Напомню:
- Maximal Transmission Unit (MTU) это — максимальный размер передаваемой единицы информации или Protocol Data Unit (PDU).
- PDU это — служебная информация + полезные данные или payload.
- Maximal Segment Size (MSS) — максимальный объем payload.
При отправке через туннель мы помещаем (инкапсулируем) PDU туннелируемого протокола в payload PDU туннеля. Таким образом, чтобы сохранить MTU при инкапсуляции, мы должны уменьшить payload.
Установите MTU не более 1476, а MSS – не более 1436 (рекомендуемое значение 1400) и запретите фрагментацию трафика на туннельном интерфейсе (бит Don't fragment). Это позволит передавать данные без снижения скорости и потерь из-за фрагментации.
При асимметричной схеме подключения защиты исходящий трафик может доставляться не только через туннель. Поэтому значение MSS нужно изменить и на интерфейсе с провайдером, через сеть которого будет идти исходящий трафик. Подробнее о настройке MSS можно прочитать по ссылкам: для Juniper, для Cisco, для Mikrotik.