yandex-cloud-examples / yc-network-segmentation-with-checkpoint

Сегментация облачной инфраструктуры на зоны безопасности с помощью решения Check Point Next-Generation Firewall.
Apache License 2.0
0 stars 0 forks source link
checkpoint network-segmentation ngfw terraform vpc yandex-cloud yandexcloud

Сегментация облачной инфраструктуры с помощью решения Check Point Next-Generation Firewall

Содержание

Описание решения

Сценарий разворачивает в Yandex Cloud облачную инфраструктуру для решения задач:

Каждый сегмент сети (далее сегмент) содержит ресурсы одного назначения, обособленные от других ресурсов. Например, DMZ сегмент предназначен для размещения общедоступных приложений (обычно Frontend веб-сервера), а сегмент mgmt содержит ресурсы, используемые для управления облачной сетевой инфраструктурой. В облаке каждому сегменту соответствует свой каталог и своя облачная сеть VPC. Связь между сегментами происходит через виртуальную машину Check Point Next-Generation Firewall (NGFW), обеспечивающую комплексную защиту сегментов и контроль трафика между сегментами.

Если необходимо обеспечить отказоустойчивость NGFW и высокую доступность развернутых приложений, то используйте рекомендуемое решение.

Архитектура решения и основные компоненты

Архитектура решения

Описание элементов схемы:

Название элемента Описание Комментарии
VPC: public-vpc Сегмент сети public Для организации публичного доступа из интернет
VPC: mgmt-vpc Сегмент сети mgmt Для управления облачной инфраструктурой и размещения служебных ресурсов
VPC: dmz-vpc Сегмент сети DMZ Для размещения Frontend приложений, доступных из интернет
FW Виртуальная машина Check Point NGFW Для защиты инфраструктуры и сегментации сети на зоны безопасности
mgmt, public, dmz Интерфейсы ВМ Check Point NGFW Каждый интерфейс подключен в соответствующий VPC
Jump ВМ Виртуальная машина c настроенным WireGuard VPN Для защищенного VPN подключения к сегменту управления
Сервер управления FW Виртуальная машина c ПО Check Point Security Management Для централизованного управления решением Check Point
Приложение ВМ с веб-сервером Nginx Пример тестового приложения, развернутого в DMZ сегменте

Next-Generation Firewall

В Yandex Cloud Marketplace доступно несколько вариантов NGFW. В данном сценарии используется решение Check Point CloudGuard IaaS, предоставляющее следующие возможности:

Решение Check Point CloudGuard IaaS доступно в Yandex Cloud Marketplace в вариантах Pay as you go и BYOL. В этом примере используется BYOL вариант с Trial периодом 15 дней:

Для использования в продуктивной среде рекомендуется рассматривать варианты:

Группы безопасности

Для контроля трафика между ресурсами внутри сегмента используются группы безопасности.

Разворачиваемые сегменты и ресурсы

Решение создает в облаке ресурсы для 3 сегментов

Сегмент Описание Ресурсы Каталоги и сети Группы безопасности
public Размещение ресурсов с доступом из интернет + +
mgmt Управление облачной инфраструктурой Check Point NGFW, сервер управления Check Point, Jump ВМ с WireGuard для подключения из интернет + +
dmz Размещение Frontend приложений, доступных из интернет Виртуальная машина с веб-сервером Nginx для примера + +

Важно

Если в будущем ожидается увеличение количества сегментов, то рекомендуется развернуть их заранее, т.к. ВМ с образом NGFW в облаке не поддерживает добавление новых сетевых интерфейсов после её создания. Дополнительные сегменты можно указать в файле terraform.tfvars.

Действия по развертыванию сценария

Чтобы развернуть защищенную сетевую инфраструктуру на основе Check Point Next-Generation Firewall:

  1. Подготовьте облако к работе
  2. Подготовьте окружение
  3. Разверните ресурсы
  4. Настройте NGFW
  5. Протестируйте работоспособность решения

