Estä VPN-asiakkaita saavuttamasta toisiaan tunnelissa
Palvelun saavuttaminen on reitti, toisen asiakkaan saavuttaminen on käytäntö. Etsi edelleenlähetyspiste, joka päättää vertaisten liikenteestä, ja todista kielto asiakkaalta.
Kaksi asiakasta voi molempi avata hyppypalvelimen ja silti heillä ei ole mitään asiaa avata toisiaan. Palvelun saavuttaminen on edelleenlähetyspäätös, kun taas vertaisen saavuttaminen on käytäntöpäätös, ja useimmat VPN-pinot pitävät ne erillisissä objekteissa. Mikään, mitä määrität ensimmäistä varten, ei pane toista täytäntöön. Tehtävä ei siis ole säännön lisääminen vaan sen objektin löytäminen, joka päättää vertaisten liikenteestä tällä palvelimella, kiellon kirjoittaminen sinne ja sen todistaminen asiakkaalta.
Reitti jaettuun palveluun ei ole lupa vertaisten välillä
Asiakkaiden aliverkon mainostaminen kertoo vertaiselle, miten paketti laitetaan johdolle toisen asiakkaan osoitetta kohti. Se, toimitetaanko paketti, ratkeaa jälkeenpäin sen mukaan, mikä sen edelleenlähettää. Linux-yhdyskäytävässä se on FORWARD-ketju; käyttäjäavaruuden taustapalvelussa se on tunnelin oma istuntotaulu. Reitti vastaa saavutettavuuteen ja jättää luvan koskemattomaksi.
Siksi eristystarkistus, joka lukee vain reittejä, ei todista mitään. /24 voidaan työntää jokaiselle asiakkaalle, kun taas jokainen vertaisten välinen paketti pudotetaan edelleenlähetyskoukussa. Vaarallinen tapaus on päinvastainen: ei selvää sääntöä, salliva oletusarvo ja eristys, joka on olemassa vain siksi, ettei kukaan testannut sitä.
Kirjoita vaatimus yhdelle riville ennen kuin avaat päätteen. Saavuta palvelulohko ja hyppypalvelin, älä saavuta mitään muuta asiakaslohkon sisällä.
Selvitä, kuka todella edelleenlähettää vertaisen paketin
Kaksi palvelimen käyttäytymistä näyttävät asiakkaan puolelta samalta ja vaativat eri säännöt. Joko ydin edelleenlähettää paketin uudelleen tunnelin liitännästä, tai taustapalvelu kopioi sen istuntojen välillä eikä ydin näe sitä koskaan.
WireGuard kuuluu ensimmäiseen ryhmään: siinä ei ole vertaisten välistä kytkintä, joten paketti osoitteesta 10.8.0.4 osoitteeseen 10.8.0.5 saapuu wg0:lle, osuu edelleenlähetyskoukkuun ja reititetään uudelleen ulos wg0:sta, kun AllowedIPs kattaa molemmat osoitteet. OpenVPN on toinen ryhmä heti, kun client-to-client on asetettu palvelimen kokoonpanoon, koska se direktiivi ojentaa paketin istuntojen välillä käyttäjäavaruudessa. Tarkista ladatusta kokoonpanosta tuo direktiivi ennen kuin kirjoitat mitään. Ydinsääntöä, joka ei näe liikennettä koskaan, ei voi erottaa toimivasta säännöstä, ja juuri niin käyttöönotto päätyy ilman mitään eristystä.
Lue tehokas kokoonpano sen sijaan, että luottaisit tiedostoon, jonka oletat olevan ladattu, koska jakelupaketit tuovat omat sisällytyksensä. Jos taustapalvelu edelleenlähettää, kielto kuuluu sen omiin asiakaskohtaisiin ohjaimiin, ja isännän palomuuri suodattaa vain isännälle osoitettua liikennettä. Jos ydin edelleenlähettää, edelleenlähetyskoukku on ainoa paikka, jolla on merkitystä.
Reititetyt ja käännetyt käyttöönotot tarvitsevat vielä yhden tarkistuksen: lähde, jonka kaukainen asiakas näkee, ei ehkä ole se, jota odotat. Silloin asiakkaiden aliverkkoon osuva sääntö ei osu mihinkään. Merkitse osoite, joka selviää käännöksestä, ennen kuin kirjoitat vastaavuuden, ja suosi liitäntäparin sovittamista NAT-osoitteiden arvaamisen sijaan.
Anna jokaiselle osoitteelle identiteetti, jonka voi perua yksinään
Eristys romahtaa heti, kun kaksi laitetta jakaa yhden tunnistetiedon. Siihen identiteettiin sidottu sääntö ei voi erottaa niitä, ja kadonneen kannettavan peruuttaminen peruuttaa koko ryhmän. Laitekohtaiset varmenteet tai vertainekohtaiset avaimet pitävät peruuttamisen paikallisena ja käytännön luettavana, koska jokainen osoite vastaa täsmälleen yhtä henkilöä tai konetta. Jos suunnittelu ei pysty siihen, sano se käyttöohjeessa sen sijaan, että kuvailisit säännön hienojakoiseksi.
Osoitteiden jakamisen on oltava käytännön mukainen. Varaa lohko palveluille, lohko asiakkaille ja jaa asiakkaiden osoitteet hallitsemastasi altaasta etkä ensimmäisenä tulevan alueesta. Jos palvelin kääntää tai siltaa, pidä kuvautustaulu kokoonpanon vieressä, koska juuri sitä seuraava lukija tarvitsee säännön johtamiseen uudelleen.
Aseta kielto sinne, missä paketti ylittää tunnelin
Yhdyskäytävässä, joka edelleenlähettää WireGuard-liikennettä, tapauksen kattaa kaksi sääntöä: salli palvelulohko ja pudota sitten asiakaslohkon loppu. Liitäntäpari on yhtä tärkeä kuin osoitteet, koska vain kohdeosoitteeseen osuva vastaavuus nappaa myös LAN:sta tulevan liikenteen. Lataa ne siinä järjestyksessä, että lupa arvioidaan ensin.
nftablesissa pari menee olemassa olevaan inet filter -tauluun, lupa ensin ja pudotus toisena. Molemmat vastaavuudet kiinnittävät liitäntäparin sekä osoitteet.
nft add rule inet filter forward iifname "wg0" oifname "wg0" ip saddr 10.8.0.0/24 ip daddr 10.8.2.0/24 accept
nft add rule inet filter forward iifname "wg0" oifname "wg0" ip saddr 10.8.0.0/24 ip daddr 10.8.0.0/24 drop
Lue ketju takaisin lataamisen jälkeen sen sijaan, että luottaisit poistumistilaan, ja varmista, että molemmat säännöt ovat tarkoittamassasi järjestyksessä. Lisää vastaavat ip6-säännöt IPv6-altaalle, muuten v4-pari on vain koriste kaksipinosta tunnelissa. Jos palvelimella on jo salliva edelleenlähetyskäytäntö, lisää pudotus sen sijaan, että korvaisit ketjun kokonaan.
Kun client-to-client on käytössä OpenVPN:ssa, nämä edelleenlähetyssäännöt eivät koskaan osu vertaisten liikenteeseen ja kiellon on elettävä taustapalvelun omissa ohjaimissa. Pidä ydinsäännöt isännälle osoitetulle liikenteelle, mutta älä laske niitä eristyksen ohjaimeksi.
Todista kielto asiakkaalta, älä palvelimelta
Testaaminen yhdyskäytävältä ei todista mitään, koska paikallisesti syntynyt liikenne ottaa lähtöpolun eikä koskaan ylitä edelleenlähetyskoukkua. Käytä kahta oikeaa asiakasta: yhtä, jonka pitäisi saavuttaa palvelu, ja yhtä, joka pitäisi hylätä. Aja sallittu tapaus ensin, jotta rikkinäistä tunnelia ei luulla toimivaksi käytännöksi.
Varmista sallitulta asiakkaalta, että palvelu vastaa portillaan. Yritä samalta asiakkaalta vertaisen osoitetta ja odota hiljaista pudotusta hylkäyksen sijaan:
ping -c 3 -W 2 10.8.0.5
nc -z -w 2 10.8.0.5 22
nft list chain inet filter forward
iptables -vnL FORWARD
ping -6 -c 3 -W 2 fd00:8::5
Pudotettu paketti ja offline-vertainen näyttävät molemmat aikakatkaisulta, joten tarkista laskurit ennen kuin päättelet mitään. Varmista, että pudotussäännön laskuri kasvaa, kun vertainen on todistettavasti ylhäällä. Toista IPv6:n yli, missä puuttuva ip6-sääntö jättää v4-kiellon näyttämään tehokkaalta. Kirjaa hyväksytyt ja hylätyt tulokset käyttöohjeeseen päivämäärän kanssa, koska seuraava migraatio johtaa säännön uudelleen.