Soket qarşı tərəfi yoxsa yönləndirmə başlığı: hansı ünvana güvənirsiniz?
Soket qarşı tərəfi və yönləndirmə başlığı fərqli sübutlardır. Hər birinin nəyi sübut etdiyini müqayisə edin və başlığa yalnız nəzarət etdiyiniz vasitəçi zənciri vasitəsilə güvənin.
Tətbiqinizə çatan sorğu iki cür ünvan sübutu daşıyır: şəbəkə bağlantısını açan qarşı tərəf və daha əvvəlki müştərinin ünvanını iddia edən HTTP sahəsi. Onlar fərqli suallara cavab verir. Soket qarşı tərəfi müşahidə olunur, başlığı isə onu yazan hər kəs iddia edir və heç biri digərini jurnalda və ya giriş qaydasında səssizcə əvəz etməməlidir. Aşağıdakı müqayisə onları ayrı saxlayır və sonra başlığın yararlı olduğu yeganə quruluşu göstərir.
Hər şeyi müqayisə etməzdən əvvəl yolu təsvir edin:
Client -> approved reverse proxy -> application originBu quruluşda mənbəyin soket qarşı tərəfi adətən vasitəçidir və yönləndirmə başlığı vasitəçinin müştəri haqqında iddiasını daşıya bilər. Onun dəyəri başlığın adından deyil, həmin vasitəçi ilə idarə olunan münasibətdən gəlir.
İki cür ünvan sübutu
Soket qarşı tərəfi bir TCP bağlantısı haqqında faktdır: nəsə həmin ünvandan əl sıxma tamamladı. Bu, mütləq sizin vecinizə olan insan, cihaz və ya hesab deyil, çünki VPN və ya Tor çıxışı bir xidmətin müşahidə etdiyi mənbə ola bilər. O, yenə də hostun özünün təsdiqlədiyi yeganə ünvandır və onun bütün dəyəri budur.
Yönləndirmə sahəsi zəncir barədə metaməlumatdır. X-Forwarded-For, X-Real-IP və standartlaşdırılmış Forwarded sahəsi onları əks etdirən son nöqtəyə çatan istənilən müştəri tərəfindən yazıla bilər, ona görə də etibarlılığı tamamilə onları yazmağa kimin icazə verdiyindən asılıdır.
Hər ikisini sorğu kontekstində ayrı adlarla saxlayın. Qarşı tərəfi başlıqla üzərinə yazan tətbiq sonradan etibar xətasını bərpa etmək qabiliyyətini itirir və bu, məhz ona ehtiyac duyduğunuz andır.
Başlıq bağlantını heç vaxt yönləndirmir
Yönləndirmə sahəsinə ünvan yazmaq serverə gələn TCP bağlantısının mənbəyini dəyişmir və yolun heç bir yerində marşrutlaşdırmanı dəyişmir. Adi VPN marşrutlaşdırması və ya mənbə NAT trafiki heç bir HTTP başlığı olmadan çatdırır. Eyni şəkildə, tranzit şlüzü düzgün qorunan HTTPS mübadiləsini TLS son nöqtə quruluşunu dəyişmədən yenidən yazmır.
Əks səhv də eyni dərəcədə geniş yayılmışdır: HTTPS müştərinin təqdim etdiyi yönləndirmə başlığını doğru etmir. O, yalan iddianın daşınmasını doğru iddia qədər yaxşı qoruyur.
Əgər həmkar marşrutlaşdırma problemini həll etmək üçün başlıq dəyişikliyi təklif edirsə, diaqnoz artıq səhv gedib. Yolu düzəldin və ya başlığı yazan vasitəçi konfiqurasiyasını düzəldin.
İddia etməyə icazə verilən vasitəçini adlandırın
İki qayda yönləndirmə sahəsini yararlı edir və hər ikisi kod deyil, konfiqurasiyadır. Kənar xaricdən gələni öz sənədləşdirilmiş davranışına uyğun normallaşdırır və ya atır. Sonra mənbə əvəzedici ünvanı adlandırdığınız vasitəçi yolundan alır, başqa heç yerdən deyil. İkinci qayda yalnız müştərilər mənbəyə başqa yolla çata bilmədiyi müddətdə qüvvədədir, çünki həm birbaşa, həm də vasitəçi vasitəsilə gələn sorğulara cavab verən mənbə hansına xidmət etdiyini bilmir.
NGINX-in real-IP modulu bölgünü aydın göstərir. set_real_ip_from iddiası sayılan göndərənləri adlandırır və real_ip_header hansı sahənin onu daşıdığını bildirir; birincisi güvənir, ikincisi yalnız hara baxmağı deyir.
set_real_ip_from 10.20.0.0/24;
real_ip_header X-Forwarded-For;
# real_ip_recursive off - take the rightmost value in the field
# real_ip_recursive on - walk the list back past every trusted address
Yalnız başlıq seçən direktiv kimin dəyəri göndərdiyi barədə hələ heç nə müəyyən etmir.
Nəqliyyat təhlükəsizliyi etibar etdiyiniz komponentlər arasında bütün yolu keçməlidir. Düzgün normallaşdıran kənar o dəyəri, qorunmayan bir mərhələ aşağıda kiminsə iddianı yolda dəyişməsinə imkan verdiyi anda itirir.
Çoxmərhələli zəncirləri qəsdən idarə edin
Bir neçə vasitəçi açıq zəncir modeli tələb edir. Hər hansı bloq yazısı belə etdi deyə vergüllə ayrılmış ən sol və ya ən sağ dəyəri götürməyin; vasitəçilərinizdən hansının əlavə etdiyini, hansının əvəz etdiyini və hansının gələn sahəni saxladığını öyrənin. Məsələn, NGINX siyahını etibarlı çoxluğuna qarşı geriyə doğru gedə və sahibi olmadığı ilk ünvanda dayana bilər ki, bu, hər freymvorkun tabe olduğu qanun deyil, həmin məhsulun qaydasıdır. Öz vasitəçinizin sənədlərini eyni iki sualla oxuyun: hansı dəyəri seçir və hansı göndərənlərə inanır?
Zənciri yazın: mərhələ sırası, hansı mərhələnin sahəni təyin etdiyi və hansının daxil olan nüsxələri sildiyi. Sonra bu qeydi yalnız biletdə deyil, vasitəçi konfiqurasiyasının yanında saxlayın. Sonra saxta başlıqlı sorğunu təsdiqlənmiş yoxlama prosesindən keçirərək və mənbənin onu nəzərə almadığını təsdiqləyərək bunu sınaqdan keçirin.
Bir mərhələ əlavə etdikdə həmin sənədə yenidən baxın. Etibarlı vasitəçinin qarşısına əlavə edilən yeni yük balanslaşdırıcısı heç kim tətbiqi redaktə etmədən hansı ünvanın qalib gəldiyini dəyişə bilər.
Hər iki müşahidəni jurnalda saxlayın
Diaqnostikaya icazə verildiyi yerdə bağlantı qarşı tərəfini və normallaşdırılmış müştəri ünvanını iki ayrı sahə kimi qeyd edin və yalnız məqsədin həqiqətən ehtiyac duyduğu yönləndirmə metaməlumatını əlavə edin. Sonra yerləşdirməni iki sorğu ilə sübut edin: hər iki dəyəri məntiqlə qeyd etməli olan vasitəçili sorğu və rədd edilməli olan birbaşa mənbəyə cəhd.
Bu cütün nə demək olduğunu unutmayın. Başlıq güvənməyi seçdiyiniz komponentin təqdim etdiyi konteksti əlavə edir; qarşı tərəf hostunuzun həqiqətən gördüyü yeganə ünvan olaraq qalır. Heç biri fərdi kimliyin sübutu deyil və hər hansı birini sübut kimi qəbul edən dizayn kimsə barədə yanılacaq.