Hub prevádzkujúci WireGuard dokáže udržať peer skupiny oddelené bez samostatného rozhrania alebo smerovacej tabuľky pre každú skupinu. Tú prácu robia dva mechanizmy a ich zámena je obvyklý dôvod, prečo politika vyzerá správne a nerobí nič. Jedna vrstva rozhoduje, kto si smie nárokovať zdrojovú adresu. Druhá rozhoduje, kam sa ten paket smie vydať.

Dve úlohy, držané oddelene

Tunelová vrstva odpovedá na úzku otázku: autorizoval kľúč tohto peera túto vnútornú zdrojovú adresu. Preposielacia vrstva odpovedá na širšiu: smie tento paket odísť k onomu cieľu. Ani jedna neodpovedá na otázku tej druhej a ani jedna sama o sebe nie je úplnou prístupovou politikou.

Kvôli tomuto rozdeleniu môže byť peer autentizovaný, správne adresovaný a napriek tomu sa nedostane na host, na ktorý by sa dostávať nemal. Vysvetľuje to aj opak: pravidlo firewallu, ktoré povoľuje všetko, nič nedokazuje o tom, kto si smie nárokovať ktorú adresu.

Navrhnite obe vrstvy spoločne, potom otestujte obe. Konfigurácia, ktorá je správna v jednej vrstve a netestovaná v druhej, zlyháva otvorene alebo zavrete podľa predvolenej hodnoty.

Dajte každému peerovi len jeho vlastnú adresu

Peery s viacerými hostmi vás lákajú prideliť na strane servera celý rozsah skupiny. To oprávnenie je nárok na zdrojovú adresu, takže kompromitovaný alebo zle nastavený klient môže predložiť akúkoľvek adresu z rozsahu a tunel ju prijme. Prideľte /32 pre každý peer pre jeho vlastnú vnútornú adresu. Rozsahy skupín nastavujte len na klientoch, kde opisujú ktoré ciele tento klient smie dosiahnuť a nie ktoré zdroje smie použiť.

Firewall potom porovnáva zdroj, ktorému môže dôverovať. Pravidlo napísané pre rozsah skupiny zostáva užitočným zoskupením a zmysel získa až vtedy, keď si žiadny jednotlivý peer nemôže nárokovať adresu patriacu inému členovi.

Napíšte preposielaciu politiku, ktorá skupiny oddeľuje

Zaujímavá premávka tu vstupuje a vystupuje tým istým tunelovým rozhraním, takže prechádza cestou preposielania, nie vstupnou cestou hosta. Pravidlá patria do existujúcej preposielacej reťaze toho správcu firewallu, ktorý hosta vlastní, a sú to fragmenty, nie úplná sada pravidiel.

iifname "wg0" oifname "wg0" ip saddr 10.66.10.0/24 ip daddr 10.66.10.0/24 accept
iifname "wg0" oifname "wg0" ip saddr 10.66.20.0/24 ip daddr 10.66.20.0/24 accept
iifname "wg0" oifname "wg0" drop

Prvé dve pravidlá povoľujú premávku v rámci každej skupiny. Posledné blokuje všetko ostatné, čo tým rozhraním prechádza, a to vytvára izoláciu medzi skupinami. Pridajte explicitné pravidlá pre druhú rodinu adries, ak ich potrebujete, pretože drop napísaný pre IPv4 nepovoľuje ani neopisuje správanie IPv6.

Poradie rozhoduje, či sa politika uplatní

Poradie pravidiel je dôležitejšie než samotný fragment. Všeobecné pravidlo, ktoré prijíma nadviazané spojenia a je umiestnené pred týmito položkami, nechá starý medziskupinový tok pokračovať, takže izolácia platí len pre nové spojenia. Rozhodnite, ktorý z tých dvoch výsledkov chcete, skôr než znovu načítate.

Verdikt prijatia tiež nie je vždy konečný naprieč reťazami na tom istom hooku. Ak sa neskôr spustí iná základná reťaz, účinnou politikou je kombinácia, preto prezerajte počítadlá, nie súbor, ktorý ste upravovali. Počítadlá sú najlacnejší dostupný dôkaz. Pravidlo bez počtu paketov nezodpovedá a pravidlo, ktoré zodpovedá, kým neskoršia reťaz prijíma, vám hovorí, že drop je na nesprávnom mieste.

Testujte maticu, nie počet súborov

Zostavte malú maticu očakávaných výsledkov a skontrolujte každú bunku. Skupina A do skupiny A má fungovať, skupina B do skupiny B má fungovať a A do B nemá, v oboch smeroch a pre obe rodiny adries, ak ich podporujete.

nft list ruleset
wg show wg0 allowed-ips
ping -c 2 10.66.10.5
conntrack -L -s 10.66.20.7 2>/dev/null | head

Prvé dva ukazujú, čo je nastavené. Ping od člena nesprávnej skupiny ukazuje, čo sa skutočne deje. Výpis conntrack ukazuje, či sa starší tok ešte prijíma, a práve tak zmena izolácie potichu nevstúpi do platnosti.

Hostiteľské služby na hube a prístup k LAN za ním sú oddelené cesty s oddelenou politikou. Zapíšte, ktoré z nich matica pokrýva, pretože test, ktorý kontroluje len premávku medzi peermi, nehovorí nič ani o jednom z nich.

Súvisiace články