۱. مقدمه و بررسی اجمالی
DNS Armor، ارائه شده توسط Infoblox ، یک سرویس کاملاً مدیریتشده است که امنیت لایه DNS را برای بارهای کاری Google Cloud شما فراهم میکند. آشکارساز تهدید پیشرفته آن به گونهای طراحی شده است که فعالیتهای مخرب را در ابتداییترین نقطه زنجیره حمله - پرسوجوی DNS - بدون افزودن پیچیدگی عملیاتی یا سربار عملکرد، شناسایی کند.
این codelab دستورالعملهای گام به گام برای پیکربندی و آزمایش سرویس DNS Armor ارائه میدهد. شما زیرساخت شبکه لازم را راهاندازی خواهید کرد، آشکارساز تهدید را ایجاد خواهید کرد، سرویس را با شبیهسازی تهدیدات DNS آزمایش خواهید کرد و در نهایت، گزارشهای تهدید را با استفاده از Logs Explorer تجزیه و تحلیل خواهید کرد.
آنچه خواهید ساخت
در این آزمایشگاه کد، منابع زیر را تهیه خواهید کرد:
- دو شبکه VPC:
network-aوnetwork-b -
network-aشامل زیرشبکهها و ماشینهای مجازی در مناطقus-east4وus-central1خواهد بود. -
network-bشامل یک زیرشبکه و ماشین مجازی منحصراً درus-east4خواهد بود. - یک آشکارساز تهدید پیشرفته DNS Armor که برای بررسی کوئریهای DNS پیکربندی شده است.

