Групы піраў WireGuard на хабе: уладанне крыніцай плюс палітыка
Трымайце групы піраў асобна з вузкімі адрасамі крыніцы для кожнага піра і палітыкай перасылкі, без асобнага інтэрфейсу тунеля для кожнай групы.
Хаб, які запускае WireGuard, можа трымаць групы піраў асобна без асобнага інтэрфейсу або табліцы маршрутызацыі для кожнай групы. Гэтую працу выконваюць два механізмы, і менавіта іх блытаніна — звычайная прычына таго, што палітыка выглядае правільнай і нічога не робіць. Адзін узровень вырашае, хто можа заявіць адрас крыніцы. Другі вырашае, куды гэтаму пакету дазволена ісці.
Дзве задачы, трымаюцца асобна
Узровень тунеля адказвае на вузкае пытанне: ці ключ гэтага піра дазволіў гэты ўнутраны адрас крыніцы. Узровень перасылкі адказвае на шырэйшае: ці можа гэты пакет выйсці ў кірунку таго прызначэння. Ні адзін не адказвае на пытанне іншага, і ні адзін сам па сабе не з'яўляецца поўнай палітыкай доступу.
Менавіта гэтае размежаванне тлумачыць, чаму пір можа быць аўтэнтыфікаваны, адрасаваны правільна і ўсё ж не мець магчымасці дасягнуць хоста, якога ён дасягаць не павінен. Яно таксама тлумачыць адваротнае: правіла брандмаўэра, якое дазваляе ўсё, нічога не даказвае пра тое, хто можа заявіць які адрас.
Праектуйце абодва ўзроўні разам, затым праверце абодва. Канфігурацыя, правільная на адным узроўні і неправераная на другім, адмаўляе адкрыта або закрыта ў залежнасці ад значэння па змаўчанні.
Дайце кожнаму піру толькі яго ўласны адрас
Піры з некалькімі хастамі спакушаюць вас выдаць увесь дыяпазон групы на баку сервера. Гэты дазвол ёсць заяўкай на адрас крыніцы, таму скампраметаваны або няправільна настроены кліент можа прадставіць любы адрас з дыяпазону, і тунель яго прыме. Прызначце /32 для кожнага піра для яго ўласнага ўнутранага адраса. Задавайце дыяпазоны груп толькі на кліентах, дзе яны апісваюць якія прызначэнні гэты кліент можа дасягаць, а не якія крыніцы ён можа выкарыстоўваць.
Тады брандмаўэр супастаўляе крыніцу, якой можна давяраць. Правіла, напісанае для дыяпазону групы, застаецца карысным групаваннем, і яно набывае сэнс толькі тады, калі ніводны асобны пір не можа заявіць адрас, які належыць іншаму ўдзельніку.
Напішыце палітыку перасылкі, якая раздзяляе групы
Цікавы трафік тут уваходзіць і выходзіць праз той самы інтэрфейс тунеля, таму ён ідзе па шляху перасылкі, а не па шляху ўводу хоста. Правілы належаць да існуючага ланцуга перасылкі таго кіраўніка брандмаўэра, якому належыць хост, і яны ёсць фрагментамі, а не поўным наборам правіл.
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
Першыя два правілы дазваляюць трафік унутры кожнай групы. Апошняе блакуе ўсё астатняе, што перасякае гэты інтэрфейс, і менавіта гэта стварае ізаляцыю паміж групамі. Дадайце відавочныя правілы для іншага сямейства адрасоў, калі яны патрэбны, бо блакаванне, напісанае для IPv4, не дазваляе і не апісвае паводзіны IPv6.
Парадак вырашае, ці ўжываецца палітыка
Парадак правіл важнейшы за сам фрагмент. Агульнае правіла, якое дазваляе ўстаноўленыя злучэнні і пастаўлена перад гэтымі запісамі, дазваляе старому міжгрупаваму патоку працягвацца, таму ізаляцыя дзейнічае толькі на новыя злучэнні. Вырашыце, які з гэтых двух вынікаў вам патрэбны, перш чым перазагружаць.
Вердыкт прыняцця таксама не заўсёды канчатковы паміж ланцугамі на тым самым хоку. Калі іншы базавы ланцуг выконваецца пазней, эфектыўная палітыка — гэта спалучэнне, таму глядзіце на лічыльнікі, а не на файл, які вы рэдагавалі. Лічыльнікі — самае таннае сведчанне, даступнае вам. Правіла без колькасці пакетаў не супадае, а правіла, якое супадае, пакуль пазнейшы ланцуг прымае, кажа вам, што блакаванне не на тым месцы.
Праверце матрыцу, а не колькасць файлаў
Пабудуйце невялікую матрыцу чаканых вынікаў і праверце кожную ячэйку. Група A да групы A павінна працаваць, група B да групы B павінна працаваць, а A да B — не, у абодвух кірунках і для абодвух сямействаў адрасоў, калі вы іх падтрымліваеце.
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
Першыя два паказваюць, што наладжана. Пінг ад удзельніка няправільнай групы паказвае, што адбываецца насамрэч. Спіс conntrack паказвае, ці стары паток яшчэ прымаецца, і менавіта так змена ізаляцыі ціха не ўступае ў сілу.
Сэрвісы хоста на хабе і доступ да LAN за ім — гэта асобныя шляхі з асобнай палітыкай. Запішыце, які з іх пакрывае матрыца, бо тэст, што правярае толькі трафік паміж пірамі, не кажа нічога ні пра адзін з іх.