Bilgi Bankası · Başlarken

Sunucunuzda Gerçek Ziyaretçi IP'si

Siteniz NetSSL arkasına geçince sunucunuz bağlantıları NetSSL'den alır. Ziyaretçinin gerçek IP'si her istekte başlıklarla gönderilir. Bu rehber sunucu türünüze göre bu başlığı nasıl okuyacağınızı anlatır.

Neden gerekir?

Hedef sunucunuza gelen bağlantılar NetSSL sunucusundan gelir. Bu yüzden sunucunuz kendi kayıtlarında ziyaretçinin değil NetSSL'in IP adresini görür. Cloudflare gibi hizmetlerde de durum aynıdır. Ayar yapılmazsa şu sorunlar çıkar:

  • Sunucu kayıtlarında (IIS, Apache, nginx) bütün ziyaretçiler tek IP'den geliyor görünür.
  • Uygulamanızın IP'ye dayalı kuralları (giriş denemesi sınırı, IP engeli) herkese birden uygulanır.
  • Uygulamanın kendi kayıtlarında ve raporlarında ziyaretçiler ayırt edilemez.

NetSSL'in kendi ziyaretçi kayıtlarında ve güvenlik olaylarında gerçek IP zaten yazar. Bu rehberdeki ayar yalnızca sizin sunucunuzun kayıtları ve uygulamanız içindir.

Ne zaman kullanırsınız?

  • Siteyi NetSSL'e bağladıktan hemen sonra.
  • Uygulamanızda veya sunucu kayıtlarında bütün ziyaretçiler aynı IP'den görünüyorsa.
  • Uygulamanız kendini http üzerinde sanıyorsa. Bu durum oturum düşmesine veya yönlendirme döngüsüne yol açar.

NetSSL'in gönderdiği başlıklar

Başlık İçerik
X-Real-IP Ziyaretçinin IP adresi. Tek değer içerir ve önerilen başlıktır.
X-Forwarded-For Ziyaretçinin IP adresi (standart başlık). Ziyaretçinin gönderdiği sahte değerler silinir.
CF-Connecting-IP Aynı IP. Cloudflare için yazılmış uygulamalar ve eklentiler için gönderilir.
True-Client-IP Aynı IP. Akamai / Cloudflare Enterprise uyumlu uygulamalar için gönderilir.
X-Forwarded-Proto https (ziyaretçinin bağlandığı protokol)

Yapmanız gereken tek şey var. Sunucunuza veya uygulamanıza bu başlığı yalnızca NetSSL sunucusundan geldiğinde okumasını söyleyin.

Yardım merkezindeki Gerçek ziyaretçi IP'si bölümü ve Apache ayarı

ℹ️
Hazır ayarlar panelde

Hesap → Yardım sayfasındaki Gerçek ziyaretçi IP'si bölümü aşağıdaki ayarları sizin NetSSL sunucunuzun IP adresiyle doldurulmuş olarak verir. Satırları oradan kopyalayın. Bu rehberdeki örneklerde NetSSL adresi 203.0.113.25 olarak yazılmıştır. Hesabınızda birden fazla NetSSL sunucusu varsa panel bütün adresleri yazar. Hepsini ekleyin.


NetSSL adresinizi bulun

Hostun Yayın ayarları sayfasında sağdaki Trafik nasıl akar? kutusu trafiğin yolunu gösterir. Yol ziyaretçiden NetSSL'e (SSL + güvenlik), oradan hedef sunucunuza gider. Yedek sunucu tanımlıysa o da görünür.

Kutunun altında güvenlik duvarınızda izin vermeniz gereken NetSSL adresi yazar. IIS, Apache, nginx için ayarlar bağlantısı yardım merkezindeki hazır ayarları açar. Test et bağlantısı aşağıda anlatılan test adresini açar.

Trafik nasıl akar? kutusu: ziyaretçi, NetSSL, hedef ve yedek sunucu


Sunucu türüne göre ayar

IIS (Windows Server): kayıtlarda gerçek IP

IIS 8.5 ve üstünde kayıt dosyasına ek bir sütun eklenir.

  1. IIS Yöneticisi → site → Logging → Select Fields → Add Field yolunu açın.
  2. Source type olarak Request Header, Source olarak X-Forwarded-For, Field name olarak GercekIP girin.

