Dve imeni DNS, ena vrata OpenVPN: kaj v resnici izbere
Dve imeni gostitelja, ki kažeta na en naslov, vseeno prideta do enega poslušalca. Samo polje, ki ga pošlje odjemalec, lahko izbere backend, in običajni OpenVPN ne pošlje nobenega.
Dva zapisa A, en naslov, en demon: ne glede na to, katero ime vnese uporabnik, je prispeli paket enak, proces, vezan na vrata 1194, pa nima s čim ločiti obeh. To ni napačna konfiguracija, ki čaka na popravek; to je meja tega, kar lahko izrazi iskanje po imenu. Vse, kar izbira med dvema primeroma OpenVPN, mora biti vrednost, ki jo odjemalec vstavi v povezavo in jo sprednji del lahko prebere nazaj, običajni odjemalec OpenVPN pa takšne vrednosti ne vstavi odkrito. Sledi, kam vas to pripelje in katere ureditve promet resnično ločijo.
Začnite s tem, kar vrne razreševalnik
Odjemalec vpraša za vpn-a.example in prejme naslov; ta naslov plus vrata so vse, kar kliče. Ime se porabi lokalno, med iskanjem, in nikoli ne postane polje na žici, zato poslušalec na drugi strani ne more videti, katera oznaka je bila uporabljena. Usmerite vpn-a.example in vpn-b.example na istega gostitelja in oba iskanja dasta isti cilj, zato demon obe povezavi vpije v eno instanco, ne da bi zabeležil razliko. Profili, ki temeljijo na naslovu, se obnašajo povsem enako kot tisti, ki temeljijo na imenu, iz istega razloga.
To tudi zapre družino vabljivih obhodov: dodatni vzdevki, izbira potrdila za vsako ime na enem vtičniku ali pravilo požarnega zidu, vezano na poizvedovano ime. Nobeno od tega ne more delovati na podatke, ki so bili že zavrženi, preden je prvi paket zapustil odjemalca. Če morata dva strežnika ostati ločena, mora ločitev potovati skupaj s samo povezavo, torej naslov, vrata ali polje koristnega tovora, ki ga določi protokol.
Edini izbirnik, ki šteje, vozi znotraj paketa
HTTP to rešuje z glavo Host, TLS pa z razširitvijo imena strežnika v ClientHello, in tako en naslov streže številnim mestom za enim poslušalcem. Oba delujeta zato, ker protokol na žici nosi zahtevo za določeno storitev. Pomembno dejstvo o OpenVPN je, da nobenega od teh polj ni na plasti, ki jo pregleda vmesna škatla.
V običajni ureditvi se rokovanje TLS, ki ščiti krmilni kanal, zgodi po vzpostavitvi zunanje seje in se prenaša znotraj nje, zato poslušalec, ki te seje ni končal, vidi neprozoren tok. Še vedno lahko reče, da je to OpenVPN, ker sta opkoda in okvirjanje v prvih bajtih prepoznavna, vendar ime strežnika, če obstaja, sedi v šifriranem delu. Zasnova, ki pričakuje branje navideznega gostitelja iz zunanjega paketa, bere polje, ki ga protokol tja nikoli ne zapiše. To izhaja iz tega, kako je tunel zgrajen, ne iz vrzeli, ki bi jo lahko zaprlo spretnejše ujemanje vzorcev.
Kje se delilec protokolov ustavi
Multiplekser tiste vrste, ki jo dokumentira projekt sslh, posluša na enih vratih, pregleda prve bajte in preda povezavo tistemu backendu, ki govori prepoznani protokol. To je resnična vrednost, ko morajo ena vrata hkrati streči SSH, HTTPS in OpenVPN.
sslh ima ločeno sondo za vsak protokol, njegova sonda TLS pa lahko izvleče ime strežnika ali vrednost ALPN iz pristnega ClientHello. Prepoznavanje običajnega OpenVPN je druga razvrstitev kot branje razširitve TLS in obe se ne sestavljata, ker odjemalec, ki nikoli ne pošlje ClientHello na poslušajoči vtičnik, pusti sondo brez česa brati. Zato pravilo, ki se ujema z OpenVPN, odgovori »to je odjemalec OpenVPN« in ne gre dlje. Dva backenda OpenVPN za tem pravilom sta nerazločljiva, sprednji del nima podlage za izbiro in vsaka seja pristane na istem mestu. Multipleksiranje si deli ena vrata med različnimi storitvami; ne izvaja navideznega gostovanja znotraj ene storitve.
Ureditve, ki resnično ločijo dva strežnika
Najcenejša poštena ločitev je drugi javni naslov, eden na primer, in obstoječi profili že nosijo potrebno, ker kažejo na različne naslove. Naslednja so druga vrata na istem naslovu, kar ne stane nič razen številke v vsakem profilu. TCP in UDP vodita ločeni tabeli vrat, zato sta 1194/tcp in 1194/udp nepovezana vtičnika in po eden od vsakega lahko obstaja na istem gostitelju; to je ločevanje prevoza, ne usmerjanje po imenu, in pogosto se zamenjuje z njim. Obe možnosti prestaneta pregled požarnega zidu, ker se pravilo ujema z nečim, kar paket resnično vsebuje.
Če meja, ki jo potrebujete, poteka med skupinami uporabnikov in ne med dvema izvedbama, jo lahko pokrije ena instanca z različnimi konfiguracijami odjemalcev, lastnim ravnanjem s potrdili in izrecno politiko dostopa. To kupi politiko znotraj strežnika, ne izolacije med strežniki, in to so različne zahteve. Izolacija, ki mora zdržati pod kompromitacijo, še vedno potrebuje naslov ali rob požarnega zidu.
Zaključevalnik TLS, postavljen pred OpenVPN, lahko sposobnemu sprednjemu delu razkrije pravo ime strežnika, vendar le, ko je tudi odjemalska stran nastavljena za to dodatno plast. Obstoječi profili tega vedenja ne pridobijo samo z usmeritvijo na isti naslov.
Dokažite izbirnik, preden gradite
Imenujte polje, ki bo prepoznalo backend, nato potrdite, da ga odjemalec resnično pošlje; če je odgovor naslov, načrt drži, in če je ime strežnika znotraj rokovanja, ki nikoli ne doseže poslušalca, nobeno delo z DNS tega ne reši. Trije ukazi hitro odločijo o poslušajoči strani.
ss -lntup | grep -E ':443|:1194'
openssl s_client -connect vpn-a.example:443 -servername vpn-a.example </dev/null | head -n 20
journalctl -u openvpn-server@server-a -n 20 --no-pager
Vrstica openssl da potrdilo le tam, kjer nekaj na tem naslovu konča TLS; proti običajnemu poslušalcu OpenVPN se zatakne ali spodleti, in to je samo po sebi odgovor na to, kaj razkriva zunanja plast. Vrstica journal, prebrana na vsakem backendu, pokaže, katera instanca je sprejela sejo. Dnevniki sprednjega dela zapisujejo, kaj je bilo razvrščeno, in nikoli tega, kar je bilo mišljeno, zato backend ostaja edini organ glede tega, kje je uporabnik pristal.
Končajte z dvema profiloma, namenjenima doseganju različnih strežnikov, povežite ju enega za drugim in zabeležite dnevnik backend-a za vsakega. Če se obe seji pojavita v istem dnevniku, izbirnik manjka, namesto da bi bil napačno nastavljen, in popravek je naslov ali vrata, ki jih odjemalec lahko cilja. Urejanje pravila usmerjanja ne bo pomagalo, ker pravilu nikoli ni bilo dano nič, po čemer bi usmerjalo. Ko je ločitev resnična, jo zapišite ob profile, da naslednja oseba ne doda drugega vzdevka in ne pričakuje, da bo opravil delo.