GCP VPC Güvenlik Duvarı Kuralları Yönetimi

Bulut ortamlarında ağ güvenliğini doğru yapılandırmak, şirket verilerini ve servislerini korumak açısından kritik bir rol oynar. GCP’de bu sorumluluğun büyük bir kısmı VPC Firewall kurallarına düşüyor. Yanlış yapılandırılmış bir firewall kuralı, ya meşru trafiği keserek servis kesintisine yol açar ya da gereksiz portları dışarıya açarak ciddi güvenlik açıkları oluşturur. Bu yazıda GCP VPC Firewall yönetimini baştan sona ele alacağız: temel kavramlardan ileri seviye senaryolara, gcloud CLI kullanımından Terraform ile otomasyona kadar her şeyi işleyeceğiz.

GCP VPC Firewall Temelleri

GCP Firewall kuralları, AWS Security Group’larından ya da Azure NSG’den biraz farklı çalışır. Her kural bir VPC ağına bağlıdır ve stateful yapıdadır; yani gelen bir bağlantıya izin verdiyseniz, dönüş trafiği otomatik olarak izin görür, ayrıca bir kural yazmanıza gerek yoktur.

Her firewall kuralı şu temel bileşenlerden oluşur:

  • Direction (Yön): INGRESS (gelen trafik) veya EGRESS (giden trafik)
  • Priority (Öncelik): 0 ile 65535 arasında bir değer; düşük sayı daha yüksek önceliktir
  • Action: ALLOW veya DENY
  • Target: Kuralın hangi VM’lere uygulanacağı (tüm örnekler, servis hesabı veya network tag)
  • Source/Destination: Trafiğin nereden geldiği veya nereye gittiği
  • Protocol/Port: TCP, UDP, ICMP veya belirli port aralıkları

GCP her VPC’de iki varsayılan kural bulundurur: tüm egress trafiğine izin veren bir kural (priority 65535) ve tüm ingress trafiğini engelleyen bir kural (priority 65535). Bu “implied rules” silemezsiniz ama daha yüksek öncelikli kurallarla override edebilirsiniz.

gcloud CLI ile Firewall Kurallarını Listeleme ve İnceleme

Önce mevcut durumu görmekle başlayalım. Proje üzerindeki tüm firewall kurallarını listelemek için:

# Tüm firewall kurallarını listele
gcloud compute firewall-rules list 
  --project=my-production-project 
  --format="table(name,network,direction,priority,sourceRanges,allowed,targetTags)"

Belirli bir kuralın detaylarını görmek için:

# Tek bir kuralın detaylarını gör
gcloud compute firewall-rules describe allow-internal-ssh 
  --project=my-production-project

Belirli bir VPC ağına ait kuralları filtrelemek çok işe yarar, özellikle birden fazla VPC olan ortamlarda:

# Belirli bir VPC'ye ait kuralları filtrele
gcloud compute firewall-rules list 
  --filter="network=projects/my-production-project/global/networks/prod-vpc" 
  --format="table(name,direction,priority,allowed,denied)"

Temel Firewall Kuralı Oluşturma Senaryoları

SSH Erişimi için Kural

Gerçek dünya senaryosunda SSH erişimini herkese açmak yerine sadece bastion host veya VPN IP bloğuna kısıtlamak gerekir:

# Sadece belirli IP'lerden SSH erişimine izin ver
# Ör: Ofis VPN bloğu ve bastion host IP'si
gcloud compute firewall-rules create allow-ssh-from-office 
  --project=my-production-project 
  --network=prod-vpc 
  --direction=INGRESS 
  --priority=1000 
  --action=ALLOW 
  --rules=tcp:22 
  --source-ranges=10.100.0.0/24,203.0.113.50/32 
  --target-tags=allow-ssh 
  --description="Ofis VPN ve bastion'dan SSH erisimi"

Bu kuralı VM’lere uygulamak için VM’e allow-ssh tag’i atmanız yeterlidir. Tag bazlı yönetim, GCP’nin en güçlü özelliklerinden biridir; yüzlerce VM’e tek bir rule set uygulamanıza olanak tanır.

Web Sunucuları için HTTP/HTTPS Kuralı

# Web tier'ına HTTP ve HTTPS trafiğine izin ver
gcloud compute firewall-rules create allow-web-ingress 
  --project=my-production-project 
  --network=prod-vpc 
  --direction=INGRESS 
  --priority=1000 
  --action=ALLOW 
  --rules=tcp:80,tcp:443 
  --source-ranges=0.0.0.0/0 
  --target-tags=web-server 
  --description="Internet'ten HTTP ve HTTPS erisimi"

