Хаб, які запускае 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 за ім — гэта асобныя шляхі з асобнай палітыкай. Запішыце, які з іх пакрывае матрыца, бо тэст, што правярае толькі трафік паміж пірамі, не кажа нічога ні пра адзін з іх.

Падобныя артыкулы