Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Смарт-Софт NGFW
С помощью руководства вы развернете защищенную сетевую инфраструктуру на основе Смарт-Софт Traffic Inspector Next Generation (TING)mgmt содержит ресурсы для управления инфраструктурой. В облаке каждому сегменту соответствует свой каталог и своя облачная сеть VPC. Связь между сегментами происходит через виртуальную машину Next-Generation Firewall (NGFW)
Схема решения представлена ниже.
Решение включает следующие основные сегменты (каталоги):
- Каталог public предназначен для размещения ресурсов с доступом из сети интернет.
- Каталог mgmt предназначен для управления облачной инфраструктурой и размещения служебных ресурсов. Включает в себя две ВМ для защиты инфраструктуры и сегментации сети на зоны безопасности (
fw-aиfw-b) и ВМ c настроенным WireGuard VPN для защищенного доступа к сегменту управления (jump-vm). - Каталог dmz предоставляет возможность публикации приложений с открытым доступом из внешней сети интернет.
Более подробное описание приведено в репозитории проекта
Чтобы развернуть защищенную высокодоступную сетевую инфраструктуру с выделением DMZ на основе Смарт-Софт TING:
- Подготовьте облако к работе.
- Подготовьте окружение.
- Разверните ресурсы.
- Настройте NGFW.
- Включите работу модуля route-switcher.
- Протестируйте работоспособность и отказоустойчивость решения.
- Требования к развертыванию в продуктивной среде.
Если созданные ресурсы вам больше не нужны, удалите их.
Next-Generation Firewall
NGFW используется для защиты и сегментации облачной сети с выделением DMZ-зоны для размещения публичных приложений.
В Yandex Cloud Marketplace доступно несколько вариантов NGFW. В данном сценарии используется решение Смарт-Софт Traffic Inspector Next Generation (TING), предоставляющее следующие возможности:
- межсетевой экран следующего поколения: защищает виртуальную сеть от несанкционированного доступа извне, обеспечивает NAT, проброс портов, перехват пакетов;
- система обнаружения и предотвращения вторжений: IDS/IPS распознает источники атак и атакуемые устройства по определенным сигнатурам сетевого трафика и эффективно «очищает» его;
- TCP/UDP-прокси-сервер общего назначения: прокси-сервер на базе Nginx обеспечивает балансировку нагрузки, переопределение заголовков веб-сервера, обработку TCP- и UDP-трафика;
- продукт входит в реестр российского ПО и сертифицирован ФСТЭК России на соответствие требованиям к межсетевым экранам типа «Б» 4-го класса защиты, системам обнаружения вторжений уровня сети 4-го класса защиты, требованиям по безопасности информации — по 4-му уровню доверия.
Смарт-Софт TING в данном руководстве настроен с базовыми правилами межсетевого экранирования и NAT-трансляций.
Подробнее познакомиться с возможностями Смарт-Софт TING можно в Руководстве пользователя TING
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит:
- плата за постоянно работающие ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование Application Load Balancer (см. тарифы Yandex Application Load Balancer);
- плата за использование Network Load Balancer (см. тарифы Yandex Network Load Balancer);
- плата за использование публичных IP-адресов и исходящий трафик (см. тарифы Yandex Virtual Private Cloud);
- плата за использование функций (см. тарифы Yandex Cloud Functions).
Необходимые квоты
Важно
В руководстве предполагается развертывание ресурсоемкой инфраструктуры.
Убедитесь, что в облаке достаточно квот и они не заняты ресурсами для других задач.
Количество занимаемых руководством ресурсов
| Ресурс | Количество |
|---|---|
| Каталоги | 3 |
| Группы виртуальных машин | 1 |
| Виртуальные машины | 5 |
| vCPU виртуальных машин | 14 |
| RAM виртуальных машин | 22 ГБ |
| Диски | 5 |
| Объем SSD-дисков | 200 ГБ |
| Объем HDD-дисков | 30 ГБ |
| Облачные сети | 3 |
| Подсети | 6 |
| Таблицы маршрутизации | 2 |
| Группы безопасности | 6 |
| Статические публичные IP-адреса | 4 |
| Публичные IP-адреса | 4 |
| Статические маршруты | 5 |
| Бакеты | 1 |
| Функции Cloud Functions | 1 |
| Триггеры | 1 |
| Общий объем RAM всех запущенных функций | 128 МБ |
| Балансировщики Network Load Balancer | 2 |
| Целевые группы для Network Load Balancer | 2 |
| Балансировщики Application Load Balancer | 1 |
| Группы бэкендов для Application Load Balancer | 1 |
| Целевые группы для Application Load Balancer | 1 |
Подготовьте окружение
Создайте сервисный аккаунт с правами администратора на облако
-
В консоли управления
выберите каталог, в котором хотите создать сервисный аккаунт. -
В списке сервисов выберите Identity and Access Management.
-
Нажмите кнопку Создать сервисный аккаунт.
-
Введите имя сервисного аккаунта, например,
sa-terraform.Требования к формату имени:
- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
Имя сервисного аккаунта должно быть уникальным в рамках облака.
-
Нажмите кнопку Создать.
-
Назначьте сервисному аккаунту роль администратора:
- На стартовой странице
консоли управления выберите облако. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Сервисные аккаунты и выберите сервисный аккаунт
sa-terraform. - Нажмите кнопку
Добавить роль и выберите рольadmin. - Нажмите кнопку Сохранить.
- На стартовой странице
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Создайте сервисный аккаунт:
yc iam service-account create --name sa-terraformГде
name— имя сервисного аккаунта. Требования к имени:- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
Результат:
id: ajehr0to1g8b******** folder_id: b1gv87ssvu49******** created_at: "2024-01-04T09:03:11.665153755Z" name: sa-terraform -
Назначьте аккаунту роль администратора:
yc resource-manager cloud add-access-binding <идентификатор_облака> \ --role admin \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>Результат:
done (1s)
Чтобы создать сервисный аккаунт, воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
Чтобы назначить сервисному аккаунту роль на облако или каталог, воспользуйтесь методом REST API updateAccessBindings для ресурса Cloud или Folder:
-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Узнайте ID каталога с сервисными аккаунтами.
-
Получите IAM-токен для авторизации в API Yandex Cloud.
-
Получите список сервисных аккаунтов в каталоге, чтобы узнать их идентификаторы:
export FOLDER_ID=b1gvmob95yys******** export IAM_TOKEN=CggaATEVAgA... curl \ --header "Authorization: Bearer ${IAM_TOKEN}" \ "https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=${FOLDER_ID}"Результат:
{ "serviceAccounts": [ { "id": "ajebqtreob2d********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-18T13:42:40Z", "name": "my-robot", "description": "my description" } ] } -
Сформируйте тело запроса, например в файле
body.json. В свойствеactionукажитеADD, в свойствеroleId— нужную роль, напримерeditor, а в свойствеsubject— типserviceAccountи идентификатор сервисного аккаунта:body.json:
{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "ajebqtreob2d********", "type": "serviceAccount" } } }] } -
Назначьте роль сервисному аккаунту. Например, на каталог с идентификатором
b1gvmob95yys********:export FOLDER_ID=b1gvmob95yys******** export IAM_TOKEN=CggaAT******** curl \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:updateAccessBindings"
Установите необходимые утилиты
-
Установите Git
с помощью команды:sudo apt install git -
Установите Terraform:
-
Перейдите в корневую папку:
cd ~ -
Создайте папку
terraformи перейдите в нее:mkdir terraform cd terraform -
Выберите версию Terraform и дистрибутив для вашей платформы. В данном руководстве используется дистрибутив Terraform версии 1.12.1 для платформы Linux. Скачайте файл:
curl \ --location \ --remote-name \ https://hashicorp-releases.yandexcloud.net/terraform/1.12.1/terraform_1.12.1_linux_arm64.zip -
Установите утилиту
zipи распакуйте zip-архив:apt install zip unzip terraform_1.12.1_linux_arm64.zip -
Добавьте путь к папке, в которой находится исполняемый файл, в переменную
PATH:export PATH=$PATH:~/terraform -
Убедитесь, что Terraform установлен, выполнив команду:
terraform -help
-
-
Создайте конфигурационный файл с указанием источника провайдеров для Terraform:
-
Создайте файл
.terraformrcс помощью встроенного редактораnano:cd ~ nano .terraformrc -
Добавьте в него следующий блок:
provider_installation { network_mirror { url = "https://terraform-mirror.yandexcloud.net/" include = ["registry.terraform.io/*/*"] } direct { exclude = ["registry.terraform.io/*/*"] } }Подробнее о настройках зеркал см. в документации Terraform
.
-
Разверните ресурсы
-
Клонируйте репозиторий
из GitHub и перейдите в папку сценарияyc-dmz-with-high-available-ting-ngfw:git clone https://github.com/yandex-cloud-examples/yc-dmz-with-high-available-ting-ngfw.git cd yc-dmz-with-high-available-ting-ngfw -
Настройте профиль CLI для выполнения операций от имени сервисного аккаунта:
CLIЕсли у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.-
Создайте авторизованный ключ для сервисного аккаунта и запишите его в файл:
yc iam key create \ --service-account-id <идентификатор_сервисного_аккаунта> \ --folder-id <id_каталога_с_сервисным_аккаунтом> \ --output key.jsonГде:
service-account-id— идентификатор сервисного аккаунта;folder-id— идентификатор каталога, в котором создан сервисный аккаунт;output— имя файла с авторизованным ключом.
Результат:
id: aje8nn871qo4******** service_account_id: ajehr0to1g8b******** created_at: "2023-03-04T09:16:43.479156798Z" key_algorithm: RSA_2048 -
Создайте профиль CLI для выполнения операций от имени сервисного аккаунта:
yc config profile create sa-terraformРезультат:
Profile 'sa-terraform' created and activated -
Задайте конфигурацию профиля:
yc config set service-account-key key.json yc config set cloud-id <идентификатор_облака> yc config set folder-id <идентификатор_каталога>Где:
service-account-key— файл с авторизованным ключом сервисного аккаунта;cloud-id— идентификатор облака;folder-id— идентификатор каталога.
-
Добавьте аутентификационные данные в переменные окружения:
export YC_TOKEN=$(yc iam create-token)
-
-
Получите IP-адрес вашего ПК:
curl 2ip.ruРезультат:
192.2**.**.** -
Откройте файл
terraform.tfvarsс помощью редактораnanoи отредактируйте:-
Строку, содержащую идентификатор облака:
cloud_id = "<идентификатор_облака>" -
Строку, содержащую список разрешенных публичных IP-адресов для доступа к ВМ
jump-vm:trusted_ip_for_access_jump-vm = ["<внешний_IP_адрес_вашего_ПК>/32"]
Описание переменных в terraform.tfvars
Название
параметраНужно
изменениеОписание Тип Пример cloud_idда Идентификатор вашего облака в Yandex Cloud stringb1g8dn6s3v2e********az_name_list- Список из двух зон доступности Yandex Cloud для размещения ресурсов list(string)["ru-central1-a", "ru-central1-b"]security_segment_names- Список названий сегментов. Первый сегмент для размещения ресурсов управления, второй — с публичным доступом в интернет, третий — для DMZ. Если требуются дополнительные сегменты, то нужно добавлять их в конец списка. При добавлении сегмента обязательно добавьте префиксы для подсетей в списки zone1_subnet_prefix_listиzone2_subnet_prefix_list.list(string)["mgmt", "public", "dmz"]zone1_subnet_prefix_list- Список сетевых префиксов в первой зоне доступности для подсетей, соответствующих списку названий сегментов security_segment_names. По одному префиксу для сегмента.list(string)["192.168.1.0/24", "172.16.1.0/24", "10.160.1.0/24"]zone2_subnet_prefix_list- Список сетевых префиксов во второй зоне доступности для подсетей, соответствующих списку названий сегментов security_segment_names. По одному префиксу для сегмента.list(string)["192.168.2.0/24", "172.16.2.0/24", "10.160.2.0/24"]public_app_port- TCP-порт опубликованного в DMZ приложения для подключения из сети интернет number80internal_app_port- Внутренний TCP-порт опубликованного в DMZ приложения, на который NGFW будет направлять трафик. Может отличаться от public_app_portили совпадать с ним.number8080trusted_ip_for_access_jump-vmда Список публичных IP-адресов и подсетей, с которых разрешено подключение к Jump ВМ. Используется во входящем правиле группы безопасности для Jump ВМ. list(string)["A.A.A.A/32", "B.B.B.0/24"]vm_admin_username- Имя пользователя для подключения к Jump ВМ по SSH stringvm-adminfw_admin_username- Имя пользователя для подключения к FW по HTTPS и SSH stringadminwg_port- UDP-порт для входящих соединений в настройках WireGuard на Jump ВМ number51820wg_client_dns- Список адресов DNS-серверов в облачной сети управления, которые будет использовать рабочая станция администратора после поднятия туннеля WireGuard к Jump ВМ string192.168.1.2, 192.168.2.2 -
-
Разверните ресурсы в облаке с помощью Terraform:
-
Выполните инициализацию Terraform:
terraform init -
Проверьте конфигурацию Terraform файлов:
terraform validate -
Проверьте список создаваемых облачных ресурсов:
terraform plan -
Создайте ресурсы:
terraform apply
-
-
После завершения процесса
terraform applyв командной строке будет выведен список информации о развернутых ресурсах. В дальнейшем его можно будет посмотреть с помощью командыterraform output:Посмотреть информацию о развернутых ресурсах
Название Описание Пример значения dmz-web-server-nlb_ip_addressIP-адрес балансировщика трафика в сегменте dmz, за которым находится целевая группа с веб-серверами для тестирования публикации приложения из DMZ. Используется для настройки Destination NAT в FW."10.160.1.100"fw-a_admin_passwordПароль по умолчанию для доступа к FW-A "fv4a3n5eqf2dbddg4t3h"fw-a_ip_addressIP-адрес в сети управления для FW-A "192.168.1.10"fw-alb_public_ip_addressПубличный IP-адрес балансировщика ALB. Используется для обращения к опубликованному в DMZ приложению из сети интернет. "C.C.C.C"fw-b_admin_passwordПароль по умолчанию для доступа к FW-B "epdn4qrm1imbakudbu5c"fw-b_ip_addressIP-адрес в сети управления для FW-B "192.168.2.10"jump-vm_path_for_WireGuard_client_configФайл конфигурации для защищенного VPN-подключения с помощью клиента WireGuard к Jump ВМ "./jump-vm-wg.conf"jump-vm_public_ip_address_jump-vmПубличный IP-адрес Jump ВМ "D.D.D.D"path_for_private_ssh_keyФайл с закрытым ключом для подключения по протоколу SSH к ВМ ( jump-vm,fw-a,fw-b, веб-серверам в сегментеdmz)"./pt_key.pem"
Настройте NGFW
В руководстве приводятся шаги настройки FW-A и FW-B с базовыми правилами межсетевого экранирования и NAT-трансляций, необходимыми для проверки работоспособности и тестирования отказоустойчивости в руководстве, но недостаточными для развертывания инфраструктуры в продуктивной среде.
Подключитесь к сегменту управления через VPN
После развертывания инфраструктуры в каталоге mgmt появится ВМ jump-vm на основе образа Ubuntu с настроенным WireGuard VPNjump-vm для доступа к подсетям сегментов mgmt, dmz, public.
Вы также можете подключиться к Jump ВМ по SSH, используя SSH-ключ из вывода terraform output и логин из значения переменной vm_admin_username.
Чтобы настроить VPN-туннель:
-
Установите
на ваш ПК приложение WireGuard. -
Откройте приложение WireGuard и нажмите кнопку Add Tunnel.
-
В появившемся диалоге выберите файл
jump-vm-wg.confв папкеyc-dmz-with-high-available-ting-ngfw. -
Нажмите кнопку Activate, чтобы активировать туннель.
-
Проверьте сетевую связность с сервером управления через VPN-туннель WireGuard, в терминале выполнив команду:
ping 192.168.1.101Важно
Если пакеты не достигают сервера управления, убедитесь, что в группе безопасности
mgmt-jump-vm-sgв правилах входящего трафика указан верный внешний IP-адрес вашего ПК.
Настройте межсетевой экран FW-A
Подключитесь к веб-интерфейсу управления FW-A по адресу https://192.168.1.10. Учетная запись администратора: логин из значения переменной fw_admin_username, пароль из вывода terraform output fw-a_admin_password (без кавычек).
Настройте сеть
-
В левом меню в секции Сводка выберите Пароль. Укажите старый пароль из вывода
terraform output fw-a_admin_passwordи задайте новый пароль. -
В левом меню в секции Система выберите Настройки -> Общие. В поле Имя хоста укажите
fw-a. В поле Часовой пояс выберите Ваш часовой пояс. В разделе DNS-серверы укажите IP-адрес192.168.1.2облачного DNS-сервера в сегментеmgmt. Нажмите Сохранить. -
В левом меню в секции Службы выберите Сетевое время -> Общие. В разделе Серверы времени укажите адреса NTP-серверов (см. список рекомендуемых NTP-серверов). Активируйте чекбокс напротив предпочтительного сервера в столбце Предпочитать. Нажмите Сохранить.
-
В левом меню в секции Интерфейсы выберите [WAN]. В поле Описание укажите
mgmt. Нажмите Сохранить. -
В левом меню в секции Система выберите Маршруты -> Конфигурация. Нажмите кнопку с символом
+для добавления маршрута. В поле Адрес сети укажите192.168.2.0/24. В поле Шлюз выберитеMGMT_DHCP - 192.168.1.1. В поле Описание укажитеroute to mgmt-zone2. Нажмите Сохранить. Нажмите Применить. -
В левом меню в секции Интерфейсы выберите Назначения портов. В поле Новый интерфейс выберите порт
vtnet1и в поле Описание укажитеpublic. Нажмите кнопку с символом+. В поле Новый интерфейс выберите портvtnet2и в поле Описание укажитеdmz. Нажмите кнопку с символом+. Нажмите Сохранить. -
В левом меню в секции Интерфейсы выберите [public]. В поле Включен активируйте чекбокс Включить интерфейс. В поле Тип конфигурации IPv4 выберите
DHCP. Нажмите Сохранить. -
В левом меню в секции Интерфейсы выберите [dmz]. В поле Включен активируйте чекбокс Включить интерфейс. В поле Тип конфигурации IPv4 выберите
DHCP. Нажмите Сохранить. -
Вверху страницы появится сообщение об изменении конфигурации интерфейса. Нажмите Применить изменения.
-
В левом меню в секции Система выберите Маршруты -> Конфигурация. Нажмите кнопку с символом
+для добавления маршрута. Добавьте статические маршруты согласно таблице ниже. После добавления всех маршрутов нажмите Применить.
| Адрес сети | Шлюз | Описание |
|---|---|---|
10.160.2.0/24 |
DMZ_DHCP - 10.160.1.1 |
route to dmz-zone2 |
198.18.235.0/24 |
MGMT_DHCP - 192.168.1.1 |
route to nlb-healthcheck-net1 |
198.18.248.0/24 |
MGMT_DHCP - 192.168.1.1 |
route to nlb-healthcheck-net2 |
- В левом меню в секции Система выберите Шлюзы -> Одиночный. В строке шлюза
PUBLIC_DHCPнажмите символ с изображением карандаша. В поле Основной шлюз активируйте чекбокс и нажмите Сохранить. Вверху страницы нажмите Применить изменения.
Диагностика применения базовых настроек
-
В левом меню в секции Система выберите Маршруты -> Статус. Проверьте, что в выводе маршрутной информации отображаются добавленные статические маршруты и шлюз по умолчанию
172.16.1.1. -
В левом меню в секции Интерфейсы выберите Диагностика -> Просмотр DNS-записей. В поле Имя хоста или IP-адрес введите доменное имя ресурса в интернете, например,
ya.ru. Нажмите Просмотр DNS-записей и проверьте, что доменное имя разрешается в публичные IP-адреса. -
В левом меню в секции Интерфейсы выберите Диагностика -> Ping. В поле Хост введите доменное имя ресурса в интернете, например,
ya.ru. Нажмите Ping и проверьте, что ping успешно выполняется. В поле Хост введите IP-адрес облачного шлюза по умолчанию192.168.1.1в сегментеmgmt. Нажмите Ping и проверьте, что ping успешно выполняется.--- ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.293/0.471/0.664/0.152 ms
Настройка базовых политик безопасности
- В левом меню в секции Межсетевой экран выберите Псевдонимы. С помощью кнопки с символом
+добавьте псевдонимы в соответствии с таблицей ниже. После добавления всех псевдонимов на странице Межсетевой экран: Псевдонимы нажмите Применить.
| Имя | Тип | Содержание |
|---|---|---|
mgmt |
Сеть | 192.168.1.0/24192.168.2.0/24 |
dmz |
Сеть | 10.160.1.0/2410.160.2.0/24 |
public |
Сеть | 172.16.1.0/24172.16.2.0/24 |
healthcheck_net |
Сеть | 198.18.235.0/24198.18.248.0/24 |
dmz_web_server |
Хост | 10.160.1.100 |
TCP_8080 |
Порт | 8080 |
yandex |
Хост | ya.ru |
-
В левом меню в секции Межсетевой экран выберите Правила -> mgmt. По умолчанию в TING созданы правила, разрешающие доступ на сетевой интерфейс FW в
mgmtсегменте по портам443,22,80. Отредактируйте эти правила, нажав последовательно на символ с изображением карандаша напротив каждого правила:- Правило для порта
80используется для проверок состояния FW балансировщиком NLBroute-switcher-lb-.... В поле Отправитель выберите псевдонимhealthcheck_net. В поле Описание укажитеNLB healthcheck. Нажмите Сохранить. - Правило для порта
443используется для управления FW по протоколу HTTPS. В поле Отправитель выберите псевдонимmgmt. В поле Описание укажитеHTTPS FW management. Опционально в поле Журналирование активируйте чекбокс Журналировать пакеты, соответствующие правилу. Нажмите Сохранить. - Правило для порта
22используется для управления FW по протоколу SSH. В поле Отправитель выберите псевдонимmgmt. В поле Описание укажитеSSH FW management. Опционально в поле Журналирование активируйте чекбокс Журналировать пакеты, соответствующие правилу. Нажмите Сохранить.
- Правило для порта
-
В правилах межсетевого экрана для интерфейса
mgmtдобавьте правило для доступа из сегментаmgmtк сегментуdmzдля задач управления. Для добавления правила нажмите кнопку с символом+. В поле Отправитель выберите псевдонимmgmt. В поле Получатель выберите псевдонимdmz. В поле Описание укажитеmgmt to dmz. Опционально в поле Журналирование активируйте чекбокс Журналировать пакеты, соответствующие правилу. Нажмите Сохранить. -
В левом меню в секции Межсетевой экран выберите Правила -> dmz. Для проверки работоспособности и тестирования отказоустойчивости добавьте правило для отправки ICMP-пакетов из
dmzсегмента в интернет к доменуya.ru. Чтобы добавить правило, нажмите кнопку с символом+. В поле Протокол выберитеICMP. Тип ICMP оставьте любой. В поле Отправитель выберите псевдонимdmz. В поле Получатель выберите псевдонимyandex. В поле Описание укажитеping from dmz to ya.ru. Опционально в поле Журналирование активируйте чекбокс Журналировать пакеты, соответствующие правилу. Нажмите Сохранить. -
После добавления всех правил на странице Межсетевой экран: Правила: dmz нажмите Применить.
Примечание
Сетевой пакет проверяется на совпадение с критериями правил по порядку, сверху вниз. Порядком правил в списке можно управлять.
Если сетевой пакет удовлетворяет критериям правила, то к пакету применяется действие, заданное в правиле. Если к пакету применено правило, то обработка пакета межсетевым экраном прекращается — такой пакет далее не будет сверяться с оставшимися правилами в списке.
Если сетевой пакет не удовлетворяет критериям ни одного правила, то пакет блокируется (т. е. отбрасывается без индикации удаленной стороне).
-
В левом меню в секции Межсетевой экран выберите NAT -> Переадресация портов. Добавьте правило для направления запросов пользователей на сетевой балансировщик трафика в сегменте
dmz, за которым находится группа веб-серверов приложения. Нажмите кнопку с символом+для добавления правила. В поле Интерфейс выберите только интерфейсpublic. В поле Отправитель нажмите Дополнительно, затем выберите псевдонимpublic. В поле Получатель выберитеpublic адрес. В поле Диапазон портов назначения выберитеTCP_8080для полей от: и к:. В поле Перенаправление целевого IP-адреса выберите псевдонимdmz_web_server. В поле Целевой порт перенаправления выберитеTCP_8080. Опционально в поле Журналирование активируйте чекбокс для журналирования пакетов. В поле Описание укажитеDNAT public to dmz-web-server. В поле Ассоциация правила фильтрации выберитеДобавить ассоциированное правило. Нажмите Сохранить. -
В левом меню в секции Межсетевой экран выберите NAT -> Исходящий. В разделе Режим включите настройку
Ручное создание правил исходящего NAT (правила не будут созданы автоматически). Нажмите Сохранить. -
На странице Межсетевой экран: NAT: Исходящий добавьте правило, которое обеспечивает прохождение ответа от приложения через тот же FW, через который поступил запрос от пользователя:
- Нажмите кнопку с символом
+для добавления правила. - В поле Интерфейс выберите
dmz. - В поле Протокол выберите
TCP. - В поле IP-адрес источника выберите псевдоним
public. - В поле IP-адрес назначения выберите псевдоним
dmz_web_server. - В поле Порт назначения выберите
TCP_8080. - В поле Транслируемый IP-адрес / целевой IP-адрес оставьте
Адрес интерфейса. - Опционально в поле Журналирование активируйте чекбокс Журналировать пакеты, соответствующие правилу.
- В поле Описание укажите
SNAT public to dmz-web-server. - Нажмите Сохранить.
- Нажмите кнопку с символом
-
На странице Межсетевой экран: NAT: Исходящий добавьте правило для предоставления доступа в интернет из сегмента
dmz, чтобы заголовки пакетов с запросами из сегментаdmzв интернет транслировались в Source IP интерфейса FW-a в сегментеpublic:- Нажмите кнопку с символом
+для добавления правила. - В поле Интерфейс выберите
public. - В поле IP-адрес источника выберите псевдоним
dmz. - В поле Транслируемый IP-адрес / целевой IP-адрес оставьте
Адрес интерфейса. - Опционально в поле Журналирование активируйте чекбокс Журналировать пакеты, соответствующие правилу.
- В поле Описание укажите
SNAT dmz to public. - Нажмите Сохранить.
- Нажмите кнопку с символом
-
После добавления всех правил NAT на странице Межсетевой экран: NAT: Исходящий нажмите Применить изменения.
Примечание
После настройки правил межсетевого экрана, правил NAT и проверки доступа к управлению FW можете отключить правило антиблокировки управления. Перед отключением антиблокировки убедитесь, что у вас есть правило межсетевого экрана, которое позволяет вам подключиться к интерфейсу управления FW. Иначе вы заблокируете себе доступ к управлению.
Чтобы отключить антиблокировку управления, в левом меню в секции Межсетевой экран выберите Настройки -> Дополнительно. В поле Отключить анти-блокировку активируйте чекбокс Отключить правило анти-блокировки управления. Нажмите Сохранить.
Настройте межсетевой экран FW-B
Подключитесь к веб-интерфейсу управления FW-B по адресу https://192.168.2.10. Учетная запись администратора: логин из значения переменной fw_admin_username, пароль из вывода terraform output fw-b_admin_password (без кавычек).
Настройте сеть
-
В левом меню в секции Сводка выберите Пароль. Укажите старый пароль из вывода
terraform output fw-b_admin_passwordи задайте новый пароль. -
В левом меню в секции Система выберите Настройки -> Общие. В поле Имя хоста укажите
fw-b. В поле Часовой пояс выберите Ваш часовой пояс. В разделе DNS-серверы укажите IP-адрес192.168.2.2облачного DNS-сервера в сегментеmgmt. Нажмите Сохранить. -
В левом меню в секции Службы выберите Сетевое время -> Общие. В разделе Серверы времени укажите адреса NTP-серверов (см. список рекомендуемых NTP-серверов). Активируйте чекбокс напротив предпочтительного сервера в столбце Предпочитать. Нажмите Сохранить.
-
В левом меню в секции Интерфейсы выберите [WAN]. В поле Описание укажите
mgmt. Нажмите Сохранить. -
В левом меню в секции Система выберите Маршруты -> Конфигурация. Нажмите кнопку с символом
+для добавления маршрута. В поле Адрес сети укажите192.168.1.0/24. В поле Шлюз выберитеMGMT_DHCP - 192.168.2.1. В поле Описание укажитеroute to mgmt-zone1. Нажмите Сохранить. Нажмите Применить. -
В левом меню в секции Интерфейсы выберите Назначения портов. В поле Новый интерфейс выберите порт
vtnet1и в поле Описание укажитеpublic. Нажмите кнопку с символом+. В поле Новый интерфейс выберите портvtnet2и в поле Описание укажитеdmz. Нажмите кнопку с символом+. Нажмите Сохранить. -
В левом меню в секции Интерфейсы выберите [public]. В поле Включен активируйте чекбокс Включить интерфейс. В поле Тип конфигурации IPv4 выберите
DHCP. Нажмите Сохранить. -
В левом меню в секции Интерфейсы выберите [dmz]. В поле Включен активируйте чекбокс Включить интерфейс. В поле Тип конфигурации IPv4 выберите
DHCP. Нажмите Сохранить. -
Вверху страницы появится сообщение об изменении конфигурации интерфейса. Нажмите Применить изменения.
-
В левом меню в секции Система выберите Маршруты -> Конфигурация. Нажмите кнопку с символом
+для добавления маршрута. Добавьте статические маршруты согласно таблице ниже. После добавления всех маршрутов нажмите Применить.Адрес сети Шлюз Описание 10.160.1.0/24DMZ_DHCP - 10.160.2.1route to dmz-zone1198.18.235.0/24MGMT_DHCP - 192.168.2.1route to nlb-healthcheck-net1198.18.248.0/24MGMT_DHCP - 192.168.2.1route to nlb-healthcheck-net2 -
В левом меню в секции Система выберите Шлюзы -> Одиночный. В строке шлюза
PUBLIC_DHCPнажмите символ с изображением карандаша. В поле Основной шлюз активируйте чекбокс и нажмите Сохранить. Вверху страницы нажмите Применить изменения.
Диагностика применения базовых настроек
-
В левом меню в секции Система выберите Маршруты -> Статус. Проверьте, что в выводе маршрутной информации отображаются добавленные статические маршруты и шлюз по умолчанию
172.16.2.1. -
В левом меню в секции Интерфейсы выберите Диагностика -> Просмотр DNS-записей. В поле Имя хоста или IP-адрес введите доменное имя ресурса в интернете, например,
ya.ru. Нажмите Просмотр DNS-записей и проверьте, что доменное имя разрешается в публичные IP-адреса. -
В левом меню в секции Интерфейсы выберите Диагностика -> Ping. В поле Хост введите доменное имя ресурса в интернете, например,
ya.ru. Нажмите Ping и проверьте, чтоpingуспешно выполняется. В поле Хост введите IP-адрес облачного шлюза по умолчанию192.168.2.1в сегментеmgmt. Нажмите Ping и проверьте, чтоpingуспешно выполняется.--- ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.371/0.462/0.638/0.125 ms
Настройка базовых политик безопасности
Настройте базовые политики безопасности аналогично FW-A.
Включите работу модуля route-switcher
После завершения настройки NGFW убедитесь, что проверка состояния FW-A и FW-B выдает значение Healthy. Для этого в консоли управленияmgmt выберите сервис Network Load Balancer и перейдите на страницу сетевого балансировщика route-switcher-lb-.... Раскройте целевую группу и убедитесь, что состояния целевых ресурсов — Healthy. Если их состояние — Unhealthy, то необходимо проверить, что FW-A и FW-B запущены, функционируют и настроены.
Когда статус FW-A и FW-B изменится на Healthy, в файле route-switcher.tf измените значение параметра start_module модуля route-switcher на true. Для включения работы модуля выполните команды:
terraform plan
terraform apply
В течение 5 минут модуль route-switcher начнет работу по обеспечению отказоустойчивости исходящего трафика в сегментах.
Протестируйте работоспособность и отказоустойчивость решения
Проверьте работоспособность системы
-
Чтобы узнать публичный IP-адрес балансировщика, в терминале выполните команду:
terraform output fw-alb_public_ip_address -
Убедитесь, что сетевая инфраструктура доступна извне. Для этого в браузере перейдите по адресу:
http://<публичный_IP-адрес_балансировщика_ALB>Убедитесь, что открылась страница
Welcome to nginx!. -
Убедитесь, что разрешающие правила политики безопасности межсетевых экранов активны. Для этого на вашем ПК перейдите в папку
yc-dmz-with-high-available-ting-ngfwи подключитесь по SSH к одной из ВМ в DMZ-сегменте. Используйте для подключения логин из значения переменнойvm_admin_username:cd yc-dmz-with-high-available-ting-ngfw ssh -i pt_key.pem <логин>@<внутренний_IP-адрес_ВМ_в_DMZ_сегменте> -
Подключитесь к веб-интерфейсу управления FW-A по адресу
https://192.168.1.10. В меню слева в секции Межсетевой экран выберите Журналы -> Живой просмотр. В фильтре логов выберитеметка, затемсодержитиping from dmz to ya.ru. Нажмите кнопку с символом+. -
Чтобы проверить наличие доступа из ВМ в DMZ-сегменте к публичному ресурсу в сети интернет, выполните команду:
ping ya.ruКоманда должна выполниться в соответствии с разрешающим правилом
ping from dmz to ya.ru. -
На странице Межсетевой экран: Журналы: Живой просмотр проверьте, что отображается запись разрешенного трафика к ресурсу
ya.ru. Остановите ping. -
Убедитесь, что запрещающие правила политики безопасности выполняются.
Чтобы проверить отсутствие доступа к ВМ
Jump ВМв сегментеmgmtиз сегментаdmz, выполните команду:ping 192.168.1.101Выполнение команды должно завершиться ошибкой в соответствии с запрещающим правилом по умолчанию межсетевого экрана.
Проверка отказоустойчивости
-
На вашем ПК установите утилиту
httpingдля выполнения периодических HTTP-запросов:sudo apt-get install httping -
Чтобы узнать публичный IP-адрес балансировщика, в терминале выполните команду:
terraform output fw-alb_public_ip_address -
Запустите входящий трафик к опубликованному в DMZ-сегменте приложению с помощью запроса к публичному IP-адресу балансировщика ALB:
httping http://<публичный_IP-адрес_балансировщика_ALB> -
Откройте еще одно окно терминала и подключитесь по SSH к одной из ВМ в DMZ-сегменте. Используйте для подключения логин из значения переменной
vm_admin_username:ssh -i pt_key.pem <логин>@<внутренний_IP-адрес_ВМ_в_DMZ_сегменте> -
Установите пароль для пользователя, указанного в значении переменной
vm_admin_username:sudo passwd <имя_пользователя> -
В консоли управления
Yandex Cloud измените параметры этой ВМ:- В списке сервисов выберите Compute Cloud.
- На панели слева выберите
Виртуальные машины. - В строке с нужной ВМ нажмите
и выберите Редактировать. - В открывшемся окне в блоке Дополнительно включите опцию Доступ к серийной консоли.
- Нажмите кнопку Сохранить изменения.
-
Подключитесь к серийной консоли ВМ, введите логин, указанный в значении переменной
vm_admin_username, и пароль, созданный ранее. -
С помощью команды
pingзапустите исходящий трафик из ВМ в DMZ-сегменте к ресурсу в сети интернет:ping ya.ru -
В консоли управления
Yandex Cloud в каталогеmgmtостановите ВМfw-a, эмулируя отказ основного межсетевого экрана. -
Наблюдайте за пропаданием пакетов, отправляемых
httpingиping. После отказа FW-A может наблюдаться пропадание трафика на протяжении приблизительно одной минуты, после чего трафик должен восстановиться. -
Убедитесь, что в таблице маршрутизации
dmz-rtв каталогеdmzдляnext hopиспользуется адрес FW-B. -
В консоли управления
Yandex Cloud запустите ВМfw-a, эмулируя восстановление основного межсетевого экрана. -
Наблюдайте за пропаданием пакетов, отправляемых
httpingиping. После восстановления FW-A может наблюдаться пропадание трафика на протяжении приблизительно одной минуты, после чего трафик должен восстановиться. -
Убедитесь, что в таблице маршрутизации
dmz-rtв каталогеdmzдляnext hopиспользуется адрес FW-A.
Требования к развертыванию в продуктивной среде
- Сохраните закрытый SSH-ключ
pt_key.pemв надежное место либо пересоздайте его отдельно от Terraform. - Удалите Jump ВМ, если не планируете ей пользоваться.
- Если планируете использовать Jump ВМ для подключения к сегменту управления с помощью VPN WireGuard, то измените ключи для WireGuard на Jump ВМ и рабочей станции администратора.
- Настройте Смарт-Софт TING под ваши задачи в соответствии с корпоративной политикой безопасности.
- Не назначайте публичные IP-адреса на ВМ в сегментах, где используются таблицы маршрутизации с маршрутом по умолчанию
0.0.0.0/0через Смарт-Софт TING (подробности). Исключение — сегмент управленияmgmt, где в таблицах маршрутизации не используется маршрут по умолчанию0.0.0.0/0.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы, выполните команду:
terraform destroy
Важно
Terraform удалит все ресурсы без возможности восстановления: сети, подсети, виртуальные машины, балансировщики, каталоги и т. д.
Так как созданные ресурсы расположены в каталогах, то в качестве более быстрого способа удаления всех ресурсов можно использовать удаление всех каталогов через консоль управленияterraform.tfstate из папки yc-dmz-with-high-available-ting-ngfw на вашем ПК.