Bütün siteler için aynı ayarı yönetici komut isteminde tek komutla yapabilirsiniz:

%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/sites /+"siteDefaults.logFile.customFields.[logFieldName='GercekIP',sourceName='X-Forwarded-For',sourceType='RequestHeader']" /commit:apphost

Kayıtlardaki c-ip sütunu NetSSL IP'si olarak kalır. Gerçek IP GercekIP sütununda yazar.

ASP.NET Core (IIS, Kestrel)

Program.cs içinde, diğer middleware'lerden önce şu satırları ekleyin:

using Microsoft.AspNetCore.HttpOverrides;
using System.Net;

builder.Services.Configure<ForwardedHeadersOptions>(o =>
{
    o.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    o.KnownProxies.Add(IPAddress.Parse("203.0.113.25"));
});

var app = builder.Build();
app.UseForwardedHeaders();

Sonrasında HttpContext.Connection.RemoteIpAddress gerçek IP'yi verir.

ASP.NET (.NET Framework, Web Forms, MVC) ve klasik ASP

IP'yi okuduğunuz yerde başlığı yalnızca NetSSL'den gelen isteklerde kullanın:

string ip = Request.ServerVariables["REMOTE_ADDR"];
if (ip == "203.0.113.25")
{
    ip = Request.ServerVariables["HTTP_X_REAL_IP"] ?? ip;
}

Apache (Linux, cPanel, Plesk)

mod_remoteip modülü gerçek IP'yi hem kayıtlara hem uygulamaya (PHP REMOTE_ADDR) verir.

  1. Modülü etkinleştirin: a2enmod remoteip.
  2. Ayar dosyasına şu satırları ekleyin:
RemoteIPHeader X-Real-IP
RemoteIPTrustedProxy 203.0.113.25
  1. Kayıt biçiminde %h yerine %a kullanın:
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
  1. Apache'yi yeniden başlatın.

nginx

http veya server bloğuna şu satırları ekleyin:

set_real_ip_from 203.0.113.25;
real_ip_header X-Real-IP;

Bundan sonra $remote_addr, kayıtlar ve uygulamaya giden REMOTE_ADDR gerçek IP olur.

PHP (sunucu ayarına erişim yoksa)

Uygulamanın en başına ekleyin. Örneğin index.php, config.php veya WordPress için wp-config.php dosyasının başı uygundur.

