mitmproxy, DevTools, Gradle: trije lagen efter de VPN
Loopback komt nea yn 'e tunnel. Sortearje it symptoom by listener, fertrouwensopslach of pakketfilter, en reparearje de laach dy't wier mislearre.
De VPN ferbynt, en trije net-relatearre ark mislearje op trije ferskillende manieren deselde middei. mitmproxy hâldt op mei it sjen fan fersiken, Chrome wegeret de debugger, en Gradle smyt BindException wylst it in lokale socket bynt. It mienskiplike fermoeden is dat de tunnel localhost blokkearret. Dat kin net: 127.0.0.1 wurdt yn 'e kernel hanthavene en komt nea by in adapter, lit stean by in gateway.
Trije lagen, trije ferskillende brekken
Wat mei de klient feroare is, is net de rûte nei loopback. It binne in lokale proxy, in fertrouwensopslach fan 'e masine en in pakketfilter, en elk brekt in oar diel fan 'e wurkstream fan in ûntwikkelder. In symptoom yn 'e juste rige pleatse is it grutste part fan 'e diagnoaze:
| 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? |
Hast alle rapporten fan dit soarte begjinne by de lêste rige en wurkje omheech, wat efterstfoarst is. De tunnel is de iene laach dy't bewizen kin dat er gjin loopback-ferkear sjen kin, dus fertsjinnet er it minste fermoeden. Begjin mei wat it proses bûn hat, freegje dan hokker sertifikaten it fertrout, en sjoch pas dêrnei nei belied op 'e masine.
Begjin by de listener, net by de tunnel
As in proxy op 127.0.0.1:8080 gjint ferkear mear ûntfangt, is ien fan trije dingen bard: it is nea start, it hat in oare poarte bûn, of it filter hat de loopback-ferbining weilitten. De harkjende sockets opsomme beantwurdet dat mei ien opdracht, en it lit ek sjen hokker proses de poarte hat as twa ark it net iens binne oer wa't earst wie.
In lokaal adres yn in rûtesykjen befêstiget itselde fan 'e oare kant. ip route get tsjin in loopback-bestimming rapportearret it loopback-apparaat, nea de tunnel, wat in nuttige sin is om ree te hawwen as immen in rûtferoaring as oplossing foarstelt.
De proxylaach: omjouwing is gjin konfiguraasje
In protte bedriuwskliïnten draaie in HTTP-proxy en ferwachtsje dat applikaasjes dy brûke. It ynstellen fan HTTPS_PROXY yn in shell reparearret kommandorigelark dat it respektearret, en docht neat foar in ark dat syn eigen ynstellingsbestân lêst. Gradle, Selenium en gRPC rieplachtsje elk har eigen konfiguraasje, en in proxy dy't yn ien terminal eksportearre is, is ûnsichtber foar in daemon dy't troch de IDE start is.
Kontenerark is it gewoane plak dêr't dit sichtber wurdt. De loopback fan in kontener is syn eigen, dus 127.0.0.1 yn 'e kontener betsjut nea de proxy fan 'e host; it adres fan 'e host of in host-netwurkynstelling is nedich. In oplossing dy't yn 'e shell wurket en by de build mislearret, is meastentiids dizze rige, net de tunnel.
De fertrouwenslaach: it ark lêst in oare opslach
Yntervinsje is de twadde feroaring, en it produsearret de meast misliedende flaters. De klient presintearret syn eigen sertifikaat foar ynspektearre ferbiningen, dus in browser dy't de bedriuwsroot fertrout, slagget, wylst in ark mei in ynbân CA-opslach mislearret. Python's requests fia certifi is it klassike gefal: de opslach fan it bestjoeringssysteem kin goed wêze en it fersyk mislearret dochs, om't dy útfieromjouwing dy nea lêst. De flatertekst neamt yntervinsje selden, en dêrom wurdt dizze rige ferkeard diagnostisearre as in brutsen einpunt.
Fergelykje wat it einpunt eins presintearret mei wat it ark falidearre hat. openssl s_client lit de ketting sjen dy't de server stjoerd hat; de eigen falidaasje-útfier fan it ark lit sjen wat it besletten hat. As se net oerienkomme, REQUESTS_CA_BUNDLE of SSL_CERT_FILE is de hefbeam foar dy útfieromjouwing, en de bedriuwsroot heart yn 'e opslach dy't dy útfieromjouwing lêst, net op in globale lokaasje dy't allinne guon ark respektearje.
In ferzjeferoaring dy't in SSL-flater reparearret is bewiis oer fertrouwens- en sjiferybelied, net oer de VPN. In Python-downgrade dy't in SOAP-klient wurkje lit, feroare de ynbân CA-opslach en de standert TLS-ynstellingen; it netwurkpaad ferhuze net.
De filterlaach: hy kin loopback ek weilitte
De tredde feroaring is in pakketfilter, en guon produkten ynstallearje regels dy't ferkear weilitte dat net yn 'e tunnel komt. Lokale listeners kinne ynbegrepen wêze. Dat makket fan in wurkjende socket in wegere of ferrûne ferbining, en de resultearjende flater liket in bug yn 'e applikaasje, net in belied op 'e masine.
Poartebesit is de oare helte fan dizze laach. BindException betsjut dat de socket net iepene wurde koe, wat in oare mislearring is as in wegere ferbining. Kontrolearje oft in oar proses de poarte al hat foardat jo it filter de skuld jouwe, sykje dan in regel dy't lokaal ferkear weilitte en foegje de smelste tastimming ta dy't it produkt stipet. Twa ark dy't om deselde debug-poarte stride, produsearje krekt deselde boadskip as in beliedsblok, en mar ien fan beide wurdt troch in firewallferoaring reparearre.
De debug-poarte fan Chrome mislearret yn deselde famylje. De browser start, it stjoerprogramma kin it DevTools-einpunt net berikke, en it berjocht neamt DevTools ynstee fan it netwurk. Ekstra startflaggen en in oerstallich stjoerprogrammabehearder feroarje hokker proses de poarte hat, en dêrom liket it fuortheljen derfan soms de VPN te reparearjen.
Reparearje de laach dy't mislearre
Reparearje de laach dy't mislearre, net de tunnel. In ûnberikbere loopback-listener hat syn listener of syn poarte korrizjearre wurde. In net-fertrout sertifikaat hat de bedriuwsroot nedich ynstallearre dêr't dy spesifike útfieromjouwing sjocht, mei de útsûndering smel holden. In filter dy't lokaal ferkear weilitte hat in spesifike tastimmingsregel nedich ynstee fan in útskeakele filter, om't útskeakeljen ek al it oare wer iepenet dat it beskerme.
De VPN op 'e nij ferbine testet gjin fan dizze lagen. It draait allinne de feroaring wer dy't se bruts, en dêrom komme deselde trije mislearrings werom nei elke werferbining en ferdwine nei elke werstart dy't de klient ynaktyf lit.