Skip to content
Back to blog
Rehber Cloudflare Cloudflare Tunnel Homelab Networking Sistem Yönetimi Güvenlik

Cloudflare Tunnel ile Ev veya Ofis Sunucularınızı Güvenli Şekilde Dış Dünyaya Açın: Adım Adım Kurulum

Port açma derdine son verin. Cloudflare Tunnel (eski adıyla Argo Tunnel) kullanarak, NAT ve Firewall arkasındaki sunucularınızı internete nasıl güvenli bir şekilde açacağınızı adım adım öğrenin.

Caner Serbest

Sistem ve Altyapı

4 min read

Cloudflare Tunnel ile Ev veya Ofis Sunucularınızı Güvenli Şekilde Dış Dünyaya Açın: Adım Adım Kurulum

Kendi homelab ortamınızı kurduysanız veya ofisinizdeki yerel bir sunucuda (Linux, Windows veya Docker üzerinde) çalışan servisleri dış dünyaya sunmak istediyseniz, klasik bir engelle karşılaştınız demektir: Statik IP maliyetleri ve Modem üzerindeki port yönlendirmeleri (Port Forwarding).

Ev kullanıcıları genellikle dinamik IP adreslerine sahiptir. Bu sorunu çözmek için DDNS (Dynamic DNS) servisleri kullanılır ancak bu kez de güvenlik duvarınızda (Firewall) 80 ve 443 gibi kritik portları dışarıya açmak zorunda kalırsınız. Bu durum, sunucunuzu doğrudan internet üzerindeki tarama botlarına ve brute-force saldırılarına açık hale getirir.

Bu yazıda, modeminizde herhangi bir port açmadan, statik IP gereksinimi duymadan ve Cloudflare’in güçlü güvenlik katmanlarını arkanıza alarak servislerinizi nasıl güvenle dış dünyaya açabileceğinizi adım adım inceleyeceğiz.


Cloudflare Tunnel Nedir ve Nasıl Çalışır?

Cloudflare Tunnel (eski adıyla Argo Tunnel), yerel ağınızda çalışan bir servis ile Cloudflare’in global uç noktaları (Edge) arasında şifreli bir tünel kuran hafif bir daemon programıdır (cloudflared).

Klasik yöntemlerde trafik şu şekilde akar: İnternet -> Modem (Port Forwarding) -> Sunucu

Cloudflare Tunnel ile ise akış tamamen değişir: İnternet -> Cloudflare Edge -> cloudflared (Tünel) -> Yerel Servis

Bu mimarinin avantajları şunlardır:

  1. Port Açma İhtiyacı Yoktur: Modeminizde NAT veya port yönlendirmesi yapmanıza gerek kalmaz. Sunucunuz dışarıdan doğrudan erişilemez durumdadır.
  2. DDoS ve WAF Koruması: Servisiniz, Cloudflare’in kurumsal düzeydeki DDoS koruması ve Web Application Firewall (WAF) özelliklerinden doğrudan yararlanır.
  3. TLS/SSL Sertifika Yönetimi: Cloudflare, tünel üzerinden gelen trafik için otomatik olarak SSL/TLS sertifikası sağlar.
  4. Access Kontrolü: İstiyorsanız, servisinize sadece belirli e-posta adreslerine sahip kişilerin (örneğin sadece sizin Google hesabınızla) erişmesini sağlayabilirsiniz.

Gereksinimler

Kuruluma başlamadan önce elinizde bulundurmanız gerekenler:

  • Yönetimi Cloudflare üzerinde olan bir alan adı (Domain).
  • Tüneli çalıştıracak bir sunucu (Bu rehber için bir Linux / Ubuntu sunucu kullanacağız, ancak Windows veya Docker da tercih edilebilir).
  • Ücretsiz bir Cloudflare hesabı.

Adım 1: Cloudflare Dashboard Üzerinde Tünel Oluşturma

Öncelikle tünelimizi Cloudflare paneli üzerinden tanımlayacağız.

  1. Cloudflare kontrol paneline giriş yapın ve ilgili alan adınızı seçin.
  2. Sol menüden Zero Trust (eski adıyla Cloudflare Teams) sekmesine gidin. (Eğer ilk kez kullanıyorsanız ücretsiz planı aktive etmeniz istenebilir).
  3. Sol menüdeki Networks başlığı altında yer alan Tunnels seçeneğine tıklayın.
  4. Sağ üstteki Create a tunnel butonuna basın.
  5. Tünelinize anlamlı bir isim verin (Örn: homelab-ubuntu-tunnel) ve Save tunnel ile devam edin.

Adım 2: Sunucu Üzerine cloudflared Kurulumu

Paneli kaydettikten sonra Cloudflare size farklı işletim sistemleri için kurulum komutları verecektir. Biz bu örnekte Ubuntu/Debian tabanlı bir sunucu üzerinde ilerliyoruz.

Sunucunuza SSH ile bağlanın ve aşağıdaki adımları takip edin:

