1. Введение
Политики безопасности Cloud Armor используются для настройки определяемых пользователем правил фильтрации трафика на границе сети Google, выше вашей инфраструктуры. Политики безопасности на границе сети могут использоваться для защиты и разрешения или блокировки трафика, нацеленного на следующие типы конечных точек: балансировщики сетевой нагрузки, переадресация протоколов и виртуальные машины с публичными IP-адресами.

В этом практическом занятии мы продемонстрируем, как настроить политики безопасности Cloud Armor с помощью определяемых пользователем правил для предотвращения DDoS-атак.

Рисунок 1. Cloud Armor для виртуальных машин с защитой от использования публичных IP-адресов.
Что вы узнаете
- Политики безопасности Cloud Armor с настройкой правил, определяемых пользователем.
- Настройка и тестирование смещения UDP.
Что вам понадобится
- Знание TCP/IP
- Знание командной строки Unix/Linux.
2. Прежде чем начать
Внутри Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Создайте целевую сеть VPC.
В следующем разделе мы настроим сети VPC и соответствующие сетевые конфигурации. Политика безопасности на границе сети Cloud Armor основана на региональном принципе, поэтому все соответствующие ресурсы будут размещены в регионе asia-southeast1.
Сеть VPC
Из Cloud Shell
gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom
Создать подсеть
Из Cloud Shell
gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1
Создайте правила брандмауэра.
В этом разделе мы добавим правило брандмауэра, разрешающее ожидаемый UDP-трафик на порт 10000.
В Cloud Shell создайте правило брандмауэра для открытия UDP-порта 10000 для последующего тестирования.
gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging
В Cloud Shell создайте правило брандмауэра, разрешающее IAP подключаться к вашим экземплярам виртуальных машин.
gcloud compute firewall-rules create ca4nlb-iap-prod --network ca4nlb --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. Создайте целевые экземпляры виртуальных машин.
Создайте целевую виртуальную машину для тестирования политик безопасности. Эта виртуальная машина должна иметь публичный IP-адрес и открытый UDP-порт 10000.
Создайте экземпляр targetvm в Cloud Shell.
gcloud compute instances create targetvm \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=ca4nlb-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
5. Настройте расширенную защиту от DDoS-атак в сети.
Из Cloud Shell
gcloud compute security-policies create ca_advanced_ddos \
--type CLOUD_ARMOR_NETWORK \
--region asia-southeast1
gcloud compute security-policies update ca_advanced_ddos \
--network-ddos-protection ADVANCED \
--region asia-southeast1
gcloud compute network-edge-security-services create caedgepolicy \
--security-policy ca_advanced_ddos \
--region asia-southeast1
6. Создайте политику безопасности пограничного слоя сети с правилами по умолчанию.
Создание политики безопасности на границе сети
Из Cloud Shell
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
Изменить правило по умолчанию
Из Cloud Shell
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. Создайте политику безопасности на границе сети с использованием настроенных правил.
Пользователь задает смещение UDP и настраивает его в политике CloudArmor. Пакет с этими значениями смещения пройдет проверку политики и будет отправлен на серверную виртуальную машину. В следующем примере мы определим два смещения с разными значениями.
Первое значение находится сразу после заголовка UDP, точно соответствует 2 байтам 0x1700
Второе значение — это смещение на 8 байт в заголовке UDP, точно совпадающее с 4 байтами 0x12345678
Указанное выше предопределенное значение будет преобразовано в битовый вид UDP-пакета.