Uygulama Katmanları Arası İletişim

Mikroservis mimarilerinde veya üç katmanlı uygulamalarda, katmanlar arası iletişimi tag’ler üzerinden yönetmek çok temiz bir yaklaşım sunar:

# Web sunucularından app sunucularına 8080 portuna izin ver
gcloud compute firewall-rules create allow-web-to-app 
  --project=my-production-project 
  --network=prod-vpc 
  --direction=INGRESS 
  --priority=1000 
  --action=ALLOW 
  --rules=tcp:8080 
  --source-tags=web-server 
  --target-tags=app-server 
  --description="Web tier'dan app tier'a baglanti"

# App sunucularından DB sunucularına PostgreSQL erişimi
gcloud compute firewall-rules create allow-app-to-db 
  --project=my-production-project 
  --network=prod-vpc 
  --direction=INGRESS 
  --priority=1000 
  --action=ALLOW 
  --rules=tcp:5432 
  --source-tags=app-server 
  --target-tags=database-server 
  --description="App tier'dan PostgreSQL erisimi"

Firewall Kuralı Güncelleme ve Silme

Mevcut bir kuralı güncellemek için update komutunu kullanabilirsiniz. Önemli bir nokta: güncelleme sırasında sadece değiştirmek istediğiniz alanları belirtmeniz yeterlidir:

# Mevcut kurala yeni IP aralığı ekle
gcloud compute firewall-rules update allow-ssh-from-office 
  --project=my-production-project 
  --source-ranges=10.100.0.0/24,203.0.113.50/32,198.51.100.0/28 
  --description="Ofis VPN, bastion ve yeni Istanbul ofisi"

Kuralın önceliğini değiştirmek için:

# Kural önceliğini değiştir
gcloud compute firewall-rules update allow-ssh-from-office 
  --priority=900

Geçici olarak bir kuralı disable etmek mümkün; bu özellikle troubleshooting sırasında çok işe yarar:

# Kuralı devre dışı bırak (silmeden)
gcloud compute firewall-rules update allow-ssh-from-office 
  --disabled

# Tekrar etkinleştir
gcloud compute firewall-rules update allow-ssh-from-office 
  --no-disabled

Silme işlemi için:

# Firewall kuralını sil
gcloud compute firewall-rules delete allow-old-monitoring-rule 
  --project=my-production-project 
  --quiet

Servis Hesabı Bazlı Firewall Kuralları

Tag bazlı kurallar pratik olmakla birlikte, bir güvenlik açığı barındırır: GCP’de network tag’leri VM sahibi veya editör yetkisine sahip herkes ekleyip çıkarabilir. Daha güvenli bir alternatif olarak servis hesabı bazlı kurallar kullanılabilir:

# Servis hesabı bazlı kural oluştur
# Monitoring servis hesabından çalışan VM'ler app sunucularına erişebilir
gcloud compute firewall-rules create allow-monitoring-to-app 
  --project=my-production-project 
  --network=prod-vpc 
  --direction=INGRESS 
  --priority=1000 
  --action=ALLOW 
  --rules=tcp:9100 
  --source-service-accounts=monitoring-sa@my-production-project.iam.gserviceaccount.com 
  --target-service-accounts=app-server-sa@my-production-project.iam.gserviceaccount.com 
  --description="Prometheus node exporter erisimi"

Servis hesabı bazlı kurallar, IAM izinleri üzerinden kontrol edildiği için çok daha güvenlidir. Bir saldırganın servis hesabını değiştirmesi, tag eklemesinden çok daha zordur.

Egress Kuralları ve Veri Sızıntısı Önleme

Çoğu sysadmin sadece ingress kurallarına odaklanır ama egress kontrolü de en az ingress kadar önemlidir. Özellikle veri güvenliği gereksinimleri olan ortamlarda, VM’lerin sadece ihtiyaç duydukları yerlere bağlanabilmesi gerekir:

# Önce tüm egress trafiğini engelle
gcloud compute firewall-rules create deny-all-egress 
  --project=my-production-project 
  --network=prod-vpc 
  --direction=EGRESS 
  --priority=65000 
  --action=DENY 
  --rules=all 
  --destination-ranges=0.0.0.0/0 
  --target-tags=restricted-server 
  --description="Kisitli sunuculardan tum cikis trafiğini engelle"

