Bí a ṣe lè so ìtòlẹ́sẹẹsẹ Linux kan mọ́ VPN pẹ̀lú àwọn òfin UID
Òfin UID ń rí àwọn sokẹ́ẹ̀tì àdúgbò nìkan, ìyọkùrò loopback tó wọ́pọ̀ sì ń pa ọ̀nà àbẹ́wọ̀ náà. Kọ́kọ́ tọ́ ọ̀nà fún àkọsílẹ̀, lẹ́yìn náà ṣe àyẹ̀wò àti ìjẹ́rìí ìgbésẹ̀ kọ̀ọ̀kan.
Sísọ ìtòlẹ́sẹẹsẹ kan mọ́ VPN lórí Linux jẹ́ ìṣòro ọ̀nà ní pàtàkì, òfin firewall sì ń pinnu kìkì ohun tí yóò ṣẹlẹ̀ lẹ́yìn tí a ti yan ọ̀nà. Tí o bá fi UID ìtòlẹ́sẹẹsẹ náà mu pọ̀ nínú OUTPUT kí ọ̀nà àbẹ́wọ̀ náà tó ní ọ̀nà àkọ́kọ́, òfin náà yóò da ìrìnàjò gan-an tí o fẹ́ dáàbò bò nù. Òfin kan náà kò tún rí ìlànà resolver tí ń dáhùn àwọn ìbéèrè DNS ìtòlẹ́sẹẹsẹ náà. Ṣètò ìlànà náà dáadáa, àkọsílẹ̀ kan tí kò ní àǹfààní yóò di olùyàn ọ̀nà àbẹ́wọ̀ tí a pín tí ó ṣeé gbẹ́kẹ̀ lé.
Fún àkọsílẹ̀ ní ọ̀nà kí ìdájọ́ tó dé
Ìbámu onípín ń dáhùn ìbéèrè kan: ṣé sokẹ́ẹ̀tì àdúgbò tí ó jẹ́ ti UID yìí ló kọ́ pákẹ́ẹ̀tì náà? Kò yan interface, kò sì lè gbé ìrìnàjò tí tábìlì àkọ́kọ́ ti ń fi NIC gidi rán jáde. Ìdí niyẹn tí òfin UID tí kò ní ọ̀nà tó bá mu fi ń dí ìtòlẹ́sẹẹsẹ náà lọ́wọ́ dípò yíyí i padà.
Kọ́kọ́ gbé àkọsílẹ̀ náà kọjá inú tábìlì tirẹ̀, lẹ́yìn náà jẹ́ kí firewall jẹ́rìí èsì náà. Èyí ń ṣiṣẹ́ lórí ẹ̀rọ tí iproute2 rẹ̀ gbọ́ uidrange, èyí tí ip rule help ń ròyìn ní ìlà kan. Tábìlì 100 ń dá ọ̀nà àkọ́kọ́ dúró nípasẹ̀ ọ̀nà àbẹ́wọ̀ náà, òfin náà sì ń fi UID 1000 nìkan ránṣẹ́ sí tábìlì yẹn. Gbogbo ohun mìíràn wà lórí tábìlì àkọ́kọ́, ó sì ń lo ọ̀nà gidi náà.
ip rule add uidrange 1000-1000 table 100 ip route add default dev tun0 table 100
Àkọsílẹ̀ kejì tí ó nílò ọ̀nà àbẹ́wọ̀ mìíràn gba tábìlì 101 àti òfin tirẹ̀, nítorí pé profáìlì méjì kò lè jẹ́ onípín ọ̀nà àkọ́kọ́ nínú tábìlì kan náà papọ̀. Profáìlì NetworkManager jẹ́ ti gbogbo ẹ̀rọ, nítorí náà apá yìí ń wà ní ọwọ́, àwọn òfin sì ń pòórá nígbà ìtúnbẹ̀rẹ̀ àyàfi tí nnkan kan bá mú wọn padà. Kọ àwọn tábìlì sínú script ìbẹ̀rẹ̀ lẹ́gbẹ̀ẹ́ ìtumọ̀ ọ̀nà àbẹ́wọ̀ náà, kí ìtúnso pọ̀ má baà fi àkọsílẹ̀ kan sí ọ̀nà tí kò tọ́.
Ìdí tí ìyọkùrò loopback fi ń pa ọ̀nà àbẹ́wọ̀ náà
Ọ̀pọ̀ jùlọ àwọn ẹ̀dà òfin tí a dà kọ ń da gbogbo pákẹ́ẹ̀tì tí kò jáde nípasẹ̀ loopback nù. Ọ̀nà àbẹ́wọ̀ kì í ṣe loopback, nítorí náà irú náà tún ń da ìrìnàjò ọ̀nà àbẹ́wọ̀ náà nù, èsì sì dàbí VPN tí ó kú dípò àṣìṣe firewall.
Nígbà tí OUTPUT ń ṣiṣẹ́, kọ̀mpútà ti yan interface àbájáde tẹ́lẹ̀, nítorí náà -o ni a fi ń fiwé ìdáhùn ọ̀nà náà, kì í ṣe orí pákẹ́ẹ̀tì. Ìbámu onípín ni a ń wò nínú OUTPUT àti POSTROUTING nìkan, àwọn pákẹ́ẹ̀tì tí a fi ránṣẹ́ kò sì gbé sokẹ́ẹ̀tì kankan fún un láti kà. Àkópọ̀ yẹn túmọ̀ sí pé ìyọkùrò náà gbọ́dọ̀ dárúkọ interface ọ̀nà àbẹ́wọ̀ náà kí ó sì tako ìbámu yẹn, dípò títako loopback.
Loopback ṣì yẹ fún ACCEPT tirẹ̀ lórí DROP, nítorí pé pákẹ́ẹ̀tì DNS àkọ́kọ́ láti inú ìtòlẹ́sẹẹsẹ náà ń lọ sí stub àdúgbò nípasẹ̀ lo. Fi òfin méjèèjì sí ìlànà yìí, àkọsílẹ̀ náà yóò dé stub, lẹ́yìn náà ọ̀nà àbẹ́wọ̀ náà, kò sì ní ibòmíì.
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 jẹ́ àkójọ òfin ọ̀tọ̀, bí ó sì jẹ́ pé a ṣe é fún v4 nìkan, ó ń fi ip6tables sílẹ̀ láìfọwọ́ kàn. Ìtòlẹ́sẹẹsẹ tí ó fẹ́ àwọn àkọsílẹ̀ AAAA yóò jáde nípasẹ̀ ọ̀nà gidi láì máa dé DROP rárá. Ṣàfihàn òfin méjèèjì nínú ip6tables, tàbí pa IPv6 dà lórí ẹ̀rọ nígbà tí ọ̀nà àbẹ́wọ̀ kò bá gbé àdírẹ́sì v6 kankan. Àwọn òfin tí a fi ọwọ́ kún pẹ̀lú ń pòórá nígbà ìtúnbẹ̀rẹ̀, nítorí náà fi netfilter-persistent save pamọ́ tàbí kọ́ ìmọ̀ràn kan náà lẹ́ẹ̀kan sí i gẹ́gẹ́ bí tábìlì nftables tí ẹ̀yà ìbẹ̀rẹ̀ ń gbé wọlé.
Àwọn ìdáhùn DNS ń wá láti inú ìlànà mìíràn
Ìbéèrè ìtòlẹ́sẹẹsẹ náà sí 127.0.0.53 ń kọjá ACCEPT loopback, níbẹ̀ ni ìbámu UID sì ń dúró. Resolver stub ń gbé e lọ sókè láti inú àkọsílẹ̀ iṣẹ́ tirẹ̀, nítorí náà òfin tí a so mọ́ vpnapp kò ní rí ìbéèrè kejì láé. Tí resolver bá yan sáfà LAN fún ọ̀nà náà, àwọn ìdáhùn yóò padà wá nípasẹ̀ NIC gidi nígbà tí àwọn pákẹ́ẹ̀tì ìtòlẹ́sẹẹsẹ náà fúnra wọn yóò wà nínú ọ̀nà àbẹ́wọ̀ náà. Èsì tí a rí ni ọ̀nà àbẹ́wọ̀ tí ń ṣiṣẹ́ pẹ̀lú àwọn orúkọ tí ó ti bàjẹ́, tàbí àwọn orúkọ tí sáfà tí o kò yàn ń dáhùn.
Tún ìpinnu orúkọ ṣe lórí ọ̀nà àbẹ́wọ̀ náà, kì í ṣe nínú ohun èlò náà. Fún profáìlì ọ̀nà àbẹ́wọ̀ náà ní sáfà DNS àti ìkànpé orúkọ ìtọ́nà, lẹ́yìn náà fi resolvectl query àti resolvectl status tun0 jẹ́rìí pé resolver ń lò ó fún àwọn orúkọ tí ó ṣe pàtàkì. Nínú àlàfo orúkọ nẹ́tíwọ́kì, ìṣòro náà ń pòórá, nítorí resolver àlàfo náà mọ̀ ọ̀nà àbẹ́wọ̀ náà nìkan.
Yẹ òfin náà wò láti inú àkọsílẹ̀ náà fúnra rẹ̀
Bèèrè lọ́wọ́ kọ̀mpútà ọ̀nà tí UID ń gbà, lẹ́yìn náà ṣe ìbéèrè gẹ́gẹ́ bí àkọsílẹ̀ yẹn kí o sì fi àdírẹ́sì àbájáde wé ti àkọsílẹ̀ rẹ fúnra rẹ. Tí àwọn méjèèjì bá ròyìn àdírẹ́sì kan náà, òfin náà ń bá nnkan mìíràn mu yàtọ̀ sí ìrìnàjò tí o dán wò. Àṣẹ àkọ́kọ́ nísàlẹ̀ ń fi ìwárí ọ̀nà hàn láìfi pákẹ́ẹ̀tì ránṣẹ́, èyí tí ó ya àṣìṣe ìtọ́nà sọ́tọ̀ kúrò nínú àṣìṣe firewall.
ip route get 1.1.1.1 uid 1000 sudo -u vpnapp curl -s https://ifconfig.co
Àwọn olùka ń fi hàn bóyá òfin kan ti ṣiṣẹ́ rí. Ṣe iptables -vnL OUTPUT, kà iye pákẹ́ẹ̀tì lẹ́gbẹ̀ẹ́ gbogbo òfin, kí o sì ka òdo lẹ́gbẹ̀ẹ́ DROP lẹ́yìn ìrìnàjò gidi sí àṣìṣe ìbámu.
Ìrìnàjò tí a fi ránṣẹ́ wà ní òde ètò yìí. Kọ́nténà tàbí VM lẹ́yìn afárá kò ní sokẹ́ẹ̀tì àdúgbò tí vpnapp ní, nítorí náà ìbámu onípín kò ní ṣiṣẹ́ láé, àwọn pákẹ́ẹ̀tì yẹn sì ń tẹ̀lé ìlànà FORWARD. Tí a bá nílò láti bo iṣẹ́ yẹn, dán wò lọ́tọ̀ kí o sì kọ ìlànà tí a so mọ́ afárá tàbí àdírẹ́sì kọ́nténà náà. Ètò náà dúró nígbà tí tábìlì, ìyọkùrò interface, resolver àti àwọn òfin v6 gbogbo bá tọ́ka sí ọ̀nà kan; fi ọ̀kan nínú wọn sílẹ̀, àkọsílẹ̀ náà yóò jo tàbí kí ó pàdánù ìsopọ̀.