TCP Proxy Codelab — ограничение скорости и список запрещенных IP-адресов с помощью балансировщика нагрузки TCP-прокси

1. Введение

Балансировка нагрузки Google Cloud развертывается на границе сети Google в точках присутствия Google (POP) по всему миру. Пользовательский трафик, направляемый на балансировщик нагрузки TCP-прокси, поступает на POP, ближайший к пользователю, а затем балансируется через глобальную сеть Google на ближайший бэкэнд, имеющий достаточную доступную мощность.

Cloud Armor — это распределенная система обнаружения отказов в обслуживании и брандмауэра веб-приложений (WAF) Google. Cloud Armor тесно связан с балансировщиком нагрузки прокси-сервера Google Cloud TCP и позволяет опрашивать входящий трафик на наличие нежелательных запросов. Функция ограничения скорости этой службы позволяет вам ограничивать трафик на серверные ресурсы в зависимости от объема запроса и предотвращает потребление ресурсов нежелательным трафиком в вашей сети виртуального частного облака (VPC).

Балансировщики нагрузки прокси-сервера Google Cloud TCP/SSL позволяют проксировать трафик типа TCP/SSL между вашими серверными службами.

В ходе этой лабораторной работы вы создадите балансировщик нагрузки TCP/SSL с внутренней службой и ограничите доступ к балансировщику нагрузки только определенному набору пользовательских клиентов.

be33dadf836374bb.png

Что вы узнаете

  • Как создать балансировщик нагрузки прокси-сервера TCP/SSL
  • Как создать политику безопасности Cloud Armor
  • Как создать правило списка запрещенных IP-адресов для балансировщика нагрузки прокси-сервера TCP/SSL в Cloud Armor
  • Как создать правило ограничения скорости для балансировщика нагрузки TCP-прокси в Cloud Armor
  • Как добавить политику безопасности в серверную службу балансировки нагрузки TCP/SSL

Что вам понадобится

  • Базовые знания Google Compute Engine ( кодовая лаборатория )
  • Базовые знания сетевых технологий и TCP/IP.
  • Базовые знания командной строки Unix/Linux.
  • Полезно пройти экскурсию по сетям в GCP с помощью Networking в Google Cloud.

2. Требования

Самостоятельная настройка среды

  1. Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

Примечание. Вы можете легко получить доступ к Cloud Console, запомнив ее URL-адрес — console.cloud.google.com.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID.

Примечание. Если вы используете учетную запись Gmail, вы можете оставить для местоположения по умолчанию значение «Нет организации». Если вы используете учетную запись Google Workspace, выберите местоположение, подходящее для вашей организации.

  1. Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.

Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:

bce75f34b2c53987.png

Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:

f6ef2b5f13479f3a.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять с помощью простого браузера.

Прежде чем начать

В Cloud Shell убедитесь, что идентификатор вашего проекта настроен.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

Включить API

Включите все необходимые службы

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com        
gcloud services enable monitoring.googleapis.com

3. Создайте серверные службы

Создайте 2 экземпляра следующим образом: создайте экземпляр 1-b1 в зоне us-central1-b.

gcloud compute instances create vm-1-b1 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --tags tcp-lb \
    --zone us-central1-b \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html
      EOF"

Создайте экземпляр 1-b2 в зоне us-central1-b.

gcloud compute instances create vm-1-b2 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --tags tcp-lb \
    --zone us-central1-b \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html
      EOF"

Создайте группу экземпляров vm-ig1.

gcloud compute instance-groups unmanaged create vm-ig1  --zone us-central1-b

Создайте именованный порт для группы экземпляров. Для этой лабораторной работы мы будем использовать порт 110.

    gcloud compute instance-groups set-named-ports vm-ig1 \
--named-ports tcp 110:110 --zone us-central1-b

Добавьте экземпляры в группу экземпляров

gcloud compute instance-groups unmanaged add-instances vm-ig1 \
   --instances vm-1-b1,vm-1-b2 --zone us-central1-b

4. Настройка балансировщика нагрузки

Далее мы создадим проверку работоспособности.

gcloud compute health-checks create tcp my-tcp-health-check --port 110

Создайте серверную службу

gcloud compute backend-services create my-tcp-lb  --global-health-checks --global \
--protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110

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

gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8

Настройте целевой TCP-прокси

gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE

Зарезервируйте глобальные статические адреса IPv4.

Вы будете использовать этот IP-адрес для доступа к службе балансировки нагрузки.

gcloud compute addresses create tcp-lb-static-ipv4  --ip-version=IPV4   --global

Настройте глобальные правила переадресации для IP-адреса LB.

gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
    --global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110

5. Создание правила межсетевого экрана для балансировщика нагрузки TCP-прокси.

gcloud compute firewall-rules create allow-tcplb-and-health \
   --source-ranges 130.211.0.0/22,35.191.0.0/16 \
   --target-tags tcp-lb \
   --allow tcp:110

После создания балансировщика нагрузки протестируйте его с помощью следующей команды