آنچه یاد خواهید گرفت
- نحوه تأمین منابع شبکه لازم، از جمله VPCها و ماشینهای مجازی.
- نحوه استقرار یک آشکارساز تهدید پیشرفته و حذف شبکههای خاص.
- نحوه اعتبارسنجی پیکربندی تشخیص تهدید با استفاده از اسکریپت شبیهسازی تهدید.
- نحوه تجزیه و تحلیل گزارشهای تهدید در Logs Explorer.
آنچه نیاز دارید
- یک پروژه ابری گوگل.
- دسترسی به ابزار خط فرمان
gcloud.
۲. پیشنیازها
در این بخش، وظایف زیر را انجام خواهید داد:
- تأیید کنید که پروژه Google Cloud شما محدودیتهای لازم برای سیاست سازمانی را برآورده میکند.
- تأیید کنید که حساب کاربری شما نقشها و مجوزهای لازم برای IAM را دارد.
- APIهای ضروری Google Cloud برای این آزمایشگاه کد را فعال کنید.
- نقش IAM
roles/logging.viewerرا به حساب سرویس موتور محاسبات (Compute Engine Service Account) اختصاص دهید.
محدودیتهای سیاست سازمانی
برای تکمیل موفقیتآمیز این آزمایشگاه کد، لطفاً محدودیتهای سیاست سازمانی اعمالشده بر پروژه خود را بررسی کنید. برخی از سیاستها ممکن است مانع تأمین منابع لازم شوند. محدودیتهای زیر میتوانند بر پیکربندی این آزمایشگاه کد تأثیر بگذارند:
-
constraints/gcp.resourceLocations: مناطقی را که میتوانید منابع ایجاد کنید محدود میکند؛ codelab بهus-east4وus-central1نیاز دارد. -
constraints/compute.vmExternalIpAccess: از ایجاد ماشینهای مجازی با آدرسهای IP عمومی جلوگیری میکند، که در صورت عدم رعایت دستورالعمل codelab در استفاده از پرچم--no-addressمیتواند در راهاندازی اختلال ایجاد کند. -
constraints/compute.shieldedVm: ایجاد ماشینهای مجازی محافظتشده (Shielded VMs) را اجباری میکند، که دستورات ایجاد ماشین مجازی codelab آن را مشخص نمیکنند و به طور بالقوه باعث ایجاد خطا میشوند. -
constraints/gcp.restrictServiceUsage: محدودیتهایی که APIهای Google Cloud میتوانند فعال شوند و اگر codelabcompute.googleapis.com،networksecurity.googleapis.com،logging.googleapis.comوmonitoring.googleapis.comاجازه ندهد، میتواند آن را مسدود کند.
نقشها و مجوزهای IAM
برای تکمیل موفقیتآمیز این آزمایشگاه کد، لطفاً نقشها و مجوزهای IAM اعطا شده به کاربر خود را تأیید کنید. نقشها و مجوزهای IAM زیر برای تکمیل این آزمایشگاه کد مورد نیاز است.
- مدیر استفاده از سرویس (
roles/serviceusage.serviceUsageAdmin): برای فعال کردن APIهای مورد نیاز Google Cloud برای codelab. - مدیر شبکه محاسباتی (
roles/compute.networkAdmin): برای ایجاد و مدیریت شبکههای VPC، زیرشبکهها و Cloud NAT. - مدیر امنیت محاسبات (
roles/compute.securityAdmin): برای پیکربندی قوانین فایروال برای دسترسی SSH به ماشینهای مجازی. - مدیر نمونه محاسبات (نسخه ۱) (
roles/compute.instanceAdmin.v1): برای ایجاد و مدیریت ماشینهای مجازی مورد نیاز آزمایشگاه. - کاربر تونل امنشده با IAP (
roles/iap.tunnelResourceAccessor): برای اتصال به ماشینهای مجازی با استفاده از SSH از طریق پروکسی آگاه از هویت (IAP). - مدیر امنیت شبکه (
roles/networksecurity.admin): برای ایجاد و مدیریت آشکارساز تهدید DNS Armor. - نمایشگر لاگها (
roles/logging.viewer): برای مشاهده و تحلیل لاگهای تهدید در Logs Explorer.
رابطهای برنامهنویسی کاربردی (API) گوگل کلود
لطفاً مطمئن شوید که APIهای مورد نیاز Google Cloud در پروژه شما فعال هستند.
۱. APIهای لازم را فعال کنید ، دستورات gcloud زیر را در Cloud Shell اجرا کنید.
gcloud services enable compute.googleapis.com \
networksecurity.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com
۲. تأیید کنید که APIها فعال هستند ، دستورات gcloud زیر را در Cloud Shell اجرا کنید.
gcloud services list --enabled
حساب کاربری سرویس موتور محاسباتی
اسکریپت آزمایشی برای خواندن گزارشهای تهدید از Cloud Logging به مجوزهایی نیاز دارد. از آنجایی که اسکریپت از یک ماشین مجازی با استفاده از حساب سرویس پیشفرض Compute Engine اجرا میشود، نقش IAM roles/logging.viewer باید به این حساب سرویس اختصاص داده شود.
۱. متغیرهای محیطی را تنظیم کنید ، دستورات زیر را در Cloud Shell اجرا کنید.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
۲. نقش مشاهدهگر گزارشگیری را به Compute Engine SA اعطا کنید . دستورات gcloud زیر را در Cloud Shell اجرا کنید.
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/logging.viewer"
۳. تنظیمات اولیه محیط
در این بخش، وظایف زیر را انجام خواهید داد:
- شبکههای VPC (
network-aوnetwork-b) را با زیرشبکههای سفارشی ایجاد کنید. - روترهای ابری و Cloud NAT را برای خروجی اینترنت در هر دو
network-aوnetwork-bپیکربندی کنید. - قوانین فایروال را طوری ایجاد کنید که دسترسی SSH به ماشینهای مجازی از محدوده IP مربوط به IAP برای هر دو
network-aوnetwork-bامکانپذیر باشد. - ارائه ماشینهای مجازی لینوکس در هر دو
network-aوnetwork-bبدون آدرسهای IP عمومی.
ایجاد VPCها و زیرشبکهها
۱. network-a و زیرشبکههای آن را در مناطق us-east4 و us-central1 ایجاد کنید. دستورات gcloud زیر را در Cloud Shell اجرا کنید.
gcloud compute networks create network-a --subnet-mode=custom
gcloud compute networks subnets create subnet-a-use4 \
--network=network-a \
--range=10.10.0.0/24 \
--region=us-east4
gcloud compute networks subnets create subnet-a-usc1 \
--network=network-a \
--range=10.10.1.0/24 \
--region=us-central1
۲. network-b و زیرشبکه آن را در ناحیه us-east4 ایجاد کنید. دستورات gcloud زیر را در Cloud Shell اجرا کنید.
gcloud compute networks create network-b --subnet-mode=custom
gcloud compute networks subnets create subnet-b-use4 \
--network=network-b \
--range=10.20.0.0/24 \
--region=us-east4
پیکربندی خروجی اینترنت
۱. برای network-a یک روتر ابری و یک NAT ابری ایجاد کنید تا امکان خروج اینترنت برای ماشینهای مجازی بدون IP عمومی فراهم شود.
gcloud compute routers create router-a-use4 \
--network=network-a \
--region=us-east4
gcloud compute routers nats create nat-a-use4 \
--router=router-a-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4
gcloud compute routers create router-a-usc1 \
--network=network-a \
--region=us-central1
gcloud compute routers nats create nat-a-usc1 \
--router=router-a-usc1 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-central1
۲. برای network-b یک Cloud Router و Cloud NAT ایجاد کنید تا امکان خروج اینترنت برای ماشینهای مجازی بدون IP عمومی فراهم شود.
gcloud compute routers create router-b-use4 \
--network=network-b \
--region=us-east4
gcloud compute routers nats create nat-b-use4 \
--router=router-b-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4
پیکربندی قوانین فایروال
۱. برای دسترسی SSH از محدوده IP مربوط به IAP، قوانین فایروال برای network-a ایجاد کنید. دستورات gcloud زیر را در Cloud Shell اجرا کنید.
gcloud compute firewall-rules create allow-ssh-iap-a \
--network=network-a \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20
۲. برای دسترسی SSH از محدوده IP مربوط به IAP، قوانین فایروال برای network-b ایجاد کنید. دستورات gcloud زیر را در Cloud Shell اجرا کنید.
gcloud compute firewall-rules create allow-ssh-iap-b \
--network=network-b \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20
ایجاد ماشینهای مجازی
۱. ایجاد ماشینهای مجازی لینوکس در network-a
gcloud compute instances create vm-a-use4 \
--zone=us-east4-c \
--network=network-a \
--subnet=subnet-a-use4 \
--no-address \
--scopes=cloud-platform
gcloud compute instances create vm-a-usc1 \
--zone=us-central1-a \
--network=network-a \
--subnet=subnet-a-usc1 \
--no-address \
--scopes=cloud-platform
۲. ایجاد ماشین مجازی لینوکس در network-b
gcloud compute instances create vm-b-use4 \
--zone=us-east4-c \
--network=network-b \
--subnet=subnet-b-use4 \
--no-address \
--scopes=cloud-platform
۴. ایجاد آشکارساز تهدید DNS
در این بخش، وظایف زیر را انجام خواهید داد:
- آشکارساز تهدید را ایجاد کنید.
- آشکارساز تهدید را فهرست کنید.
- منبع را شرح دهید.
با آمادهسازی VPCها، زیرشبکهها و ماشینهای مجازی، مرحله بعدی ایجاد آشکارساز تهدید DNS است.
۱. با استفاده از دستور gcloud beta network-security dns-threat-detectors create یک تشخیصدهنده تهدید ایجاد کنید . برای حذف network-b از فلگ --excluded-networks استفاده کنید.
gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--provider=infoblox \
--excluded-networks=projects/$PROJECT_ID/global/networks/network-b
۲. برای تأیید ایجاد، آشکارساز تهدید را فهرست کنید .
gcloud beta network-security dns-threat-detectors list --location=global
۳. منبعی را شرح دهید که با آن میتوانید تأیید کنید که network-b به درستی در excludedNetworks فهرست شده است.
gcloud beta network-security dns-threat-detectors describe my-dns-threat-detector --location=global
خروجی مثال:
createTime: '2025-08-06T17:06:30.297586089Z' excludedNetworks: - projects/dns-armor-demo-project/global/networks/network-b name: projects/dns-armor-demo-project/locations/global/dnsThreatDetectors/my-dns-threat-detector provider: INFOBLOX updateTime: '2025-08-27T01:14:09.666357239Z'
۵. آزمایش تنظیمات
در این بخش، وظایف زیر را انجام خواهید داد:
- از طریق SSH به ماشینهای مجازی متصل شوید.
- گیت را روی ماشینهای مجازی نصب کنید.
- مخزن شبیهساز تشخیص تهدید Infoblox را کلون کنید.
- اسکریپت را اجرا کنید و خروجی تولید شده را تجزیه و تحلیل کنید.
با تولید کوئریهای DNS مخرب شبیهسازیشده از ماشینهای مجازی خود، تنظیمات را اعتبارسنجی کنید. شما باید ورودیهای لاگ را برای کوئریهای منشأ گرفته از network-a مشاهده کنید، در حالی که هیچ لاگی از network-b.
۱. به vm-a-use4 از طریق SSH متصل شوید. دستورات gcloud زیر را در Cloud Shell اجرا کنید.
gcloud compute ssh vm-a-use4 --zone=us-east4-c
۲. گیت را روی ماشین مجازی نصب کنید .
sudo apt-get install git -y
۳. مخزن شبیهساز تشخیص تهدید Infoblox را کلون کنید .
git clone https://github.com/infobloxopen/ib-threat-detection-simulator
۴. دایرکتوری را به دایرکتوری شبیهساز تغییر دهید .
cd ib-threat-detection-simulator/threat_detection_simulator/
۵. اسکریپت را اجرا کنید و خروجی تولید شده را تجزیه و تحلیل کنید.
اسکریپت را قابل اجرا کنید.
chmod +x run.sh
اسکریپت را اجرا کنید.
./run.sh info basic
۶. نمونه خروجی
تصویر زیر بخشی از خروجی اسکریپت از یک ماشین مجازی در شبکه a را نشان میدهد. خروجی نشان میدهد که ۱۰۰٪ تهدیدها شناسایی شدهاند.

