Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Apache'de Mod_RemoteIP ile Gerçek Kullanıcı IP Adresini Yakalama Rehberi 🌐

stackor

Üye
Katılım
14 Mart 2026
Mesajlar
9
Apache'de Mod_RemoteIP ile Gerçek Kullanıcı IP Adresini Yakalama Rehberi 🌐

Selam sistemciler! 🖥️ Bugün, özellikle bir yük dengeleyici (load balancer), CDN (Cloudflare, CloudFront vb.) veya reverse proxy (Nginx, HAProxy) arkasında çalışan Apache sunucularında yaşanan can sıkıcı bir sorunu çözeceğiz: Tüm loglarınızın ve uygulamalarınızın, trafiği size ileten ara sunucunun (proxy) IP adresini görmesi!

Bu durumda, erişim loglarınızda sadece 172.x, 10.x gibi dahili IP'ler veya CDN'in IP'leri görünür. Gerçek kullanıcılarınızın nereden geldiğini, saldırı kaynağını veya coğrafi dağılımı analiz edemezsiniz. İşte mod_remoteip modülü tam da burada devreye giriyor. Gelin bu modülü nasıl aktif edeceğimizi ve yapılandıracağımızı adım adım inceleyelim.

Mod_RemoteIP Nedir ve Ne İşe Yarar?

mod_remoteip, Apache HTTP Sunucusu için bir modüldür. Temel görevi, bir reverse proxy veya yük dengeleyici zincirinden gelen isteklerde, X-Forwarded-For, X-Real-IP gibi standart HTTP başlıklarını okuyarak, Apache'nin bağlantıyı kabul ettiği uzak IP adresi bilgisini (yani proxy'nin IP'sini) bu başlıklarda taşınan gerçek istemci IP adresi ile değiştirmektir.

Bu sayede:
  • Erişim loglarınız (access_log) artık gerçek kullanıcı IP'lerini gösterir.
  • PHP, Perl, Python gibi uygulamalarınız $_SERVER['REMOTE_ADDR'] değişkeninden doğru IP'yi alır.
  • IP bazlı erişim kontrolleri (Require ip) ve güvenlik önlemleri doğru şekilde çalışır.
  • Fail2ban gibi araçlar doğrudan saldırganın IP'sini engelleyebilir.

Adım 1: Modülü Etkinleştirme (Ubuntu/Debian)

Öncelikle, modülün yüklü olup olmadığını kontrol edelim ve etkinleştirelim.

Bash:
# Modülün mevcut olup olmadığını kontrol et
sudo apache2ctl -M | grep remoteip

# Eğer çıktı vermezse, modül yüklü ama etkin değil veya yüklü değil demektir.
# Modülü etkinleştirelim:
sudo a2enmod remoteip

Eğer modül yüklü değilse (nadir), önce kurmanız gerekebilir:

Bash:
sudo apt update
sudo apt install apache2
# Apache kurulumu ile birlikte genelde modül de gelir.

Modülü etkinleştirdikten sonra Apache'yi yeniden başlatmayı unutmayın.

Adım 2: Ana Apache Yapılandırmasını Düzenleme

Şimdi, modülün hangi IP'lerden gelen "X-Forwarded-For" başlıklarına güveneceğini ve hangi başlıkları okuyacağını tanımlamamız gerekiyor. Bunun için ana yapılandırma dosyalarından birini (örneğin `remoteip.conf`) düzenleyeceğiz.

Bash:
sudo nano /etc/apache2/conf-available/remoteip.conf

Bu dosyanın içine, kendi ortamınıza uygun aşağıdaki yapılandırmayı ekleyin:

Kod:
# RemoteIP modülünü yükle
LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so

# Hangi IP adreslerinden gelen X-Forwarded-For başlıklarına GÜVENİLECEK?
# Buraya yük dengeleyicinizin, CDN'inizin veya reverse proxy'nizin IP adres(ler)ini yazın.
# LOCALHOST ve dahili ağınız için örnekler:
RemoteIPTrustedProxy 127.0.0.1
RemoteIPTrustedProxy 192.168.1.100
RemoteIPTrustedProxy 10.0.0.0/8
# Eğer Cloudflare kullanıyorsanız, IP listesini sürekli güncellemeniz gerekir.
# Cloudflare IP listesi için: https://www.cloudflare.com/ips/

# Gerçek IP adresinin hangi başlıkta saklandığını belirtin (genellikle X-Forwarded-For).
RemoteIPHeader X-Forwarded-For

# İsteğin geçtiği tüm proxy'lerin IP'sini tutmak isteyebilirsiniz (opsiyonel).
# Bu, X-Forwarded-For başlığında bir IP zinciri oluşturur.
RemoteIPInternalProxy 192.168.1.100 10.0.0.0/8

