Cloudflare Zero Trust ile Güvenli Erişim Yönetimi
Şirket ağınıza VPN kurdunuz, firewall kuralları yazdınız, port kısıtlamaları eklediniz. Bir sabah bakıyorsunuz ki bir çalışan “VPN çalışmıyor, bağlanamıyorum” diye yazıyor. Bir diğeri “hangi IP’ye bağlanacağım?” diye soruyor. Bu döngüyü hepimiz yaşadık. Cloudflare Zero Trust tam da bu noktada devreye giriyor ve “neden hala geleneksel VPN kullanıyorsunuz?” diye soruyor.
Zero Trust mimarisi, kimseye güvenme, herkesi doğrula prensibine dayanıyor. Ağ içinde olman sana otomatik güven sağlamıyor. Her kullanıcı, her cihaz, her bağlantı ayrı ayrı doğrulanıyor. Cloudflare’in bu altyapıyı ücretsiz katmanıyla bile oldukça kullanılabilir şekilde sunması, küçük ve orta ölçekli şirketler için ciddi bir fırsat.
Zero Trust Nedir, Neden Önemlidir
Geleneksel güvenlik modelinde “kale ve hendek” metaforu kullanılır. Bir kez ağa girdin mi, içeride görece özgürsün. Zero Trust bu anlayışı tamamen reddeder. Her kaynak erişimi için kimlik doğrulama gerekir, cihaz sağlığı kontrol edilir, konum ve zaman gibi bağlamsal faktörler değerlendirilir.
Cloudflare Zero Trust platformu birkaç ana bileşenden oluşur:
- Access: Uygulamalar için kimlik doğrulama ve yetkilendirme katmanı
- Tunnel: Sunucularınızı internete açmadan güvenli tünel oluşturma
- Gateway: DNS ve HTTP filtreleme, güvenli web geçidi
- WARP: Cihaz istemcisi, tüm trafiği Cloudflare ağından geçirme
- DLP: Veri kaybı önleme (Data Loss Prevention)
- Browser Isolation: Uzak tarayıcı izolasyonu
Bu yazıda özellikle Access ve Tunnel kombinasyonuna, Gateway DNS filtrelemeye ve gerçek dünya kurulum senaryolarına odaklanacağız.
Cloudflare Zero Trust Hesabı ve Temel Kurulum
Önce [dash.cloudflare.com](https://dash.cloudflare.com) üzerinden Zero Trust’a geçiş yapmanız gerekiyor. Sol menüde “Zero Trust” seçeneğini bulun ve bir team name belirleyin. Bu isim daha sonra değiştirilemez, dikkatli seçin.
Ücretsiz plan 50 kullanıcıya kadar destekliyor. Çoğu küçük şirket için bu yeterli.
Cloudflared Kurulumu
Cloudflare Tunnel kullanmak için sunucularınıza cloudflared daemon’ını kurmanız gerekiyor.
# Debian/Ubuntu için
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
# RHEL/CentOS/Rocky Linux için
curl -L --output cloudflared.rpm https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
sudo rpm -ivh cloudflared.rpm
# Kurulumu doğrula
cloudflared --version
Kurulum tamamlandıktan sonra hesabınızı authenticate etmeniz gerekiyor:
cloudflared tunnel login
Bu komut size bir URL verecek. Browser’da açıp Cloudflare hesabınıza giriş yapın ve ilgili domain’i seçin. Başarılı authentication sonrasında ~/.cloudflared/cert.pem dosyası oluşacak.
Tunnel Oluşturma
# Yeni tunnel oluştur
cloudflared tunnel create sirket-ic-tunnel
# Oluşturulan tunnel'ın bilgilerini gör
cloudflared tunnel list
# Çıktı şöyle görünür:
# ID NAME CREATED CONNECTIONS
# a1b2c3d4-e5f6-7890-abcd-ef1234567890 sirket-ic-tunnel 2024-01-15T10:30:00Z
Tunnel oluşturulduğunda ~/.cloudflared/ dizininde UUID adıyla bir JSON credentials dosyası oluşur. Bu dosyayı güvenli tutun.
Cloudflared Konfigürasyon Dosyası
Tunnel’ı yapılandırmak için bir config dosyası oluşturmanız gerekiyor:
sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml
Örnek bir konfigürasyon:
tunnel: a1b2c3d4-e5f6-7890-abcd-ef1234567890
credentials-file: /etc/cloudflared/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json
ingress:
# Dahili Grafana dashboard
- hostname: grafana.sirketiniz.com
service: http://localhost:3000
# Dahili GitLab instance
- hostname: git.sirketiniz.com
service: http://localhost:8080
# SSH erişimi için özel port
- hostname: ssh.sirketiniz.com
service: ssh://localhost:22
# Varsayılan: tanımsız hostname'ler için 404 döndür
- service: http_status:404
Credentials dosyasını doğru konuma kopyalayın:
sudo cp ~/.cloudflared/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json /etc/cloudflared/
sudo chown root:root /etc/cloudflared/*.json
sudo chmod 600 /etc/cloudflared/*.json
Cloudflared’i Systemd Servisi Olarak Çalıştırma
# Systemd servisini kur ve başlat
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
# Durumu kontrol et
sudo systemctl status cloudflared
# Logları takip et
sudo journalctl -u cloudflared -f
Bu noktada tunnel aktif ama henüz DNS kayıtları yok. Tunnel’ı DNS’e bağlamanız gerekiyor:
# Her hostname için CNAME kaydı oluştur
cloudflared tunnel route dns sirket-ic-tunnel grafana.sirketiniz.com
cloudflared tunnel route dns sirket-ic-tunnel git.sirketiniz.com
cloudflared tunnel route dns sirket-ic-tunnel ssh.sirketiniz.com
Bu komutlar Cloudflare DNS’te otomatik olarak CNAME kayıtları oluşturur ve bunlar tunnel UUID’nize işaret eder.
Cloudflare Access ile Uygulama Koruması
Tunnel kurulduktan sonra uygulamalarınız erişilebilir durumda, fakat henüz herkese açık. Access politikaları ekleyerek kimlik doğrulamayı zorunlu kılacağız.
Zero Trust dashboard’unda Access > Applications > Add an Application yolunu izleyin.
Access Uygulaması Oluşturma
Dashboard üzerinden yapılan işlemleri Cloudflare API ile de otomatize edebilirsiniz. Terraform kullananlar için örnek:
# Önce API token'ınızı ve Account ID'nizi environment variable olarak ayarlayın
export CF_API_TOKEN="your-api-token-here"
export CF_ACCOUNT_ID="your-account-id-here"
# API ile mevcut uygulamaları listele
curl -s -X GET
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/access/apps"
-H "Authorization: Bearer ${CF_API_TOKEN}"
-H "Content-Type: application/json" | jq '.result[] | {name: .name, domain: .domain}'
Identity Provider Bağlama
Google Workspace, Microsoft Azure AD, Okta, GitHub gibi identity provider’larla entegrasyon kurabilirsiniz. Google OAuth2 örneği:
Zero Trust dashboard’unda Settings > Authentication > Add new yolunu izleyin. Google’ı seçin, Google Cloud Console’dan OAuth2 credentials oluşturun:
- Authorized redirect URIs:
https://[team-name].cloudflareaccess.com/cdn-cgi/access/callback
Client ID ve Secret’ı Cloudflare’e girin. Artık kullanıcılar Google hesaplarıyla giriş yapabilir.
Erişim Politikaları Yazma
Politikalar Allow, Block ve Bypass olarak üç tipe ayrılır. Gerçek dünya senaryosu: Sadece şirket domain’inden (@sirketiniz.com) email’i olan Google kullanıcıları Grafana’ya erişebilsin.
Dashboard’da Application > Policies > Add a Policy:
Policy Name: Sirket Calisanlari
Action: Allow
Include:
- Selector: Emails ending in
- Value: @sirketiniz.com
Buna ek olarak belirli bir IP aralığından mı geliyor diye de kontrol ekleyebilirsiniz:
Require:
- Selector: IP ranges
- Value: 85.x.x.x/24 (ofis IP'niz)
Bu kombinasyon hem doğru email domain’i hem de ofis IP’si gerektiriyor. Uzaktan çalışanlar için IP koşulunu kaldırıp sadece email domain’i yeterli olabilir.
Gateway ile DNS Filtreleme
Cloudflare Gateway, şirketinizdeki tüm DNS sorgularını filtreler. Zararlı siteler, phishing domainleri, istemediğiniz kategoriler otomatik olarak bloklanır.
Gateway DNS Politikası Oluşturma
Zero Trust > Gateway > Firewall Policies > DNS bölümünden yeni politika ekleyin.
Örnek politika mantığı:
- Security Categories: Malware, Phishing, Command & Control gibi kategorileri otomatik blokla
- Content Categories: Sosyal medya, kumar, yetişkin içerik gibi kategorileri ihtiyaca göre engelle
- Custom Blocked Domains: Özellikle engellemek istediğiniz domainleri listele
WARP istemcisi kurulu cihazlarda bu politikalar otomatik devreye girer.
Cihaz Üzerinde WARP Kurulumu
# Linux için WARP kurulumu
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt-get update && sudo apt-get install cloudflare-warp
# WARP'ı Zero Trust modunda kaydet
warp-cli teams-enroll [team-name]
# Bağlan
warp-cli connect
# Durumu kontrol et
warp-cli status
Gerçek Dünya Senaryosu: Uzak Geliştirici Ekibi
Diyelim ki 15 kişilik bir geliştirici ekibiniz var. Bunların 8’i ofiste, 7’si uzaktan çalışıyor. Şu servislere erişim yönetmek istiyorsunuz:
- Dahili Grafana dashboard (monitoring)
- GitLab instance
- Portainer (Docker yönetimi)
- Internal Wiki (Confluence)
- SSH erişimi production sunuculara
Geleneksel yaklaşımda VPN kurarsınız, herkes VPN’e bağlanır, sonra her şeye erişir. Zero Trust yaklaşımında ise her uygulama için ayrı politika yazarsınız.
Örneğin Portainer’a sadece DevOps ekibinin erişmesi gerekiyor. GitLab’a tüm geliştiriciler erişebilir. Grafana’ya sadece kıdemli geliştiriciler ve DevOps erişebilir.
Bunun için Cloudflare Access’te gruplar oluşturabilirsiniz:
# API üzerinden Access Group oluşturma
curl -s -X POST
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/access/groups"
-H "Authorization: Bearer ${CF_API_TOKEN}"
-H "Content-Type: application/json"
-d '{
"name": "DevOps Ekibi",
"include": [
{
"email": {"email": "[email protected]"}
},
{
"email": {"email": "[email protected]"}
}
]
}'
Bu grubu Portainer uygulamasının politikasına eklersiniz. GitLab için ayrı grup, Grafana için ayrı grup. Her biri bağımsız yönetiliyor.
SSH Erişimi için Browser-Based Terminal
Zero Trust’ın en şık özelliklerinden biri SSH bağlantısını browser üzerinden yönetebilmek. Production sunucuya SSH ile bağlanmak istiyorsunuz, tunnel ve Access üzerinden geçiyor, browser’da terminal açılıyor.
Bunun için config.yml’de SSH servisini tanımladık. Bir de SSH host key kaydetmeniz gerekiyor:
# SSH CA sertifikasını Cloudflare'den al ve sunucuya ekle
# Zero Trust Dashboard > Access > Service Auth > SSH bölümünden CA public key'i kopyalayın
# Sunucuda bu CA'yı güvenilir olarak işaretle
echo "TrustedUserCAKeys /etc/ssh/cloudflare-ca.pub" | sudo tee -a /etc/ssh/sshd_config
# CA public key'i dosyaya yaz
sudo nano /etc/ssh/cloudflare-ca.pub
# (dashboard'dan kopyaladığınız public key'i buraya yapıştırın)
sudo systemctl restart sshd
Artık kullanıcılar ssh.sirketiniz.com adresine browser’dan giderek, kimlik doğrulamasını tamamladıktan sonra browser içi terminal ile SSH bağlantısı kurabilir. Hiçbir SSH key dağıtımı gerekmiyor, hiçbir firewall kuralı değiştirmenize gerek yok.
Audit Logging ve İzleme
Zero Trust’ın sunduğu en değerli şeylerden biri detaylı audit log’ları. Kim, ne zaman, nereden hangi uygulamaya erişti, erişim reddedildiyse neden reddedildi, hepsini görebilirsiniz.
Zero Trust > Logs > Access bölümünden logları inceleyebilirsiniz. Ama bu logları kendi SIEM sistemine aktarmak istiyorsanız Logpush kullanabilirsiniz:
# Logpush job oluşturma - Örnek: S3 bucket'a gönder
curl -s -X POST
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/logpush/jobs"
-H "Authorization: Bearer ${CF_API_TOKEN}"
-H "Content-Type: application/json"
-d '{
"name": "zero-trust-access-logs",
"destination_conf": "s3://your-bucket/logs?region=eu-west-1",
"dataset": "access_requests",
"logpull_options": "fields=Datetime,Action,Email,IPAddress,AppName,UserAgent",
"enabled": true
}'
Alternatif olarak Cloudflare’in kendi analytics arayüzü çoğu durumda yeterli. Hangi kullanıcı kaç kez reddedildi, en çok kullanılan uygulamalar, coğrafi dağılım gibi metrikleri görsel olarak takip edebilirsiniz.
Device Posture ile Cihaz Güvenliği
Zero Trust’ın gerçek gücü Device Posture kontrollerinde ortaya çıkıyor. Sadece kullanıcıyı değil, kullanıcının bağlandığı cihazı da doğrulayabilirsiniz.
Örnek kontroller:
- OS Version: Windows 11 veya macOS 14+ olmayan cihazlardan erişim engelle
- Disk Encryption: FileVault/BitLocker aktif değilse erişim verme
- Firewall Status: Cihaz firewall’ı kapalıysa reddet
- Antivirus: Belirli bir AV çözümü kurulu ve güncel değilse blokla
- Carbon Black / CrowdStrike: EDR agent’ı aktif mi kontrol et
Bu kontrolleri Access politikalarına ekleyince artık “doğru kullanıcı + doğru cihaz” kombinasyonu gerektiriyorsunuz.
Zero Trust > Settings > WARP Client > Device posture bölümünden bu kontrolleri yapılandırın. Ardından Access politikanıza “Require” koşulu olarak ekleyin.
Sorun Giderme
Tunnel bağlantı sorunlarında şu adımları izleyin:
# Tunnel durumunu kontrol et
cloudflared tunnel info sirket-ic-tunnel
# Canlı log takibi
cloudflared tunnel --config /etc/cloudflared/config.yml run 2>&1 | tail -50
# Bağlantı testi
cloudflared tunnel --config /etc/cloudflared/config.yml ingress validate
# Belirli bir URL'e yönlendirmeyi test et
cloudflared tunnel --config /etc/cloudflared/config.yml ingress rule https://grafana.sirketiniz.com
Sık karşılaşılan sorunlar ve çözümleri:
- “ERR_TOO_MANY_REDIRECTS”: Uygulamanız HTTP iken siz HTTPS ile tanımladınız veya tam tersi.
originRequestbölümündenoTLSVerify: trueekleyin. - “502 Bad Gateway”: Yerel servis çalışmıyor veya yanlış port.
service: http://localhost:PORTsatırını kontrol edin. - “Access denied”: Politika koşulları sağlanmıyor. Audit log’dan detaylı reason’a bakın.
- Tunnel düşüyor: Systemd servis log’larına bakın, credentials dosyası permission sorunu olabilir.
# Permission sorunlarını düzelt
sudo chown -R root:root /etc/cloudflared
sudo chmod 600 /etc/cloudflared/*.json
sudo chmod 644 /etc/cloudflared/config.yml
sudo systemctl restart cloudflared
Maliyet ve Kapasite Planlaması
Cloudflare Zero Trust fiyatlandırması kullanıcı başına aylık ücretlendirme üzerine kurulu:
- Free: 50 kullanıcı, temel Access ve Tunnel özellikleri
- Pay-as-you-go: Kullanıcı başına aylık ücret, gelişmiş özellikler
- Contract: Büyük kurumlar için özel fiyat
50 kişilik bir şirket için ücretsiz plan yeterli. 51. kullanıcıda ücretli plana geçmeniz gerekiyor. Bu noktada maliyeti geleneksel VPN lisansları ve altyapı maliyetiyle karşılaştırın. Genellikle Zero Trust daha ekonomik çıkıyor.
Tunnel bandwidth için ücret alınmıyor, bu önemli bir avantaj. Kaç GB veri geçirirseniz geçirin fark etmiyor.
Güvenlik Sertleştirme Önerileri
Kurulumu tamamladıktan sonra şu ek önlemleri alın:
- Tunnel kullandığınız sunucuların 80 ve 443 portlarını dış dünyaya kapatın. Artık doğrudan erişime gerek yok, her şey tunnel üzerinden geçiyor.
- Cloudflare Access’e özel servis token’ları oluşturun. İnsan olmayan bağlantılar (CI/CD, monitoring) için bunları kullanın.
- Multi-Factor Authentication’ı zorunlu yapın. Identity provider seviyesinde değil, Cloudflare Access seviyesinde de MFA zorunlu kılabilirsiniz.
- Session duration’ı kısaltın. Finansal veya kritik sistemler için 1-4 saat oturum süresi yeterli, gece boyunca açık kalmasın.
- Hard coded allowed IP’leri koyun. Kritik admin panelleri için ofis IP’si zorunlu koşul olsun.
Sonuç
Cloudflare Zero Trust, özellikle küçük ve orta ölçekli ekipler için VPN’in yerini fazlasıyla alabiliyor. Kurulum süreci ilk başta karmaşık görünse de yukarıdaki adımları izleyerek birkaç saatte temel altyapıyı kurabilirsiniz.
En büyük avantajları şöyle özetleyebilirim: Sunucularınızda açık port bırakmıyorsunuz, her uygulama için granüler erişim kontrolü yazabiliyorsunuz, kim neye ne zaman erişti tam görünürlüğünüz var ve kullanıcı deneyimi VPN’e kıyasla çok daha iyi. “VPN neden bağlanmıyor” sorusunu artık duymazsınız.
Tabii her şey mükemmel değil. WARP istemcisi bazen DNS resolution konusunda sorunlar çıkarabiliyor, özellikle split tunnel konfigürasyonlarında dikkatli olmak gerekiyor. Çok karmaşık politika kombinasyonlarında audit log’ları olmadan debug etmek zorlaşabiliyor. Ama bunlar çözülemez sorunlar değil, biraz deneyimle üstesinden gelinebilir.
Eğer hala geleneksel VPN ile boğuşuyorsanız, bir test ortamında Zero Trust’ı deneyin. Geri dönmek istemeyeceğinizi garantileyebilirim.