تصویر زیر بخشی از خروجی اسکریپت از یک ماشین مجازی در شبکه-ب را نشان میدهد. خروجی نشان میدهد که ۰٪ از تهدیدها شناسایی شدهاند. این قابل انتظار بود زیرا شبکه-ب در حین ایجاد تشخیصدهنده تهدید، حذف شده بود.

۷. با خروج از جلسه SSH به Cloud Shell برگردید .
exit
۶. مشاهده گزارشهای تهدید در Logs Explorer
گزارشهای تهدید تولید شده را میتوان پس از اجرای اسکریپت آزمایشی در Logs Explorer مشاهده کرد، زیرا در Cloud Logging نوشته شدهاند.
نمونه ورودی لاگ
این بخش یک نمونه ورودی لاگ برای یک تهدید DNS شناساییشده ارائه میدهد که اطلاعات دقیق ثبتشده توسط DNS Armor، شامل IP منبع، دامنه مورد جستجو و دسته تهدید را نشان میدهد. این بخش به عنوان مرجعی برای درک ساختار و محتوای لاگهایی که تجزیه و تحلیل خواهید کرد، عمل میکند.
{
"insertId": "1izjkneb44",
"jsonPayload": {
"partnerId": "Infoblox",
"detectionTime": "2025-08-08T01:49:54.092250101Z",
"dnsQuery": {
"authAnswer": false,
"rdata": "random.malicious-domain.com.\t300\tIN\ta\t196.251.118.39",
"protocol": "UDP",
"projectNumber": "1234567890",
"responseCode": "NOERROR",
"queryType": "A",
"location": "us-east4",
"sourceIp": "10.10.0.2",
"queryName": "random.malicious-domain.com.",
"vmProjectNumber": "1234567890",
"vmInstanceId": "01234567899876543210",
"destinationIp": "",
"queryTime": "2025-08-08T01:49:53.712692495Z"
},
"threatInfo": {
"severity": "HIGH",
"confidence": "HIGH",
"threatDescription": "",
"category": "EmergentDomain",
"threatId": "Suspicious_EmergentDomain",
"type": "Suspicious",
"threatIndicator": "izumisv1.cc",
"threatIndicatorType": "FQDN",
"threat": "Suspicious",
"threatFeed": "suspicious-noed"
}
},
"resource": {
"type": "networksecurity.googleapis.com/DnsThreatDetector",
"labels": {
"resource_container": "projects/1234567890",
"id": "",
"location": "us-east4"
}
},
"timestamp": "2025-08-08T01:49:54.092250101Z",
"severity": "INFO",
"logName": "projects/dns-armor-demo-project/logs/networksecurity.googleapis.com%2Fdns_threat_events",
"receiveTimestamp": "2025-08-08T01:49:55.290965780Z"
}
مشاهده گزارشها در Logs Explorer
۱. به بخش Monitoring در کنسول Google Cloud بروید ، سپس Logs explorer انتخاب کنید.

