Jedna VPN krajnja tačka kroz Squid: usko CONNECT izuzeće
Dozvolite jednom odobrenom izvoru da kroz Squid dođe do jednog VPN pristupnika na portu 1194, zadržite globalne stražare portova i dokažite da se ništa drugo nije otvorilo.
Squid na CONNECT zahtjev odgovara prvom http_access linijom koja se poklapa, a ta linija može biti odbijanje. Ta jedna činjenica objašnjava zašto izuzeće za VPN krajnju tačku obično propada iz prvog pokušaja, jer zahtjev nikada ne stigne do dopuštenja koje je neko dodao na dnu. Usko rješenje zadržava postojeće stražare portova i uči ih o jednom pregledanom izvoru, odredištu i portu. Sve ostalo na proxyju ponaša se tačno kao prije.
Kako Squid odlučuje o CONNECT zahtjevu
CONNECT zahtjev imenuje host i port, a Squid prolazi kroz http_access linije po redu dok se jedna od njih ne poklopi. Poklapanje odbijanja odmah prekida procjenu i klijent dobija 403 od proxyja. Zato je položaj pravila važniji od njegove formulacije. Pomjeranje iste linije jedan korak više može potpuno promijeniti ishod.
Uobičajeni stražari odbijaju sve izvan Safe_ports i odbijaju CONNECT izvan SSL_ports. Ta imena su ACL definisani u vašoj vlastitoj konfiguraciji, pa njihov sadržaj pripada vama, a ne protokolu. Distribucija može dopustiti širok raspon portova kao Safe_ports dok zasebno ograničava CONNECT. Pročitajte žive vrijednosti prije nego što pretpostavite da je port blokiran po dizajnu.
Potvrdite da je proxy komponenta koja odbija zahtjev. 403 koji generiše Squid nimalo ne liči na TLS upozorenje s VPN servera, a spajanje dvaju u jedan problem košta prvi sat. Provjerite liniju pristupnog dnevnika za zahtjev, jer ona bilježi i radnju i pravilo koje ju je proizvelo.
Napravite jedno kombinovano poklapanje umjesto tri odvojena ACL-a
Izuzeće sagradite od tri činjenice: odobrenog raspona izvora, jedne odobrene adrese odredišta i jednog jedinog porta na kojem krajnja tačka sluša. Dva odvojena ACL-a i jedno kombinovano poklapanje daju vrlo različitu politiku, jer se procjenjuje upravo kombinacija. Kombinovanom ACL-u dajte ime po tome šta dopušta, a ne po metodi koju nosi.
Oblik ispod koristi dokumentacijske raspone koje treba zamijeniti pregledanim vrijednostima. Squid ne zadržava nijedno od tih imena, pa ih vi birate i vi ih održavate usklađenim. Ovaj recept je ograničen na Squid 6 i 7, čija dokumentovana konfiguracija podržava all-of grupu. Trenutna referenca označava te direktive kao nedostupne u Squid 8, pa ovo tretirajte kao recept vezan za verziju, a ne kao put migracije, i provjerite direktivu u referenci svoje verzije prije primjene.
acl pvpn_src src 192.0.2.128/25
acl pvpn_dst dst 198.51.100.77/32
acl pvpn_port port 1194
acl pvpn_ok all-of CONNECT pvpn_port pvpn_dst pvpn_srcall-of grupa se poklapa samo kada se poklopi svaki član, što znači da se izvor, odredište i port provjeravaju u jednoj liniji. Grupa sama po sebi ništa ne daje, a zahtjev koji se poklapa sa samo dvije od tri činjenice ne može je zadovoljiti. To svojstvo drži izuzeće uskim kada neko kasnije doda drugi pristupnik. Ili se novo odredište dodaje namjerno, ili se zahtjev vraća na originalne stražare.
Savijte stražare portova bez uklanjanja
Na svojim postojećim pozicijama dvije uobičajene stražarske linije izgledaju ovako. Obično stoje poslije autentifikacije i prije linija politike koje dopuštaju bilo šta.
http_access deny !Safe_ports
http_access deny CONNECT !SSL_portsDodajte negirano kombinovano poklapanje svakoj od njih, tako da poklapajuće izuzeće preživi stražara koji bi ga inače odbio. Mijenjaju se samo stražarske linije, i to samo za po jedan dodatni član svaka.
http_access deny CONNECT !SSL_ports !pvpn_ok
http_access deny !Safe_ports !pvpn_okČlanovi u jednoj pristupnoj liniji se kombinuju, pa linija sada odbija samo zahtjeve koji padnu i na originalnoj provjeri i na izuzeću. Zahtjev za odobrenu krajnju tačku prolazi, a svaki drugi zahtjev zadržava staro ponašanje porta. Ovo je uže od dodavanja porta na globalnu SSL_ports listu, što bi taj port dopustilo svakom odredištu. Ako port već postoji na toj listi, ovaj ACL ništa ne sužava i starije, šire dopuštenje i dalje važi za druga odredišta, pa pročitajte živu listu prije nego što tvrdite da je izuzeće otvorilo port. Ono je i reverzibilno, jer se dvije linije vraćaju u prethodni oblik. Referenca za kontrolu pristupa dokumentuje redoslijed i uobičajene stražare o kojima ova promjena zavisi.
Gdje se izuzeće ne smije postaviti
Iskušenje je staviti dopuštenje iznad stražara i završiti. Takvo postavljanje preskače i zaštite autentifikacije i lokalnog odredišta koje obično stoje pri vrhu radne konfiguracije. Rezultat nije usko izuzeće, nego rupa s komentarom iznad sebe. Svako novo dopuštenje držite na istoj pregledanoj fazi kao i ostatak klijentske politike.
Provjerite šta zahtjevu još treba nakon stražara portova. Autentifikovani račun, dopuštena adresa klijenta i politika odredišta sve vrijede i dalje, a izuzeće ne mijenja nijedno od toga. Ako vaš proxy već dopušta odobrenom računu da dosegne proizvoljna odredišta, stražar porta nikada nije bio prava kontrola.
Razmotrite je li krajnja tačka uopšte TCP. CONNECT izuzeće prenosi TCP tokove, a OpenVPN profil koji koristi UDP neće postati dostupan kroz njega. Promijenite profil na TCP samo ako server tako sluša i operator prihvata razliku u ponašanju.
Provjerite granicu parserom i stvarnim zahtjevom
Parsirajte konfiguraciju prije ponovnog učitavanja i držite drugu sesiju otvorenom dok to radite. Sintaksna greška pri učitavanju može ostaviti proxy na staroj konfiguraciji ili odbiti novu u cjelosti. Parser prijavljuje odbijenu liniju, što je više nego što će vam reći klijentska greška.
Zatim ponovo učitajte i pošaljite jedan stvarni CONNECT kroz proxy s odobrenog izvora. Pokretanje parsera dolazi prvo, jer ponovno učitavanje s greškom u kucanju ne uči vas ničemu o politici.
squid -k parse
squid -k reconfigure
curl -v -p -x http://proxy.lab.internal:3128 https://vpn.lab.internal:1194/ --max-time 5Testirajte tri slučaja: odobreni izvor i račun, neodobreni izvor i drugo odredište na istom portu. Treći slučaj dokazuje da je izuzeće usko, jer koristi port bez poklapanja odredišta. Pročitajte pristupni dnevnik za sva tri umjesto da vjerujete klijentskoj poruci. Uspješan CONNECT uspostavlja TCP tok i ništa više, pa VPN rukovanje ostaje zaseban test.