# Apache'nin log formatında %a yerine gerçek IP'yi yazmasını sağlamak için log formatını değiştiriyoruz.
LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O" common

ÖNEMLİ UYARI: RemoteIPTrustedProxy direktifine sadece güvendiğiniz sunucuların IP'lerini ekleyin. Aksi takdirde, bir saldırgan kendi "X-Forwarded-For: 8.8.8.8" başlığını gönderip IP'sini değiştirebilir! 🛡️

Yapılandırmayı kaydettikten sonra, bu konfigürasyonu da etkinleştirelim:

Bash:
sudo a2enconf remoteip

Adım 3: Sanal Host (Vhost) Yapılandırmasını Güncelleme

Artık, gerçek IP adresini kullanacak olan sanal host'unuzun yapılandırma dosyasında, log dosyaları için doğru formatı kullandığından emin olmalı ve gerekirse `RemoteIPHeader` ayarını bu seviyede de belirtebilirsiniz.

Örnek bir sanal host yapılandırmasının ilgili kısmı:

Kod:
<VirtualHost *:80>
    ServerName sitem.com
    DocumentRoot /var/www/html

    # Erişim loglarını, combined formatında (ki bu artık gerçek IP'yi %a ile gösteriyor) tanımla
    CustomLog ${APACHE_LOG_DIR}/sitem-access.log combined
    ErrorLog ${APACHE_LOG_DIR}/sitem-error.log

    # Eğer ana konfigürasyonda tanımlanmadıysa, bu seviyede de header'ı belirtebilirsiniz.
    # RemoteIPHeader X-Forwarded-For
</VirtualHost>

Adım 4: Apache'yi Yeniden Başlatma ve Test Etme

Tüm değişiklikleri uygulamak için Apache servisini yeniden başlatalım:

Bash:
sudo systemctl restart apache2
# veya
sudo service apache2 restart

Şimdi test zamanı! 🌐 Sunucunuza bir istek gönderin (doğrudan veya proxy üzerinden). Ardından erişim loglarını kontrol edin:

Bash:
sudo tail -f /var/log/apache2/sitem-access.log

Artık log satırlarının başında, proxy'nizin değil, gerçek istemcinin IP adresini görmelisiniz.

Ayrıca, basit bir PHP test dosyası oluşturarak uygulama tarafında da kontrol edebilirsiniz (`/var/www/html/testip.php`):

PHP:
<?php
echo "REMOTE_ADDR: " . $_SERVER['REMOTE_ADDR'] . "<br>";
echo "HTTP_X_FORWARDED_FOR: " . ($_SERVER['HTTP_X_FORWARDED_FOR'] ?? 'Bulunamadı') . "<br>";
?>

Bu dosyayı tarayıcıdan açtığınızda, `REMOTE_ADDR` alanının artık gerçek IP'nizi göstermesi gerekiyor.

Karşılaşılabilecek Sorunlar ve Çözümleri

  • Loglar Hala Proxy IP'sini Gösteriyor: `RemoteIPTrustedProxy` listesine proxy IP'nizi eklediğinizden ve doğru log formatını (`combined`) kullandığınızdan emin olun. Apache'yi yeniden başlattınız mı?
  • PHP veya Diğer Uygulamalar Hala Yanlış IP'yi Görüyor: PHP-FPM kullanıyorsanız, `mod_remoteip`'in çalışması için Apache'nin PHP'yi mod_php olarak değil, FastCGI (`mod_proxy_fcgi`) üzerinden çalıştırıyor olması gerekebilir. Ayrıca, bazı PHP framework'leri IP'yi farklı bir süper global değişkende (`$_SERVER['HTTP_X_FORWARDED_FOR']`) saklayabilir, uygulama kodunuzu buna göre güncellemelisiniz.
  • Cloudflare veya Diğer CDN'ler ile Kullanım: CDN'lerin IP listesi değişebilir. Cloudflare için IP listesini düzenli olarak çekip yapılandırmanızı güncelleyen betikler yazmanız önerilir.

Umarım bu rehber, loglarınızdaki o "hayalet" IP'ler sorununu çözmenize yardımcı olur. Doğru loglama, güvenlik ve analiz için bu ayar gerçekten kritik öneme sahip. ⚙️

Peki siz hangi yük dengeleyici veya CDN çözümünü kullanıyorsunuz? `mod_remoteip` kurulumunda başka hangi zorluklarla karşılaştınız? Deneyimlerinizi yorumlarda paylaşın, birlikte çözüm bulalım!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri