Hub provozující WireGuard dokáže udržet peer skupiny oddělené bez samostatného rozhraní nebo směrovací tabulky pro každou skupinu. Tu práci dělají dva mechanismy a jejich záměna je obvyklý důvod, proč politika vypadá správně a nedělá nic. Jedna vrstva rozhoduje, kdo si smí nárokovat zdrojovou adresu. Druhá rozhoduje, kam se ten paket smí vydat.

Dva úkoly, držené odděleně

Tunelová vrstva odpovídá na úzkou otázku: autorizoval klíč tohoto peeru tuto vnitřní zdrojovou adresu. Předávací vrstva odpovídá na širší: smí tento paket odejít k onomu cíli. Ani jedna neodpovídá na otázku té druhé a ani jedna sama o sobě není úplnou přístupovou politikou.

Kvůli tomu rozdělení může být peer autentizovaný, správně adresovaný a přesto se nedostane na host, na který by se dostávat neměl. Vysvětluje to i opak: pravidlo firewallu, které povoluje všechno, nic nedokazuje o tom, kdo si smí nárokovat kterou adresu.

Navrhněte obě vrstvy společně, pak otestujte obě. Konfigurace, která je správná v jedné vrstvě a netestovaná ve druhé, selhává otevřeně nebo zavřeně podle výchozí hodnoty.

Dejte každému peeru jen jeho vlastní adresu

Peery s více hosty vás lákají přidělit na straně serveru celý rozsah skupiny. To oprávnění je nárok na zdrojovou adresu, takže kompromitovaný nebo špatně nastavený klient může předložit jakoukoli adresu z rozsahu a tunel ji přijme. Přidělte /32 pro každý peer pro jeho vlastní vnitřní adresu. Rozsahy skupin nastavujte jen na klientech, kde popisují které cíle tento klient smí dosáhnout místo toho, které zdroje smí použít.

Firewall pak porovnává zdroj, kterému může věřit. Pravidlo napsané pro rozsah skupiny zůstává užitečným seskupením a smysl dostane teprve tehdy, když si žádný jednotlivý peer nemůže nárokovat adresu patřící jinému členovi.

Napište předávací politiku, která skupiny odděluje

Zajímavý provoz tu vstupuje a vystupuje stejným tunelovým rozhraním, takže prochází předávací cestou, nikoli vstupní cestou hostitele. Pravidla patří do existujícího předávacího řetězce toho správce firewallu, který hostitele vlastní, a jsou to fragmenty, ne úplná sada pravidel.

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

První dvě pravidla povolují provoz v rámci každé skupiny. Poslední blokuje vše ostatní, co oním rozhraním prochází, a to vytváří izolaci mezi skupinami. Přidejte explicitní pravidla pro druhou rodinu adres, pokud je potřebujete, protože drop napsaný pro IPv4 chování IPv6 nepovoluje ani nepopisuje.

Pořadí rozhoduje, zda se politika uplatní

Pořadí pravidel je důležitější než samotný fragment. Obecné pravidlo, které přijímá navázaná spojení a je umístěno před těmito položkami, nechá starý mezigrupový tok pokračovat, takže izolace platí jen pro nová spojení. Rozhodněte, který z těch dvou výsledků chcete, než znovu načtete pravidla.

Verdikt přijetí také nebývá vždy konečný napříč řetězci na stejném hooku. Pokud se později spustí jiný základní řetězec, účinnou politikou je kombinace, takže prohlížejte čítače, ne soubor, který jste upravovali. Čítače jsou nejlevnější dostupný důkaz. Pravidlo bez počtu paketů neodpovídá a pravidlo, které odpovídá, zatímco pozdější řetězec přijímá, vám říká, že drop je na špatném místě.

Testujte matici, ne počet souborů

Sestavte malou matici očekávaných výsledků a zkontrolujte každou buňku. Skupina A do skupiny A má fungovat, skupina B do skupiny B má fungovat a A do B nemá, v obou směrech a pro obě rodiny adres, pokud je 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

První dva ukazují, co je nastaveno. Ping od člena špatné skupiny ukazuje, co se skutečně děje. Výpis conntrack ukazuje, zda je starší tok stále přijímán, a právě tak změna izolace tiše nevstoupí v platnost.

Hostitelské služby na hubu a přístup k LAN za ním jsou oddělené cesty s oddělenou politikou. Zapište, které z nich matice pokrývá, protože test, který kontroluje jen provoz mezi peery, neříká nic ani o jednom z nich.

Související články