Бір ереже рұқсат етілген VPN пулын тағайындалған ауқымнан алыстата алады, қақпаның басқа жұмысына кедергі келтірмей. Ереженің өзі қысқа; оның жұмыс істейтінін шешетін бөліктер — ол өмір сүретін hook және тізбектегі орны. Осы екеуінде қателессеңіз, дұрыс көрінетін, бірақ тұрақсыз әрекет ететін firewall аласыз. Ереже пакетті көрген кезде пакеттің не істеп жатқанынан бастаңыз.

Ереже шын мәнінде нені сәйкестендіреді

Ереже бір уақытта үш нәрсені сәйкестендіреді: кіріс интерфейсін, дереккөз префиксін және тағайындалған префиксті. Drop қолданылуы үшін үшеуі де ақиқат болуы керек, және бұл оны тар күйде ұстайды. Оны үш бөлек саясат ретінде емес, бір өрнек ретінде оқыған оңайырақ.

Интерфейсті сәйкестендіру — жіберілетін клиенттік трафикті қақпаның өз байланыстарынан ажырататын нәрсе. Онсыз тек дереккөз пулын атайтын ереже қақпаның өзі сол мекенжайдан жасайтын пакеттерге де әсер етеді, егер бұл бірде бір болса. Дереккөз префиксі саясатты рұқсат етілген клиенттермен, ал тағайындалған префикс оны бір ауқыммен шектейді. Ережені тізім емес, қиылысу ретінде оқыңыз.

Бірдеңені өзгерту алдында үш мәнді жазып алыңыз: туннель интерфейсінің атауы, сервер тарататын пул және қабылдамайтын префикс. Олардың кез келгеніндегі қате — таза талданатын және ештеңені қорғамайтын ереже. Осы үш мәнді ереженің жанындағы өзгеріс жазбасында ұстаңыз.

Hook ереженің кімге қолданылатынын шешеді

netfilter тізбегі hook-қа бекітіледі, және hook тізбектің қандай пакеттерді көретінін шешеді. forward hook қақпа арқылы маршрутталатын трафикті көреді, ал бұл дәл клиенттен тағайындалуға бағытталған трафик. Тізбектегі қалғанының бәрі басқа аудиторияға бағытталған.

input hook қақпаның өзіне адрестелген трафикті көреді, сондықтан онда қойылған ереже транзитті емес, оның өз қызметтеріне қолжетімділікті басқарады. output hook қақпаның өзі жасайтын трафикті көреді, бұл клиент пулы саясатына қажет нәрсенің керісі. Тізбек атаулары — ережелер жиынтығын жазған адам таңдаған еркін белгілер, сондықтан hook-ты атаудан болжамаңыз. Тізбектің қайда бекітілгенін тексеріңіз, содан кейін оның нені сәйкестендіре алатынын болжаңыз.

HookTraffic it seesRight for this policy
inputAddressed to the gatewayNo, that is the host's own services
forwardRouted through the gatewayYes, for client-to-destination traffic
outputGenerated by the gatewayNo, that is the opposite direction

Бекітуді оқу — бір жолдық тексеру, ол ереженің пакетті ешқашан көрмейтін тізбекке түсуін болдырмайды.

Ережені кең accept-тан бұрын орналастырыңыз

Ережелер ретімен бағаланады және бірінші үкім жеңеді. Тізбектің ішінде ертерек тұрған кең accept сәйкес келетін пакеттер үшін бағалауды аяқтайды, сондықтан кейін қосылған drop олар үшін ешқашан орындалмайды. Осы реттілік ережесі — дұрыс көрінетін ереженің әсерсіз қалуының толық себебі.

Ережені соңына қосудың орнына accept-тан бұрын кірістіріңіз. Егер тізбекте туннель интерфейсі үшін жалпы accept бұрыннан болса, жаңа ереже оның алдында тұруы керек, әйтпесе ол тек әшекей. Нәтижелік ретті тексеріңіз, өңдеген файлыңызды емес, өйткені бірнеше файлдан құрастырылған ережелер жиынтығы олардың ешқайсысымен сәйкеспеуі мүмкін. Содан кейін пулдан алынған сынақ пакетімен растаңыз.

sudo nft list chain inet filter forward
sudo nft insert rule inet filter forward iifname "tun0" ip saddr 10.90.0.0/24 ip daddr 198.51.100.0/24 drop
sudo nft -c -f /etc/nftables.conf

Үшінші команда файлды қолданбай талдайды, бұл синтаксистік қателерді үзіліске айналмай тұрып ұстайды. Кері қайтару жоспарымен қолданыңыз, өйткені forward тізбегіндегі қате ереже сіз жұмыс істеп жатқан туннельді кесуі мүмкін.

Бар ағындар жаңа ережеңізге мән бермейді

Ереже пайда болмай тұрып жасалған conntrack жазбасы бұрынғы accept-қа сәйкесуін жалғастырады. Сондықтан жаңа drop кейде жаңа байланыстарға жұмыс істейтін сияқты көрінеді, ал тексеріліп жатқан байланысқа ештеңе істемейді.

Тізбектің басындағы күй сәйкестігін оқыңыз. Егер ол established және related трафикті сіздің ережеңізден бұрын қабылдаса, әрбір жүріп жатқан ағын жабылғанша ағуды жалғастырады. Әдетте бұл төтенше ереже үшін қалаған әрекет, және бірден үзу күткенде шатастырады. Орналастыру алдында қандай әсер керектігін шешіңіз. Ашық байланысты қайта пайдаланатын сынақ сізге қате әңгіме айтады.

sudo conntrack -L -s 10.90.0.14 -d 198.51.100.20
sudo nft list ruleset | grep -n -A3 'ct state'

Бірінші команда ағынның бар-жоғын, ал екіншісі ерте күй ережесінің оны қабылдауды жалғастырып жатқанын көрсетеді. Екеуі де тек оқуға арналған және оқиға кезінде іске қосу қауіпсіз.

Бұл ереже не емес

Ереже домендердің қара тізімі, IPv6 саясаты немесе жеке қолданба тіркелгісіне шектеу емес.

Олардың әрқайсысына өз механизмі керек. Доменді блоктау атауларды шешуі керек, ал пакет сүзгісі мұны істемейді. IPv6 трафигіне өз сәйкестігі қажет, өйткені ip өрнегі ip6 пакеттері туралы ештеңе айтпайды. Қолданба деңгейіндегі шектеу префикс сәйкестігіне емес, қызметке немесе аутентификацияланған проксиге тиесілі. Осы талаптарды бөлек ұстау бір тар ережеден төрт жұмыс талап етуге жол бермейді.

Бұл ереже беретін шарт дәл: рұқсат етілген пулдан бір тағайындалған префикске трафик қабылданбайды, ал қатысы жоқ қақпа трафигі өз саясатын сақтайды. Осы сөйлемді ереженің жанына жазыңыз, келесі адам оның не үшін болғанын біледі.

Қатысты мақалалар