Спречете VPN клиентите да се достигнуваат еден со друг во тунелот
Достигнувањето услуга е рута, достигнувањето друг клиент е политика. Најдете ја точката на препраќање што го одлучува сообраќајот меѓу партнерите, потоа докажете ја забраната од клиент.
Два клиенти можат и двата да го отворат скок-хостот и сепак да немаат работа да се отвораат еден со друг. Достигнувањето услуга е одлука за препраќање, додека достигнувањето партнер е одлука за политика, и повеќето VPN стекови ги држат овие во одделни објекти. Ништо што ќе го поставите за првото не го спроведува второто. Затоа задачата не е да додадете правило, туку да го најдете објектот што го одлучува сообраќајот меѓу партнерите на овој сервер, да ја напишете забраната таму и да ја докажете од клиент.
Рута до заедничката услуга не е дозвола меѓу партнерите
Објавувањето на клиентската подмрежа му кажува на партнерот како да стави пакет на жицата кон адресата на друг клиент. Дали тој пакет ќе биде доставен се одлучува подоцна, од тоа што го препраќа. На Linux порта тоа е синџирот FORWARD; внатре во демон во кориснички простор тоа е сопствената табела на сесии на тунелот. Рутата одговара на достапноста и ја остава дозволата недопрена.
Затоа проверката на изолацијата што чита само рути не докажува ништо. /24 може да се испрати до секој клиент, додека секој пакет меѓу партнерите се отфрла кај куката за препраќање. Опасниот случај е обратниот: нема изречно правило, дозволувачка стандардна поставка и изолација што постои само затоа што никој не ја проверил.
Напишете го барањето во еден ред пред да отворите терминал. Достигнете го блокот на услугите и скок-хостот, не достигнувајте ништо друго во блокот на клиентите.
Откријте кој навистина го препраќа пакетот на партнерот
Две однесувања на серверот изгледаат исто од клиентска страна и бараат различни правила. Или јадрото пак го препраќа пакетот надвор од интерфејсот на тунелот, или демонот го копира меѓу сесиите и јадрото никогаш не го гледа.
WireGuard припаѓа на првата група: нема прекинувач меѓу партнерите, па пакетот од 10.8.0.4 до 10.8.0.5 пристигнува на wg0, удира во куката за препраќање и повторно се пренасочува од wg0 кога AllowedIPs ги покрива двете адреси. OpenVPN е втората група откако во конфигурацијата на серверот е поставено client-to-client, бидејќи таа директива го предава пакетот меѓу сесиите во кориснички простор. Проверете ја вчитаната конфигурација за таа директива пред да напишете нешто. Правило во јадрото што никогаш не гледа сообраќај не се разликува од правило што работи, и токму така едно распоредување завршува без никаква изолација.
Читајте ја ефективната конфигурација, а не датотеката што претпоставувате дека е вчитана, бидејќи дистрибутивните пакети носат свои вклучувања. Ако демонот препраќа, забраната припаѓа во неговите сопствени контроли по клиент, а огнениот ѕид на хостот филтрира само сообраќај адресиран до хостот. Ако јадрото препраќа, куката за препраќање е единственото место што е важно.
Рутираните и преведените распоредувања бараат уште една проверка: изворот што го гледа далечен клиент можеби не е тој што го очекувате. Тогаш правилото што одговара на клиентската подмрежа не одговара на ништо. Забележете ја адресата што преживува преводот пред да го напишете совпаѓањето, и претпочитајте да го совпаднете парот интерфејси наместо да ги погодувате NAT адресите.
Дајте ѝ на секоја адреса идентитет што може сам да се отповика
Изолацијата се урива штом два уреда делат едно уверување. Правило врзано за тој идентитет не може да ги раздели, а отповикувањето на изгубен преносен компјутер ја отповикува целата група. Сертификати по уред или клучеви по партнер го држат отповикувањето локално, а политиката читлива, бидејќи секоја адреса одговара точно на едно лице или машина. Каде што дизајнот не може тоа, кажете го во оперативниот прирачник, наместо правилото да го опишете како фино.
Распределбата на адреси мора да се согласува со политиката. Резервирајте блок за услуги, блок за клиенти, и доделувајте клиентски адреси од базен што го контролирате, а не од опсегот „кој прв ќе дојде“. Ако серверот преведува или мости, држете ја табелата за мапирање до конфигурацијата, бидејќи таа табела му е потребна на следниот читател за повторно да го изведе правилото.
Поставете ја забраната каде пакетот го преминува тунелот
На порта што препраќа WireGuard сообраќај, случајот го покриваат две правила: дозволете го блокот на услугите, потоа отфрлете го остатокот од блокот на клиентите. Парот интерфејси е исто толку важен како адресите, бидејќи совпаѓањето само по одредиштето го фаќа и сообраќајот што доаѓа од LAN. Вчитајте ги во тој ред за да се оцени дозволата прва.
Со nftables парот влегува во постоечка inet filter табела, прво дозвола па потоа отфрлање. Двете совпаѓања го прицврстуваат парот интерфејси заедно со адресите.
nft add rule inet filter forward iifname "wg0" oifname "wg0" ip saddr 10.8.0.0/24 ip daddr 10.8.2.0/24 accept
nft add rule inet filter forward iifname "wg0" oifname "wg0" ip saddr 10.8.0.0/24 ip daddr 10.8.0.0/24 drop
По вчитувањето прочитајте го синџирот назад наместо да му верувате на излезниот статус, и потврдете дека двете правила стојат во редот што сте го намеравале. Додајте соодветни ip6 правила за базенот IPv6, инаку парот v4 е само украс на тунел со двоен стек. Ако серверот веќе има дозволувачка политика за препраќање, додајте го отфрлањето наместо целосно да го замените синџирот.
Кога client-to-client е вклучено на OpenVPN, овие правила за препраќање никогаш не одговараат на сообраќајот меѓу партнерите и забраната мора да живее во сопствените контроли на демонот. Задржете ги правилата на јадрото за сообраќај адресиран до хостот, но не сметајте ги како контрола на изолацијата.
Докажете ја забраната од клиент, а не од серверот
Тестирањето од портата не докажува ништо, бидејќи локално создадениот сообраќај оди по излезната патека и никогаш не ја преминува куката за препраќање. Користете два вистински клиенти: еден што треба да ја достигне услугата, еден што треба да биде одбиен. Прво пуштете го случајот со дозвола, за да не се смета расипан тунел за политика што работи.
Од дозволениот клиент потврдете дека услугата одговара на својот порт. Од истиот клиент обидете се со адресата на партнерот и очекувајте тивко отфрлање наместо одбивање:
ping -c 3 -W 2 10.8.0.5
nc -z -w 2 10.8.0.5 22
nft list chain inet filter forward
iptables -vnL FORWARD
ping -6 -c 3 -W 2 fd00:8::5
Отфрлен пакет и партнер вон мрежа и двата изгледаат како истек на време, затоа проверете ги бројачите пред да заклучите нешто. Потврдете дека бројачот на правилото за отфрлање расте додека партнерот е очигледно активен. Повторете преку IPv6, каде што отсутното правило ip6 го остава забранувањето v4 да изгледа ефективно. Запишете ги прифатените и одбиените резултати во прирачникот со датумот, бидејќи следната миграција повторно ќе го изведе правилото.