1. Введение
Политики безопасности Cloud Armor используются для настройки пользовательских правил для фильтрации трафика на границе сети Google, выше вашей инфраструктуры. Политики безопасности Network Edge можно использовать для защиты, разрешения или блокировки трафика, предназначенного для следующих типов конечных точек: балансировщик сетевой нагрузки, переадресация протоколов и виртуальные машины с общедоступными IP-адресами.
В этой лабораторной работе с кодом мы покажем, как настроить политики безопасности Cloud Armor с помощью определяемых пользователем правил для предотвращения DDoS-атак.
Рисунок 1. Cloud Armor для виртуальных машин с защитой общедоступного IP.
Что вы узнаете
- Политики безопасности Cloud Armor с настройкой пользовательских правил
- Конфигурации и тестирование UDP Offset.
Что вам понадобится
- Знание 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 основана на региональном уровне, мы настраиваем все соответствующие ресурсы в регионе Азия-Юго-Восток1.
Сеть 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.
В Cloud Shell создайте экземпляр targetvm.
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. Создайте политику безопасности Network Edge с правилами по умолчанию.
Создать политику безопасности Network Edge
Из 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. Создайте политику безопасности Network Edge с уже настроенными правилами.
Предопределенное пользователем смещение UDP и настроенное в политике облачной защиты. Пакет с этими «значениями смещения» пройдет проверку политики и отправится на серверную виртуальную машину. В следующем примере мы определим два «смещения» с разными значениями.
Первое значение находится сразу после заголовка 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. Проверка
Войдите в консоль Test VM и установите packit
генератора пакетов.
sudo apt install packit
Следуя дизайну смещения UDP, используйте packageit для генерации пакетов UDP. Мы моделируем пакет (-t udp) от исходного IP-адреса интерфейса (-s ens4) (-s 10.0.1.2) с исходными портами (-S 10000) до IP-адреса назначения целевой виртуальной машины (-d 35.240.148.100) с портами назначения ( -Д 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 для запроса данных телеметрии NetworkSecurityPolicy.
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
Генерируйте трафик большого объема с помощью команды unmatch 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 с правилами, определяемыми клиентом