mitmproxy, DevTools, Gradle: VPN-in arxasındakı üç qat
Loopback heç vaxt tunelə daxil olmur. Simptomu dinləyici, etimad anbarı və ya paket filtri kimi təsnif edin və həqiqətən sıradan çıxan qatı bərpa edin.
VPN qoşulur və bir-biri ilə əlaqəsiz üç alət üç fərqli şəkildə uğursuz olur həmin günortadan sonra. mitmproxy sorğuları görməyi dayandırır, Chrome sazlayıcını rədd edir, Gradle isə BindException lokal soketi bağlayarkən atır. Ümumi şübhə tunelin localhost-u bloklamasıdır. Bu mümkün deyil: 127.0.0.1 nüvənin daxilində idarə olunur və heç vaxt adapterə, hətta şlüzə çatmır.
Üç qat, üç fərqli qırılma
Müştəri ilə dəyişən şey loopback-ə gedən marşrut deyil. Bu, lokal proksi, maşın etimad anbarı və paket filtridir və hər biri tərtibatçının iş axınının fərqli hissəsini qırır. Simptomu düzgün sətrə yerləşdirmək diaqnozun çox hissəsidir:
| Symptom | Layer | First check |
|---|---|---|
| Proxy sees no traffic | Local proxy or listener | ss -lntp, or netstat -ano on Windows |
| TLS error in one tool only | Trust store | Which CA bundle does that runtime read? |
| Local bind or connect refused | Packet filter or port owner | Who holds the port, and what rule drops it? |
Bu tip demək olar ki, hər hesabat sonuncu sətirdən başlayıb yuxarı qalxır, bu isə tərsdir. Tunel loopback trafikini görə bilməyən yeganə qatdır, buna görə də ən az şübhə haqqı var. Prosesin nəyi bağladığı ilə başlayın, sonra hansı sertifikatlara etimad etdiyini soruşun və yalnız bundan sonra maşındakı siyasətə baxın.
Tuneldən deyil, dinləyicidən başlayın
Bir proksi 127.0.0.1:8080 trafik qəbul etməyi dayandırırsa, üç şeydən biri olub: heç başlamayıb, başqa port bağlayıb və ya filtr loopback bağlantısını atıb. Dinləyən soketləri sadalamaq buna bir əmrlə cavab verir və iki alət kimin birinci olduğunda razılaşmadıqda portun hansı prosesə aid olduğunu da göstərir.
Marşrut axtarışında lokal ünvan eyni şeyi digər tərəfdən təsdiqləyir. ip route get loopback təyinatına qarşı loopback cihazını göstərir, heç vaxt tuneli yox, və bu, kimsə düzəliş kimi marşrut dəyişikliyi təklif edəndə hazır saxlamağa dəyər bir cümlədir.
Proksi qatı: mühit konfiqurasiya deyil
Bir çox korporativ müştəri HTTP proksisi işlədir və tətbiqlərin ondan istifadəsini gözləyir. Dəyişən HTTPS_PROXY shell-də onu tanıyan əmr sətri alətlərini düzəldir, öz parametrlər faylını oxuyan alətə isə heç nə etmir. Gradle, Selenium və gRPC hər biri öz konfiqurasiyasına baxır və bir terminalda ixrac edilmiş proksi IDE-nin başlatdığı demon üçün görünməzdir.
Konteyner alətləri bunun görünən olduğu adi yerdir. Konteynerin loopback-i özünə aiddir, buna görə 127.0.0.1 konteynerin içində heç vaxt hostun proksisini bildirmir; host ünvanı və ya host şəbəkə parametri tələb olunur. Shell-də işləyib build-də uğursuz olan düzəliş adətən bu sətirdir, tunel deyil.
Etimad qatı: alət başqa anbara baxır
Müdaxilə ikinci dəyişiklikdir və ən aldadıcı xətaları yaradır. Müştəri yoxlanılan bağlantılar üçün öz sertifikatını təqdim edir, buna görə korporativ kökə etimad edən brauzer uğur qazanır, daxili CA anbarı olan alət isə uğursuz olur. certifi vasitəsilə Python requests klassik haldır: əməliyyat sistemi anbarı düzgün ola bilər və sorğu yenə də uğursuz olur, çünki o icra mühiti onu heç vaxt oxumur. Xəta mətnində müdaxilə nadir hallarda xatırlanır, buna görə bu sətir səhvən sınıq son nöqtə kimi diaqnoz edilir.
Son nöqtənin həqiqətən təqdim etdiyini alətin yoxladığı ilə müqayisə edin. openssl s_client serverin göndərdiyi zənciri göstərir; alətin öz yoxlama çıxışı nəyə qərar verdiyini göstərir. Onlar razılaşmadıqda, REQUESTS_CA_BUNDLE və ya SSL_CERT_FILE həmin icra mühiti üçün rıçaqdır və korporativ kök yalnız bəzi alətlərin tanıdığı qlobal yerdə deyil, o icra mühitinin oxuduğu anbarda olmalıdır.
SSL xətasını düzəldən versiya dəyişikliyi VPN haqqında deyil, etimad və şifrə siyasəti haqqında sübutdur. SOAP müştərisini işlədən Python versiyasının aşağı salınması daxili CA anbarını və standart TLS parametrlərini dəyişdi; şəbəkə marşrutu yerindən tərpənmədi.
Filtr qatı: o, loopback-i də ata bilər
Üçüncü dəyişiklik paket filtridir və bəzi məhsullar tunelə daxil olmayan trafiki atan qaydalar quraşdırır. Lokal dinləyicilər də daxil ola bilər. Bu, işlək soketi rədd edilmiş və ya vaxtı keçmiş bağlantıya çevirir və yaranan xəta maşındakı siyasət deyil, tətbiqdəki səhv kimi görünür.
Port sahibliyi bu qatın digər yarısıdır. Bir BindException soketin açıla bilmədiyini bildirir, bu isə bağlantının rədd edilməsindən fərqli uğursuzluqdur. Filtri günahlandırmadan əvvəl portu başqa prosesin tutub-tutmadığını yoxlayın, sonra lokal trafiki atan qayda axtarın və məhsulun dəstəklədiyi ən dar icazəni əlavə edin. Eyni sazlama portu üçün yarışan iki alət siyasət bloku ilə tam eyni mesajı verir və onlardan yalnız birini firewall dəyişikliyi düzəldir.
Chrome-un sazlama portu eyni ailədə uğursuz olur. Brauzer başlayır, sürücü DevTools son nöqtəsinə çata bilmir və mesaj şəbəkəni deyil, DevTools-u adlandırır. Əlavə işə salma bayraqları və artıq sürücü meneceri portun hansı prosesə aid olduğunu dəyişir, buna görə onların silinməsi bəzən VPN-i düzəldirmiş kimi görünür.
Uğursuz olan qatı bərpa edin
Tuneli deyil, uğursuz olan qatı bərpa edin. Əlçatmaz loopback dinləyicisi üçün onun dinləyicisi və ya portu düzəldilməlidir. Etimad olunmayan sertifikat üçün korporativ kök həmin konkret icra mühitinin baxdığı yerə quraşdırılmalı, istisna isə dar saxlanmalıdır. Lokal trafiki atan filtr üçün söndürülmüş filtr deyil, konkret icazə qaydası lazımdır, çünki onu söndürmək qoruduğu hər şeyi də yenidən açır.
VPN-i yenidən qoşmaq bu qatların heç birini sınaqdan keçirmir. O, yalnız onları qıran dəyişikliyi yenidən işə salır, buna görə eyni üç uğursuzluq hər yenidən qoşulmadan sonra qayıdır və müştərini qeyri-aktiv qoyan hər yenidən başlatmadan sonra yox olur.