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ä.

PolkuOdotettu säännön kanssaKun se epäonnistuu
Estetty asiakas LAN-isäntäänEi vastaustaSääntö on hyväksynnän alla tai lähde ei vastaa
Estetty asiakas internetiinToimii tun0:n kauttaSääntö on liian laaja, ilman kohdeosumaa
Toinen asiakas samaan LAN-isäntäänToimiiSääntö osui useampaan kuin aiottuun isäntään
Estetty asiakas yhdyskäytävän LAN-osoitteeseenEstetty vain vastaavalla INPUT-säännölläINPUT-sääntö puuttuu
Estetty asiakas vertaisen tunneliosoitteeseenToimii edelleenclient-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.

Aiheeseen liittyvät artikkelit