Curl LB_IP:110

Затем создайте виртуальную машину для проверки отказа в доступе к LB.

Вам следует создать 2 экземпляра, каждый с общедоступным IP-адресом и именами test-server1 и test-server2.

6. Создайте политику безопасности в Cloud Armor.

В этом разделе вы создадите внутреннюю политику безопасности и 2 правила в политике в Cloud Armor.

Первое правило запретит ограниченному набору IP-адресов доступ к балансировщику нагрузки TCP, установив политику безопасности, запрещающую определенные IP-адреса, а второе правило будет выполнять ограничение скорости.

  1. В Cloud Shell (инструкции по использованию Cloud Shell см. в разделе «Запуск Cloud Shell» в разделе «Настройка и требования») создайте политику безопасности серверной службы под названиемrate-limit-and-deny-tcp следующим образом.
gcloud compute security-policies create rate-limit-and-deny-tcp \
    --description "policy for tcp proxy rate limiting and IP deny"

Добавьте правила в политику безопасности

Затем добавьте правило списка запретов в политику Cloud Armor «rate-limit-and-deny-tcp».

gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"

Добавьте правило ограничения скорости в политику безопасности Cloud Armor «rate-limit-and-deny-tcp».

gcloud compute security-policies rules create 3000   \ --security-policy=rate-limit-and-deny-tcp  \       
--expression="true"  --action=rate-based-ban  --rate-limit-threshold-count=5  \          
--rate-limit-threshold-interval-sec=60  --ban-duration-sec=300      \         
--conform-action=allow  --exceed-action=deny-404  --enforce-on-key=IP

Прикрепите политику к внутренней службе TCP-прокси:

Выполните следующую команду, чтобы убедиться, что политика безопасности прикреплена к внутренней службе TCP-прокси.

gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp

Включить ведение журнала в TCP-прокси-балансировщике нагрузки

gcloud beta compute backend-services update my-tcp-lb \ 
--enable-logging --logging-sample-rate=1

7. Подтвердите правило списка запрещенных

Подтвердите правило списка запретов, войдя на тестовый сервер, IP-адрес которого был указан в правиле списка запретов, и выполните следующую команду.

Curl LB_IP:110

Немедленные запросы могут дать ответ от LB, но подождите, пока запрос на завивку не будет отклонен или удален, а затем просмотрите журналы в Cloud Logging, чтобы проверить запись журнала для срабатывания правила запрета IP-адресов.

Перейдите в раздел «Облачное ведение журнала» и в разделе «Ресурсы» выберите тип ресурса «tcp_ssl_proxy_rule» и установите цель серверной части как «my-tcp-lb».

Имея ресурсы, определенные для фильтрации, мы можем убедиться, что правило запрета IP-адреса действует, используя значение PRIORITY, равное 1000 в записи журнала, и настроенное действие «DENY» действует, поскольку оба были проинструктированы из правила запрета и IP-адреса. отказано, как показано ниже

db9b835e0360dcaf.png

8. Подтвердить правило ограничения скорости

Убедитесь, что правило ограничения скорости действует, отправив множество запросов за короткий промежуток времени, превышающих определенный порог (5 запросов в минуту).

Как только это будет сделано, щелкните просмотр журналов в службе облачной защиты, и вы перейдете к облачной регистрации, где вы сможете фильтровать журналы с помощью балансировщика нагрузки, чтобы просматривать журналы облачной защиты по мере их поступления.

Запись, ограничивающая скорость, должна выглядеть так, как показано на снимке экрана ниже. Мы можем убедиться в том, что правило ограничения скорости действует, исходя из значения ПРИОРИТЕТА , равного 3000, в записи журнала, а также из настроенного действия: действие «БАН НА ОСНОВЕ СТАВКИ» действует в соответствии с инструкциями правила ограничения скорости.

37c76e5d7532623.png

9. Очистка окружающей среды

Обязательно очистите созданную инфраструктуру, чтобы избежать эксплуатационных расходов на неиспользуемую инфраструктуру.

Самый быстрый способ — удалить весь проект в GCP, чтобы убедиться, что не осталось ни одного висящего ресурса без присмотра. Однако удалите отдельные ресурсы с помощью следующих команд.

Балансировщик нагрузки TCP-прокси

gcloud compute target-tcp-proxies delete my-tcp-lb

Группа экземпляров

gcloud compute instance-groups unmanaged delete vm-ig1

Созданы 2 тестовых экземпляра виртуальной машины.

gcloud compute instances delete Instance_name --zone=instance_zone

Серверная служба

gcloud compute backend-services delete BACKEND_SERVICE_NAME

Правила Cloud Armor в рамках политики

gcloud compute security-policies rules delete 1000  \ --security-policy=rate-limit-and-deny-tcp && 
gcloud compute security-policies rules delete 3000  \ --security-policy=rate-limit-and-deny-tcp

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

gcloud compute security-policies delete rate-limit-and-deny-tcp