Создание L7-балансировщика с защитой от DDoS с помощью консоли управления или CLI
Чтобы создать балансировщик с защитой от DDoS c помощью консоли управления Yandex Cloud или CLI:
- Подготовьте облако к работе.
- Создайте облачную сеть.
- Создайте группы безопасности.
- Создайте группу виртуальных машин.
- Зарезервируйте статический публичный IP-адрес.
- Создайте группу бэкендов.
- Создайте HTTP-роутер.
- Создайте L7-балансировщик.
- Проверьте работу балансировщика.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры для балансировщика с защитой от DDoS входят:
- плата за постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование публичного статического IP-адреса (см. тарифы Yandex Virtual Private Cloud);
- плата за фильтрацию входящего трафика на публичный IP-адрес с защитой от DDoS-атак (см. тарифы Yandex Virtual Private Cloud);
- плата за использование вычислительных ресурсов L7-балансировщика (см. тарифы Application Load Balancer).
Подготовьте сервисный аккаунт
Внимание
Создавая группы ВМ, учитывайте лимиты. Чтобы не нарушить работу компонента Instance Groups, не изменяйте и не удаляйте вручную созданные им ресурсы: целевую группу Application Load Balancer, ВМ и диски. Вместо этого измените или удалите группу полностью.
По умолчанию все операции в Instance Groups выполняются от имени сервисного аккаунта. Если сервисного аккаунта нет, создайте его.
Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе, а также интегрировать группу с L7-балансировщиком Application Load Balancer, назначьте сервисному аккаунту роль editor.
Создайте облачную сеть
Все ресурсы, созданные в практическом руководстве, будут относиться к одной облачной сети.
Чтобы создать сеть:
- В консоли управления
выберите сервис Virtual Private Cloud. - Нажмите кнопку Создать сеть.
- Укажите имя сети
ddos-network. - В поле Дополнительно выберите опцию Создать подсети.
- Нажмите кнопку Создать сеть.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Создайте облачную сеть в каталоге по умолчанию:
yc vpc network create \ --name ddos-networkПодробнее о команде
yc vpc network createчитайте в справочнике CLI. -
Создайте подсети в каждой зоне доступности, указав идентификатор облачной сети с помощью параметра
--network-name:yc vpc subnet create \ --name ddos-network-ru-a \ --network-name ddos-network \ --zone ru-central1-a \ --range 192.168.0.0/24yc vpc subnet create \ --name ddos-network-ru-b \ --network-name ddos-network \ --zone ru-central1-b \ --range 192.168.1.0/24yc vpc subnet create \ --name ddos-network-ru-d \ --network-name ddos-network \ --zone ru-central1-d \ --range 192.168.2.0/24Подробнее о команде
yc vpc subnet createчитайте в справочнике CLI.
Создайте группы безопасности
Группы безопасности содержат правила, которые разрешают балансировщику получать входящий трафик и отправлять его на ВМ, а ВМ — получать этот трафик. В сценарии будут созданы две группы безопасности: для балансировщика и для всех ВМ.
Чтобы создать группы безопасности:
-
В консоли управления
выберите сервис Virtual Private Cloud. -
На панели слева выберите
Группы безопасности. -
Создайте группу безопасности для балансировщика:
-
Нажмите кнопку Создать группу безопасности.
-
Укажите Имя группы безопасности:
ddos-sg-balancer. -
Выберите Сеть
ddos-network. -
В блоке Правила создайте следующие правила по инструкции под таблицей:
Направление
трафикаОписание Диапазон портов Протокол Источник /
назначениеДобавить CIDR ИсходящийanyВесьЛюбойCIDR0.0.0.0/0Входящийext-http80TCPCIDR0.0.0.0/0Входящийext-https443TCPCIDR0.0.0.0/0Входящийhealthchecks30080TCPПроверки состояния балансировщика— -
Выберите вкладку Исходящий трафик или Входящий трафик.
-
Нажмите кнопку Добавить правило.
-
В открывшемся окне в поле Диапазон портов укажите один порт или диапазон портов, куда или откуда будет поступать трафик.
-
В поле Протокол укажите нужный протокол или оставьте
Любой, чтобы разрешить передачу трафика по всем протоколам. -
В поле Назначение или Источник выберите назначение правила:
CIDR— правило будет применено к диапазону IP-адресов. В поле CIDR блоки укажите CIDR и маски подсетей, в которые или из которых будет поступать трафик. Чтобы добавить несколько CIDR, нажимайте кнопку Добавить CIDR.Группа безопасности— правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.Проверки состояния балансировщика— правило, которое позволяет балансировщику проверять состояние ВМ.
-
Нажмите кнопку Сохранить. Таким образом создайте все правила из таблицы.
-
-
Нажмите кнопку Сохранить.
-
-
Аналогично создайте группу безопасности для ВМ с именем
ddos-sg-vms, той же сетьюddos-networkи следующими правилами:Направление
трафикаОписание Диапазон портов Протокол Источник CIDR блоки Входящийbalancer80TCPГруппа безопасностиddos-sg-balancerВходящийssh22TCPCIDR0.0.0.0/0
Чтобы создать группу безопасности для балансировщика, выполните команду:
yc vpc security-group create \
--name ddos-sg-balancer \
--rule "direction=egress,port=any,protocol=any,v4-cidrs=[0.0.0.0/0]" \
--rule "direction=ingress,port=80,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \
--rule "direction=ingress,port=443,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \
--rule "direction=ingress,port=30080,protocol=tcp,predefined=loadbalancer_healthchecks" \
--network-name ddos-network
Чтобы создать группу безопасности для ВМ, выполните команду:
yc vpc security-group create \
--name ddos-sg-vms \
--rule "direction=ingress,port=22,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \
--rule "direction=ingress,port=80,protocol=tcp,security-group-id=<идентификатор_группы_безопасности>" \
--network-name ddos-network
Где security-group-id — идентификатор группы безопасности ddos-sg-balancer.
Подробнее о команде yc vpc security-group create читайте в справочнике CLI.
Создайте группу ВМ
На ВМ из целевой группы развертываются бэкенды вашего приложения. Целевая группа ВМ будет подключена к балансировщику, чтобы на эндпоинты бэкендов вашего приложения можно было направлять запросы. В этом сценарии достаточно создать группу ВМ с минимальной конфигурацией.
Чтобы создать группу ВМ:
-
В консоли управления
выберите сервис Compute Cloud. -
На панели слева выберите
Группы виртуальных машин. Нажмите кнопку Создать группу виртуальных машин. -
В блоке Базовые параметры:
- Введите Имя группы ВМ:
ddos-group. - Выберите сервисный аккаунт из списка или создайте новый. Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе, а также интегрировать группу с L7-балансировщиком Application Load Balancer, назначьте сервисному аккаунту роль
editor.
- Введите Имя группы ВМ:
-
В блоке Распределение выберите несколько зон доступности, чтобы обеспечить отказоустойчивость хостинга.
-
В блоке Шаблон виртуальной машины нажмите кнопку Задать и укажите конфигурацию базовой ВМ:
-
В блоке Общая информация введите Описание шаблона.
-
В блоке Образ загрузочного диска откройте вкладку Marketplace и нажмите кнопку Показать все продукты Marketplace. Выберите продукт LEMP и нажмите кнопку Использовать.
-
В блоке Диски и файловые хранилища укажите:
- Тип —
HDD. - Размер диска —
3 ГБ.
- Тип —
-
В блоке Вычислительные ресурсы укажите:
- Платформа —
Intel Cascade Lake. - vCPU —
2. - Гарантированная доля vCPU —
5%. - RAM —
1 ГБ.
- Платформа —
-
В блоке Сетевые настройки:
- Выберите облачную сеть
ddos-networkи ее подсети. - В поле Публичный адрес выберите
Автоматически. - Выберите группу безопасности
ddos-sg-vms.
- Выберите облачную сеть
-
В блоке Доступ укажите данные для доступа на ВМ:
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла открытого ключа.
Для подключения по SSH необходимо создать пару ключей. Подробнее в разделе Создание пары ключей SSH.
-
Нажмите кнопку Сохранить.
-
-
В блоке Масштабирование укажите Размер группы ВМ —
2. -
В блоке Интеграция с Application Load Balancer выберите опцию Создать целевую группу и укажите имя группы:
tg-ddos. Подробнее о целевых группах. -
Нажмите кнопку Создать.
-
Получите идентификаторы ресурсов, необходимые для создания группы ВМ, с помощью команд:
- yc iam service-account get <имя_сервисного_аккаунта> — для сервисного аккаунта.
- yc vpc network get ddos-network — для сети
ddos-network. - yc vpc subnet get <имя_подсети> — для подсетей
ddos-network-ru-a,ddos-network-ru-bиddos-network-ru-d. - yc compute image get-latest-by-family lemp --folder-id standard-images — для образа загрузочного диска.
- yc vpc security-group get ddos-sg-vms — для группы безопасности
ddos-sg-vms.
-
Создайте YAML-файл с именем
specification.yaml. -
Добавьте в него описание конфигурации базовой ВМ:
name: ddos-group service_account_id: <идентификатор_сервисного_аккаунта> // сервисный аккаунт должен иметь роль editor description: "DDoS alb scenario" instance_template: platform_id: standard-v3 resources_spec: memory: 1g cores: 2 core_fraction: 5 boot_disk_spec: mode: READ_WRITE disk_spec: image_id: <идентификатор_образа> type_id: network-hdd size: 3g network_interface_specs: - network_id: <идентификатор_облачной_сети> subnet_ids: - <идентификатор_подсети_в_зоне_ru-central1-a> - <идентификатор_подсети_в_зоне_ru-central1-b> - <идентификатор_подсети_в_зоне_ru-central1-d> primary_v4_address_spec: {} security_group_ids: - <идентификатор_группы_безопасности> deploy_policy: max_unavailable: 1 max_expansion: 0 scale_policy: fixed_scale: size: 2 allocation_policy: zones: - zone_id: ru-central1-a - zone_id: ru-central1-b - zone_id: ru-central1-d application_load_balancer_spec: target_group_spec: name: tg-ddosГде
security_group_ids— идентификатор группы безопасностиddos-sg-vms. -
Создайте группу ВМ в каталоге по умолчанию:
yc compute instance-group create \ --file specification.yamlРезультат:
done (25s) id: cl1qjhlcdofg******** folder_id: b1g86q4m5vej******** created_at: "2021-08-30T19:25:02.031Z" name: ddos-group description: DDoS scenario instance_template: platform_id: standard-v2 resources_spec: memory: "1073741824" cores: "2" core_fraction: "5" boot_disk_spec: mode: READ_WRITE disk_spec: type_id: network-hdd size: "3221225472" image_id: fd8r6kq84o7b******** network_interface_specs: - network_id: enp3srbi9u49******** subnet_ids: - e9b17pi15695******** - e2lt87g1rlig******** - b0c7kl8riq24******** primary_v4_address_spec: {} security_group_ids: - enpi08rif04d******** scheduling_policy: {} scale_policy: fixed_scale: size: "2" deploy_policy: max_unavailable: "1" startup_duration: 0s strategy: PROACTIVE allocation_policy: zones: - zone_id: ru-central1-a - zone_id: ru-central1-b - zone_id: ru-central1-d load_balancer_state: {} managed_instances_state: target_size: "2" service_account_id: aje2stn6id9k******** status: ACTIVE application_load_balancer_spec: target_group_spec: name: first-target-group application_load_balancer_state: target_group_id: ds78imh0ds2e********Подробнее о команде
yc compute instance-group createчитайте в справочнике CLI.
Зарезервируйте статический публичный IP-адрес
Примечание
Этот шаг нельзя выполнить через интерфейс командной строки (CLI).
Чтобы защитить балансировщик от DDoS-атак, необходимо зарезервировать для него статический публичный IP-адрес с опцией Защита от DDoS-атак:
- В консоли управления
выберите сервис Virtual Private Cloud. - На панели слева выберите
IP-адреса и нажмите кнопку Зарезервировать адрес. - Выберите зону доступности, в которой нужно зарезервировать IP-адрес.
- Включите опцию Защита от DDoS-атак.
- Нажмите кнопку Зарезервировать.
Создайте группу бэкендов
Целевую группу, созданную вместе с группой ВМ, нужно привязать к группе бэкендов с настройками распределения трафика.
Для бэкендов в группах будут созданы проверки состояния: балансировщик будет периодически отправлять проверочные запросы к ВМ и ожидать ответа в течение определенного периода.
Чтобы создать группу бэкендов:
- В консоли управления
выберите сервис Application Load Balancer. - На панели слева выберите
Группы бэкендов. Нажмите кнопку Создать группу бэкендов. - Укажите Имя группы бэкендов:
ddos-backend-group. - В блоке Бэкенды нажмите кнопку Добавить.
- Укажите Имя бэкенда:
backend-1. - В поле Целевые группы выберите группу
tg-ddos. - Укажите Порт, на котором ВМ бэкенда будут принимать входящий трафик от балансировщика:
80. - Нажмите кнопку Добавить проверку состояния.
- Укажите Порт, на котором ВМ бэкенда будут принимать проверочные соединения:
80. - Укажите Путь, к которому будет обращаться балансировщик при проверке состояния:
/. - Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Создайте группу бэкендов:
yc alb backend-group create ddos-backend-groupРезультат:
id: a5dg2cv4ngne******** name: ddos-backend-group folder_id: aoerb349v3h4******** created_at: "2021-08-08T20:46:21.688940670Z"Подробнее о команде
yc alb backend-group createчитайте в справочнике CLI. -
Добавьте в группу бэкенд и проверку состояния:
yc alb backend-group add-http-backend \ --backend-group-name ddos-backend-group \ --name backend-1 \ --weight 1 \ --port 80 \ --target-group-id=<идентификатор_целевой_группы> \ --http-healthcheck timeout=1s,interval=1s,port=80,path=/Где:
--backend-group-name— имя группы бэкендов.--name— имя бэкенда.--weight— вес бэкенда.--port— порт.--target-group-id— идентификатор целевой группы.--http-healthcheck— параметры проверки состояния ресурсов.port— порт.timeout— таймаут.interval— интервал.host— адрес хоста.path— путь.
Результат:
done (21s) id: ds7fea2pggr2******** name: ddos-backend-group folder_id: b1g86q4m5vej******** http: backends: - name: backend-1 backend_weight: "1" port: "80" target_groups: target_group_ids: - ds78ate00f8e******** healthchecks: - timeout: 1s interval: 1s healthcheck_port: "80" http: path: / created_at: "2021-08-08T07:59:22.922603189Z"Подробнее о команде
yc alb backend-group add-http-backendчитайте в справочнике CLI.
Создайте HTTP-роутер
Группу бэкендов нужно привязать к HTTP-роутеру с правилами маршрутизации HTTP-запросов.
Чтобы создать HTTP-роутер и добавить в него маршрут:
- В консоли управления
выберите сервис Application Load Balancer. - На панели слева выберите
HTTP-роутеры. Нажмите кнопку Создать HTTP-роутер. - Укажите Имя HTTP-роутера:
ddos-router. - Нажмите кнопку Добавить виртуальный хост.
- Укажите Имя виртуального хоста:
ddos-host. - Укажите значение Authority:
alb-with-ddos.com. - Нажмите кнопку Добавить маршрут.
- Введите Имя:
route-1. - В поле Путь выберите
Начинается си укажите путь/. - В поле Действие оставьте
Маршрутизация. - В списке Группа бэкендов выберите созданную ранее группу.
- Остальные настройки оставьте без изменений и нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Выполните команду:
yc alb http-router create ddos-routerРезультат:
id: a5dcsselagj4******** name: ddos-router folder_id: aoerb349v3h4******** created_at: "2021-08-08T21:04:59.438292069Z"Подробнее о команде
yc alb http-router createчитайте в справочнике CLI. -
Создайте виртуальный хост, указав имя HTTP-роутера:
yc alb virtual-host create ddos-host \ --http-router-name ddos-router --authority alb-with-ddos.comПодробнее о команде
yc alb virtual-host createчитайте в справочнике CLI. -
Добавьте маршрут, указав имя роутера и параметры маршрутизации:
yc alb virtual-host append-http-route route-1 \ --virtual-host-name ddos-host \ --http-router-name ddos-router \ --prefix-path-match / \ --backend-group-name ddos-backend-group \ --request-timeout 60sРезультат:
done (1s) name: ddos-host routes: - name: route-1 http: match: path: prefix_match: / route: backend_group_id: ds7fea2pggr2******** timeout: 60sПодробнее о команде
yc alb virtual-host append-http-routeчитайте в справочнике CLI.
Создайте балансировщик
Чтобы создать балансировщик:
-
В консоли управления
выберите сервис Application Load Balancer. -
В меню слева выберите Балансировщики.
-
Нажмите кнопку Создать L7-балансировщик.
-
Введите имя балансировщика:
ddos-protect-alb. -
В блоке Сетевые настройки выберите сеть
ddos-networkи группу безопасностиddos-sg-balancer. -
В блоке Размещение выберите подсети для узлов балансировщика в каждой зоне доступности и включите передачу трафика.
-
В блоке Обработчики нажмите кнопку Добавить обработчик. Задайте настройки обработчика:
- Введите имя обработчика:
ddos-listener. - В блоке Публичный IP-адрес включите передачу трафика.
- Укажите порт
80. - Выберите тип Список и укажите зарезервированный ранее IP-адрес с защитой от DDoS.
- Введите имя обработчика:
-
В поле HTTP-роутер выберите
ddos-router. -
Нажмите кнопку Создать.
-
Создайте балансировщик с узлами в подсетях облачной сети:
yc alb load-balancer create ddos-protect-alb \ --network-name ddos-network \ --location subnet-name=ddos-network-ru-a,zone=ru-central1-a \ --location subnet-name=ddos-network-ru-b,zone=ru-central1-b \ --location subnet-name=ddos-network-ru-d,zone=ru-central1-dПодробнее о команде
yc alb load-balancer createчитайте в справочнике CLI. -
Добавьте обработчик:
yc alb load-balancer add-listener ddos-protect-alb \ --listener-name ddos-listener \ --http-router-id <идентификатор_HTTP-роутера> \ --external-ipv4-endpoint port=80, address=<IP-адрес_с_защитой_от_DDoS>Подробнее о команде
yc alb load-balancer add-listenerчитайте в справочнике CLI.
После создания балансировщика, проверьте его работу.
Проверьте работу балансировщика
Проверьте доступность сервиса на хосте alb-with-ddos.com. Для этого выполните команду:
curl \
--header "Host: alb-with-ddos.com" \
http://<IP-адрес_L7-балансировщика>
Результат:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Как удалить созданные ресурсы
Чтобы остановить работу хостинга и перестать платить за созданные ресурсы:
-
Удалите нетарифицируемые ресурсы, которые блокируют удаление тарифицируемых ресурсов:
-
Удалите группу ВМ
ddos-group. -
Удалите зарезервированный статический публичный IP-адрес.