Если созданные ресурсы вам больше не нужны, удалите их.

Важно

Без шагов настройки NGFW проверить работоспособность решения не получится.

Подготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Биллинг убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его. Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.
  3. Проверьте наличие учетной записи в облаке с правами admin на облако.

Необходимые платные ресурсы

В стоимость поддержки инфраструктуры входит:

Необходимые квоты

Убедитесь, что в облаке достаточно квот и они не заняты ресурсами для других задач.

Посмотреть справочную информацию по количеству ресурсов, создаваемых в сценарии | Ресурс | Количество | | ----------- | ----------- | | Каталоги | 3 | | Виртуальные машины | 4 | | vCPU виртуальных машин | 12 | | RAM виртуальных машин | 20 ГБ | | Диски | 4 | | Объем SSD дисков | 240 ГБ | | Объем HDD дисков | 20 ГБ | | Облачные сети | 3 | | Подсети | 3 | | Таблицы маршрутизации | 2 | | Группы безопасности | 5 | | Статические публичные IP-адреса | 2 | | Статические маршруты | 3 |

Подготовьте окружение

В руководстве используется программное обеспечение для ОС Windows и подсистема Windows Subsystem for Linux. Инфраструктура разворачивается с помощью Terraform.

  1. Если WSL не установлена, установите ее.
  2. Дополнительно можно установить на подсистему WSL привычный вам дистрибутив ОС Linux, например, Ubuntu.

Важно

Все описанные далее действия в терминале выполняются в ОС Linux.

  1. Установите Git
  2. Установите Terraform
  3. Установите и настройте Yandex Cloud CLI

