Merhaba arkadaşlar, bugün sizlere özellikle uzaktan çalışma döneminde ve sunucu güvenliğini katmanlamak isteyen herkes için harika bir yöntemden bahsedeceğim: Cloudflare Access Tüneli. Bu rehberde, SSH, RDP, veritabanı yönetim panelleri (phpMyAdmin, pgAdmin) veya dahili geliştirme araçları gibi servislerinizi, doğrudan internet üzerinden açmak zorunda kalmadan, güçlü kimlik doğrulama (Google, GitHub, OTP) arkasına nasıl alabileceğinizi adım adım anlatacağım. Bu sayede sunucunuza sadece yetkili kişiler erişebilecek ve saldırı yüzeyinizi ciddi oranda küçülteceksiniz.
Cloudflare Access ve Tünel Nedir?
Cloudflare Access, bir servise erişmeden önce kullanıcının kimliğini doğrulayan bir güvenlik katmanıdır. Cloudflare Tunnel (eski adıyla Argo Tunnel) ise, sunucunuzdan Cloudflare'in ağına giden güvenli, dışarıdan bağlantı kabul etmeyen (ingress olmayan) bir bağlantı kurar. İkisini birlikte kullandığınızda, servisiniz internetten tamamen gizlenir ve tüm trafik bu güvenli tünel üzerinden, Cloudflare'in kimlik doğrulama politikalarından geçerek size ulaşır. Yani sunucunuzda 22 (SSH) veya 3389 (RDP) portunu dış dünyaya açmanıza gerek kalmaz.
Adım 1: Cloudflare'de Gerekli Ayarlar
Öncelikle Cloudflare hesabınızda domain'inizin yönetildiğinden emin olun. Daha sonra "Zero Trust" paneline girin (eskiden Access). İlk kez kullanıyorsanız, organizasyon adınızı ve alt domaininizi (örneğin, sirketim.cloudflareaccess.com) ayarlamanız istenecek.
Adım 2: Kimlik Doğrulama Sağlayıcısı Ekleme
"Access" > "Authentication" bölümüne gidin. Buradan kullanıcılarınızın giriş yapabilmesi için bir sağlayıcı ekleyin. Benim en çok kullandıklarım Google ve GitHub. Çok faktörlü doğrulama (MFA) için "One-time PIN"i de mutlaka aktif edin. Bu sayede ekstra bir güvenlik katmanınız olur.
Adım 3: Uygulama ve Politika Oluşturma
"Access" > "Applications" kısmından "Add an application" diyerek yeni bir uygulama ekleyin. Tür olarak "Self-hosted" seçin.
- Application Name: Örn: "Sunucu SSH Erişimi"
- Session Duration: Oturum süresini belirleyin (örn: 12 saat).
- Application Domain: Erişim için kullanılacak subdomain'i yazın. Örneğin, ssh.sirketiniz.com. Bu domain'in DNS kaydını Cloudflare otomatik ekleyecek.
- Policies: En önemli kısım burası. "Add a policy" diyerek kimlerin erişebileceğini belirleyin. Örneğin, "Include" kısmına "E-posta adresi" seçip, teknik@firma.com yazabilirsiniz. Veya GitHub organizasyonunuzdaki herkesi ekleyebilirsiniz. Ben her zaman en kısıtlayıcı politika ile başlayıp, ihtiyaca göre genişletmenizi öneririm.
Adım 4: Sunucuya Cloudflared Kurulumu
Şimdi sıra, tüneli kuracak olan hafif istemciyi (cloudflared) sunucumuza kurmaya geldi. Ben genelde Ubuntu/Debian tabanlı sistemler kullandığım için örneği ona göre veriyorum.
Kurulum bittikten sonra, Cloudflare Zero Trust panelinizde "Access" > "Tunnels" kısmına gidin. "Create a tunnel" diyerek yeni bir tünel oluşturun ve bir isim verin (örn: sunucu-tuneli). Karşınıza bir komut çıkacak. Bu komutu, cloudflared service kurmadan önce sunucunuzda çalıştırarak tüneli hesabınıza bağlamanız gerekiyor.
Adım 5: Tüneli Yapılandırma ve Servis Olarak Çalıştırma
Tüneli oluşturduktan sonra, "Configure" kısmından hangi sunucu servisini, hangi subdomain'e bağlayacağınızı ayarlayacaksınız. Örneğin:
- Public Hostname: ssh.sirketiniz.com
- Service: SSH için ssh://localhost:22, RDP için rdp://localhost:3389, bir web paneli için
Bu ayarı yaptıktan sonra, sunucunuzda cloudflared servisini başlatmanız yeterli. Sisteminize göre servis komutu değişebilir.
Artık ssh.sirketiniz.com adresine gittiğinizde (veya SSH istemcinizle bu adrese bağlanmaya çalıştığınızda), önce Cloudflare'in güzel login ekranı karşınıza çıkacak. Politikada tanımlı kimlik bilgilerinizle giriş yaptıktan sonra, bağlantınız sunucunuza yönlendirilecek.
İleri Seviye İpuçları ve Optimizasyon
- Performans: Tünel bağlantısı genelde oldukça hızlıdır. Yine de sunucunuz ile en yakın Cloudflare veri merkezi arasındaki bağlantı önemlidir.
- Birden Fazla Servis: Aynı tünel üzerinden farklı subdomain'lerle onlarca servisi güvenli hale getirebilirsiniz. Her biri için ayrı Access politikası oluşturmayı unutmayın.
- Log Takibi: Tüm erişim denemelerini ve başarılı girişleri Zero Trust panelinden "Logs" > "Access" sekmesinden takip edebilirsiniz. Bu, güvenlik denetimi için çok değerli.
- Yedekleme: Tünel konfigürasyonunuz ve Access politikalarınız Cloudflare'de duruyor. Kritik politikalarınızın notunu almayı unutmayın.
Sonuç olarak, bu yöntemle sunucularınızın saldırıya açık portlarını neredeyse sıfıra indirebilir, erişimleri merkezi ve güçlü bir kimlik doğrulama mekanizmasıyla yönetebilirsiniz. Üstelik Cloudflare'in ücretsiz katmanında bile oldukça ciddi bir kullanım hakkınız var.
Siz bu güvenlik katmanını kendi ortamlarınızda nasıl kullanıyorsunuz? Farklı kimlik sağlayıcıları veya özel senaryolarınız var mı? Aşağıya yorumlarınızı bekliyorum. Takıldığınız bir nokta olursa, bu konu altından sormaktan çekinmeyin.
Cloudflare Access, bir servise erişmeden önce kullanıcının kimliğini doğrulayan bir güvenlik katmanıdır. Cloudflare Tunnel (eski adıyla Argo Tunnel) ise, sunucunuzdan Cloudflare'in ağına giden güvenli, dışarıdan bağlantı kabul etmeyen (ingress olmayan) bir bağlantı kurar. İkisini birlikte kullandığınızda, servisiniz internetten tamamen gizlenir ve tüm trafik bu güvenli tünel üzerinden, Cloudflare'in kimlik doğrulama politikalarından geçerek size ulaşır. Yani sunucunuzda 22 (SSH) veya 3389 (RDP) portunu dış dünyaya açmanıza gerek kalmaz.
Öncelikle Cloudflare hesabınızda domain'inizin yönetildiğinden emin olun. Daha sonra "Zero Trust" paneline girin (eskiden Access). İlk kez kullanıyorsanız, organizasyon adınızı ve alt domaininizi (örneğin, sirketim.cloudflareaccess.com) ayarlamanız istenecek.
"Access" > "Authentication" bölümüne gidin. Buradan kullanıcılarınızın giriş yapabilmesi için bir sağlayıcı ekleyin. Benim en çok kullandıklarım Google ve GitHub. Çok faktörlü doğrulama (MFA) için "One-time PIN"i de mutlaka aktif edin. Bu sayede ekstra bir güvenlik katmanınız olur.
"Access" > "Applications" kısmından "Add an application" diyerek yeni bir uygulama ekleyin. Tür olarak "Self-hosted" seçin.
- Application Name: Örn: "Sunucu SSH Erişimi"
- Session Duration: Oturum süresini belirleyin (örn: 12 saat).
- Application Domain: Erişim için kullanılacak subdomain'i yazın. Örneğin, ssh.sirketiniz.com. Bu domain'in DNS kaydını Cloudflare otomatik ekleyecek.
- Policies: En önemli kısım burası. "Add a policy" diyerek kimlerin erişebileceğini belirleyin. Örneğin, "Include" kısmına "E-posta adresi" seçip, teknik@firma.com yazabilirsiniz. Veya GitHub organizasyonunuzdaki herkesi ekleyebilirsiniz. Ben her zaman en kısıtlayıcı politika ile başlayıp, ihtiyaca göre genişletmenizi öneririm.
Şimdi sıra, tüneli kuracak olan hafif istemciyi (cloudflared) sunucumuza kurmaya geldi. Ben genelde Ubuntu/Debian tabanlı sistemler kullandığım için örneği ona göre veriyorum.
Bash:
# Cloudflare'in GPG key'ini ekleyelim ve repo'yu ekleyelim
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
# Paket listesini güncelleyip cloudflared'i kuralım
sudo apt-get update && sudo apt-get install cloudflared
Kurulum bittikten sonra, Cloudflare Zero Trust panelinizde "Access" > "Tunnels" kısmına gidin. "Create a tunnel" diyerek yeni bir tünel oluşturun ve bir isim verin (örn: sunucu-tuneli). Karşınıza bir komut çıkacak. Bu komutu, cloudflared service kurmadan önce sunucunuzda çalıştırarak tüneli hesabınıza bağlamanız gerekiyor.
Tüneli oluşturduktan sonra, "Configure" kısmından hangi sunucu servisini, hangi subdomain'e bağlayacağınızı ayarlayacaksınız. Örneğin:
- Public Hostname: ssh.sirketiniz.com
- Service: SSH için ssh://localhost:22, RDP için rdp://localhost:3389, bir web paneli için
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
Bu ayarı yaptıktan sonra, sunucunuzda cloudflared servisini başlatmanız yeterli. Sisteminize göre servis komutu değişebilir.
Bash:
# Systemd ile servisi başlatalım
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
Artık ssh.sirketiniz.com adresine gittiğinizde (veya SSH istemcinizle bu adrese bağlanmaya çalıştığınızda), önce Cloudflare'in güzel login ekranı karşınıza çıkacak. Politikada tanımlı kimlik bilgilerinizle giriş yaptıktan sonra, bağlantınız sunucunuza yönlendirilecek.
- Performans: Tünel bağlantısı genelde oldukça hızlıdır. Yine de sunucunuz ile en yakın Cloudflare veri merkezi arasındaki bağlantı önemlidir.
- Birden Fazla Servis: Aynı tünel üzerinden farklı subdomain'lerle onlarca servisi güvenli hale getirebilirsiniz. Her biri için ayrı Access politikası oluşturmayı unutmayın.
- Log Takibi: Tüm erişim denemelerini ve başarılı girişleri Zero Trust panelinden "Logs" > "Access" sekmesinden takip edebilirsiniz. Bu, güvenlik denetimi için çok değerli.
- Yedekleme: Tünel konfigürasyonunuz ve Access politikalarınız Cloudflare'de duruyor. Kritik politikalarınızın notunu almayı unutmayın.
Sonuç olarak, bu yöntemle sunucularınızın saldırıya açık portlarını neredeyse sıfıra indirebilir, erişimleri merkezi ve güçlü bir kimlik doğrulama mekanizmasıyla yönetebilirsiniz. Üstelik Cloudflare'in ücretsiz katmanında bile oldukça ciddi bir kullanım hakkınız var.
Siz bu güvenlik katmanını kendi ortamlarınızda nasıl kullanıyorsunuz? Farklı kimlik sağlayıcıları veya özel senaryolarınız var mı? Aşağıya yorumlarınızı bekliyorum. Takıldığınız bir nokta olursa, bu konu altından sormaktan çekinmeyin.