Цель демо: Установка PT Web Application Firewall (далее PT WAF) в Yandex.Cloud в отказоустойчивой конфигурации.
В рамках workshop будут выполнены:
Отказоучстойчивость обеспечивается за счет:
BYPASS
Предполагается, что в Yandex.Cloud у Клиента уже развернут небезопасный сценарий публикации ВМ наружу: ВМ с веб приложениями в 2-х зонах доступности. Также имеется внешний сетевой балансировщик нагрузки.
Для установки целой схемы снуля необходимо использовать playbook из папки "from-scratch"
variables.tf
(в комментариях указаны необходимые команды yc для получения значений)terraform init
terraform import yandex_lb_network_load_balancer.ext-lb $(yc load-balancer network-load-balancer list --format=json | jq '.[].id' | sed 's/"//g')
terraform apply
app-sg
на ВМ: app-a, app-b##
Видеоинструкция этапа:
ssh -L 22001:192.168.2.10:22013 -L 22002:172.18.0.10:22013 -L 8443:192.168.2.10:8443 -L 127.0.0.2:8443:172.18.0.10:8443 -i ./pt_key.pem yc-user@$(yc compute instance list --format=json | jq '.[] | select( .name == "ssh-a")| .network_interfaces[0].primary_v4_address.one_to_one_nat.address '| sed 's/"//g')
После этого вы окажитесь в терминале ssh-a (брокер машина) оставте его открытым
ssh -p 22001 -i pt_key.pem yc-user@localhost -o StrictHostKeyChecking=no
sudo wsc -c 'password list'
выполните скрипт автоконфигурации кластера:
/home/pt/cluster.sh
подключитесь к ptaf-b:
ssh -p 22002 -i pt_key.pem yc-user@localhost -o StrictHostKeyChecking=no
задайте пароль БД из прошлого этапа
sudo wsc -c 'password set <мастер-пароль>' (должен совпадать с тем, который задан на узле master).
выполните скрипт автоконфигурации кластера:
/home/pt/cluster.sh
сначала запустим синхронизацию на SLAVE-сервере использовав команду:
ssh -p 22002 -i pt_key.pem yc-user@localhost -o StrictHostKeyChecking=no
sudo wsc
Enter 0
config commit
дождитесь когда на SLAVE-сервере появится сообщение: TASK: [mongo | please configure all other nodes of your cluster]
, после этого переключитесь на MASTER-сервер и начните синхронизацию той же командой:
ssh -p 22001 -i pt_key.pem yc-user@localhost -o StrictHostKeyChecking=no
sudo wsc
Enter 0
config commit
В случае, если на MASTER команда config commit завершится неуспешно, нужно применить команду еще раз.
далее конфигурация на узле master остановилась на сообщении TASK: [mongo | wait config sync on secondary nodes]
, просто вручную выполните команду config sync на узле SLAVE.
на SLAVE выполнить:
config sync
на MASTER выполнить:
config sync
на MASTER выполнить:
mongo --authenticationDatabase admin -u root -p $(cat /opt/waf/conf/master_password) waf --eval 'c = db.sentinel; l = c.findOne({_id: "license"}); Object.keys(l).forEach(function(k) { if (l[k].ip) { delete l[k].ip; l[k].hostname = "yclicense.ptsecurity.ru" }}); c.update({_id: l._id}, l)'
Открываем в браузере https://127.0.0.1:8443
Вводим стандартные логин и пароль, admin/positive, меняем пароль, например на P@ssw0rd
Открываем вкладку Configuration -> Network -> Gateways
, кликая на иконку карандаша (Edit)
в каждом из шлюзе устанавливаем галочку Active
в каждом из шлюзе на вкладке Network
определяем для интерфейса eth-ext1 алиасы mgmt, wan, lan
Создаем апстрим на вкладке Configuration -> Network -> Upstreams
Name: internal-lb
Backend Host: впишите адрес внутреннего балансировщика яндекс облако
Backend port: 80
Создаем сервис на вкладке Configuration -> Network -> Services
Name: app
Net interface alias: wan
Listen port: 80
Upstream: internal-lb
Редактуируем существующее веб приложение Any на вкладке Configuration -> Security -> Web Applications
:
Service: app
BYPASS
сработает и трафик переключится напрямую на внутренний балансировщикВ данной схеме возможно использовать Application LoadBalancer Yandex.Cloud
Существует подробная инструкция по Организация виртуального хостинга (включая интеграцию с certificate manager для управления SSL сертификатами)