Du klientai gali abu atidaryti šuolio prieglobą ir vis tiek neturėti jokio reikalo atidaryti vienas kito. Pasiekti paslaugą yra persiuntimo sprendimas, o pasiekti partnerį yra politikos sprendimas, ir dauguma VPN rinkinių juos laiko atskiruose objektuose. Niekas, ką sukonfigūruojate pirmajam, neįgyvendina antrojo. Taigi užduotis yra ne pridėti taisyklę, o rasti objektą, kuris šiame serveryje nusprendžia partnerių srautą, ten įrašyti draudimą ir įrodyti jį iš kliento.

Maršrutas į bendrą paslaugą nėra leidimas tarp partnerių

Klientų potinklio skelbimas pasako partneriui, kaip įdėti paketą į laidą link kito kliento adreso. Ar tas paketas bus pristatytas, sprendžiama vėliau, to, kas jį persiunčia. Linux tinkle tai FORWARD grandinė; vartotojo erdvės demono viduje tai paties tunelio sesijų lentelė. Maršrutas atsako į pasiekiamumą ir palieka leidimą nepaliestą.

Todėl izoliacijos patikra, kuri skaito tik maršrutus, nieko neįrodo. /24 galima išsiųsti kiekvienam klientui, o kiekvienas partnerių paketas numetamas persiuntimo kabliuke. Pavojingas atvejis yra atvirkštinis: jokios aiškios taisyklės, leidžianti numatytoji reikšmė ir izoliacija, kuri egzistuoja tik todėl, kad niekas jos neišbandė.

Užrašykite reikalavimą viena eilute prieš atidarydami terminalą. Pasiekite paslaugų bloką ir šuolio prieglobą, nieko kito klientų bloko viduje nepasiekite.

Išsiaiškinkite, kas iš tikrųjų persiunčia partnerio paketą

Du serverio elgsenos atrodo vienodai iš kliento pusės ir reikalauja skirtingų taisyklių. Arba branduolys vėl persiunčia paketą iš tunelio sąsajos, arba demonas nukopijuoja jį tarp sesijų ir branduolys jo niekada nemato.

WireGuard priklauso pirmajai grupei: jis neturi partnerių jungiklio, todėl paketas nuo 10.8.0.4 iki 10.8.0.5 atvyksta į wg0, atsitrenkia į persiuntimo kabliuką ir vėl nukreipiamas iš wg0, kai AllowedIPs apima abu adresus. OpenVPN yra antroji grupė, kai serverio konfigūracijoje nustatytas client-to-client, nes ta direktyva perduoda paketą tarp sesijų vartotojo erdvėje. Prieš ką nors rašydami, patikrinkite įkeltą konfigūraciją dėl šios direktyvos. Branduolio taisyklės, kuri niekada nemato srauto, negalima atskirti nuo veikiančios taisyklės, ir taip diegimas baigiasi visiškai be izoliacijos.

Skaitykite veiksmingą konfigūraciją, o ne failą, kurį manote įkeltą, nes platinimo paketai atsineša savo įtraukimus. Jei demonas persiunčia, draudimas priklauso jo paties kiekvieno kliento valdymui, o prieglobos užkarda filtruoja tik prieglobai adresuotą srautą. Jei branduolys persiunčia, persiuntimo kabliukas yra vienintelė vieta, kuri svarbi.

Maršrutizuoti ir išversti diegimai reikalauja dar vienos patikros: šaltinis, kurį mato tolimas klientas, gali būti ne tas, kurio tikitės. Tada taisyklė, atitinkanti klientų potinklį, neatitinka nieko. Užsirašykite adresą, kuris išlieka po vertimo, prieš rašydami atitikmenį, ir teikite pirmenybę sąsajų poros atitikčiai, o ne NAT adresų spėjimui.

Suteikite kiekvienam adresui savarankiškai atšaukiamą tapatybę

Izoliacija sugriūna, kai tik du įrenginiai dalijasi vienu kredencialu. Prie šios tapatybės pririšta taisyklė negali jų atskirti, o pamesto nešiojamojo kompiuterio atšaukimas atšaukia visą grupę. Sertifikatai kiekvienam įrenginiui arba raktai kiekvienam partneriui išlaiko atšaukimą vietinį, o politiką skaitomą, nes kiekvienas adresas atitinka tiksliai vieną asmenį ar mašiną. Kur dizainas to negali, pasakykite tai eksploatavimo vadove, o ne apibūdinkite taisyklę kaip smulkiagrūdę.

Adresų paskirstymas turi derėti su politika. Rezervuokite bloką paslaugoms, bloką klientams, ir dalinkite klientų adresus iš jūsų kontroliuojamo telkinio, o ne iš pirmas-atėjo-pirmas-gauna diapazono. Jei serveris verčia arba jungia tiltu, laikykite atvaizdavimo lentelę šalia konfigūracijos, nes būtent jos reikia kitam skaitytojui taisyklei iš naujo išvesti.

Įdėkite draudimą ten, kur paketas kerta tunelį

Šliuze, kuri persiunčia WireGuard srautą, atvejį padengia dvi taisyklės: leiskite paslaugų bloką, tada numeskite likusį klientų bloką. Sąsajų pora svarbi tiek pat, kiek adresai, nes atitikimas tik pagal paskirties vietą pagauna ir srautą iš LAN. Įkelkite jas tokia tvarka, kad leidimas būtų įvertintas pirmas.

Su nftables pora patenka į esamą inet filter lentelę, pirmiau leidimas, paskui numetimas. Abi atitiktys pritvirtina sąsajų porą ir adresus.

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

Po įkėlimo perskaitykite grandinę atgal, o ne pasitikėkite išėjimo būsena, ir patvirtinkite, kad abi taisyklės stovi numatyta tvarka. Pridėkite atitinkamas ip6 taisykles IPv6 telkiniui, kitaip v4 pora dvigubo steko tunelyje tėra puošmena. Jei serveris jau turi leidžiančią persiuntimo politiką, pridėkite numetimą, o ne pakeiskite visą grandinę.

Kai OpenVPN įjungtas client-to-client, šios persiuntimo taisyklės niekada neatitinka partnerių srauto ir draudimas turi gyventi paties demono valdyme. Palikite branduolio taisykles prieglobai adresuotam srautui, bet neskaičiuokite jų kaip izoliacijos valdymo.

Įrodykite draudimą iš kliento, o ne iš serverio

Bandymas iš šliuzo nieko neįrodo, nes vietoje sugeneruotas srautas eina išėjimo keliu ir niekada nekerta persiuntimo kabliuko. Naudokite du tikrus klientus: vieną, kuris turėtų pasiekti paslaugą, ir vieną, kuris turėtų būti atmestas. Pirmiau paleiskite leidimo atvejį, kad sugedęs tunelis nebūtų palaikytas veikiančia politika.

Iš leisto kliento patvirtinkite, kad paslauga atsako savo prievade. Iš to paties kliento pabandykite partnerio adresą ir tikėkitės tylios numetimo, o ne atmetimo:

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

Numestas paketas ir neprisijungęs partneris abu atrodo kaip skirtasis laikas, todėl prieš darydami išvadas patikrinkite skaitiklius. Patvirtinkite, kad numetimo taisyklės skaitiklis didėja, kol partneris akivaizdžiai veikia. Pakartokite per IPv6, kur trūkstama ip6 taisyklė palieka v4 draudimą atrodyti veiksmingai. Įrašykite priimtus ir atmestus rezultatus į vadovą su data, nes kitas perkėlimas taisyklę vėl išves.

Susiję straipsniai