Из Cloud Shell
gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG1_AT_0 \ --base=udp --offset=8 --size=2 --mask=0xFF00 \ --region=asia-southeast1 gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG2_AT_8 \ --base=udp --offset=16 --size=4 --mask=0xFFFFFFFF \ --region=asia-southeast1 gcloud alpha compute security-policies rules create 1000 \ --security-policy=customnetworkedge \ --network-user-defined-fields="SIG1_AT_0;0x1700,SIG2_AT_8;0x12345678" \ --action=allow --region=asia-southeast1
8. Примените политику безопасности к целевой виртуальной машине.
В Cloud Shell можно прикрепить политику безопасности к защищаемой виртуальной машине.
gcloud alpha compute instances network-interfaces update targetvm \ --security-policy=customnetworkedge \ --security-policy-region=asia-southeast1 \ --network-interface=nic0 \ --zone=asia-southeast1-b
В Cloud Shell укажите целевую виртуальную машину, и вы увидите, что политика безопасности прикреплена. Запишите публичный IP-адрес для последующего тестирования.
gcloud alpha compute instances describe targetvm --zone=asia-southeast1-b
networkInterfaces:
- accessConfigs:
- kind: compute#accessConfig
name: External NAT
natIP: 35.240.148.100
networkTier: PREMIUM
securityPolicy: https://www.googleapis.com/compute/alpha/projects/<project>/regions/asia-southeast1/securityPolicies/customnetworkedge
В Cloud Shell отсоедините политику безопасности от защищаемой виртуальной машины.
gcloud alpha compute instances network-interfaces update targetvm \ --network-interface=nic0 \ --zone=asia-southeast1-b \ --security-policy=
9. Подготовьте тестовые материалы.
Создание тестовой сети VPC
Из Cloud Shell
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
Создание тестовой подсети
Из Cloud Shell
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
Создать брандмауэр
В Cloud Shell создайте правило брандмауэра, разрешающее IAP подключаться к вашим экземплярам виртуальных машин.
gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Создание тестовой виртуальной машины
Из Cloud Shell
gcloud compute instances create test01 \
--zone=asia-southeast1-b \
--image-family=debian-11 \
--image-project=debian-cloud \
--network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=test-asia-southeast1 \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring
10. Проверка
Войдите в консоль тестовой виртуальной машины и установите генератор пакетов packit .
sudo apt install packit
Следуя принципу смещения UDP, используйте packit для генерации UDP-пакетов. Мы имитируем пакет (-t udp) от интерфейса (-s ens4) с исходным IP-адресом (-s 10.0.1.2) и исходными портами (-S 10000) к целевому IP-адресу targetVM (-d 35.240.148.100) и целевыми портами (-D 10000). Содержимое пакета соответствует значениям (-p '0x 17 00 00 00 00 00 00 00 12 34 56 78'). Мы отправим пакеты (-c 4).
sudo packit -m inject -t UDP -i ens4 -s 10.0.1.2 -d 35.240.148.100 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 4
На целевой виртуальной машине запустите tcpdump для захвата UDP-пакета.
sudo tcpdump port 10000 -v -n
tcpdump: listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes
06:36:18.434106 IP (tos 0x0, ttl 128, id 17173, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:19.433656 IP (tos 0x0, ttl 128, id 55641, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:20.433935 IP (tos 0x0, ttl 128, id 27161, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:21.434150 IP (tos 0x0, ttl 128, id 46782, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
Если мы изменим шаблоны трафика в тестовой виртуальной машине, мы не сможем перехватить ни одного пакета в целевой виртуальной машине.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 33 33 00 00 00 00 00 00 12 34 56 78' -c 4
11. Телеметрия
Откройте Cloud Metric и используйте приведенный ниже MQL-запрос для получения телеметрических данных NetworkSercurityPolicy.
fetch networksecurity.googleapis.com/RegionalNetworkSecurityPolicy | metric 'networksecurity.googleapis.com/l3/external/packet_count' | filter (resource.policy_name == 'customnetworkedge') | align rate(1m) | every 1m | group_by [metric.blocked], [value_packet_count_mean: mean(value.packet_count)] | group_by 1m, [value_packet_count_mean_mean: mean(value_packet_count_mean)] | every 1m
Сгенерируйте большой объем трафика с помощью команды match offset.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
Сгенерируйте большой объем трафика с помощью команды unmatched offset.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 11 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
Телеметрия фильтруется по policy_name и группируется по заблокированному трафику. Синяя линия показывает трафик, разрешенный правилами политики. Зеленая линия показывает трафик, заблокированный правилами политики.

12. Этапы очистки
Из единой облачной оболочки в терминале удалите компоненты лаборатории.
gcloud compute instances delete targetvm --zone=asia-southeast1-b gcloud compute firewall-rules delete ca4nlb-udp10000 gcloud compute firewall-rules delete ca4nlb-iap-prod gcloud compute networks subnets delete ca4nlb-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete ca4nlb gcloud alpha compute security-policies delete customnetworkedge --region=asia-southeast1 gcloud alpha compute network-edge-security-services delete caedgepolicy --region=asia-southeast1 gcloud alpha compute security-policies delete ca_advanced_ddos --region=asia-southeast1 gcloud compute instances delete test01 --zone=asia-southeast1-b gcloud compute firewall-rules delete test-iap-prod gcloud compute networks subnets delete test-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete test
13. Поздравляем!
Поздравляем с завершением практического занятия!
Что мы рассмотрели
- Политики безопасности Cloud Armor с правилами, определяемыми пользователем.