Для обеспечения высокой доступности Palo Alto VM-Series Firewall используется конфигурация active/passive. В которой активный фаервол постоянно синхронизирует свою конфигурацию и информацию об активных сессиях с аналогично настроенным пассивным фаерволом. Существует два варианта достижения HA в AWS: "Secondary IP Move" и "Dataplane Interface Move".
Secondary IP Move
При недоступности активного фаервола, пассивный переходит в роль активного. Так же делает API запросы на перенос вторичных IP адресов с недоступного узла на себя и обновляет таблицы маршрутизации, для того чтобы траффик отправлялся на новый активный фаервол. Переключение ролей фаерволов в данном способе быстрее, чем в "Dataplane Interface Move".
Dataplane Interface Move
Как и в случае "Secondary IP Move", если пассивный фаервол обнаруживает, что активный больше недоступен, то он переходит в роль активного, но вместо переноса IP адресов, переносит ENI с недоступного фаервола на себя.
Так как планируется использовать VM Firewall как GlobalProtect для доступа к локальным ресурсам из вне, и фаерволы должны быть в разных AZ, подходит только вариант "Secondary IP Move", но в данном случае это будет EIP который ассоциирован с основным приватным IP адресом.
Для HA необходимо минимум 4 интерфейса на каждом из фаеволов:
- ENI0: MGMT — для управления и конфигурации через консоль или веб интерфейс. Так же этот интерфейс будет использоваться как HA1 линк
- ENI1: HA2 — для проверки состояния фаерволов
- ENI2: Untrust — интерфейс для подключения к GlobalProtect. На активном фаерволе с этим интерфейсом будет ассоциирован EIP
- ENI3: Trust — интерфейс, через который будут доступны локальные ресурсы
Нужно учитывать, что есть лимит на максимальное количество присоединенных ENI к инстансу в зависимости от его типа и размера. С лимитами можно ознакомится тут. В данном случае будут использоваться инстансы — m5.xlarge
Для наглядности диапазоны сетей будут формироваться следующим образом:
10.0."номер_фаервола"+"номер_интерфейса".0/24
Итого имеем:
По типам это будут публичные сети и изолированные/приватные (для GP им не нужен доступ в Интернет)
В итоге имеем следующую схему:
AWS Infrastructure
VPC
Перейдем в раздел "VPC" и выберем "Create VPC". Визард использовать не будем, создадим необходимые ресурсы сами. Укажем имя и CIDR, остальное оставим по умолчанию.
Во вкладке "VPC" найдем "Internet gateways" и выберем "Create internet gateway"
Приаттачим созданный IGW к нашей VPC
Subnets
Создадим необходимые сети, для этого перейдем "VPC" -> "Subnets" и выберем "Create subnet". Необходимо создать по 4 сети в 2-х AZ согласно таблице выше
Проверяем созданные сети, их CIDR и Availability zone
Route tables
Создадим 3 таблицы маршрутизации:
- PA-LAB-NETWORK-DEFAULT-RT
- PA-LAB-NETWORK-PUBLIC-RT
- PA-LAB-NETWORK-GP-TRUST-RT
Для этого перейдем "VPC" -> "Route tables" и выберем "Create route table"
Для "TRUST" зоны мы создаем отдельную таблицу, так как потом будем добавлять в нее маршруты на Transit Gateway.
Выберем таблицу маршрутизации "PA-LAB-NETWORK-PUBLIC-RT" перейдем во вкладку "Routes" и выберем "Edit routes" и добавим маршрут по умолчанию на IGW
Так же ассоциируем таблицу маршрутизации с публичными сетями:
- MGMT-A
- MGMT-B
- UNTRUST-A
- UNTRUST-B
Перейдем во вкладку "Subnet associations" и выберем "Edit subnet associations"
Так же ассоциируем таблицу "TRUST-RT" с сетями "TRUST-A" и "TRUST-B"
Теперь выбираем таблицу "DEFAULT-RT" и задем ее как основную таблицу.
Security Group
Далее нам нужно создать 4 группы безопасности:
- PA-LAB-NETWORK-GP-MGMT-SG
- PA-LAB-NETWORK-GP-HA-SG
- PA-LAB-NETWORK-GP-UNTRUST-SG
- PA-LAB-NETWORK-GP-TRUST-SG
Для HA можно оставить только необходимые порты, но мы просто разрешим траффик внутри группы безопасности.
Для этого перейдем "VPC" -> "Security" и выберем "Create security group". Создадим 4 группы безопасности со следующими правилами:
Проверяем группы безопасности, что они относятся к правильной VPC и их правила
ENI
Создадим 8 ENI согласно именам наших SG, ассоциируем с соответствующими группами безопасности, добавим описание и тег "Name".
Переходим в раздел "EC2" -> "Network & Security" -> "Network Interfaces" и выберем "Create network interface"
Проверяем созданные интерфейсы, что они относятся к правильной VPC, AZ и сетям
EIP
Теперь необходимо создать 3 EIP:
- GP-MGMT-A
- GP-MGMT-B
- GP-PORTAL
Для этого перейдем "VPC" -> "Virtual private cloud" -> "Elastic IPs" и выберем "Allocate Elastic IP address". И добавим тег "Name"
Проверяем созданные EIP
IP адреса "MGMT-A-EIP" и "MGMT-B-EIP" ассоциируем с соответствующими интерфейсами, "GP-PORTAL-IP" ассоциируем с интерфейсом "GP-UNTRUST-A", именно инстанс в AZ A будет у нас изначально активным.
IAM
Для HA режима необходимо создать IAM Policy со следующим содержимым:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:AttachNetworkInterface", "ec2:DetachNetworkInterface", "ec2:DescribeInstances", "ec2:DescribeNetworkInterfaces", "ec2:AssignPrivateIpAddresses", "ec2:AssociateAddress", "ec2:DescribeRouteTables" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Action": [ "ec2:ReplaceRoute" ], "Resource": [ "arn:aws:ec2:*:*:route-table/*" ], "Effect": "Allow" } ] }
Больше информации о необходимых правах можно найти тут.
Для этого переходим в раздел "IAM" -> "Access management" -> "Policies" и выбираем "Create policy", переключимся с визуального редактора во вкладку "JSON" и вставим нашу политику.
Так же создадим IAM Role, переходим в раздел "IAM" -> "Access management" -> "Roles" и выбираем "Create role"
- Trusted entity type: "AWS service"
- Use case: "EC2"
И ассоциируем ранее созданную политику.
MarketPlace
Мы будем использовать "VM-Series Next-Generation Firewall (BYOL and ELA)" AMI, но перед этим нужно подписаться на нее в AWS MarketPlace
После того, как подписались на AMI, если перейти к конфигурации можно найти AMI ID для вашего региона
EC2 Instance
Создадим первый инстанс для зоны A, AMI ID указываем с предыдущего шага, instance type: m5.xlarge. Обязательно укажем SSH ключ, предварительно создате или экспортируйте его.
Network settings
Выберем нашу VPC, сеть выбираем любую из AZ A, так как будем присоединять сетевые интерфейсы вручную и обязательно указываем, что в качестве группы безопасности будем использовать существующую и оставляем это поле пустым.
Дальше во вкладке "Advanced network configuration" в качестве "Network interface 1" выбираем "MGMT" интерфейс, все остальные настройки не трогаем.
Добавляем еще 3 дополнительных интерфейса в следующем порядке:
- HA
- UNTRUSTED
- TRUSTED
Во вкладке "Advanced details" находим пункт "IAM instance profile" и выбираем созданную IAM Role.
Точно так же создаем инстанс для AZ B.