Palo Alto VM-Series Firewall: GlobalProtect

 

Перед тем как приступить к настройке GlobalProtect, необходимо сгенерировать/импортировать SSL сертификат и создать SSL/TLS Service Profile. А так же необходим Authentication Profile, можно как создать локальную базу пользователей,  так и использовать внешнюю. Пример использования OneLogin и AWS SSO.

Security zone

Прежде всего нужно создать зону безопасности для VPN интерфейса. Для этого переходим во вкладку "Network" -> "Zones" и кликаем "Add".

Задаем имя, выбираем "Layer3" в качестве "Type" и включаем "Enable User Identification" параметр. Все остальное оставляем по умолчанию.

Читать далее "Palo Alto VM-Series Firewall: GlobalProtect"

Palo Alto VM-Series Firewall: GlobalProtect — AWS SAML

 

GlobalProtect поддерживает разные способы авторизации, в том числе и SAML 2.0 IdP. В данном примере показана настройка авторизации через AWS SSO.

AWS

Перед тем как добавить SAML IdP у вас должен быть уже настроен AWS Directory Service

 

Для начала добавим приложение, для этого переходим "IAM Identity Center" -> "Application assignments" -> "Application"

И кликаем "Add Application"

Приложения для GlobalProtect в списке нет, поэтому указываем это будет пользовательское приложение и кликаем "Next"

Указываем имя и описание

Далее в разделе "Application properties" в поле "Application start URL" указываем следующее:

https://YOUR_GP_DOMAIN/global-protect/getsoftwarepage.esp

Для того, чтобы с портала AWS SSO мы могли попадать на страницу скачивания GlobalProtect клиента

В разделе "Application metadata" в поле "Application ACS URL" указываем следующее:

https://YOUR_GP_DOMAIN:443/SAML20/SP/ACS

И в поле "Application SAML audience":

https://YOUR_GP_DOMAIN:443/SAML20/SP

После чего скачиваем SAML Metadata файл, спускаемся вниз и нажимаем "Submit"

 

После того как добавили приложение нужно убедится, что используется нужный формат аттрибутов. Для этого во вкладке "Actions" выбираем "Edit attribute mapping"

Необходимый формат:

  • Value: ${user.subject}
  • Format: emailAddress

На этом настройка со стороны AWS завершена.

Firewall

Импортируем SAML Metadata файл, для этого переходим во вкладку "Device" -> "Server Profiles" -> "SAML Identity Provider" и в левом нижнем углу выбираем "Import"

Параметр "Validate Identity Provider Certificate" — должен быть отключен

Создадим Authentication Profile, для этого переходим во вкладку "Device" -> "Authentication Profile" и выбираем "Add". Указываем имя и в поле "IdP Server Profile" выбираем профиль, который импортировали в предыдущем шаге, все остальные настройки оставляем по умолчанию.

Переходим во вкладку "Advanced" и в "Allow List" добавляем "all".

Кликаем "OK" и сохраняем изменения, для этого в правом верхнем углу кликаем "Commit". Теперь мы можем использовать этот Authentication Profile для авторизации в GlobalProtect.

Palo Alto VM-Series Firewall: GlobalProtect — OneLogin SAML

 

GlobalProtect поддерживает разные способы авторизации, в том числе и SAML 2.0 IdP. В данном примере показана настройка авторизации через OneLogin.

OneLogin

Для начала добавим приложение, для этого в админ интерфейсе OneLogin переходим "Applications" и кликаем "Add App"

В строке поиска вводим "globalprotect" и кликаем на него

В настройках задаем имя приложения и кликаем "Save"

Далее в настройках приложения переходим в пункт "Configuration" и в поле "Domain" указываем доменное имя для GlobalProtect.

В поле "Login URL" введем следующее:

https://YOUR_GP_DOMAIN/global-protect/getsoftwarepage.esp

Для того, чтобы с портала OneLogin мы могли попадать на страницу скачивания GlobalProtect клиента

 

На этом настройка со стороны OneLogin завершена, сохраняем изменения и скачиваем SAML Metadata файл. Для этого кликнем на "More Actions" в правом верхнем углу и выберем "SAML Metadata"

 

Firewall

Импортируем SAML Metadata файл, для этого переходим во вкладку "Device" -> "Server Profiles" -> "SAML Identity Provider" и в левом нижнем углу выбираем "Import"

Создадим Authentication Profile, для этого переходим во вкладку "Device" -> "Authentication Profile" и выбираем "Add". Указываем имя и в поле "IdP Server Profile" выбираем профиль, который импортировали в предыдущем шаге, все остальные настройки оставляем по умолчанию.

Переходим во вкладку "Advanced" и в "Allow List" добавляем "all".

Кликаем "OK" и сохраняем изменения, для этого в правом верхнем углу кликаем "Commit". Теперь мы можем использовать этот Authentication Profile для авторизации в GlobalProtect.

Palo Alto VM-Series Firewall: Let’s Encrypt сертификат

PAN-OS позволяет только генерировать самоподписные сертификаты или уже импортировать существующие. Чтобы использовать Let’s Encrypt сертификат, необходимо его запросить на другом устройстве и поэтому в качестве валидации можем использовать только DNS.