Разверните ресурсы

  1. Склонируйте репозиторий yandex-cloud-examples/yc-network-segmentation-with-checkpoint из GitHub и перейдите в папку сценария yc-network-segmentation-with-checkpoint:

    git clone https://github.com/yandex-cloud-examples/yc-network-segmentation-with-checkpoint.git
    cd yc-network-segmentation-with-checkpoint
  2. Настройте профиль CLI для выполнения операций от имени сервисного аккаунта (подробности).

  3. Добавьте аутентификационные данные в переменную окружения:

    export YC_TOKEN=$(yc iam create-token)
  4. Получите публичный IP-адрес вашего ПК:

      curl ifconfig.io
  5. Заполните файл terraform.tfvars вашими значениями переменных. Файл содержит примеры значений, но вы можете заменить их своими данными (идентификатор облака, название сегментов и IP адреса подсетей, порт приложения в dmz, параметры для подключения к Jump ВМ). Обязательно укажите идентификатор вашего облака cloud_id и список публичных IP адресов/подсетей trusted_ip_for_access_jump-vm, с которых разрешено подключение к Jump ВМ. Откройте файл terraform.tfvars и отредактируйте:

    1. Строку, содержащую идентификатор облака:

      cloud_id = "<идентификатор_облака>"
    2. Строку, содержащую список разрешенных публичных IP-адресов для доступа к ВМ jump-vm:

      trusted_ip_for_access_jump-vm = ["<внешний_IP_ПК>/32"]

    Важно

    Рекомендуется заранее указать дополнительные сегменты, если они могут потребоваться в будущем, т.к. ВМ с образом NGFW в облаке не поддерживает добавление новых сетевых интерфейсов после её создания.

    Посмотреть описание переменных в terraform.tfvars | Название
    параметра | Нужно
    изменение | Описание | Тип | Пример | | ----------- | ----------- | ----------- | ----------- | ----------- | | `cloud_id` | да | Идентификатор вашего облака в Yandex Cloud | `string` | `b1g8dn6s3v2eiid9dbci` | | `az_name` | - | Зона доступности Yandex Cloud для размещения ресурсов | `string` | `ru-central1-d` | | `security_segment_names` | - | Список названий сегментов. Первый сегмент для размещения ресурсов управления, второй с публичным доступом в интернет, третий для DMZ. Если требуются дополнительные сегменты, то нужно добавлять их в конец списка. При добавлении сегмента обязательно добавьте префикс для подсети в список `subnet_prefix_list`. | `list(string)` | `["mgmt", "public", "dmz"]` | | `subnet_prefix_list` | - | Список сетевых префиксов для подсетей, соответствующих списку названия сегментов `security_segment_names`. По одному префиксу для сегмента. | `list(string)` | `["192.168.1.0/24", "172.16.1.0/24", "10.160.1.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"]` | | `jump_vm_admin_username` | - | Имя пользователя для подключения к Jump ВМ по SSH | `string` | `admin` | | `wg_port` | - | UDP порт для входящих соединений в настройках WireGuard на Jump ВМ | `number` | `51820` |
  6. Разверните ресурсы в облаке с помощью Terraform:

    1. Выполните инициализацию Terraform:

      terraform init
    2. Проверьте конфигурацию Terraform файлов:

      terraform validate
    3. Проверьте список создаваемых облачных ресурсов:

      terraform plan
    4. Создайте ресурсы:

      terraform apply
  7. После завершения процесса terraform apply в командной строке будет выведен список информации о развернутых ресурсах. В дальнейшем его можно будет посмотреть с помощью команды terraform output:

    Посмотреть информацию о развернутых ресурсах | Название | Описание | Пример значения | | ----------- | ----------- | ----------- | | `dmz-web-server_ip_address` | IP адрес веб-сервера в сегменте dmz для тестирования публикации приложения из dmz. Используется для настройки Destination NAT в FW. | `10.160.1.100` | | `fw-mgmt-server_ip_address` | IP адрес сервера управления FW | `192.168.1.100` | | `fw_gaia_portal_mgmt-server_password` | Пароль по умолчанию для первоначального подключения по https к IP адресу сервера управления FW | `admin` | | `fw_mgmt_ip_address` | IP адрес FW в сети управления | `192.168.1.10` | | `fw_public_ip_address` | Публичный IP адрес для FW | `D.D.D.D` | | `fw_sic-password` | Однократный пароль (SIC) для добавления FW в сервер управления FW | Не показывается в общем выводе `terraform output`. Для отображения значения используйте `terraform output fw_sic-password`. | | `fw_smartconsole_mgmt-server_password` | Пароль для подключения к серверу управления FW с помощью графического приложения Check Point SmartConsole | Не показывается в общем выводе `terraform output`. Для отображения значения используйте `terraform output fw_smartconsole_mgmt-server_password`. | | `jump-vm_path_for_WireGuard_client_config` | Файл конфигурации для защищенного VPN подключения с помощью клиента WireGuard к Jump ВМ | `./jump-vm-wg.conf` | | `jump-vm_public_ip_address_jump-vm` | Публичный IP адрес Jump ВМ | `E.E.E.E` | | `path_for_private_ssh_key` | Файл с private ключом для подключения по протоколу SSH к ВМ (jump-vm, fw, mgmt-server, веб-сервер в сегменте dmz) | `./pt_key.pem` |

Настройте NGFW

Вы можете настроить FW под ваши задачи в соответствие с корпоративной политикой безопасности. Для управления и настройки решения Check Point используется графическое приложение SmartConsole, доступное для операционной системы Windows.

В качестве примера приводятся шаги настройки FW с базовыми политиками доступа (Access Control) и NAT, необходимыми для проверки работоспособности, но не являющимися достаточными для развертывания инфраструктуры в продуктивной среде.

Шаги настройки NGFW в этом сценарии состоят из следующей последовательности действий, выполняемых в SmartConsole:

Подробнее с возможностями Check Point и его настройкой можно познакомиться в бесплатном курсе Погружение в сетевую безопасность.

Подключитесь к сегменту управления через VPN

