Реализация защищенной высокодоступной сетевой инфраструктуры с выделением 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-трансляций.
Подготовьте облако к работе
Зарегистрируйтесь в 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);
- плата за использование Смарт-Софт TING.
Необходимые квоты
Важно
В руководстве предполагается развертывание ресурсоемкой инфраструктуры.
Убедитесь, что в облаке достаточно квот и они не заняты ресурсами для других задач.
Количество занимаемых руководством ресурсов
Ресурс | Количество |
---|---|
Каталоги | 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.yandexcloud.kz/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.yandexcloud.kz/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 string
b1g8dn6s3v2e********
az_name_list
- Список из двух зон доступности Yandex Cloud для размещения ресурсов list(string)
["kz1-a", "kz1-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 приложения для подключения из сети интернет number
80
internal_app_port
- Внутренний TCP-порт опубликованного в DMZ приложения, на который NGFW будет направлять трафик. Может отличаться от public_app_port
или совпадать с ним.number
8080
trusted_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 string
vm-admin
fw_admin_username
- Имя пользователя для подключения к FW по HTTPS и SSH string
admin
wg_port
- UDP-порт для входящих соединений в настройках WireGuard на Jump ВМ number
51820
wg_client_dns
- Список адресов DNS-серверов в облачной сети управления, которые будет использовать рабочая станция администратора после поднятия туннеля WireGuard к Jump ВМ string
192.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_address
IP-адрес балансировщика трафика в сегменте dmz
, за которым находится целевая группа с веб-серверами для тестирования публикации приложения из DMZ. Используется для настройки Destination NAT в FW."10.160.1.100"
fw-a_admin_password
Пароль по умолчанию для доступа к FW-A "fv4a3n5eqf2dbddg4t3h"
fw-a_ip_address
IP-адрес в сети управления для 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_address
IP-адрес в сети управления для 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/24 192.168.2.0/24 |
dmz |
Сеть | 10.160.1.0/24 10.160.2.0/24 |
public |
Сеть | 172.16.1.0 172.16.2.0/24 |
healthcheck_net |
Сеть | 198.18.235.0/24 198.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/24
DMZ_DHCP - 10.160.2.1
route to dmz-zone1
198.18.235.0/24
MGMT_DHCP - 192.168.2.1
route to nlb-healthcheck-net1
198.18.248.0/24
MGMT_DHCP - 192.168.2.1
route 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
на вашем ПК.