Cloudflare hesabınıza bir domain eklediğinizde karşınıza çıkan o turuncu bulut simgesi, aslında sadece görsel bir detay değil. DNS kayıtlarınızın yanındaki bu küçük ikon, trafiğinizin nasıl yönetileceğini belirleyen kritik bir seçimi temsil ediyor. “Proxy” modunu açık mı bırakmalısınız, yoksa kapatıp direkt DNS moduna mı geçmelisiniz? Bu sorunun cevabı, kulağa geldiğinden çok daha karmaşık ve alacağınız karar, altyapınızı doğrudan etkiliyor.
Proxy Modu Tam Olarak Ne Yapar?
Cloudflare DNS proxy modunu anlamak için önce klasik DNS’in nasıl çalıştığını hatırlayalım. Normal bir DNS kaydında, dig komutuyla sorguladığınızda doğrudan sunucunuzun IP adresini görürsünüz.
# Proxy modu kapalıyken DNS sorgusu
dig example.com A +short
# Çıktı: 203.0.113.45 (Gerçek sunucu IP'niz)
# Proxy modu açıkken DNS sorgusu
dig example.com A +short
# Çıktı: 104.21.xx.xx (Cloudflare IP'si)
Proxy modu açık olduğunda, Cloudflare sizin gerçek IP adresinizi gizleyip kendi IP’lerini öne koyuyor. Kullanıcıların tüm trafiği önce Cloudflare’in edge sunucularına geliyor, burada işlenip filtrelendikten sonra gerçek sunucunuza iletiliyor. Bu çift yönlü reverse proxy yapısı, beraberinde hem çok güçlü avantajlar hem de göz ardı edilmemesi gereken dezavantajlar getiriyor.
Cloudflare’in proxy modunu aktif eden kayıt tipleri oldukça sınırlı:
- A kayıtları: IPv4 adresleri için
- AAAA kayıtları: IPv6 adresleri için
- CNAME kayıtları: Alias tanımlamaları için
MX, TXT, NS, SRV gibi kayıtlar proxy modunu desteklemiyor, bunlar her zaman DNS-only modunda çalışıyor.
Proxy Modunun Avantajları
IP Gizleme ve DDoS Koruması
Proxy modunun en büyük avantajı tartışmasız DDoS koruması ve gerçek IP’nizi gizlemesi. Sunucunuzun gerçek IP adresi internette görünmediği için saldırganlar doğrudan hedefinizi vuramıyor.
Ancak burada kritik bir uyarı var: Eğer sunucunuzun IP’si daha önce herhangi bir yerde sızdıysa, Cloudflare arkasına geçmek sizi tam anlamıyla korumaz. Birisi eski kayıtları, Shodan gibi araçları veya SSL sertifika loglarını inceleyerek gerçek IP’nizi bulabilir.
# Eski IP adreslerini bulmak için kullanılan teknikler
# (Güvenlik testleri için)
curl "https://api.shodan.io/dns/reverse?ips=203.0.113.45&key=YOUR_API_KEY"
# Certificate Transparency loglarından IP tespiti
curl "https://crt.sh/?q=example.com&output=json" | jq '.[].name_value'
# SecurityTrails tarzı historical DNS sorgusu
# Bu tür araçlar eski A kayıtlarını saklıyor
Gerçek anlamda IP gizliliği için Cloudflare’e taşınmadan önce sunucu IP’nizi değiştirmeniz gerekiyor. Bu önemli bir operasyonel adım.
Ücretsiz SSL/TLS Yönetimi
Proxy modu aktifken Cloudflare otomatik olarak edge sertifikası sağlıyor. Kullanıcı ile Cloudflare arasındaki bağlantı HTTPS oluyor. Bu, özellikle küçük projeler veya test ortamları için son derece kullanışlı.
SSL modu seçenekleriniz:
- Flexible: Cloudflare ile sunucu arasında HTTP (Önerilmez, güvensiz)
- Full: Cloudflare ile sunucu arasında HTTPS ama sertifika doğrulaması yok
- Full (Strict): Her iki tarafta da geçerli sertifika zorunlu (Önerilen)
- Strict (SSL-Only Origin Pull): En sıkı mod, sadece Cloudflare CA sertifikaları kabul ediliyor
# Origin sunucunuzda Cloudflare Origin CA sertifikası kullanımı
# Cloudflare dashboard'dan indirdiğiniz sertifikayı nginx'e tanımlama
cat /etc/nginx/conf.d/example.conf
# server {
# listen 443 ssl;
# ssl_certificate /etc/ssl/cloudflare-origin.pem;
# ssl_certificate_key /etc/ssl/cloudflare-origin.key;
# ...
# }
# Origin CA sertifikası ile Cloudflare bağlantısını test etme
curl -I --resolve example.com:443:203.0.113.45 https://example.com
CDN ve Performans Optimizasyonu
Proxy modu, Cloudflare’in global CDN altyapısını devreye sokuyor. Statik içerikler (CSS, JS, resimler) Cloudflare’in 300’den fazla PoP’unda cache’leniyor. Bu, özellikle coğrafi olarak dağılmış kullanıcı kitlesine sahipseniz kayda değer performans artışı sağlıyor.
# Cache davranışını kontrol etmek
curl -I https://example.com/style.css | grep -E "CF-Cache-Status|Age|Cache-Control"
# Beklenen çıktı:
# CF-Cache-Status: HIT
# Age: 3600
# Cache-Control: public, max-age=14400
# Cache'i bypass etmek için Cloudflare header'ı
curl -H "Cache-Control: no-cache" https://example.com/style.css
Cloudflare’in Argo Smart Routing özelliğiyle (ücretli) trafik en optimal path üzerinden yönlendiriliyor. Ücretsiz planda da Anycast routing sayesinde kullanıcılar en yakın Cloudflare sunucusuna bağlanıyor.
Web Application Firewall (WAF)
Cloudflare’in WAF’ı, proxy modunda otomatik olarak devreye giriyor. SQL injection, XSS, CSRF gibi yaygın saldırı vektörleri OWASP kuralları çerçevesinde filtreleniyor.
# Cloudflare WAF loglarını API üzerinden çekme
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/firewall/events"
-H "Authorization: Bearer YOUR_API_TOKEN"
-H "Content-Type: application/json"
# Belirli bir IP için WAF kuralı oluşturma
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/firewall/rules"
-H "Authorization: Bearer YOUR_API_TOKEN"
-H "Content-Type: application/json"
--data '{
"filter": {"expression": "ip.src eq 198.51.100.0"},
"action": "block",
"description": "Block suspicious IP"
}'
Gerçek IP Tespiti
Proxy modu açıkken sunucunuza gelen tüm istekler Cloudflare IP’lerinden geliyor gibi görünüyor. Bu, bazı uygulamalar için sorun yaratıyor. Kullanıcının gerçek IP’sini görmek için Cloudflare’in eklediği özel header’ları kullanmanız gerekiyor.
# Nginx'de gerçek IP'yi restore etme
# /etc/nginx/conf.d/cloudflare-real-ip.conf
cat << 'EOF' > /etc/nginx/conf.d/cloudflare-real-ip.conf
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
real_ip_header CF-Connecting-IP;
EOF
nginx -t && systemctl reload nginx
Proxy Modunun Dezavantajları
Desteklenmeyen Port’lar
Bu, proxy modunun en sık gözden kaçan kısıtlaması. Cloudflare proxy modu sadece belirli port’lardan gelen trafiği proxy’liyor.
HTTP için desteklenen port’lar:
- 80, 8080, 8880, 2052, 2082, 2086, 2095
HTTPS için desteklenen port’lar:
- 443, 2053, 2083, 2087, 2096, 8443
Eğer uygulamanız 3000, 8000, 9000 gibi özel port’larda çalışıyorsa, bu trafiği Cloudflare üzerinden proxy’leyemiyorsunuz. Bu durumda ya standardı port’lara geçmeniz ya da DNS-only modunu kullanmanız gerekiyor.
# Hangi port'ların proxy'lendiğini test etme
for port in 80 443 8080 8443 3000 8000 9000; do
result=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 http://example.com:$port)
echo "Port $port: HTTP $result"
done
# Özel port için DNS-only mod ile çalışma
# Bu durumda gerçek IP'niz görünür oluyor
dig custom-api.example.com A +short
# 203.0.113.45 (Gerçek IP görünüyor)
Non-HTTP Protokollerle Çalışmama Sorunu
Proxy modu tamamen HTTP/HTTPS tabanlı. SSH, FTP, SMTP, MySQL, Redis, IMAP gibi protokoller proxy modunda çalışmıyor.
# Cloudflare Spectrum (ücretli) olmadan SSH için DNS-only gerekiyor
# SSH için ayrı bir subdomain kullanın ve proxy'yi kapatın
# Proxy kapalı subdomain için DNS yapılandırması
# Cloudflare API ile DNS kaydı oluşturma (proxied: false)
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records"
-H "Authorization: Bearer YOUR_API_TOKEN"
-H "Content-Type: application/json"
--data '{
"type": "A",
"name": "ssh.example.com",
"content": "203.0.113.45",
"ttl": 3600,
"proxied": false
}'
# Proxy açık subdomain oluşturma
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records"
-H "Authorization: Bearer YOUR_API_TOKEN"
-H "Content-Type: application/json"
--data '{
"type": "A",
"name": "www.example.com",
"content": "203.0.113.45",
"ttl": 1,
"proxied": true
}'
Gerçek dünya senaryosu olarak düşünün: Bir müşterinizin mail sunucusu için MX kayıtlarını Cloudflare’e taşıdınız. MX kayıtları zaten proxy’lenemiyor, bu normal. Ama aynı IP üzerindeki web arayüzünü proxy’lediğinizde, SMTP trafiği yine de doğrudan sunucuya gidiyor ve IP zaten açıkta. Bu durumda Cloudflare’in sağladığı IP gizleme avantajı büyük ölçüde anlamsızlaşıyor.
TTL ve DNS Propagasyon Kısıtlamaları
Proxy modu aktifken Cloudflare, TTL değerini otomatik olarak 300 saniyeye (5 dakika) zorluyor. Kendi belirlediğiniz TTL değerini yoksayıyor. Bu, hızlı DNS değişiklikleri yapmanız gereken senaryolarda sorun yaratabilir.
# Proxy modunda TTL kontrolü
dig example.com A +short
# Çıktı her zaman Cloudflare IP'si ve TTL 300 saniye
# DNS-only modunda istediğiniz TTL'i kullanabilirsiniz
dig ssh.example.com A +short
# TTL: 60 saniye (sizin belirlediğiniz değer)
# Acil failover senaryosunda fark
# Proxy modu: En fazla 5 dakika beklemeniz gerekiyor
# DNS-only + 60sn TTL: 1 dakika içinde yayılıyor
Origin IP Sızıntısı Riskleri
Birden fazla yoldan gerçek IP’niz sızabilir:
# 1. Yol: SPF kayıtları üzerinden
dig example.com TXT | grep spf
# v=spf1 ip4:203.0.113.45 include:_spf.google.com ~all
# Direkt IP görünüyor
# 2. Yol: Subdomain'ler üzerinden
# Eğer mail.example.com, ftp.example.com gibi subdomainler
# DNS-only modundaysa IP açığa çıkıyor
dig mail.example.com A +short
# 203.0.113.45
# 3. Yol: SSL/TLS sertifika logları
# Certificate Transparency loglarında hostname geçiyorsa
curl "https://crt.sh/?q=%.example.com&output=json" |
python3 -c "import json,sys; [print(x['name_value']) for x in json.load(sys.stdin)]"
# 4. Yol: Email header'ları
# Sunucunuzdan gönderilen e-postalar Received: header'ında IP içeriyor
Cloudflare Bağımlılığı ve Outage Riski
2020 ve 2021’de yaşanan Cloudflare outage’ları, milyonlarca web sitesini etkiledi. Proxy modunda tüm trafiğiniz Cloudflare üzerinden geçtiği için, Cloudflare’de sorun olduğunda siteniz de erişilemez hale geliyor, sunucunuz tam anlamıyla sağlıklı olsa bile.
# Cloudflare bypass için origin sunucuya direkt erişim testi
# Bu test, Cloudflare olmadan sunucunuzun çalışıp çalışmadığını gösterir
curl -I --resolve example.com:443:203.0.113.45
--header "Host: example.com"
https://example.com
# Cloudflare status kontrolü
curl -s "https://www.cloudflarestatus.com/api/v2/status.json" |
python3 -c "import json,sys; d=json.load(sys.stdin); print(d['status']['description'])"
Bu riski minimize etmek için Cloudflare’in “Always Online” özelliğini kullanabilirsiniz, ancak bu yalnızca statik içerik için çalışıyor ve dinamik uygulamalar için yetersiz kalıyor.
Hangi Senaryoda Ne Kullanmalısınız?
Proxy Modunu Açık Tutun
- Web uygulamaları, bloglar, e-ticaret siteleri
- DDoS hedefi olma ihtimali yüksek siteler
- Cloudflare WAF kurallarından faydalanmak istiyorsanız
- SSL yönetimini Cloudflare’e bırakmak istiyorsanız
- Standart HTTP/HTTPS port’larında çalışan servisler
- CDN avantajından yararlanmak istiyorsanız
DNS-Only Modunu Tercih Edin
- SSH, FTP, mail sunucuları
- Özel port’larda çalışan API’ler ve servisler
- Gerçek IP’nizi zaten kaçınılmaz olarak açığa çıkarmak durumunda olduğunuz kayıtlar
- Kendi özel CDN veya WAF çözümünüzü kullananlar
- Hassas failover süreleri gerektiren kritik servisler
- Database sunucuları, cache katmanları
Hibrit Yaklaşım
Gerçek dünyada en sağlıklı yaklaşım genellikle hibrit bir model:
# Örnek bir alan adı için hibrit DNS yapılandırması
# www ve apex domain - proxy açık
# example.com A 203.0.113.45 (proxied: true)
# www.example.com A 203.0.113.45 (proxied: true)
# api.example.com A 203.0.113.45 (proxied: true) - standart port
# SSH ve yönetim - proxy kapalı, erişim IP kısıtlamayla
# mgmt.example.com A 203.0.113.45 (proxied: false)
# Firewall'da mgmt subdomaine sadece ofis IP'den erişim
# Mail servisleri - proxy desteklenmiyor
# mail.example.com A 203.0.113.100 (farklı sunucu)
# MX 10 mail.example.com
# Cloudflare API ile toplu kayıt durumu görme
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records?per_page=100"
-H "Authorization: Bearer YOUR_API_TOKEN" |
python3 -c "
import json, sys
data = json.load(sys.stdin)
for r in data['result']:
proxy_status = 'PROXY' if r.get('proxied') else 'DNS-ONLY'
print(f"{proxy_status}: {r['name']} {r['type']} {r['content']}")
"
Cloudflare API ile Proxy Modunu Yönetme
Büyük ölçekli ortamlarda DNS kayıtlarını tek tek dashboard üzerinden yönetmek verimsiz. Cloudflare API veya Terraform ile bu süreci otomatize etmek çok daha mantıklı.
# Mevcut bir DNS kaydının proxy modunu değiştirme
ZONE_ID="your_zone_id"
RECORD_ID="your_record_id"
API_TOKEN="your_api_token"
# Proxy'yi kapatma
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID"
-H "Authorization: Bearer $API_TOKEN"
-H "Content-Type: application/json"
--data '{"proxied": false}'
# Proxy'yi açma
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID"
-H "Authorization: Bearer $API_TOKEN"
-H "Content-Type: application/json"
--data '{"proxied": true}'
# Terraform ile Cloudflare DNS yönetimi (terraform.tf)
cat << 'EOF' > cloudflare_dns.tf
resource "cloudflare_record" "www" {
zone_id = var.zone_id
name = "www"
value = "203.0.113.45"
type = "A"
ttl = 1 # 1 = otomatik (proxied modunda)
proxied = true
}
resource "cloudflare_record" "ssh" {
zone_id = var.zone_id
name = "ssh"
value = "203.0.113.45"
type = "A"
ttl = 300
proxied = false
}
EOF
Güvenlik Perspektifinden Ek Değerlendirmeler
Proxy modu aktifken Cloudflare IP’lerini sunucunuzun firewall’ında whitelist’e almanız, güvenliği artırmak için önemli. Bu şekilde Cloudflare’i bypass eden direkt bağlantı denemeleri engellenmiş oluyor.
# Cloudflare IP listesini çekme ve firewall kuralı oluşturma
# IPv4
CF_IPS=$(curl -s https://www.cloudflare.com/ips-v4)
# IPv6
CF_IPS6=$(curl -s https://www.cloudflare.com/ips-v6)
# UFW ile sadece Cloudflare'den HTTP/HTTPS trafiğine izin verme
while IFS= read -r ip; do
ufw allow from "$ip" to any port 80 proto tcp
ufw allow from "$ip" to any port 443 proto tcp
done <<< "$CF_IPS"
# Veya iptables ile
while IFS= read -r ip; do
iptables -I INPUT -s "$ip" -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s "$ip" -p tcp --dport 443 -j ACCEPT
done <<< "$CF_IPS"
# Diğer kaynaklardan gelen 80/443 trafiğini engelleme
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
Bu yaklaşımın bir dezavantajı var: Cloudflare IP aralıkları zaman zaman değişiyor. Bu listeyi periyodik olarak güncellemeniz gerekiyor, aksi halde meşru Cloudflare trafiğini engelleyebilirsiniz.
Sonuç
Cloudflare DNS proxy modu, doğru kullanıldığında son derece güçlü bir araç. DDoS koruması, CDN avantajı, otomatik SSL yönetimi ve WAF özellikleriyle web altyapınıza ciddi değer katıyor. Üstelik bunların önemli bir kısmı ücretsiz planda geliyor.
Ancak her şeyin bir bedeli var. Port kısıtlamaları, HTTP dışı protokollerle uyumsuzluk, TTL üzerinde kontrolün azalması ve Cloudflare’e olan tek noktalı bağımlılık, göz ardı edilemeyecek riskler. Özellikle kritik servisler için bu bağımlılığı kabul edilebilir bulmuyorsanız, alternatif mimarilere yatırım yapmanız gerekiyor.
Pratik tavsiyem şu: Web trafiği için proxy modunu açın ve Cloudflare’in sağladığı katmanlardan faydalanın. SSH, mail, database ve özel protokoller için DNS-only modunda kalın, bu kayıtları ayrı IP’lerde veya subnet’lerde tutmaya çalışın. Tek bir IP üzerinde hem proxy’lenen hem de proxy’lenmeyen servisler çalıştırıyorsanız, IP gizleme konusunda gerçekçi beklentilere sahip olun.
Altyapı kararlarında olduğu gibi burada da sihirli bir formül yok. İhtiyaçlarınızı, risk toleransınızı ve operasyonel kısıtlarınızı değerlendirip ona göre bir hibrit model tasarlarsanız, Cloudflare proxy modunun avantajlarını dezavantajlarını minimize ederek kullanabilirsiniz.