OpenVPNin pull-filter osuu muuhunkin kuin tarkoitettuun reittiin
pull-filter vertaa tekstiäsi etuliitteenä työnnettyihin asetuksiin, joten route nappaa myös route-gatewayn ja route-ipv6:n. Tarkista ensin verbit ja sitten reitit.
Lisäät yhden rivin säilyttääksesi paikallisen oletusreittisi, ja sen jälkeen tunneli ei enää tavoita sisäistä DNS-palvelinta. Rivi oli pull-filter ignore "route", mikä ei tarkoita "jätä tämä reitti huomiotta". Se tarkoittaa "pudota jokainen työnnetty asetus, jonka teksti alkaa noilla viidellä kirjaimella", ja tavallisella palvelimella se kattaa route-gateway, route-metric ja route-ipv6 itse reittien ohella. Alla oleva tarkistuslista on se, minkä käyn läpi ennen kuin kosken profiiliin, jota jonkun muun on käytettävä.
Suodatin vaikuttaa vain työnnettyihin asetuksiin
pull-filter vaikuttaa vain niihin asetusriveihin, jotka palvelin lähettää tunnelin muodostamisen jälkeen, eikä mihinkään muuhun. Paikalliseen tiedostoon kirjoitetut asetukset eivät siitä muutu, eikä sovellusten liikenne. Jos toivoit estäväsi prosessia käyttämästä tunnelia, tämä on täysin väärä työkalu eikä mikään suodatinyhdistelmä tee sitä.
Tämä laajuus on hyödyllinen, koska se tarkoittaa, että voit jättää palvelimen kokoonpanon rauhaan ja silti hylätä osan siitä paikallisesti. Se on myös rajoitus, joka kannattaa kirjata tikettiin: suodatin muuttaa sitä, mitä tämä asiakas hyväksyy, ei sitä, mitä palvelin tarjoaa. Sillä ei ole vaikutusta saman profiilin muihin käyttäjiin. Se ei myöskään säily siirryttäessä toiseen asiakasohjelmaan, joka ei toteuta asetusta, ja se kannattaa tietää ennen kuin rakentaa työnkulun sen varaan.
Vahvista, mitä palvelin todella lähettää, ennen kuin kirjoitat kuvion. Korkealla yksityiskohtaisuudella asiakas tulostaa vastaanottamansa työnnettyjen asetusten merkkijonon, ja se on ainoa rehellinen lähde tarkalle tekstille, johon vertaat:
sudo openvpn --config /etc/openvpn/corp.ovpn --verb 4
sudo grep -n 'pull-filter' /etc/openvpn/corp.ovpn
Lue työnnetty rivi luettelona pilkuilla erotetuista asetuksista ja huomaa, että asetusten nimet ja niiden argumentit erotetaan välilyönneillä. Suodatintekstiäsi verrataan tähän virtaan, siksi välilyönneillä on seuraavassa vaiheessa niin suuri merkitys.
Osuminen on etuliite, joten välilyönnit ratkaisevat kaiken
Vertailu on merkkijonon etuliite, ei jäsennetty asetuksen nimi. Siksi "route" osuu myös muotoihin route-gateway 10.8.0.1, route-ipv6 2001:db8::/32 ja route-metric 100. Yksi välilyönti lopussa kaventaa sen perheeseen, jota todennäköisesti tarkoitit, ja täysi etuliite kaventaa sen edelleen tiettyyn kohteeseen.
| Filter text | What it actually matches | Typical outcome |
|---|---|---|
"route" | Every option beginning with those letters | Routes, gateway, metric and IPv6 routes all dropped |
"route " | Route entries only, not the hyphenated siblings | The routes go, the rest survives |
"route 10.60." | A single destination range | The narrowest rule, and the easiest to audit |
"dhcp-option DNS" | Pushed DNS settings | Resolver stays local, internal names stop resolving |
Viimeinen rivi on se, joka nappaa ihmiset jaetun tunnelin työssä. Oman resolverin pitäminen on laillinen valinta, ja se tarkoittaa, että jokainen sisäinen nimi riippuu nyt resolverista, joka ei näe yksityistä vyöhykettä. Se on seuraus, joka hyväksytään tarkoituksella, ei sivutuote, joka löydetään tuotannossa.
Etuliiteosumointi tarkoittaa myös sitä, että sääntö voi myöhemmin hiljaa laajentua. Kun palvelin lisää uuden asetuksen, joka alkaa tekstilläsi, suodattimesi alkaa soveltua siihen kenenkään muokkaamatta profiiliasi. Se on se vikatila, jota vastaan on suunniteltava, ja lievennys on sovittaa mahdollisimman suuri osa asetuksesta, ei mahdollisimman pieni.
Kolme verbiä, kolme eri lopputulosta
accept, ignore ja reject eivät ole saman idean kolme kirjoitusasua. Ne eroavat siinä, mitä asiakas tekee osumalla, ja siinä, saako kukaan sitä selville.
ignore pudottaa osuvan asetuksen hiljaa, mitä haluat asetukselle, jonka olet tarkoituksella korvannut. reject pudottaa sen ja panee asiakkaan valittamaan, mitä haluat, kun sen puuttumisen pitää näkyä lokissa eikä paljastua myöhemmin. accept on myönteinen muoto, jota käytetään rakennettaessa sallittujen luetteloa yksittäisten asetusten poistamisen sijaan.
Käytitpä mitä verbiä tahansa, suodattimet sovelletaan siinä järjestyksessä kuin ne esiintyvät, joten kaksi päällekkäistä sääntöä tuottaa järjestyksestä riippuvan tuloksen, jota on hyvin vaikea tarkistaa. Pidä yksi sääntö per tarkoitus ja laita kuhunkin tarkin teksti. Jos tarvitset sallittujen luettelon, suosi muutamaa accept-sääntöä sen sijaan, että kasaisit joukon ignore-sääntöjä, jotka summautuvat samaan. Silloin arvioijat voivat lukea tiedoston ylhäältä alas ja ennustaa tuloksen, ja se on ainoa testi, joka skaalautuu.
Tarkista käytössä oleva reitti ja resolver, älä profiilia
Tiedostossa oikealta näyttävä suodatin voi silti jättää sinut tunneliin, joka ei reititä mitään hyödyllistä. Varmista vaikutus käynnissä olevassa järjestelmässä, jossa työnnetyt asetukset on jo otettu käyttöön tai pudotettu:
ip route show default
ip route show | grep -c 'proto static'
resolvectl status | grep -A4 'Link.*tun0'
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://intranet.example.internal/
Kaksi ensimmäistä riviä kertovat sinulle saapuiko työnnetty oletusreitti ja kuinka monta staattista merkintää selvisi. Resolver-kysely näyttää, mitä palvelinta tunnelin rajapinta todella käyttää, ja siinä yleensä DNS-yllätys ilmenee. Viimeinen rivi vastaa ainoaan kysymykseen, jolla on käyttäjälle merkitystä.
Testaa molemmat suunnat, kun olet siellä. Sääntö, joka pitää paikallisen internetyhteytesi toiminnassa mutta rikkoo hiljaa sisäisen nimien ratkaisun, läpäisee pintapuolisen tarkistuksen ja epäonnistuu ensimmäisessä todellisessa tehtävässä, joten ota samaan testiin yksi sisäinen resurssi ja yksi julkinen sivusto.
Kirjaa poikkeus ja kuka sen omistaa
Suodatin on poikkeus operaattorin suunnittelusta, joten kirjaa se syyn ja tarkistuspisteen kanssa. "Jättää työnnetyt reitit huomiotta pitääkseen paikallisen oletuksen" on tarkistettavissa; pelkkä rivi profiilissa ei ole, ja seuraava ihminen poistaa sen tai laajentaa sitä arvaillen.
Versiollakin on tässä merkitystä. Osumiskäyttäytymistä ja täsmällistä hyväksyttyä syntaksia on hiottu OpenVPN 2.4:n, 2.5:n ja 2.6:n aikana, joten vahvista kuvio sen buildin käsikirjasta, jonka toimitat, älä vanhemmasta versiosta kertovasta foorumiviestistä. OpenVPN 2.6:n käsikirja dokumentoi asetuksen ja sen osumasäännön.
Lopuksi sovi poikkeuksesta sen kanssa, joka ylläpitää palvelinta. Asiakaspuolen suodatin, joka on ristiriidassa tarkoituksellisen palvelinkäytännön kanssa, on tukitapaus, joka odottaa seuraavaa auditointia, ja se on paljon halvempaa sopia ennen kuin profiili lähtee kuin sen jälkeen, kun joku huomaa reittien puuttuvan.