<?php
if ($_SERVER['REMOTE_ADDR'] === '203.0.113.25' && !empty($_SERVER['HTTP_X_REAL_IP'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}

Laravel

Laravel 11 ve üstünde bootstrap/app.php dosyasına ekleyin:

->withMiddleware(function (Middleware $middleware) {
    $middleware->trustProxies(at: ['203.0.113.25']);
})

Laravel 10 ve öncesinde app/Http/Middleware/TrustProxies.php dosyasında şu satırı yazın:

protected $proxies = ['203.0.113.25'];

Java (Tomcat)

server.xml içinde <Host> altına ekleyin:

<Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies="203\.0\.113\.25" remoteIpHeader="x-forwarded-for" protocolHeader="x-forwarded-proto" />

Node.js (Express)

app.set('trust proxy', ['203.0.113.25']);

Ayarı test edin

  1. Tarayıcıda sitenizin /.well-known/netssl-ip adresini açın. Örnek: https://ebelediye.testbelediyesi.bel.tr/.well-known/netssl-ip.
  2. Sayfa sizin IP adresinizi ve hedef sunucuya gönderilen başlıkları gösterir.
  3. Aynı anda sitenizde bir sayfa açın.
  4. Sunucunuzun kaydında hangi IP'nin göründüğüne bakın. Test sayfasındaki IP ile aynıysa ayar doğrudur.

Test adresi host yayındayken Trafik nasıl akar? kutusundaki Test et bağlantısıyla da açılır.


Neden yalnızca NetSSL'e güvenilmeli?

Başlıklar herkes tarafından gönderilebilir. Hedef sunucunuz internete doğrudan açıksa biri NetSSL'i atlayıp sahte bir X-Real-IP gönderebilir. Bu yüzden yukarıdaki ayarların hepsi yalnızca NetSSL'in IP adresine güvenir. NetSSL de ziyaretçinin gönderdiği bu başlıkları siler ve kendi değerini yazar.

En güvenli yol, hedef sunucunuzun güvenlik duvarında web portlarını yalnızca NetSSL adreslerine açmaktır. Hostun Güvenlik sayfasındaki Hedef sunucu koruması bölümü bunu sizin için denetler:

  • NetSSL dışından erişim kutusu sunucunuzun dışarıya açık olup olmadığını gösterir. Sonuç Yalnızca NetSSL erişebiliyor, Dışarıdan doğrudan erişilebiliyor veya İç ağda (dışarıdan erişim yok) olur. Şimdi kontrol et düğmesi denetimi yeniler.
  • NetSSL sunucularından erişim kutusu NetSSL sunucularının sitenize ulaşıp ulaşmadığını gösterir.
  • Güvenlik duvarınızda izin verilecek NetSSL adresleri listesini Kopyala düğmesiyle alın. FortiGate, Sophos, Palo Alto, Check Point, WatchGuard, pfSense / OPNsense, MikroTik, Labris ve diğer UTM cihazları, Windows Server, Linux ve Plesk / cPanel için adım adım anlatım bulunur.
  • NetSSL yeni bir sunucu eklediğinde liste güncellenir ve size e-posta ile bildirilir.

Bu denetim güvenlik puanında da yer alır. Sunucuya NetSSL atlanarak erişilebiliyorsa puan en fazla 60 olur. Ayrıntı: Panelin kullanımı.

Hostun Güvenlik sayfasındaki Hedef sunucu koruması bölümü

💡
Cloudflare eklentileri

Cloudflare için yazılmış bazı eklentiler bağlantının Cloudflare IP'sinden geldiğini de kontrol eder. Bu eklentiler NetSSL'in gönderdiği CF-Connecting-IP başlığını kullanmaz. Böyle bir durumda yukarıdaki genel ayarı kullanın.


X-Forwarded-Proto ve https

NetSSL hedef sunucunuza http ile bağlanıyorsa uygulamanız kendini http üzerinde sanabilir. Bunun sonucunda sayfada karışık içerik uyarısı, girişte oturum düşmesi veya sonsuz yönlendirme görülebilir. NetSSL her istekte X-Forwarded-Proto: https başlığını gönderir. Uygulamanızın bu başlığa güvenmesini sağlayın. Laravel, WordPress ve ASP.NET gibi çatılarda bu ayarın adı “trusted proxy”dir. Yukarıdaki ASP.NET Core, Laravel ve Tomcat ayarları bu başlığı da kapsar. Belirtiye göre çözümler Sorun giderme rehberindedir.


Sık sorulan sorular

Hangi başlığı kullanmalıyım?

Tek değer içerdiği için X-Real-IP önerilir. Uygulamanız standart başlık bekliyorsa X-Forwarded-For kullanın. İkisi de aynı IP'yi taşır.

Ayarı yaptım ama kayıtlarda hâlâ NetSSL IP'si görünüyor.

Ayarda yazdığınız IP'nin paneldeki NetSSL adresiyle aynı olduğunu kontrol edin. Ardından web sunucusunu veya uygulama havuzunu yeniden başlatın. IIS'te c-ip sütunu her zaman NetSSL IP'si kalır. Gerçek IP GercekIP sütunundadır. Sonucu test adresiyle karşılaştırın.

NetSSL'in kendi kayıtlarında gerçek IP görünüyor mu?

Evet. Panelin ziyaretçi kayıtlarında, son ziyaretler listesinde ve güvenlik olaylarında ziyaretçinin gerçek IP'si yazar. Ayrıntı: 5651 kayıtlar ve resmi talep.

Güvenlik duvarında neye izin vermeliyim?

Hedef sunucunuzun web portuna (genellikle 443 veya 80) yalnızca paneldeki NetSSL adreslerinden gelen bağlantılara izin verin. Kurum içinden (iç ağdan) erişim bu kuraldan etkilenmez.