Një klient në serverin tënd OpenVPN duhet të humbasë aksesin në LAN ndërsa të gjithë tunelet e tjera vazhdojnë. Nëse e kërkon këtë, përgjigjja më e mirë zakonisht thotë se daemoni nuk mundet, gjë që është vetëm gjysmë e vërtetë: OpenVPN nuk ka firewall për çdo klient, por hosti që përfundon tunelin tashmë filtron paketat. Dy vendimet që kanë rëndësi janë identiteti që bllokon dhe pozicioni i rregullit. Bëji mirë të dyja dhe ndryshimi bëhet një rresht që mund ta provosh dhe ta heqësh.

Lidh klientin përpara se të shkruash rregullin

OpenVPN jep me qira adresa tuneli nga një grupor, pra 10.8.0.6 është një vend, jo një person. Kur sesioni mbaron, qiraja kthehet dhe mund t'i jepet lidhjes tjetër, që do të thotë se një rregull i shkruar kundër asaj adrese ndjek vendin, jo përdoruesin. Prandaj vendos fillimisht çfarë bllokon në të vërtetë: një adresë për një eksperiment të shkurtër, apo një certifikatë për dikë që do ta mbash jashtë.

Për ta lidhur adresën me certifikatën, krijo një skedar në drejtorinë që emërton client-config-dir dhe jepi skedarit saktësisht common name të certifikatës. Vendos brenda një direktivë, ifconfig-push 10.8.0.6 255.255.255.0, dhe ai klient mban të njëjtën adresë tuneli gjatë rilidhjeve. Duhet të ekzistojnë dy cilësime që kjo të ketë efekt: client-config-dir duhet të deklarohet në konfigurimin e serverit, dhe adresa e dërguar duhet të jetë në një nënrrjet që serveri mund ta rutojë. Nëse mungon njëra, skedari injorohet pa gabim, gjë që e bën testin e ardhshëm të firewall-it mashtrues.

Një bllokim i përkohshëm mund të përdorë një adresë të gruporit, për sa kohë bileta regjistron cili sesion e kishte në atë moment.

Rendi vendos nëse hidhja ekzekutohet

Në një portë Linux që përçon mes tunelit dhe LAN, paketat kalojnë zinxhirin FORWARD. Lexo komandën më poshtë si një fjali: fut në krye të FORWARD, përputh trafikun që hyn nga tun0, nga ai host i vetëm, drejtuar në nënrrjetin LAN, dhe hidhe.

iptables -I FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP

Është -I ai që e bën rregullin të funksionojë. I shtuar me -A, ai zbret nën çdo pranim të gjerë për nënrrjetin e tunelit dhe nuk sheh kurrë paketë. Verifiko pozicionin me iptables -vnL FORWARD --line-numbers dhe lexo edhe numëruesit: një hedhje në krye që nuk numëron asgjë do të thotë se trafiku po vjen nga një rrugë tjetër.

Adresa LAN e vetë portës është një rrugë tjetër. Paketat e dërguara te kutia shkojnë në INPUT, jo në FORWARD, kështu që një klient mund të humbasë një host LAN dhe gjithsesi të hapë faqen e administrimit të ruterit. Shto rregullin INPUT përkatës kur kjo ka rëndësi.

Çfarë filtri nuk mund të shohë

Filtrimi ndodh kur vlerësohet një paketë, kështu që një sesion TCP i vendosur mund të vazhdojë derisa të mbyllet ose të rivendoset. Nëse bllokimi duhet të kafshojë menjëherë, pastro flukset e gjurmuara për atë burim me conntrack -D -s 10.8.0.6 pasi rregulli të futet. Nëse disa sekonda mbivendosje janë të pranueshme, regjistro atë zgjedhje në vend që ta lësh të nënkuptuar. Në çdo rast, personi tjetër duhet të dijë nëse rregulli ndalon trafikun e gjallë apo vetëm lidhjet e reja.

Trafiku mes palëve nuk prek kurrë firewall-in e hostit. Me client-to-client të aktivizuar, OpenVPN i përçon ato paketa brenda daemonit, kështu që as FORWARD as INPUT nuk i sheh. Zgjidhjet e vetme janë fikja e client-to-client ose pranimi që palët mund të arrijnë njëra-tjetrën; një rregull iptables nuk do ta shohë atë trafik.

IPv6, firmware dhe mbijetesa pas rindezjes

Një rregull IPv4 nuk thotë asgjë për IPv6. Nëse tuneli dhe LAN-i mbajnë të dyja familjet, rregulli ekuivalent duhet të ekzistojë në ip6tables, ose në grupin e rregullave nftables që zotëron politikën në atë host. Firmware-i i ruterit shpesh e fsheh netfilter pas abstraksionit të vet, kështu që sintaksa dhe emrat e tabelave të kopjuar nga një forum mund të mos zbatohen.

Në OpenWrt, rruga e dokumentuar është një hyrje konfigurimi e firewall-it dhe jo një rresht iptables i shkruar me dorë, dhe një rresht i shkruar me dorë mund të zhduket kur firewall-i rimbushet. Shpërndarjet e tjera i rikthejnë rregullat përmes netfilter-persistent, një njësie nisjeje ose një depoje të furnizuesit, dhe këto mekanizma nuk janë të këmbyeshëm. Vërteto atë që zgjodhe me një rindezje, sepse rimbushja ushtron një rrugë tjetër.

Verifiko sipas rrugës, pastaj kthehu pastër

Testo çdo rrugë veçmas, sepse një kontroll i suksesshëm i fsheh të tjerat. Një klient i bllokuar duhet të arrijë ende internetin përmes tunelit, por të dështojë kundër një hosti LAN, një klient i dytë duhet të arrijë të njëjtin host, dhe adresa e portës e rruga e palës kanë secila nevojë për vëzhgimin e vet. Shkruaj rezultatet pranë rregullit që ndryshimi tjetër të ketë një bazë. Tabela më poshtë është grupi që ia vlen të mbahet në biletë.

RrugaPritet me rregullinKur dështon
Klient i bllokuar drejt një hosti LANAsnjë përgjigjeRregulli është nën një pranim, ose burimi nuk përputhet
Klient i bllokuar drejt internetitFunksionon përmes tun0Rregulli është shumë i gjerë, pa përputhje destinacioni
Klient i dytë drejt të njëjtit host LANFunksiononRregulli u përputh me më shumë se hosti i synuar
Klient i bllokuar drejt adresës LAN të portësBllokohet vetëm me rregullin INPUT përkatësMungon rregulli INPUT
Klient i bllokuar drejt një adrese tuneli të palësVazhdon të funksionojëclient-to-client është aktivizuar dhe jashtë sferës së firewall-it

Kthimi është fshirje sipas specifikimit, jo flush: iptables -D FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP heq saktësisht atë hyrje dhe lë pjesën tjetër të zinxhirit të paprekur. Hiq të njëjtin rresht nga çdo skedar që rikthen rregullat në nisje, ringarkoje dhe konfirmo që klienti arrin përsëri hostin LAN. Një flush i FORWARD do të anulonte edhe rregulla që nuk i shkruajte, gjë që e kthen kthimin në një incident të dytë.

Përpara se të mbyllësh biletën, konfirmo tre gjëra: adresa e lidhur përputhet me certifikatën, rregulli qëndron mbi pranimet me numërues jo zero, dhe skedari i qëndrueshmërisë përmban të njëjtin rregull që testove. Nëse mungon ndonjëra, bllokimi është iluzion në një sesion shell.

Artikuj të ngjashëm