В качестве DNS провайдера используется AWS Route53, для получения сертификата будем использовать Certbot, так же понадобится установленный и настроенный awscli

Получение сертификата

Устанавливаем необходимый софт (в данном примере использовалась система macOS):

brew install certbot awscli
pip3 install certbot-dns-route53

Настраиваем awscli:

awscli configure

 

Минимальные разрешения для DNS валидации

AWS IAM Policy:

{
  "Version": "2012-10-17",
  "Id": "certbot-dns-route53",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "route53:ListHostedZones",
        "route53:GetChange"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "route53:ChangeResourceRecordSets",
        "route53:ListResourceRecordSets"
      ],
      "Resource": [
        "arn:aws:route53:::hostedzone/YOURDOMAINZONEID"
      ]
    }
  ]
}

Где "YOURDOMAINZONEID" — ID вашей hosted zone

 

Читать далее "Palo Alto VM-Series Firewall: Let’s Encrypt сертификат"

Palo Alto VM-Series Firewall: AWS HA Multi AZ для GlobalProtect — Часть 2

 

VM-Series Firewall

SSH

Для того чтобы использовать WebUI необходимо задать пароль администратора, это делается через SSH.

После создания инстансов проходит минут 10-15 до того, как Firewall инициализируется и будет доступен по SSH

Подключаемся к первому инстансу, SSH пользователь — "admin"

И выполняем следующие команды

configure
set mgt-config users admin password

Вводим пароль 2 раза и сохраняем изменения

commit

Тоже самое проделываем и на втором инстансе.

Читать далее "Palo Alto VM-Series Firewall: AWS HA Multi AZ для GlobalProtect — Часть 2"

Palo Alto VM-Series Firewall: AWS HA Multi AZ для GlobalProtect — Часть 1

 

Для обеспечения высокой доступности 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 с недоступного фаервола на себя.

Читать далее "Palo Alto VM-Series Firewall: AWS HA Multi AZ для GlobalProtect — Часть 1"

FIX ERROR — Python2.7: PIP не работает после апгрейда

После апгрейда PIP на CentOS 6, где еще используется Python2.7, PIP на каждую команду падает с ошибкой.

К примеру:

pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/88/d9/761f0b1e0551a3559afe4d34bd9bf68fc8de3292363b3775dda39b62ce84/pip-22.0.3.tar.gz (2.1MB)
    100% |████████████████████████████████| 2.1MB 544kB/s
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-snCNSf/pip/setup.py", line 7
        def read(rel_path: str) -> str:
                         ^
    SyntaxError: invalid syntax

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-snCNSf/pip/
You are using pip version 8.1.2, however version 22.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

 

Причина:

PIP версии выше 20.3 не поддерживает Python2.7

 

Решение:

Установить последнюю поддерживаемую версию

pip install --upgrade pip==20.3

 

Linux — Получить путь и имя файла из полного пути

 

Чтобы извлечь путь к файлу или имя файла из полного пути можно использовать разные утилиты, как grep, sed, awk, etc. Если же это не список из файла или переменной, можно использовать find, но есть более простой способ:

  • basename — возвращает имя файла
  • dirname — возвращает путь к файлу

Пример:

basename /home/artem/file.txt
file.txt

dirname /home/artem/file.txt
/home/artem

 

Эти две утилиты входят в пакет coreutils

S3 — Монтирование в Linux

Для того, чтобы примонтировать S3 Bucket как файловую системой, необходимо установить s3fs

Создадим директорию для монтирования:

mkdir -p /mnt/s3

 

И добавим следующее в "/etc/fstab":

artem-service-bucket:/upload/ /mnt/s3 fuse.s3fs _netdev,rw,nosuid,nodev,allow_other,nonempty,iam_role,umask=022,url=https://s3.eu-central-1.amazonaws.com,endpoint=eu-central-1 0 0

 

Где:

  • "artem-service-bucket:/upload/" — имя S3 корзины и директория, внутри корзины, которую нужно монтировать
  • "url=https://s3.eu-central-1.amazonaws.com,endpoint=eu-central-1" — регион, в котором расположена S3 корзина
  • "iam_role" — указываем, что будем использовать IAM Role для аутентификации

 

Монтируем:

mount -a

Terraform — AWS Secrets Manager: Извлечь логин/пароль RDS

Необходимо извлечь логин и пароль от RDS, которые хранятся в AWS Secret Manager и использовать их значения в Terraform коде. Для этого можно воспользоваться следующей конструкцией:

# Should be there before the apply
data "aws_secretsmanager_secret" "rds-admin-user" {
  name  = "/ARTEM-SERVICES/PROD/RDS/CREDENTIALS"
}

data "aws_secretsmanager_secret_version" "rds-admin-user" {
  secret_id = data.aws_secretsmanager_secret.rds-admin-user.id
}

locals {
  additional_rds_username      = jsondecode(data.aws_secretsmanager_secret_version.rds-admin-user.secret_string)["username"]
  additional_rds_user_password = jsondecode(data.aws_secretsmanager_secret_version.rds-admin-user.secret_string)["password"]
}

 

И использовать переменные:

local.additional_rds_username
local.additional_rds_user_password