Yhden OpenVPN-asiakkaan estäminen LANista tunnelia pysäyttämättä
Kiinnitä asiakkaan tunneliosoite sen sertifikaattiin, pudota sen LAN-liikenne FORWARDin alkuun ja tarkista sitten IPv6, seuratut istunnot ja uudelleenkäynnistyksen kestävyys.
Yhden asiakkaan OpenVPN-palvelimellasi on menetettävä LAN-yhteys, kun taas kaikki muut tunnelit pysyvät pystyssä. Jos etsit tätä, paras vastaus sanoo yleensä, ettei daemon pysty siihen, mikä on vain puoliksi totta: OpenVPN:ssä ei ole asiakaskohtaista palomuuria, mutta tunnelin päättävä isäntä suodattaa jo paketteja. Kaksi ratkaisevaa päätöstä ovat identiteetti, jonka estät, ja säännön sijainti. Tee ne oikein, ja muutoksesta tulee yksi rivi, jonka voit testata ja poistaa.
Kiinnitä asiakas ennen säännön kirjoittamista
OpenVPN vuokraa tunneliosoitteita poolista, joten 10.8.0.6 on istuin, ei henkilö. Kun istunto päättyy, vuokra palaa ja voidaan antaa seuraavalle yhteydelle, eli kyseistä osoitetta vastaan kirjoitettu sääntö seuraa istuinta, ei käyttäjää. Päätä siis ensin, mitä oikeastaan estät: osoite lyhyttä koetta varten vai sertifikaatti henkilölle, jonka haluat pitää ulkona.
Sido osoite sertifikaattiin luomalla tiedosto hakemistoon, jonka client-config-dir nimeää, ja anna tiedostolle täsmälleen sertifikaatin common name. Laita siihen yksi direktiivi, ifconfig-push 10.8.0.6 255.255.255.0, ja tämä asiakas säilyttää saman tunneliosoitteen uudelleenyhdistämisissä. Kaksi asetusta täytyy olla olemassa, jotta tämä vaikuttaa: client-config-dir on julistettava palvelimen kokoonpanossa, ja työnnettävän osoitteen on oltava aliverkossa, jonka palvelin voi reitittää. Jos toinen puuttuu, tiedosto jätetään huomiotta ilman virhettä, mikä tekee seuraavasta palomuuritestistä harhaanjohtavan.
Väliaikainen esto voi käyttää poolin osoitetta, kunhan tiketti kirjaa, mikä istunto piti sitä silloin.
Järjestys ratkaisee, ajetaanko pudotus
Linux-yhdyskäytävässä, joka välittää tunnelin ja LANin välillä, paketit kulkevat ketjun FORWARD läpi. Lue alla oleva komento lauseena: lisää FORWARD-ketjun alkuun, sovita liikenne, joka tulee sisään tun0-rajapinnasta, juuri siitä isännästä, osoitettuna LAN-aliverkkoon, ja pudota se.
iptables -I FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP-I on se, mikä saa säännön toimimaan. -A-valitsimella lisättynä se laskeutuu tunnelin aliverkon minkä tahansa laajan hyväksynnän alle eikä näe koskaan pakettia. Tarkista sijainti komennolla iptables -vnL FORWARD --line-numbers ja lue myös laskurit: ylhäällä oleva pudotus, joka ei laske mitään, tarkoittaa, että liikenne saapuu toista reittiä.
Yhdyskäytävän oma LAN-osoite on eri reitti. Itse laatikolle lähetetyt paketit menevät ketjuun INPUT, eivät ketjuun FORWARD, joten asiakas voi menettää LAN-isännän ja avata silti reitittimen hallintasivun. Lisää vastaava INPUT-sääntö, kun sillä on merkitystä.
Mitä suodatin ei näe
Suodatus tapahtuu, kun pakettia arvioidaan, joten vakiintunut TCP-istunto voi jatkua, kunnes se suljetaan tai nollataan. Jos eston on purettava heti, tyhjennä kyseisen lähteen seuratut vuot komennolla conntrack -D -s 10.8.0.6 sen jälkeen kun sääntö on lisätty. Jos muutaman sekunnin päällekkäisyys on hyväksyttävää, kirjaa se valinta sen sijaan että jättäisit sen implisiittiseksi. Joka tapauksessa seuraavan henkilön on tiedettävä, pysäyttääkö sääntö elävää liikennettä vai vain uudet yhteydet.
Vertaisliikenne ei koskaan kosketa isännän palomuuria. Kun client-to-client on käytössä, OpenVPN välittää nämä paketit daemonin sisällä, joten kumpikaan FORWARD tai INPUT ei näe niitä. Ainoat korjaukset ovat client-to-clientin poistaminen käytöstä tai sen hyväksyminen, että vertaiset voivat tavoittaa toisensa; iptables-sääntö ei näe sitä liikennettä.
IPv6, laiteohjelmisto ja uudelleenkäynnistyksen kestävyys
IPv4-sääntö ei kerro mitään IPv6:sta. Jos tunneli ja LAN kantavat molemmat perheet, vastaavan säännön on oltava ip6tables-työkalussa tai nftables-sääntöjoukossa, joka omistaa käytännön kyseisellä isännällä. Reitittimen laiteohjelmisto piilottaa netfilterin usein oman abstraktionsa taakse, joten foorumilta kopioitu syntaksi ja taulukoiden nimet eivät välttämättä päde.
OpenWrt:ssä dokumentoitu polku on palomuurin kokoonpanomerkintä eikä käsin kirjoitettu iptables-rivi, ja käsin kirjoitettu rivi voi kadota, kun palomuuri latautuu uudelleen. Muut jakelut palauttavat säännöt netfilter-persistent-työkalun, käynnistysyksikön tai toimittajan varaston kautta, eivätkä nämä mekanismit ole vaihdettavissa. Todista valitsemasi uudelleenkäynnistyksellä, koska uudelleenlataus harjoittaa eri polkua.
Tarkista poluittain ja peru sitten puhtaasti
Testaa jokainen polku erikseen, koska yksi onnistunut tarkistus kätkee muut. Estetyn asiakkaan pitäisi yhä tavoittaa internet tunnelin kautta mutta epäonnistua LAN-isäntää vastaan, toisen asiakkaan pitäisi tavoittaa sama isäntä, ja yhdyskäytävän osoite ja vertaispolku tarvitsevat kumpikin oman havainnointinsa. Kirjoita tulokset säännön viereen, jotta seuraavalla muutoksella on lähtötaso. Alla oleva taulukko on joukko, joka kannattaa pitää tiketissä.
| Polku | Odotettu säännön kanssa | Kun se epäonnistuu |
|---|---|---|
| Estetty asiakas LAN-isäntään | Ei vastausta | Sääntö on hyväksynnän alla tai lähde ei vastaa |
| Estetty asiakas internetiin | Toimii tun0:n kautta | Sääntö on liian laaja, ilman kohdeosumaa |
| Toinen asiakas samaan LAN-isäntään | Toimii | Sääntö osui useampaan kuin aiottuun isäntään |
| Estetty asiakas yhdyskäytävän LAN-osoitteeseen | Estetty vain vastaavalla INPUT-säännöllä | INPUT-sääntö puuttuu |
| Estetty asiakas vertaisen tunneliosoitteeseen | Toimii edelleen | client-to-client on käytössä ja palomuurin ulottumattomissa |
Peruutus on määrityksen mukainen poisto, ei flush: iptables -D FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP poistaa täsmälleen sen merkinnän ja jättää ketjun muun osan koskemattomaksi. Poista sama rivi mistä tahansa tiedostosta, joka palauttaa säännöt käynnistyksessä, lataa se uudelleen ja varmista, että asiakas tavoittaa taas LAN-isännän. FORWARD-ketjun flush kumoaisi myös sääntöjä, joita et kirjoittanut, mikä muuttaa peruutuksen toiseksi tapaukseksi.
Ennen tiketin sulkemista varmista kolme asiaa: kiinnitetty osoite vastaa sertifikaattia, sääntö on hyväksyntöjen yläpuolella ja laskuri ei ole nolla, ja pysyvyystiedosto sisältää saman säännön, jonka testasit. Jos jokin näistä puuttuu, esto on shell-istunnon illuusio.