После развертывания инфраструктуры в каталоге mgmt появится ВМ jump-vm на основе образа Ubuntu с настроенным WireGuard VPN для защищенного подключения. Настройте VPN туннель к ВМ jump-vm на вашем ПК для доступа к подсетям сегментов mgmt, dmz, public.

Чтобы настроить VPN туннель:

  1. Получите имя пользователя в подсистеме Linux:

    whoami
  2. Установите на ваш ПК приложение WireGuard.

  3. Откройте приложение WireGuard и нажмите кнопку Add Tunnel.

  4. В появившемся диалоге выберите файл jump-vm-wg.conf в папке yc-network-segmentation-with-checkpoint. Чтобы найти папку, созданную в подсистеме Linux, например, Ubuntu, введите в адресной строке диалога путь к файлу:

    \\wsl$\Ubuntu\home\<имя_пользователя_Ubuntu>\yc-network-segmentation-with-checkpoint

    Где <имя_пользователя_Ubuntu> — имя пользователя текущего дистрибутива ОС Linux.

  5. Активируйте туннель нажатием на кнопку Activate.

  6. Проверьте сетевую связность с сервером управления через VPN туннель WireGuard, выполнив в терминале команду:

    ping 192.168.1.100

    Важно

    Если пакеты не достигают сервера управления, проверьте, что в группе безопасности mgmt-jump-vm-sg в правилах входящего трафика прописан верный публичный IP-адрес ПК.

Запустите консоль управления SmartConsole

Для управления и настройки решения Check Point установите и запустите графическое приложение SmartConsole:

  1. Подключитесь к серверу управления NGFW, перейдя в браузере по адресу https://192.168.1.100.

  2. Авторизуйтесь, используя логин admin и пароль admin.

  3. В открывшемся интерфейсе Gaia Portal скачайте графическое приложение SmartConsole. Для этого нажмите Manage Software Blades using SmartConsole. Download Now!.

  4. Установите приложение SmartConsole на ПК.

  5. Получите пароль доступа к SmartConsole:

    terraform output fw_smartconsole_mgmt-server_password
  6. Откройте SmartConsole и авторизуйтесь, указав логин admin, IP-адрес сервера управления 192.168.1.100 и пароль доступа к SmartConsole.

Добавьте FW

Добавьте FW в сервер управления, используя Wizard:

  1. Слева сверху в выпадающем списке Objects выберите More object types → Network Object → Gateways and Servers → New Gateway....

  2. Нажмите Wizard Mode.

  3. В открывшемся диалоге введите:

    • Gateway name: FW
    • Gateway platform: CloudGuard IaaS
    • IPv4: 192.168.1.10
  4. Нажмите Next.

  5. Получите пароль доступа к FW:

    terraform output fw_sic-password
  6. В поле One-time password введите пароль, полученный ранее.

  7. Нажмите Next и Finish.

Настройте сетевые интерфейсы шлюза FW

Настройте сетевой интерфейс eth0:

  1. На вкладке Gateways & Servers откройте диалог настроек FW. Для этого в списке кликните дважды на добавленный FW.
  2. На вкладке Network Management в таблице Topology выберите интерфейс eth0, нажмите Edit и в появившемся окне нажмите Modify....
  3. В разделе Security Zone активируйте Specify Security Zone и выберите InternalZone.

Аналогично настройте сетевые интерфейсы eth1, eth2:

  1. Для интерфейса eth1 укажите в разделе Security Zone зону ExternalZone.
  2. Для интерфейса eth2 в разделе Leads To выберите Override и активируйте Interface leads to DMZ. В разделе Security Zone укажите зону DMZZone.
Interface IPv4 address/mask Leads To Security Zone Anti Spoofing
eth0 192.168.1.10/24 This network (Internal) InternalZone Prevent and Log
eth1 172.16.1.10/24 Internet (External) ExternalZone Prevent and Log
eth2 10.160.1.10/24 This network, DMZ (Internal) DMZZone Prevent and Log
Настройка интерфейсов для FW Интерфейсы FW
Настройка mgmt интерфейса FW ![FW_eth0](./images/fw_eth0.png)
Настройка public интерфейса FW ![FW_eth1](./images/fw_eth1.png)
Настройка dmz интерфейса FW ![FW_eth2](./images/fw_eth2.png)