# Sadece belirli hedeflere izin ver
# Google API'lerine erişim (Private Google Access)
gcloud compute firewall-rules create allow-google-apis-egress 
  --project=my-production-project 
  --network=prod-vpc 
  --direction=EGRESS 
  --priority=1000 
  --action=ALLOW 
  --rules=tcp:443 
  --destination-ranges=199.36.153.8/30 
  --target-tags=restricted-server 
  --description="Private Google Access için egress"

# Internal DNS'e erişim
gcloud compute firewall-rules create allow-dns-egress 
  --project=my-production-project 
  --network=prod-vpc 
  --direction=EGRESS 
  --priority=1000 
  --action=ALLOW 
  --rules=udp:53,tcp:53 
  --destination-ranges=10.0.0.0/8 
  --target-tags=restricted-server 
  --description="Internal DNS çözümlemesi için"

Terraform ile Firewall Kuralı Otomasyonu

Üretim ortamlarında firewall kurallarını manuel yönetmek hem hata yapmaya açık hem de ölçeklenebilir değil. Terraform ile Infrastructure as Code yaklaşımını benimsemek en sağlıklı yol:

# Terraform ile GCP Firewall kuralları
# main.tf içeriği aşağıdaki gibi olabilir

cat > firewall_rules.tf << 'EOF'
resource "google_compute_firewall" "allow_ssh_from_office" {
  name        = "allow-ssh-from-office"
  network     = google_compute_network.prod_vpc.name
  project     = var.project_id
  description = "Ofis VPN ve bastion'dan SSH erisimi"
  priority    = 1000
  direction   = "INGRESS"

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }

  source_ranges = var.office_ip_ranges
  target_tags   = ["allow-ssh"]
}

