VPN arkasında PHP'nin REMOTE_ADDR'si aslında ne söyler
Bu, web sunucunuzun sağladığı bir değerdir, tünele yapılan bir sorgu değil. İsteğin yolunu izleyin, onu kimin yeniden yazabileceğini denetleyin ve kimliği uygulamada tutun.
Biri, bir VPN kullanıcısının uygulama günlüğünde neden ağ geçidine ait bir adresle ya da öğle yemeğinden sonra değişen bir adresle göründüğünü soruyor. Yanıt, bu değerin ne olduğuyla başlar: web sunucusunun istek ortamına koyduğu bir kayıt. Bu, tünele yapılan bir sorgu değil, bir sertifika kimliği değil ve numaranın tek bir kişiye ait olduğuna dair bir söz de değildir. Onu bu üçünden biri olarak okumak, farklı biçimlerde yanlış olan kendinden emin yanıtlar üretir.
Değer sunucudan gelir, tünelden değil
PHP istek ortamını betiği çalıştıran şeyden alır. PHP sunucu değişkenleri başvurusu bu kayıtları web sunucusu tarafından oluşturulmuş olarak tanımlar; kullanılabilirlikleri isteğin nasıl geldiğine bağlıdır.
VPN'in komut satırı kancası olarak çalıştırılan bir betik tamamen başka bir yürütme bağlamıdır. Web isteği, istemci soketi ve REMOTE_ADDR yoktur; bu yüzden bir kancaya kopyalanan web kodu yanlış değerler yerine boş değerler üretir. Kancanın demon tarafından doldurulan kendi ortamı vardır ve ayrı olarak belgelenmiştir. Orada REMOTE_ADDR'a uzanmak, hiç ayarlanmamış bir değişkene uzanmaktır.
İki günlüğü karşılaştırmadan önce bu ayrımı aklınızda tutun. Belki bir sayfa isteğini bir kancayla karşılaştırıyorsunuz ve bu hiç de karşılaştırma değil. Önce yürütme bağlamını, sonra adresi denetleyin.
Numaraya güvenmeden önce isteğin yolunu izleyin
Bildirilen adres, web sunucusunun gördüğü bağlantının eşidir. İstemci ile o sunucu arasına herhangi bir şey koyun, eş değişir. Çeviri, sonlandırma ve yük dengeleme, her biri gözlemi kullanıcıdan bir sıçrama daha uzağa taşır.
Dört yaygın yol dört farklı gözlem üretir.
| Path to the listener | What can be reported |
|---|---|
| Client routed straight to the private listener, no translation | The client's tunnel address |
| Gateway translates the source before forwarding | The gateway's translated address |
| Reverse proxy terminates the client and opens its own backend connection | The proxy's backend address |
| Load balancer in front of two proxies | Whichever hop the server treats as its peer |
Yolu hedef adı, adres ailesi ve her çeviri noktasıyla birlikte yazın. Bu harita olmadan doğru ve yanlış değer bir günlük satırında aynı görünür. İki satır şema bir öğleden sonra tartışmayı kurtarır.
Değiştirme yalnızca yapılandırıldığı yerde olur
Bir sunucu veya çerçeve istemcinin adresini bilerek değiştirebilir. Apache'nin remote-IP modülü ile NGINX'in real-IP modülü bunu yapar ve PHP'nin aldığı değer bu yapılandırmaya ve betik işleyicisine geçirilen parametrelere bağlıdır.
Yani REMOTE_ADDR her zaman dokunulmamış TCP eşi değildir. Sunucunun kendi ilkesini uyguladıktan sonra bildirmeyi seçtiği eştir. Bu ayrım, değerin kanıt mı süs mü olduğuna karar verir.
Sunucu sahibine bu kurulumda hangi alanın yetkili olduğunu ve değiştirme olduğunda özgün eşin nasıl korunduğunu sorun. Kimse yanıtlayamıyorsa günlük henüz hiçbir şeyi kanıtlamıyor.
Yönlendirme başlıklarını güvenle okumayın
Çağıran, yönlendirme başlıklarını kendisi gönderebilir. Virgülle ayrılmış ilk kaydı doğrulanmış kullanıcı adresi olarak kabul etmek, bağlanan herkese inanmaya karar vermektir; bu da başlığın amacının tam tersidir. Başlık bir zinciri tanımlar ve yalnızca güvenilir bir katman bu zincire kefil olabilir.
Sunucunun veya çerçevenin güvenilir vekil sunucu desteğini gerçek vekil zinciriyle yapılandırılmış olarak kullanın ve bu zincirin dışındaki kaynaklardan gelen değerleri atmasına izin verin. Elle yazılmış ayrıştırma, ilginç arızaların çoğunun yaşadığı yerdir.
Bir vekil sunucunun bildirdiği adres, yukarıdaki bir güvenlik duvarının gördüğü paket kaynağını da değiştirmez. HTTP üst verilerini ve ağ filtresini ayrı gözlemler olarak tutun, çünkü farklı soruları yanıtlarlar.
Kararlar için uygulama kimliğini kullanın
Bir kullanıcının kayıtlarına erişim için kimliği doğrulanmış özneye ve uygulamanın yetkilendirme kurallarına güvenin. İç adres yeniden atanabilir ve tek bir çevrilmiş adres yüzlerce eşzamanlı kullanıcıyı temsil edebilir. Bu özelliklerin hiçbirini bir adres denetimi onaramaz.
Operasyonların bir isteği bir VPN oturumuna bağlaması gerekiyorsa, gözlenen adresi ve zaman damgasını belgelediğiniz çeviri modeline göre yetkili oturum kayıtlarıyla birleştirin. Bu, savunabileceğiniz bir ilişki üretir; tek başına bir adres üretmez.
Tanılama için tüm sunucu dizisi yerine gereken birkaç alanı günlüğe yazın, çünkü dizi başlıklar ve kimlik doğrulama malzemesi taşıyabilir. Yararlı sonuç, bu değerin bu kurulumda ne anlama geldiğini söyler, hangi değerin bir istemciye en çok benzediğini değil.