Создайте сетевые объекты

  1. Слева сверху в выпадающем списке Objects выберите New Network... и создайте сети со следующими данными:

    Name Network address Net mask
    mgmt 192.168.1.0 255.255.255.0
    public 172.16.1.0 255.255.255.0
    dmz 10.160.1.0 255.255.255.0
    Пример скриншота для public public сеть

    Для сети dmz настройте Automatic Hide NAT, чтобы скрыть адреса ВМ, которые находятся в DMZ сегменте и выходят в интернет, за IP адресом FW в сегменте public. Для этого:

    1. В диалоге редактирования сети dmz перейдите на вкладку NAT.
    2. Активируйте Add automatic address translation rules, выберите Hide из выпадающего списка и опцию Hide behind the gateway.
    Настройка NAT для dmz сети NAT для dmz сети
  2. Слева сверху в выпадающем списке Objects выберите New Host... и создайте хосты со следующими данными:

    Name IPv4 address
    dmz-web-server 10.160.1.100
    FW-public-IP 172.16.1.10
    Пример скриншота для dmz-web-server dmz-web-server
  3. Выберите More object types → Network Object → Service → New TCP... и создайте TCP-сервис для развернутого приложения в DMZ-сегменте, указав имя TCP_8080 и порт 8080.

    Скриншот TCP Service TCP Service

Определите правила политики безопасности

Чтобы добавить правило безопасности:

  1. На вкладке Security policies в разделе Access Control выберите подраздел Policy.
  2. В таблице правил нажмите правую кнопку мыши и напротив опции New Rule контекстного меню выберите Above или Below.
  3. В новой строке:
    • в колонке Name впишите Web-server port forwarding on FW;
    • в колонке Destination выберите объект FW-public-IP;
    • в колонке Services & Applications выберите объект http;
    • в колонке Action выберите опцию Accept;
    • в колонке Track выберите опцию Log.

Аналогично внесите остальные правила из ниже приведенной таблицы базовых правил для проверки работы политик FW, публикации тестового приложения из DMZ сегмента и тестирования отказоустойчивости.

No Name Source Destination VPN Services & Applications Action Track Install On
1 Web-server port forwarding on FW Any FW-public-IP Any http Accept Log Policy Targets (All gateways)
2 FW management mgmt FW, mgmt-server Any https, ssh Accept Log Policy Targets (All gateways)
3 Stealth Any FW, mgmt-server Any Any Drop Log Policy Targets (All gateways)
4 mgmt to DMZ mgmt dmz Any Any Accept Log Policy Targets (All gateways)
5 mgmt to public mgmt public Any Any Accept Log Policy Targets (All gateways)
6 ping from dmz to internet dmz ExternalZone Any icmp-reguests (Group) Accept Log Policy Targets (All gateways)
7 Cleanup rule Any Any Any Any Drop Log Policy Targets (All gateways)
Описание правил политики доступа Access Control - Policy | Номер | Имя | Описание | | ----------- | ----------- | ----------- | | 1 | Web-server port forwarding on FW | Разрешение доступа из интернет к IP адресу FW в public сегменте по порту TCP 80 | | 2 | FW management | Разрешение доступа к FW, серверу управления FW из mgmt сегмента для задач управления | | 3 | Stealth | Запрет доступа к FW, серверу управления FW из других сегментов | | 4 | mgmt to DMZ | Разрешение доступа из mgmt сегмента к dmz сегменту для задач управления | | 5 | mgmt to public | Разрешение доступа из mgmt сегмента к public сегменту для задач управления | | 6 | ping from dmz to internet | Разрешение ICMP пакетов из dmz сегмента в интернет для проверки работоспособности | | 7 | Cleanup rule | Запрет доступа для остального трафика |
Скриншот Access Control - Policy ![Access Control - Policy](./images/fw_access_control_policy.png)

Настройте статическую таблицу трансляции NAT

Destination NAT трансляции направляют запросы пользователей на веб-сервер приложения в dmz сегменте.

В заголовках пакетов с запросами от пользователей к опубликованному в DMZ приложению будет происходить трансляция Destination IP в IP адрес веб-сервера и Destination port в TCP порт 8080.

Чтобы настроить таблицы трансляции NAT шлюза FW:

  1. Перейдите в подраздел NAT раздела Access Control;
  2. В таблице правил в меню выберите Add rule on top.
  3. В новой строке:

    • в колонке Original Destination выберите объект FW-public-IP;
    • в колонке Original Services выберите объект http;
    • в колонке Translated Destination выберите объект dmz-web-server;
    • в колонке Translated Services выберите объект TCP_8080.

    В таблице NAT появится правило:

    No Original Source Original Destination Original Services Translated Source Translated Destination Translated Services Install On
    1 Any FW-public-IP http Original dmz-web-server TCP_8080 Policy Targets (All gateways)
    Скриншот Access Control - NAT NAT

Примените политики безопасности

  1. Вверху слева нажмите Install Policy.
  2. В открывшемся диалоге нажмите Publish & Install.
  3. В следующем диалоге нажмите Install и дождитесь завершения процесса.
Скриншот Install Policy ![Install Policy](./images/install_policy.png)

Протестируйте работоспособность решения

  1. Чтобы узнать публичный IP-адрес FW, выполните в терминале команду:

    terraform output fw_public_ip_address
  2. Проверьте, что сетевая инфраструктура доступна извне, перейдя в браузере по адресу:

    http://<Публичный_ip_адрес_FW>

    Если система доступна извне, должна открыться страница Welcome to nginx!.

  3. Проверьте, что активны разрешающие правила политики безопасности FW. Для этого на вашем ПК перейдите в папку yc-network-segmentation-with-checkpoint и подключитесь к ВМ в DMZ-сегменте по SSH:

    cd ~/yc-network-segmentation-with-checkpoint
    ssh -i pt_key.pem admin@<Внутренний_ip_адрес_ВМ_в_DMZ_сегменте>
  4. Чтобы проверить наличие доступа из ВМ в DMZ сегменте к публичному ресурсу в сети интернет, выполните команду:

    ping ya.ru

    Команда должна выполниться в соответствие с разрешающим правилом ping from dmz to internet.

  5. Проверьте, что выполняются запрещающие правила политики безопасности. Чтобы проверить отсутствие доступа к ВМ Jump ВМ в сегменте mgmt из сегмента dmz, выполните команду:

    ping 192.168.1.101

    Команда должна выполниться с ошибкой в соответствие с запрещающим правилом Cleanup rule.

  6. В SmartConsole в разделе LOGS & MONITOR на вкладке Logs найдите записи в моменты проведение тестов и проверьте, какие правила политики безопасности и действия были применены к трафику.

    Скриншот лога для правила Web-server port forwarding on FW Web-server port forwarding on FW
    Скриншот лога для правила ping from dmz to internet ping from dmz to internet
    Скриншот лога для правила Cleanup rule Cleanup rule

Требования к развертыванию в продуктивной среде

Как удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы выполните команду:

  terraform destroy

Terraform удалит все ресурсы без возможности восстановления: сети, подсети, виртуальные машины, каталоги и т.д.

Так как созданные ресурсы расположены в каталогах, то в качестве более быстрого способа удаления всех ресурсов можно использовать удаление всех каталогов через консоль Yandex Cloud с дальнейшим удалением файла terraform.tfstate из папки yc-network-segmentation-with-checkpoint на вашем ПК.