۲. برای فیلتر کردن تمام لاگهای تهدید DNS Armor ، از کوئری زیر استفاده کنید. این کوئری لاگها را بر اساس نوع منبع برای DNS Threat Detector فیلتر میکند.
resource.type="networksecurity.googleapis.com/DnsThreatDetector"
۳. لاگهای مربوط به منطقه us-east4 را فیلتر کنید ، یک فیلتر برای مکان اضافه کنید. این پرسوجو فقط تهدیدات شناساییشده در منطقه us-east4 را نشان میدهد.
resource.type="networksecurity.googleapis.com/DnsThreatDetector"
resource.labels.location="us-east4"
۴. فیلتر کردن لاگها بر اساس شبکه مبدا ، لاگها را بر اساس آدرس IP مبدا کوئری DNS فیلتر کنید تا تهدیدات ناشی از یک شبکه VPC خاص را مشاهده کنید.
برای مشاهده گزارشهای network-a (زیرشبکههای 10.10.0.0/24 و 10.10.1.0/24):
resource.type="networksecurity.googleapis.com/DnsThreatDetector"
(jsonPayload.dnsQuery.sourceIp:"10.10.0." OR jsonPayload.dnsQuery.sourceIp:"10.10.1.")
برای مشاهده گزارشهای network-b (زیرشبکههای 10.20.0.0/24):
resource.type="networksecurity.googleapis.com/DnsThreatDetector"
jsonPayload.dnsQuery.sourceIp:"10.20.0."
۷. پاکسازی
برای جلوگیری از هزینههای بعدی، منابع ایجاد شده در این آزمایشگاه کد را حذف کنید. هنگام اجرای دستورات پاکسازی، حتماً از پوسته ماشین مجازی خارج شوید و به پوسته ابری برگردید.
۱. ماشینهای مجازی را حذف کنید.
gcloud compute instances delete vm-a-use4 --zone=us-east4-c --quiet
gcloud compute instances delete vm-a-usc1 --zone=us-central1-a --quiet
gcloud compute instances delete vm-b-use4 --zone=us-east4-c --quiet
۲. قوانین فایروال را حذف کنید.
gcloud compute firewall-rules delete allow-ssh-iap-a --quiet
gcloud compute firewall-rules delete allow-ssh-iap-b --quiet
۳. دروازههای Cloud NAT را حذف کنید.
gcloud compute routers nats delete nat-a-use4 --router=router-a-use4 --region=us-east4 --quiet
gcloud compute routers nats delete nat-a-usc1 --router=router-a-usc1 --region=us-central1 --quiet
gcloud compute routers nats delete nat-b-use4 --router=router-b-use4 --region=us-east4 --quiet
۴. روترهای ابری را حذف کنید
gcloud compute routers delete router-a-use4 --region=us-east4 --quiet
gcloud compute routers delete router-a-usc1 --region=us-central1 --quiet
gcloud compute routers delete router-b-use4 --region=us-east4 --quiet
۵. زیرشبکهها را حذف کنید.
gcloud compute networks subnets delete subnet-a-use4 --region=us-east4 --quiet
gcloud compute networks subnets delete subnet-a-usc1 --region=us-central1 --quiet
gcloud compute networks subnets delete subnet-b-use4 --region=us-east4 --quiet
۶. آشکارساز تهدید DNS را حذف کنید.
gcloud beta network-security dns-threat-detectors delete my-dns-threat-detector --location=global --quiet
۷. VPCها را حذف کنید.
gcloud compute networks delete network-a --quiet
gcloud compute networks delete network-b --quiet
۸. تبریک
تبریک! شما با موفقیت پیکربندی، استقرار و آزمایش آشکارساز تهدید DNS Armor را انجام دادهاید. شما تجربه عملی در محافظت از محیط Google Cloud خود در برابر تهدیدات مبتنی بر DNS کسب کردهاید.
در این آزمایشگاه کد، شما موارد زیر را دارید:
- یک محیط شبکه با چندین VPC، زیرشبکه و ماشین مجازی فراهم شد.
- خروجی اینترنت پیکربندی شده برای ماشینهای مجازی خصوصی با استفاده از Cloud NAT.
- یک آشکارساز تهدید DNS Armor را مستقر کردم و یاد گرفتم که چگونه شبکههای خاص را مستثنی کنم.
- تهدیدات DNS شبیهسازی شده و پیکربندی تشخیص تهدید اعتبارسنجی شد.
- برای شناسایی و درک فعالیتهای مخرب DNS، گزارشهای تهدید را در Logs Explorer تجزیه و تحلیل کردم.