Twee kliënte kan albei die spronggasheer oopmaak en steeds geen rede hê om mekaar oop te maak nie. Om 'n diens te bereik is 'n deurstuur-beslissing, terwyl om 'n eweknie te bereik 'n beleidsbeslissing is, en die meeste VPN-stapels hou dié in aparte objekte. Niks wat jy vir die eerste een instel, dwing die tweede af nie. Die taak is dus nie om 'n reël by te voeg nie, maar om die objek te vind wat eweknie-verkeer op hierdie bediener bepaal, die weiering daar te skryf en dit vanaf 'n kliënt te bewys.

'n Roete na die gedeelde diens is nie 'n permit tussen eweknieë nie

Om die kliënt-subnet te adverteer, vertel 'n eweknie hoe om 'n pakket op die draad te plaas na 'n ander kliëntadres. Of daardie pakket afgelewer word, word daarna beslis deur wat dit ook al deurstuur. Op 'n Linux-deurlaat is dit die FORWARD-ketting; binne 'n gebruikerspasie-daemon is dit die tonnel se eie sessietabel. 'n Roete beantwoord bereikbaarheid en laat toestemming ongemoeid.

Daarom bewys 'n isolasietoets wat net roetes lees niks. 'n /24 kan na elke kliënt gestuur word terwyl elke eweknie-tot-eweknie-pakket by die deurstuurhaak laat val word. Die gevaarlike geval is die omgekeerde: geen eksplisiete reël nie, 'n toegeeflike verstek, en isolasie wat net bestaan omdat niemand dit getoets het nie.

Skryf die vereiste as een reël voordat jy 'n terminale oopmaak. Bereik die diensblok en die spronggasheer, bereik niks anders binne die kliëntblok nie.

Vind uit wie die eweknie-pakket werklik deurstuur

Twee bedienergedrag lyk van die kliëntkant dieselfde en vereis verskillende reëls. Óf die kern stuur die pakket weer uit die tonnelkoppelvlak, óf die daemon kopieer dit tussen sessies en die kern sien dit nooit.

WireGuard hoort by die eerste groep: dit het geen eweknie-tot-eweknie-skakelaar nie, so 'n pakket van 10.8.0.4 na 10.8.0.5 kom op wg0 aan, tref die deurstuurhaak en word weer uit wg0 gestuur wanneer AllowedIPs albei adresse dek. OpenVPN is die tweede groep sodra client-to-client in die bedienerkonfigurasie gestel is, want daardie richtlijn gee die pakket tussen sessies in die gebruikerspasie oor. Kyk of daardie richtlijn in die gelaai konfigurasie staan voordat jy iets skryf. 'n Kernreël wat nooit verkeer sien nie, is nie van 'n reël wat werk te onderskei nie, en dit is hoe 'n ontplooiing heeltemal sonder isolasie eindig.

Lees die effektiewe konfigurasie eerder as die lêer wat jy aanneem gelaai is, want distribusiepakkette lewer hul eie insluitings. As die daemon die deurstuur doen, hoort die weiering in sy eie per-kliënt-beheerders, en 'n gasheervuurmuur filter net verkeer wat na die gasheer gerig is. As die kern deurstuur, is die deurstuurhaak die enigste plek wat saak maak.

Geroteerde en vertaalde ontplooiings het nog een kontrole nodig: die bron wat 'n ver kliënt sien, is dalk nie die een wat jy verwag nie. 'n Reël wat by die kliënt-subnet pas, pas dan glad nie. Let op die adres wat die vertaling oorleef voordat jy die passing skryf, en verkies om die koppelvlakpaar te pas eerder as om NAT-adresse te raai.

Gee elke adres 'n identiteit wat jy op sigself kan herroep

Isolasie stort ineen sodra twee toestelle een geloofsbrief deel. 'n Reël wat op daardie identiteit geskoei is, kan hulle nie skei nie, en om 'n verlore skootrekenaar te herroep, herroep die hele groep. Sertifikate per toestel of sleutels per eweknie hou herroeping plaaslik en die beleid leesbaar, want elke adres is aan presies een persoon of masjien gekoppel. Waar die ontwerp dit nie kan doen nie, sê so in die draaiboek eerder as om die reël as fynkorrelig te beskryf.

Adrestoewysing moet met die beleid saamstem. Reserveer 'n blok vir dienste, 'n blok vir kliënte, en deel kliëntadresse uit uit 'n poel wat jy beheer eerder as 'n eerste-kom-eerste-kry-reeks. As die bediener vertaal of oorbrug, hou die karteringstabel langs die konfigurasie, want daardie tabel is wat die volgende leser nodig het om die reël weer af te lei.

Plaas die weiering waar die pakket die tonnel kruis

Op 'n deurlaat wat WireGuard-verkeer deurstuur, dek twee reëls die geval: laat die diensblok toe en laat dan die res van die kliëntblok val. Die koppelvlakpaar maak net soveel saak soos die adresse, want om net op bestemming te pas, vang ook verkeer wat van die LAN af kom. Laai hulle in daardie volgorde sodat die toelating eerste geëvalueer word.

Met nftables gaan die paar in 'n bestaande inet-filtertabel, toelating eerste en weiering tweede. Albei passings pen die koppelvlakpaar sowel as die adresse vas.

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

Lees die ketting terug nadat jy dit gelaai het, eerder as om die afsluitstatus te vertrou, en bevestig dat albei reëls in die volgorde staan wat jy bedoel het. Voeg passende ip6-reëls vir die IPv6-poel by, anders is die v4-paar op 'n dubbele stapel-tonnel net versiering. As die bediener reeds 'n toegeeflike deurstuurbeleid het, voeg die weiering by eerder as om die ketting heeltemal te vervang.

Wanneer client-to-client op OpenVPN geaktiveer is, pas hierdie deurstuurreëls nooit eweknie-verkeer nie en moet die weiering in die daemon se eie beheerders woon. Hou die kernreëls vir verkeer wat na die gasheer gerig is, maar moenie hulle as die isolasiebeheer reken nie.

Bewys die weiering vanaf 'n kliënt, nie vanaf die bediener nie

Om vanaf die deurlaat te toets, bewys niks, want plaaslik gegenereerde verkeer neem die uitsetpad en kruis nooit die deurstuurhaak nie. Gebruik twee regte kliënte: een wat die diens moet bereik, een wat geweier moet word. Voer eers die toelatingsgeval uit, sodat 'n stukkende tonnel nie vir 'n werkende beleid aangesien word nie.

Vanaf die toegelate kliënt, bevestig dat die diens op sy poort antwoord. Probeer vanaf dieselfde kliënt die eweknie-adres en verwag 'n stille laat val eerder as 'n weiering:

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

'n Laat-val-pakket en 'n aflyn eweknie lyk albei soos 'n tydsverloop, so kyk na die tellers voordat jy enigiets aflei. Bevestig dat die weieringsreël se teller toeneem terwyl die eweknie aantoonbaar aan is. Herhaal oor IPv6, waar 'n ontbrekende ip6-reël die v4-weiering effektief laat lyk. Teken die aanvaarde en geweierde resultate met die datum in die draaiboek aan, want die volgende migrasie sal die reël weer aflei.

Verwante artikels