Li tissakkar programm wieħed ma' VPN fuq Linux huwa l-aktar problema ta' routing, u r-regola tal-firewall tiddeċiedi biss x'jiġri wara li tintgħażel ir-rotta. Jekk tqabbel l-UID tal-programm f'OUTPUT qabel ma l-mina jkollha r-rotta default, ir-regola tarmi eżatt it-traffiku li ridt tipproteġi. L-istess regola lanqas tara l-proċess tar-resolver li jwieġeb it-talbiet DNS tal-programm. Ġib is-sekwenza sew u kont wieħed mingħajr privileġġi jsir selettur affidabbli tal-mina maqsuma.

Agħti rotta lill-kont qabel il-verdett

It-tqabbil tas-sid iwieġeb mistoqsija waħda: socket lokali li jappartjeni lil dan l-UID bena l-pakkett? Ma jagħżilx interface u ma jistax iċċaqlaq traffiku li t-tabella prinċipali diġà tibgħat mill-NIC fiżika. Għalhekk regola UID mingħajr rotta li taqbel timblokka l-programm minflok terġa' tiddirieġih.

Għaddi l-kont l-ewwel mit-tabella tiegħu stess, u mbagħad ħalli l-firewall jikkonferma r-riżultat. Dan jaħdem fuq host li l-iproute2 tiegħu jifhem uidrange, li ip rule help jirrapporta f'linja waħda. Tabella 100 iżżomm rotta default mill-mina, u r-regola tibgħat biss UID 1000 lil dik it-tabella. Kull ħaġa oħra tibqa' fuq it-tabella prinċipali u tkompli tuża l-link fiżiku.

ip rule add uidrange 1000-1000 table 100
ip route add default dev tun0 table 100

It-tieni kont li jeħtieġ mina oħra jieħu tabella 101 u r-regola tiegħu, għax żewġ profili ma jistgħux it-tnejn jippossjedu r-rotta default fl-istess tabella. Il-profili NetworkManager huma tas-sistema kollha, għalhekk din il-parti tibqa' manwali, u r-regoli jisparixxu meta jerġa' jibda, sakemm xi ħaġa ma terġax tinstalla. Ikteb it-tabelli fi skript tal-boot ħdejn id-definizzjoni tal-mina sabiex konnessjoni mill-ġdid ma tħallix kont wieħed fit-triq ħażina.

Għaliex l-eċċezzjoni tal-loopback toqtol il-mina

Il-biċċa l-kbira tal-verżjonijiet ikkupjati tar-regola jarmu kull pakkett li ma joħroġx mill-loopback. Il-mina mhix loopback, għalhekk dik il-forma tarmi wkoll it-traffiku tal-mina, u r-riżultat jidher qisu VPN mejjet aktar milli żball tal-firewall.

Meta jopera OUTPUT, il-kernel diġà għażel interface tal-ħruġ, għalhekk -o jiġi mqabbel mat-tweġiba tar-rotta u mhux mal-header tal-pakkett. It-tqabbil tas-sid jiġi kkonsultat biss f'OUTPUT u POSTROUTING, u l-pakketti mgħoddija ma jġorru ebda socket biex jaqrah. Dan il-kombinament ifisser li l-eċċezzjoni trid issemmi l-interface tal-mina u tinnega dak it-tqabbil, minflok tinnega l-loopback.

Il-loopback xorta jistħoqqlu l-ACCEPT tiegħu stess fuq id-DROP, għax l-ewwel pakkett DNS mill-programm imur lejn l-istub lokali permezz ta' lo. Qiegħed iż-żewġ regoli f'dan l-ordni, u l-kont jasal għall-istub, imbagħad għall-mina, u xejn ieħor.

iptables -I OUTPUT 1 -o lo -m owner --uid-owner vpnapp -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner vpnapp ! -o tun0 -j DROP

IPv6 huwa sett ta' regoli separat, u par biss għall-v4 iħalli ip6tables intatt. Programm li jippreferi rekords AAAA mbagħad joħroġ mil-link fiżiku mingħajr ma qatt jasal għad-DROP. Irrifletti ż-żewġ regoli f' ip6tables, jew iddiżattiva IPv6 fuq il-host meta l-mina ma jġorrx indirizz v6. Regoli miżjuda bl-idejn jisparixxu wkoll meta jerġa' jibda, għalhekk salvahom b' netfilter-persistent save jew ibni mill-ġdid l-istess loġika bħala tabella nftables li titgħabba mill-unità tal-boot.

Tweġibiet DNS jiġu minn proċess ieħor

It-talba tal-programm lejn 127.0.0.53 tgħaddi mill-ACCEPT tal-loopback, u hemmhekk jieqaf it-tqabbil tal-UID. Ir-resolver stub jgħaddi 'l fuq mill-kont tas-servizz tiegħu stess, għalhekk regola marbuta ma' vpnapp qatt ma tara t-tieni talba. Jekk ir-resolver jagħżel server LAN għal-link, it-tweġibiet jiġu lura mill-NIC fiżika filwaqt li l-pakketti tal-programm stess jibqgħu fil-mina. Ir-riżultat viżibbli huwa mina li taħdem b'ismijiet imkissrin, jew ismijiet li server li ma għażiltx iwieġeb għalihom.

Sejjaħ ir-riżoluzzjoni tal-ismijiet fuq il-link tal-mina, mhux fl-applikazzjoni. Agħti lill-profil tal-mina server DNS u dominju tar-routing, u mbagħad ikkonferma b' resolvectl query u resolvectl status tun0 li r-resolver jużah għall-ismijiet li jimpurtaw. Ġewwa spazju tal-ismijiet tan-netwerk il-problema tisparixxi, għax ir-resolver tal-ispazju jaf biss il-mina.

Ivverifika r-regola mill-kont stess

Staqsi lill-kernel liema rotta jieħu UID, imbagħad agħmel talba bħala dak il-kont u qabbel l-indirizz tal-ħruġ ma' dak tal-kont tiegħek. Jekk it-tnejn jirrapportaw l-istess indirizz, ir-regola qed tqabbel xi ħaġa oħra għajr it-traffiku li ttestjajt. L-ewwel kmand hawn taħt juri t-tfittxija tar-rotta mingħajr ma jibgħat pakkett, li jifred żball tar-routing minn żball tal-firewall.

ip route get 1.1.1.1 uid 1000
sudo -u vpnapp curl -s https://ifconfig.co

Il-kontaturi juru jekk regola qatt ma nqabdet. Mexxi iptables -vnL OUTPUT, aqra l-għadd tal-pakketti ħdejn kull regola, u qis żero ħdejn id-DROP wara traffiku reali bħala żball ta' tqabbil.

It-traffiku mgħoddi jinsab barra minn dan id-disinn. Kontenitur jew VM wara pont m'għandux socket lokali proprjetà ta' vpnapp, għalhekk it-tqabbil tas-sid qatt ma jinqabad u dawk il-pakketti jsegwu l-politika FORWARD minflok. Jekk dak ix-xogħol irid jiġi kopert, iċċekkjah separatament u ikteb politika marbuta mal-pont jew mal-indirizz tal-kontenitur. Id-disinn iżomm meta t-tabella, l-eċċezzjoni tal-interface, ir-resolver u r-regoli v6 kollha jindikaw l-istess naħa; ħalli waħda minnhom barra u l-kont jew jitlef it-traffiku jew jitlef il-konnessjoni.

Artikli relatati