Yksi VPN-päätepiste Squidin kautta: kapea CONNECT-poikkeus
Salli yhden hyväksytyn lähteen saavuttaa yksi VPN-yhdyskäytävä portissa 1194 Squidin kautta, säilytä globaalit porttivartijat ja todista, ettei muuta avattu.
Squid vastaa CONNECT-pyyntöön ensimmäisellä http_access-rivillä, joka täsmää, ja se rivi voi olla hylkäys. Tämä yksi tosiasia selittää, miksi VPN-päätepisteen poikkeus yleensä epäonnistuu ensimmäisellä yrityksellä, koska pyyntö ei koskaan saavuta lupaa, jonka joku lisäsi loppuun. Kapea korjaus säilyttää olemassa olevat porttivartijat ja opettaa niille yhden tarkastetun lähteen, kohteen ja portin. Kaikki muu välityspalvelimella käyttäytyy täsmälleen kuten ennen.
Miten Squid päättää CONNECT-pyynnöstä
CONNECT-pyyntö nimeää isäntänimen ja portin, ja Squid käy http_access-rivit läpi järjestyksessä, kunnes yksi niistä täsmää. Täsmäävä hylkäys lopettaa arvioinnin heti ja asiakas saa välityspalvelimelta 403. Siksi säännön sijainti merkitsee enemmän kuin sen sanamuoto. Saman rivin siirtäminen yhden askeleen ylöspäin voi muuttaa tuloksen täysin.
Tavanomaiset vartijat hylkäävät kaiken Safe_portsin ulkopuolelta ja hylkäävät CONNECTin SSL_portsin ulkopuolelta. Nämä nimet ovat ACL:iä, jotka on määritelty omassa kokoonpanossasi, joten niiden sisältö kuuluu sinulle eikä protokollalle. Jakelu voi sallia laajan porttivalikoiman Safe_portsina ja rajoittaa CONNECTia erikseen. Lue elävät arvot ennen kuin oletat, että portti on estetty suunnittelun vuoksi.
Varmista, että välityspalvelin on se komponentti, joka hylkää pyynnön. Squidin tuottama 403 ei muistuta lainkaan VPN-palvelimen TLS-varoitusta, ja kahden sulauttaminen yhdeksi ongelmaksi maksaa ensimmäisen tunnin. Tarkista pyynnön lokirivi, koska se kirjaa sekä toiminnon että sen tuottaneen säännön.
Rakenna yksi yhdistetty täsmäytys kolmen irrallisen ACL:n sijaan
Rakenna poikkeus kolmesta tosiasiasta: hyväksytty lähdealue, yksi hyväksytty kohdeosoite ja ainoa portti, jossa päätepiste kuuntelee. Kaksi irrallista ACL:ää ja yksi yhdistetty täsmäytys tuottavat hyvin erilaisen käytännön, koska arvioitava asia on yhdistelmä. Nimeä yhdistetty ACL sen mukaan, mitä se sallii, ei sen metodin mukaan, jota se kantaa.
Alla oleva muoto käyttää dokumentaatioalueita, jotka on korvattava tarkastetuilla arvoilla. Squid ei varaa itselleen mitään näistä nimistä, joten ne ovat sinun valittaviasi ja sinun pidettäviäsi johdonmukaisina. Tämä ohje on rajattu Squidiin 6 ja 7, joiden dokumentoitu kokoonpano tukee all-of-ryhmää. Nykyinen viite merkitsee kyseiset direktiivit Squidissa 8 saatavilla olemattomiksi, joten pidä tätä versiosidonnaisena ohjeena äläkä siirtymispolkuna, ja tarkista direktiivi oman julkaisusi viitteestä ennen sen soveltamista.
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-ryhmä täsmää vain, kun jokainen jäsen täsmää, eli lähde, kohde ja portti tarkistetaan yhdellä rivillä. Ryhmä ei itsessään myönnä mitään, eikä pyyntö, joka täsmää vain kahteen kolmesta tosiasiasta, voi täyttää sitä. Tämä ominaisuus pitää poikkeuksen kapeana, kun joku myöhemmin lisää toisen yhdyskäytävän. Joko uusi kohde lisätään tarkoituksella tai pyyntö palaa alkuperäisiin vartijoihin.
Taivuta porttivartijoita poistamatta niitä
Nykyisillä paikoillaan kaksi tavanomaista vartijariviä näyttävät tältä. Ne ovat yleensä todennuksen jälkeen ja ennen käytäntörivejä, jotka sallivat kaiken.
http_access deny !Safe_ports
http_access deny CONNECT !SSL_portsLisää kielletty yhdistetty täsmäytys kumpaankin, jotta täsmäävä poikkeus selviää vartijasta, joka muuten hylkäisi sen. Vain vartijarivit muuttuvat, ja kumpikin vain yhden lisätermin verran.
http_access deny CONNECT !SSL_ports !pvpn_ok
http_access deny !Safe_ports !pvpn_okYhden käyttörivin termit yhdistetään, joten rivi hylkää nyt vain pyynnöt, jotka epäonnistuvat sekä alkuperäisessä tarkistuksessa että poikkeuksessa. Hyväksytyn päätepisteen pyyntö menee läpi ja jokainen muu pyyntö säilyttää vanhan porttikäyttäytymisen. Tämä on kapeampi kuin portin lisääminen globaaliin SSL_ports-luetteloon, mikä sallisi kyseisen portin jokaiselle kohteelle. Jos portti on jo tuossa luettelossa, tämä ACL ei kavenna mitään ja vanhempi, laajempi lupa pätee edelleen muihin kohteisiin, joten lue elävä luettelo ennen kuin väität poikkeuksen avanneen portin. Se on myös peruttavissa, koska kaksi riviä palaa aiempaan muotoonsa. Pääsynvalvonnan viite dokumentoi järjestyksen ja tavanomaiset vartijat, joista tämä muutos riippuu.
Mihin poikkeusta ei saa sijoittaa
Kiusaus on laittaa lupa vartijoiden yläpuolelle ja lopettaa. Tämä sijoitus ohittaa myös todennuksen ja paikallisen kohteen suojaukset, jotka yleensä ovat toimivan kokoonpanon yläosassa. Tuloksena ei ole kapea poikkeus, vaan reikä, jonka yläpuolella on kommentti. Pidä mikä tahansa uusi lupa samassa tarkastetussa vaiheessa kuin muu asiakaskäytäntö.
Tarkista, mitä pyyntö vielä tarvitsee porttivartijoiden jälkeen. Todennettu tili, sallittu asiakasosoite ja kohdekäytäntö pätevät edelleen, eikä poikkeus muuta mitään niistä. Jos välityspalvelimesi jo sallii hyväksytyn tilin saavuttaa mielivaltaisia kohteita, porttivartija ei koskaan ollut varsinainen valvonta.
Pohdi, onko päätepiste ylipäätään TCP. CONNECT-poikkeus kuljettaa TCP-virtoja, eikä UDP:tä käyttävä OpenVPN-profiili tule sen kautta saavutettavaksi. Vaihda profiili TCP:ksi vain, jos palvelin kuuntelee niin ja operaattori hyväksyy käyttäytymiseron.
Tarkista raja jäsentimellä ja oikealla pyynnöllä
Jäsennä kokoonpano ennen uudelleenlatausta ja pidä toinen istunto auki sen aikana. Syntaksivirhe uudelleenlatauksessa voi jättää välityspalvelimen vanhaan kokoonpanoon tai hylätä uuden kokonaan. Jäsennin ilmoittaa hylätyn rivin, mikä on enemmän kuin asiakasvirhe kertoo sinulle.
Lataa sitten uudelleen ja lähetä yksi oikea CONNECT välityspalvelimen kautta hyväksytystä lähteestä. Jäsentimen ajo tulee ensin, koska kirjoitusvirheellinen uudelleenlataus ei opeta sinulle käytännöstä mitään.
squid -k parse
squid -k reconfigure
curl -v -p -x http://proxy.lab.internal:3128 https://vpn.lab.internal:1194/ --max-time 5Testaa kolme tapausta: hyväksytty lähde ja tili, hyväksymätön lähde ja eri kohde samassa portissa. Kolmas tapaus todistaa poikkeuksen kapeaksi, koska se käyttää porttia ilman kohdetäsmäytystä. Lue loki kaikkien kolmen osalta sen sijaan, että luottaisit asiakkaan viestiin. Onnistunut CONNECT muodostaa TCP-virran eikä mitään muuta, joten VPN-kättely jää erilliseksi testiksi.