Cloudflare Proxy Modu Nedir: Turuncu Bulut Nasıl Çalışır
Cloudflare kullananların çoğu DNS kayıtlarını eklerken o turuncu bulutu fark etmiştir. Kimi zaman turuncu olur, kimi zaman gri. Peki bu renk farkı ne anlama gelir? Aslında bu küçük ikon, ağ trafiğinizin nasıl yönleneceğini belirleyen kritik bir ayarı temsil ediyor. Yanlış yapılandırıldığında güvenlik açıkları doğurabilir, doğru kullanıldığında ise sunucunuzu DDoS saldırılarından koruyup performansı artırabilir. Bu yazıda Cloudflare proxy modunu teknik derinliğiyle ele alacağız.
Proxy Modu Temel Olarak Ne Yapar
Cloudflare’de bir DNS kaydı oluşturduğunuzda iki seçeneğiniz var: DNS Only (gri bulut) veya Proxied (turuncu bulut). Bu seçim, alan adınıza gelen trafiğin nasıl işleneceğini kökten değiştirir.
DNS Only modunda Cloudflare sadece bir DNS sunucusu gibi davranır. Kullanıcı example.com adresini sorguladığında, Cloudflare’nin DNS sunucuları doğrudan sunucunuzun gerçek IP adresini döndürür. Trafik Cloudflare’den geçmez, doğrudan sizin sunucunuza gider.
Proxied modunda ise durum farklıdır. DNS sorgusu yapıldığında Cloudflare kendi IP adreslerini döndürür. Kullanıcı aslında Cloudflare’nin edge sunucularına bağlanır, oradan trafik sizin gerçek sunucunuza iletilir. Yani Cloudflare bir reverse proxy olarak görev yapar.
Bu ayrımı daha net görmek için şu komutları çalıştırın:
# DNS Only modundaki bir kayıt için
dig example.com +short
# Çıktı: 185.220.101.45 (gerçek sunucu IP'niz)
# Proxied modundaki bir kayıt için
dig proxied-example.com +short
# Çıktı: 104.21.35.67 (Cloudflare IP'si)
# veya 172.67.128.94 (Cloudflare IP'si)
Proxied moddaki IP adreslerinin Cloudflare’e ait olduğunu doğrulamak için:
# Cloudflare IP aralıklarını kontrol et
curl https://www.cloudflare.com/ips-v4
# Çıktı:
# 173.245.48.0/20
# 103.21.244.0/22
# 103.22.200.0/22
# 103.31.4.0/22
# 141.101.64.0/18
# 108.162.192.0/18
# 190.93.240.0/20
# 188.114.96.0/20
# 197.234.240.0/22
# 198.41.128.0/17
# 162.158.0.0/15
# 104.16.0.0/13
# 104.24.0.0/14
# 172.64.0.0/13
# 131.0.72.0/22
Turuncu Bulut Açık Olduğunda Ne Olur
Trafiğin Cloudflare üzerinden geçmesi birkaç kritik sonuç doğurur.
Gerçek IP Gizlenir
En önemli özellik budur. Sunucunuzun gerçek IP adresi dış dünyadan gizlenir. Saldırganlar DDoS saldırısı düzenlemek için önce hedef IP’yi bulmak zorundadır. Proxied modda bu IP Cloudflare’in IP’sidir, sizin sunucunuzun değil.
Ancak burada kritik bir uyarı yapmam gerekiyor: Gerçek IP’niz başka kanallardan sızmış olabilir. Örneğin daha önce DNS Only modunda kayıt bıraktıysanız, o IP adresleri internet arşivlerinde kayıtlıdır.
# Eski DNS kayıtlarını SecurityTrails veya benzeri servislerle kontrol edin
# Ya da şu araçla geçmiş DNS kayıtlarına bakın:
curl "https://dns.bufferover.run/dns?q=example.com"
# MX kayıtlarından gerçek IP sızmış olabilir, kontrol edin:
dig MX example.com +short
# Eğer mail sunucunuz aynı makinedeyse ve proxied değilse
# gerçek IP ortaya çıkabilir
SSL/TLS Sonlandırma
Cloudflare, kullanıcı ile Cloudflare edge’i arasındaki SSL bağlantısını kendisi yönetir. Cloudflare ile sizin sunucunuz arasındaki bağlantı için farklı seçenekler sunulur:
- Flexible: Kullanıcı ile Cloudflare arası HTTPS, Cloudflare ile sunucu arası HTTP (güvensiz, kullanmayın)
- Full: Her iki taraf da HTTPS, ama sunucu sertifikası doğrulanmaz
- Full (Strict): Her iki taraf da HTTPS, sunucu sertifikası Cloudflare tarafından doğrulanır
- Origin Server: Cloudflare’in verdiği sertifikayı sunucunuza yüklersiniz
Sunucunuzda SSL ayarını kontrol etmek için:
# Nginx'te Cloudflare'den gelen gerçek IP'yi almak için
# /etc/nginx/nginx.conf dosyasına ekleyin:
cat >> /etc/nginx/conf.d/cloudflare-real-ip.conf << 'EOF'
set_real_ip_from 173.245.48.0/20;
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 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
real_ip_header CF-Connecting-IP;
EOF
nginx -t && systemctl reload nginx
Caching ve Performance
Proxied mod aktifken Cloudflare otomatik olarak statik içerikleri cache’ler. Bu sayede sunucunuza gelen istek sayısı dramatik şekilde düşebilir.
# Cache durumunu kontrol etmek için response header'larına bakın
curl -I https://example.com/style.css
# CF-Cache-Status: HIT -> Cloudflare cache'inden geldi
# CF-Cache-Status: MISS -> Sunucudan geldi, cache'e alındı
# CF-Cache-Status: BYPASS -> Cache bypass edildi
# CF-Cache-Status: DYNAMIC -> Cache edilmedi (dinamik içerik)
# Cache'i temizlemek için Cloudflare API kullanın:
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache"
-H "Authorization: Bearer YOUR_API_TOKEN"
-H "Content-Type: application/json"
--data '{"purge_everything":true}'
Hangi Kayıt Tipleri Proxied Olabilir
Cloudflare her kayıt tipini proxied yapmanıza izin vermez. Bu kritik bir bilgi.
Proxied yapılabilen kayıt tipleri:
- A: IPv4 adresi için
- AAAA: IPv6 adresi için
- CNAME: Alan adı alias’ları için
Proxied yapılamayan kayıt tipleri (her zaman DNS Only):
- MX: Mail exchange kayıtları
- TXT: SPF, DKIM, doğrulama kayıtları
- NS: Name server kayıtları
- SRV: Servis kayıtları (çoğu durumda)
- CAA: Sertifika yetkilileri
Bu önemli! MX kayıtlarınız proxied olamaz, dolayısıyla mail sunucunuzun IP adresi her zaman görünür olur.
Gerçek Dünya Senaryoları
Senaryo 1: Web Sunucusu Migrasyonu
Diyelim ki sunucunuzu taşıyorsunuz. Eski IP’de yeni IP’de her ikisinde de sitenin çalışmasını istiyorsunuz, kesintisiz geçiş yapmanız gerekiyor.
# Yeni sunucuyu hazırla, eski sunucu hala çalışıyor
# Cloudflare'de A kaydını güncelle:
curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records/RECORD_ID"
-H "Authorization: Bearer YOUR_API_TOKEN"
-H "Content-Type: application/json"
--data '{
"type": "A",
"name": "example.com",
"content": "NEW_SERVER_IP",
"ttl": 1,
"proxied": true
}'
# Proxied modda TTL her zaman "Automatic" (genellikle 300 saniye) olur
# DNS Only'de TTL'yi kendiniz belirleyebilirsiniz
# Proxied modda geçiş çok daha hızlı olur
Proxied modun bu senaryodaki avantajı şu: Cloudflare’in edge sunucuları değişikliği çok hızlı yayarlar. DNS Only modunda eski TTL değeriniz ne kadarsa o kadar beklemeniz gerekir.
Senaryo 2: Sunucuyu Sadece Cloudflare’e Aç
Gerçek IP’nizi gizledikten sonra bir adım daha atabilirsiniz: Sunucunuzu sadece Cloudflare IP’lerinden gelen trafiğe açın. Bu sayede birisi IP adresinizi bir şekilde öğrense bile doğrudan erişemez.
# UFW ile Cloudflare dışı HTTP/HTTPS trafiğini engelle
# Önce mevcut kuralları sıfırla (dikkatli ol!)
# Sonra sadece Cloudflare IP'lerine izin ver
#!/bin/bash
# cloudflare-firewall.sh
# HTTP ve HTTPS için varsayılan reddet
ufw deny 80
ufw deny 443
# Cloudflare IPv4 aralıklarına izin ver
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
ufw allow from $ip to any port 80
ufw allow from $ip to any port 443
done
# Cloudflare IPv6 aralıklarına izin ver
for ip in $(curl -s https://www.cloudflare.com/ips-v6); do
ufw allow from $ip to any port 80
ufw allow from $ip to any port 443
done
echo "Firewall kuralları güncellendi"
ufw status numbered
Bu kurulum periyodik olarak güncellenmelidir, zira Cloudflare IP aralıklarını zaman zaman değiştirebilir. Bir cron job ile otomatikleştirin:
# Crontab'a ekle: her Pazar gece yarısı güncelle
crontab -e
# 0 0 * * 0 /usr/local/bin/cloudflare-firewall.sh >> /var/log/cf-firewall-update.log 2>&1
Senaryo 3: API Subdomain’ini Proxy’den Çıkarma
Bazen proxied mod can sıkıcı olabilir. Örneğin WebSocket kullanan bir API sunucunuz varsa veya özel portlar üzerinden servis veriyorsanız.
Cloudflare proxied modda sadece belirli portları destekler:
HTTP portları: 80, 8080, 8880, 2052, 2082, 2086, 2095 HTTPS portları: 443, 2053, 2083, 2087, 2096, 8443
Eğer API’niz 3000 portunda çalışıyorsa ve bunu proxied yapmak istiyorsanız, ya portu değiştirmeniz ya da o subdomain için DNS Only kullanmanız gerekir:
# api.example.com için DNS Only kayıt oluştur
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": "api",
"content": "YOUR_SERVER_IP",
"ttl": 120,
"proxied": false
}'
# proxied: false -> gri bulut, DNS Only
Senaryo 4: Origin Server Bağlantısını Doğrulama
Cloudflare üzerinden geçen trafiğin gerçekten Cloudflare’den geldiğini sunucu tarafında doğrulayabilirsiniz. Bunun için Authenticated Origin Pulls özelliğini kullanın:
# Cloudflare'nin origin pull sertifikasını indir
curl -o /etc/nginx/certs/cloudflare-origin-pull.pem
https://developers.cloudflare.com/ssl/static/authenticated_origin_pull_ca.pem
# Nginx yapılandırması
cat >> /etc/nginx/sites-available/example.conf << 'EOF'
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Cloudflare origin pull doğrulaması
ssl_client_certificate /etc/nginx/certs/cloudflare-origin-pull.pem;
ssl_verify_client on;
location / {
# ...
}
}
EOF
nginx -t && systemctl reload nginx
Bu yapılandırmayla sunucunuz sadece Cloudflare’nin sertifikasıyla imzalanmış istekleri kabul eder.
Proxied Modun Dezavantajları ve Dikkat Edilecekler
Her şeyin bir bedeli vardır. Proxied modun getirdiği bazı komplikasyonlar var.
Gerçek İstemci IP’si Kaybolabilir
Uygulamanız istemci IP adresini logluyorsa veya rate limiting için kullanıyorsa dikkat edin. Proxied modda sunucunuz Cloudflare’nin IP adresini görür, gerçek kullanıcı IP’sini değil. Gerçek IP CF-Connecting-IP veya X-Forwarded-For header’larında gelir.
# PHP'de gerçek IP alma
# $_SERVER['HTTP_CF_CONNECTING_IP']
# Node.js'de
# req.headers['cf-connecting-ip']
# Nginx log formatında gerçek IP loglama
log_format cloudflare '$http_cf_connecting_ip - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
# /etc/nginx/nginx.conf içinde:
access_log /var/log/nginx/access.log cloudflare;
Let’s Encrypt Sertifika Yenileme Sorunları
Proxied modda Let’s Encrypt HTTP-01 challenge’ı bazen sorun çıkarabilir. Cloudflare trafiği önce kendi üzerinden geçirdiği için challenge dosyasını göremeyebilir.
# Sorun yaşıyorsanız certbot için webroot kullanın
# ve Cloudflare'nin sertifika ayarını "Full (Strict)" yapın
# VEYA certbot çalışırken geçici olarak DNS Only'ye geçin
# Daha iyi çözüm: DNS-01 challenge kullan
certbot certonly
--dns-cloudflare
--dns-cloudflare-credentials /root/.secrets/cloudflare.ini
-d example.com
-d "*.example.com"
# /root/.secrets/cloudflare.ini içeriği:
# dns_cloudflare_api_token = YOUR_API_TOKEN
WebSocket ve Uzun Süreli Bağlantılar
Cloudflare WebSocket bağlantılarını destekler, ancak Enterprise olmayan planlarda 100 saniye timeout uygulanır. Eğer uzun süreli WebSocket bağlantılarına ihtiyacınız varsa bunu göz önünde bulundurun.
# WebSocket proxy için Nginx yapılandırması
location /ws {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $http_cf_connecting_ip;
# Cloudflare timeout'unu aşmamak için
proxy_read_timeout 90s;
proxy_send_timeout 90s;
}
Cloudflare API ile Proxy Modunu Yönetme
Dashboard üzerinden tek tek kayıt güncellemek yerine API kullanarak toplu işlemler yapabilirsiniz.
#!/bin/bash
# Tüm A kayıtlarını listele ve proxy durumunu göster
ZONE_ID="your_zone_id"
API_TOKEN="your_api_token"
curl -s -X GET
"https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records?type=A"
-H "Authorization: Bearer ${API_TOKEN}"
-H "Content-Type: application/json" |
python3 -c "
import json, sys
data = json.load(sys.stdin)
for record in data['result']:
proxy_status = 'PROXIED' if record['proxied'] else 'DNS_ONLY'
print(f"{record['name']:<40} {record['content']:<20} {proxy_status}")
"
#!/bin/bash
# Belirli bir kaydın proxy modunu değiştir
ZONE_ID="your_zone_id"
API_TOKEN="your_api_token"
RECORD_ID="your_record_id"
# DNS Only'e geç (turuncu -> gri)
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}'
# Proxied'e geç (gri -> turuncu)
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}'
Development Mode ve Bypass Senaryoları
Cloudflare’in Development Mode özelliği, cache’i geçici olarak 3 saate kadar bypass eder. Aktif geliştirme yaparken çok işe yarar:
# Development mode'u API ile aç
curl -X PATCH
"https://api.cloudflare.com/client/v4/zones/ZONE_ID/settings/development_mode"
-H "Authorization: Bearer YOUR_API_TOKEN"
-H "Content-Type: application/json"
--data '{"value": "on"}'
# Kapat
curl -X PATCH
"https://api.cloudflare.com/client/v4/zones/ZONE_ID/settings/development_mode"
-H "Authorization: Bearer YOUR_API_TOKEN"
-H "Content-Type: application/json"
--data '{"value": "off"}'
Proxy Modunu İzleme ve Sorun Giderme
Proxied mod aktifken bağlantı sorunlarını debug etmek için şu yaklaşımı kullanın:
# Cloudflare üzerinden geçen isteğin detaylarını gör
curl -v -H "CF-Ray: debug" https://example.com 2>&1 | grep -E "(CF-|Server:|< HTTP)"
# Response header'larından Cloudflare bilgilerini çek
curl -sI https://example.com | grep -i "cf-|server:|x-"
# CF-Ray: 7a3b4c5d6e7f8g9h-IST -> İstek ID'si ve veri merkezi
# CF-Cache-Status: HIT
# Server: cloudflare
# Hangi Cloudflare veri merkezine bağlandığınızı öğrenin
curl https://cloudflare.com/cdn-cgi/trace
# ip=YOUR_IP
# loc=TR
# colo=IST -> Istanbul veri merkezi
Sonuç
Cloudflare’in turuncu bulutu, göründüğünden çok daha karmaşık bir sistemi temsil ediyor. Temel düzeyde bakıldığında sadece bir DNS proxy’si gibi görünse de arkasında DDoS koruması, SSL sonlandırma, caching, WAF ve daha fazlası çalışıyor.
Proxied modu kullanırken dikkat etmeniz gereken en kritik noktaları özetleyeyim:
- Gerçek IP’nizi koruyun: Proxied’e geçmeden önce eski DNS kayıtlarının internete sızmış olmadığını kontrol edin
- MX kayıtlarını unutmayın: Mail sunucunuz proxied olamaz, farklı bir makinede tutun
- Firewall kurallarınızı güncelleyin: Sunucunuzu sadece Cloudflare IP’lerine açın
- Real IP header’larını okuyun: Uygulama loglarınız ve rate limiting mekanizmalarınız
CF-Connecting-IPheader’ını kullanmalı - Port sınırlamalarını bilin: Sadece belirli portlar proxied modda çalışır
- Let’s Encrypt için DNS challenge’ı tercih edin: HTTP challenge yerine DNS-01 kullanmak çok daha sorunsuz
Proxied mod doğru yapılandırıldığında ücretsiz bir CDN, DDoS koruması ve SSL yönetimi sağlar. Yanlış yapılandırıldığında ise kendinizi gizemli 526 hataları, gerçek IP sızıntıları ve bozuk uygulamalarla karşı karşıya bulursunuz. Sisteminizi iyi tanıyın, adım adım ilerleyin ve her değişikliği test edin.