1. Cloudflare GPG Anahtarını Ekleyin ve Repoyu Tanımlayın

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/jammy $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list

2. Paket Listesini Güncelleyin ve Kurulumu Yapın

sudo apt update
sudo apt install cloudflared -y

3. Tüneli Sunucuya Bağlayın

Cloudflare panelinde size verilen komut şu şekle benzer olacaktır (kendi token değerinizi kullanın):

sudo cloudflared service install eyJh...your_unique_token...==

Bu komut, cloudflared uygulamasını bir sistem servisi (systemd) olarak kaydeder ve arka planda sürekli çalışmasını sağlar.

Servisin durumunu kontrol etmek için:

sudo systemctl status cloudflared

Eğer her şey yolundaysa, Cloudflare panelinde tünelinizin durumunun Healthy (Aktif) olduğunu görebilirsiniz.


Adım 3: Public Hostname (Genel Alan Adı) Tanımlama

Tünelimiz ayakta, ancak dış dünyadan gelen isteklerin hangi servise yönlendirileceğini henüz söylemedik. Örneğin, yerel ağımızda http://localhost:8080 üzerinde çalışan bir portainer veya http://192.168.1.50:81 üzerinde çalışan bir Nginx Proxy Manager arayüzümüz olsun.

  1. Cloudflare Zero Trust panelinde Tunnels sayfasına gelin ve oluşturduğunuz tünelin yanındaki Configure seçeneğine tıklayın.
  2. Public Hostname sekmesine geçiş yapın ve Add a public hostname butonuna basın.
  3. Formu şu şekilde doldurun:
    • Subdomain: portainer (veya erişmek istediğiniz alt alan adı)
    • Domain: sizinadapiniz.com
    • Path: Boş bırakabilirsiniz (tüm kök dizin için).
    • Service Type: HTTP
    • URL: localhost:8080 (veya yerel IP ve port numaranız)
  4. Save hostname butonuna basarak kaydedin.

Artık https://portainer.sizinadapiniz.com adresine gittiğinizde, istek Cloudflare üzerinden şifreli bir şekilde sunucunuza iletilecek ve yerel servisiniz dış dünyaya açılmış olacaktır.


Adım 4: Gelişmiş Yapılandırma (config.yml ile Yönetim)

Çok fazla servisiniz varsa, her şeyi web arayüzünden yönetmek yerine konfigürasyon dosyasını doğrudan düzenlemek daha pratik olabilir. cloudflared varsayılan olarak /etc/cloudflare/config.yml dosyasını kullanır.

Örnek bir config.yml dosyası şu şekildedir:

tunnel: <TUNNEL-UUID>
credentials-file: /etc/cloudflare/<TUNNEL-UUID>.json

ingress:
  - hostname: portainer.sizinadapiniz.com
    service: http://localhost:8080
  - hostname: nextcloud.sizinadapiniz.com
    service: http://192.168.1.100:443
    originRequest:
      noTLSVerify: true
  - service: http_status:404

Dikkat: Ingress kurallarında en sonda mutlaka service: http_status:404 kuralı bulunmalıdır. Aksi takdirde eşleşmeyen diğer tüm istekler hata alabilir.

Dosyayı kaydettikten sonra servisi yeniden başlatmayı unutmayın:

sudo systemctl restart cloudflared

Güvenlik İpuçları ve En İyi Uygulamalar

Servislerinizi internete açarken güvenliği en üst düzeyde tutmak için şu adımları izleyebilirsiniz:

  1. Cloudflare Access Entegrasyonu: Servislerinize herkesin erişmesini istemiyorsanız, Zero Trust panelinden Access Applications kuralı ekleyin. Böylece siteye girmek isteyen kişilerden e-posta doğrulama kodu (One-Time PIN) isteyebilir veya GitHub / Google ile giriş yapmalarını zorunlu kılabilirsiniz.
  2. Bot Fight Mode: Cloudflare panelinden Bot korumasını aktif ederek zararlı tarayıcıları ve otomasyon scriptlerini henüz tünel seviyesindeyken engelleyin.
  3. Log Takibi: Sunucu tarafında tünel loglarını inceleyerek gelen istekleri izleyebilirsiniz:
    journalctl -u cloudflared -f

Sonuç

Cloudflare Tunnel, homelab meraklıları, geliştiriciler ve küçük işletmeler için modem arkasındaki servisleri dış dünyaya açmanın en temiz, en güvenli ve en maliyetsiz yollarından biridir. Statik IP, port yönlendirme ve karmaşık VPN yapılarıyla uğraşmak zorunda kalmadan, dakikalar içinde güvenli bir altyapı kurabilirsiniz.

Bu yöntemle kendi sunucularınızı dış dünyaya açarken hangi servisleri barındırdığınızı yorumlarda paylaşabilir, karşılaştığınız sorunları bu rehber üzerinden tartışabilirsiniz.


Bu yazı Gemini ile otomatik oluşturulmuştur.