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
Прва два правила дозвољавају саобраћај унутар сваке групе. Последње блокира све остало што прелази тај интерфејс, и то ствара изолацију између група. Додајте експлицитна правила за другу породицу адреса ако вам требају, јер drop написан за IPv4 не овлашћује нити описује понашање IPv6.
Редослед одлучује да ли се политика примењује
Редослед правила важнији је од самог фрагмента. Опште правило које прихвата успостављене везе, постављено пре ових уноса, пушта стари међугрупни ток да се настави, па се изолација односи само на нове везе. Одлучите који од та два исхода желите пре него што поново учитате.
Пресуда прихватања такође није увек коначна кроз ланце на истој куки. Ако се други основни ланац извршава касније, делотворна политика је комбинација, па прегледајте бројаче, а не датотеку коју сте уредили. Бројачи су најјефтинији доступни доказ. Правило без броја пакета не упарује се, а правило које се упарује док каснији ланац прихвата каже вам да је drop на погрешном месту.
Тестирајте матрицу, а не број датотека
Направите малу матрицу очекиваних резултата и проверите сваку ћелију. Група 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
Прва два показују шта је конфигурисано. Ping од члана погрешне групе показује шта се заиста дешава. conntrack листа показује прихвата ли се старији ток још увек, и тако промена изолације тихо не ступа на снагу.
Хост сервиси на чворишту и приступ LAN-у иза њега одвојени су путеви с одвојеном политиком. Забележите које од њих матрица покрива, јер тест који проверава само вршњак-на-вршњак саобраћај не каже ништа ни о једном од њих.