resource "google_compute_firewall" "allow_web_ingress" {
  name        = "allow-web-ingress"
  network     = google_compute_network.prod_vpc.name
  project     = var.project_id
  description = "Internet'ten HTTP/HTTPS erisimi"
  priority    = 1000
  direction   = "INGRESS"

  allow {
    protocol = "tcp"
    ports    = ["80", "443"]
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["web-server"]
}

variable "office_ip_ranges" {
  type    = list(string)
  default = ["10.100.0.0/24", "203.0.113.50/32"]
}
EOF

# Planı kontrol et ve uygula
terraform plan -out=firewall.plan
terraform apply firewall.plan

Firewall Log’larını Etkinleştirme ve Analiz

Firewall log’ları troubleshooting ve güvenlik analizi için kritiktir. GCP’de her kural için log kaydını etkinleştirebilirsiniz:

# Mevcut bir kural için log'lamayı etkinleştir
gcloud compute firewall-rules update allow-web-ingress 
  --project=my-production-project 
  --enable-logging 
  --logging-metadata=INCLUDE_ALL_METADATA

# Yeni kural oluştururken log'lamayı etkinleştir
gcloud compute firewall-rules create allow-ssh-from-office-v2 
  --project=my-production-project 
  --network=prod-vpc 
  --direction=INGRESS 
  --priority=1000 
  --action=ALLOW 
  --rules=tcp:22 
  --source-ranges=10.100.0.0/24 
  --target-tags=allow-ssh 
  --enable-logging 
  --logging-metadata=INCLUDE_ALL_METADATA

Log’ları Cloud Logging üzerinden analiz etmek için BigQuery’ye export edebilir veya direkt Log Explorer’dan sorgulayabilirsiniz:

# Son 1 saatteki DENY edilen bağlantıları gcloud logging ile sorgula
gcloud logging read 
  'logName="projects/my-production-project/logs/compute.googleapis.com%2Ffirewall" AND jsonPayload.disposition="DENIED"' 
  --project=my-production-project 
  --freshness=1h 
  --format="json" | jq '.[] | {src: .jsonPayload.connection.src_ip, dst: .jsonPayload.connection.dest_ip, port: .jsonPayload.connection.dest_port, rule: .jsonPayload.rule_details.reference}'

Connectivity Test ile Kural Doğrulama

GCP’nin “Network Intelligence Center” servisindeki Connectivity Test özelliği, firewall kurallarını gerçekten test etmeden önce simüle etmenizi sağlar:

# Connectivity Test oluştur ve çalıştır
gcloud network-management connectivity-tests create test-web-to-app 
  --project=my-production-project 
  --source-instance=projects/my-production-project/zones/europe-west1-b/instances/web-server-01 
  --destination-instance=projects/my-production-project/zones/europe-west1-b/instances/app-server-01 
  --protocol=TCP 
  --destination-port=8080

# Test sonuçlarını görüntüle
gcloud network-management connectivity-tests describe test-web-to-app 
  --project=my-production-project 
  --format="json" | jq '.reachabilityDetails.result'

Bu araç özellikle karmaşık multi-tier mimarilerde, değişiklik yapmadan önce trafiğin geçebilir olup olmadığını doğrulamak için çok değerlidir.

Yaygın Hatalar ve Çözümleri

Priority çakışmaları: Aynı trafik için hem ALLOW hem DENY kuralı olduğunda düşük sayılı (yüksek öncelikli) kural kazanır. Kurallarınızı belirli bir priority şemasına göre organize etmek faydalıdır:

  • 100-499: Acil engelleme kuralları (belirli IP’leri hemen engelle)
  • 500-999: Kritik servis izin kuralları
  • 1000-4999: Genel uygulama kuralları
  • 5000-9999: Monitoring ve yönetim kuralları
  • 65000-65534: Genel engelleme kuralları

Source tag vs Source range karışıklığı: Source tag sadece aynı VPC içindeki VM’ler için geçerlidir. VPC peering veya VPN üzerinden gelen trafik için source range kullanmanız gerekir.

Implied rule unuttunuzda: GCP’nin implied egress allow kuralı (priority 65535) tüm dış trafiğe izin verir. Bunu override etmek için daha yüksek öncelikli deny-all-egress kuralı oluşturmanız gerekir.

Toplu Firewall Kural Yönetimi

Birden fazla projede firewall kurallarını tutarlı tutmak için script kullanmak hayat kurtarır:

#!/bin/bash
# Tüm projelerdeki "default" ağ üzerindeki riskli kuralları bul ve raporla

PROJECTS=$(gcloud projects list --format="value(projectId)")

for PROJECT in $PROJECTS; do
  echo "Proje kontrol ediliyor: $PROJECT"
  
  # 0.0.0.0/0 kaynaklı ve SSH/RDP açık kuralları bul
  RISKY_RULES=$(gcloud compute firewall-rules list 
    --project="$PROJECT" 
    --filter="direction=INGRESS AND allowed.ports:(22 3389) AND sourceRanges=0.0.0.0/0" 
    --format="value(name)" 2>/dev/null)
  
  if [ -n "$RISKY_RULES" ]; then
    echo "UYARI: $PROJECT projesinde riskli kural bulundu:"
    echo "$RISKY_RULES"
    
    # Opsiyonel: Kuralları otomatik devre dışı bırak
    # for RULE in $RISKY_RULES; do
    #   gcloud compute firewall-rules update "$RULE" 
    #     --project="$PROJECT" 
    #     --disabled
    # done
  fi
done

Bu script özellikle güvenlik audit’lerinde ve düzenli compliance kontrollerinde çok kullanışlıdır. Cron job olarak çalıştırarak haftalık rapor üretebilirsiniz.

Sonuç

GCP VPC Firewall kuralları, bulut altyapısının güvenlik katmanının temel taşıdır. Başarılı bir firewall yönetimi için dikkat edilmesi gereken başlıca noktalar şunlardır:

  • En az yetki prensibini uygulayın: Bir servise ihtiyaç duyduğu minimum erişimi verin, 0.0.0.0/0 kullanımını sadece gerçekten zorunlu durumlarda (HTTP/HTTPS) tercih edin.
  • Tag bazlı yönetim yerine servis hesabı bazlı yönetimi güvenlik kritik sistemlerde tercih edin.
  • Tüm kritik kurallarda log’lamayı etkinleştirin ve bu log’ları Cloud Logging veya SIEM sisteminize akıtın.
  • Değişiklikleri Terraform gibi IaC araçlarıyla yönetin; bu sayede change history, code review ve rollback imkanınız olur.
  • Connectivity Test aracını production değişikliklerinden önce kullanın; beklenmedik servis kesintilerinin önüne geçersiniz.
  • Egress kontrolünü ihmal etmeyin; veri sızıntısının büyük çoğunluğu outbound trafik üzerinden gerçekleşir.
  • Priority şemasınızı baştan belirleyin ve tüm ekibin buna uymasını sağlayın; ilerleyen dönemde kural yönetimi çok daha kolay olacaktır.

Güvenlik her zaman işlevsellik ile denge içinde olmalıdır ama “önce aç, sonra kısıt” yaklaşımı yerine “önce kısıt, sonra gerektiğinde aç” felsefesini benimsemek, uzun vadede çok daha sağlıklı bir güvenlik postürü oluşturur.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir