Ṣèdíwọ́ Ìbùdó Ibi Kan fún Gbogbo Àkójọ Àwọn Oníbàárà VPN
Òfin nftables kan lè kọ ìpilẹ̀ ibi sílẹ̀ fún àkójọ VPN tí a gbà láyè láìfọwọ́ kan ìrìn àjò ẹnubode fúnra rẹ̀. Bára mu hook àti ipò.
Òfin kan lè mú àkójọ VPN tí a gbà láyè kúrò ní ọ̀nà ìbùdó ibi láìdábọ̀ ohunkóhun mìíràn tí ẹnubode ń ṣe. Òfin fúnra rẹ̀ kúrú; àwọn apá tí ó ń pinnu bóyá yóò ṣiṣẹ́ ni hook tí ó ń gbé inú rẹ̀ àti ipò rẹ̀ nínú ẹ̀wọ̀n. Bí o bá ṣe àṣìṣe nínú àwọn méjì yìí, ìwọ yóò rí odi iná tí ó dàbí ẹni pé ó tọ́ ṣùgbọ́n tí ó ń hùwà àìṣọ̀kan. Bẹ̀rẹ̀ láti inú ohun tí pákẹ́ẹ̀tì ń ṣe nígbà tí òfin bá rí i.
Ohun tí òfin ń bára mu ní ti gidi
Òfin ń bára mu ohun mẹ́ta lẹ́ẹ̀kan: interface ìwọlé, ìpilẹ̀ orísun àti ìpilẹ̀ ibi. Àwọn mẹ́tẹ̀ẹ̀ta gbọ́dọ̀ jẹ́ òtítọ́ kí a tó fi drop sílẹ̀, ìyẹn sì ni ó ń jẹ́ kí ó há. Kíkà rẹ̀ gẹ́gẹ́ bi ìṣàpèjúwe kan rọrùn ju kíkà rẹ̀ gẹ́gẹ́ bi ìlànà mẹ́ta lọ́tọ̀ọ̀tọ̀.
Ìbáramu interface ni ó ń yàtọ̀ ìrìn àjò oníbàárà tí a gbé lọ mọ́ àwọn ìsopọ̀ ẹnubode fúnra rẹ̀. Láìsí rẹ̀, òfin tí ó ń dárúkọ àkójọ orísun nìkan yóò tún ní ipa lórí àwọn pákẹ́ẹ̀tì tí ẹnubode fúnra rẹ̀ ń ṣẹ̀dá láti ibi àdírẹ́sì yẹn, bí irú bẹ́ẹ̀ bá ṣẹlẹ̀ rí. Ìpilẹ̀ orísun ń fi ìlànà sí àwọn oníbàárà tí a gbà láyè, ìpilẹ̀ ibi sì fi sí ibùdó kan. Ka òfin gẹ́gẹ́ bi àfikún, kì í ṣe àkọsílẹ̀.
Kọ àwọn iye mẹ́ta sílẹ̀ kí o tó ṣàtúnṣe ohunkóhun: orúkọ interface tunnel, àkójọ tí olùpèsè ń pín, àti ìpilẹ̀ tí o fẹ́ kọ̀. Àṣìṣe ìtẹ̀wé nínú èyíkéyìí wọn yóò dá òfin tí a ń ṣàyẹ̀wò dáadáa ṣùgbọ́n tí kò dáàbò bo ohunkóhun. Tọ́jú àwọn iye mẹ́ta yẹn nínú àkọsílẹ̀ ìyípadà lẹ́gbẹ̀ẹ́ òfin.
Hook ni ó ń pinnu ẹni tí òfin kan
Ẹ̀wọ̀n netfilter so mọ́ hook kan, àti hook ni ó ń pinnu àwọn pákẹ́ẹ̀tì tí ẹ̀wọ̀n ń rí. Hook forward ń rí ìrìn àjò tí a ń darí nípasẹ̀ ẹnubode, ìyẹn sì ni ìrìn àjò láti oníbàárà sí ibi. Gbogbo ohun mìíràn nínú ẹ̀wọ̀n ni a darí sí àwùjọ mìíràn.
Hook input ń rí ìrìn àjò tí a darí sí ẹnubode fúnra rẹ̀, nítorí náà òfin tí a gbé síbẹ̀ ń ṣàkóso àǹfààní sí àwọn iṣẹ́ rẹ̀ fúnra rẹ̀, kì í ṣe ìrékọjá. Hook output ń rí ìrìn àjò tí ẹnubode fúnra rẹ̀ ń dá, èyí tí ó tako ohun tí ìlànà àkójọ oníbàárà nílò. Orúkọ ẹ̀wọ̀n jẹ́ àmì àìdábọ̀ tí ẹni tí ó kọ àwọn òfin yàn, nítorí náà má ṣe yọ hook jáde láti inú orúkọ. Ṣàyẹ̀wò ibi tí a so ẹ̀wọ̀n mọ́ kí o tó rò pé ó lè bára mu ohun kan.
| Hook | Traffic it sees | Right for this policy |
|---|---|---|
| input | Addressed to the gateway | No, that is the host's own services |
| forward | Routed through the gateway | Yes, for client-to-destination traffic |
| output | Generated by the gateway | No, that is the opposite direction |
Kíkà ìsopọ̀ jẹ́ àyẹ̀wò ìlà kan tí ó ń dènà òfin láti jábọ́ sínú ẹ̀wọ̀n tí kò rí pákẹ́ẹ̀tì rí.
Gbé òfin síwájú accept gbòòrò
A ń ṣàyẹ̀wò àwọn òfin ní ìtẹ̀léra, ìdájọ́ àkọ́kọ́ sì ń ṣẹ́gun. Accept gbòòrò tí ó wà níwájú nínú ẹ̀wọ̀n ń parí àyẹ̀wò fún àwọn pákẹ́ẹ̀tì tí ó bára mu, nítorí náà drop tí a fi kún ní ìgbà tó kọjá kò ní ṣiṣẹ́ fún wọn rí. Òfin ìtẹ̀léra yẹn ni gbogbo ìdí tí òfin tí ó dàbí ẹni pé ó tọ́ fi lè má ní ipa.
Fi òfin síwájú accept dípò kíkún un mọ́ ìparí. Bí ẹ̀wọ̀n bá ti ní accept gbogbogbò fún interface tunnel, òfin tuntun gbọ́dọ̀ wà ṣáájú rẹ̀, bí bẹ́ẹ̀ kọ́ ó kàn jẹ́ ọ̀ṣọ́. Ṣàyẹ̀wò ìtẹ̀léra tí ó jáde, kì í ṣe fáìlì tí o ṣàtúnṣe, nítorí àkójọ òfin tí a kó láti inú ọ̀pọ̀lọpọ̀ fáìlì lè má bára mu èyíkéyìí wọn. Lẹ́yìn náà fi pákẹ́ẹ̀tì ìdánwò láti inú àkójọ jẹ́rìí.
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
Àṣẹ kẹta ń ṣàyẹ̀wò fáìlì láìfi í ṣiṣẹ́, èyí tí ó ń mú àwọn àṣìṣe ìṣàpèjúwe kí wọ́n tó di ìdálẹ́sẹ̀. Fi í ṣiṣẹ́ pẹ̀lú ètò ìpadàsẹ́yìn, nítorí òfin tí kò tọ́ nínú ẹ̀wọ̀n forward lè gé tunnel tí o ń ṣiṣẹ́ lórí rẹ̀.
Àwọn ìṣàn tí ó wà tẹ́lẹ̀ kò bìkítà fún òfin tuntun rẹ
Àkọsílẹ̀ conntrack tí a dá kí òfin tó wà ń tẹ̀síwájú láti bára mu accept àtẹ́lẹ̀. Ìdí nìyẹn tí drop tuntun fi máa ń dàbí ẹni pé ó ń ṣiṣẹ́ fún àwọn ìsopọ̀ tuntun tí kò sì ṣe ohunkóhun fún èyí tí a ń dán wò.
Ka àfikún ipò ní orí ẹ̀wọ̀n. Bí ó bá gba ìrìn àjò established àti related ṣáájú òfin rẹ, gbogbo ìṣàn tí ó ti ń lọ yóò tẹ̀síwájú láti ṣàn títí yóò fi dé. Ní àkókò méèló ló máa ń jẹ́ ìhùwà tí o fẹ́ fún òfin pàjáwìrì, ó sì ń dàrú nígbà tí o ń retí ìgé lẹ́sẹ̀kẹsẹ̀. Pinnu ipa tí o fẹ́ kí o tó gbé e kalẹ̀. Ìdánwò tí ó tún ìsopọ̀ ṣí lò yóò sọ ìtàn tí kò tọ́ fún ọ.
sudo conntrack -L -s 10.90.0.14 -d 198.51.100.20
sudo nft list ruleset | grep -n -A3 'ct state'
Àṣẹ àkọ́kọ́ ń fi hàn bóyá ìṣàn wà, àti èkejì ń fi hàn bóyá òfin ipò àkọ́kọ́ ń tẹ̀síwájú láti gbà á. Àwọn méjèèjì jẹ́ àfikún kíkà nìkan, ó sì já fáfá láti ṣiṣẹ́ nígbà ìṣẹ̀lẹ̀.
Ohun tí òfin yìí kì í ṣe
Òfin kì í ṣe àkọsílẹ̀ dúdú ti àwọn ibùdó, ìlànà IPv6 tàbí ìhámọ́ lórí àkọsílẹ̀ ohun èlò kan.
Ọ̀kọ̀ọ̀kan wọn nílò ọ̀nà rẹ̀ fúnra rẹ̀. Ìdíwọ́ ibùdó gbọ́dọ̀ yanjú àwọn orúkọ, èyí tí àyọkúrò pákẹ́ẹ̀tì kò ṣe. Ìrìn àjò IPv6 nílò àbáramu rẹ̀ fúnra rẹ̀, nítorí ìṣàpèjúwe ip kò sọ ohunkóhun nípa pákẹ́ẹ̀tì ip6. Ìhámọ́ ní ìpele ohun èlò jẹ́ ti iṣẹ́ tàbí ti aṣojú tí a fìdí rẹ̀ múlẹ̀, kì í ṣe ti àbáramu ìpilẹ̀. Pípín àwọn àìní wọ̀nyí yàtọ̀ ni ó ń dènà kí òfin há kan ṣoṣo pé kí ó ṣe iṣẹ́ mẹ́rin.
Àdéhùn tí òfin yìí ń fúnni ṣe pàtó: ìrìn àjò láti àkójọ tí a gbà láyè sí ìpilẹ̀ ibi kan ni a kọ̀, nígbà tí ìrìn àjò ẹnubode tí kò ní í ṣe dídúró lórí ìlànà tí ó wà tẹ́lẹ̀. Kọ gbólóhùn yẹn lẹ́gbẹ̀ẹ́ òfin, ẹni tó kàn yóò sì mọ ohun tí ó jẹ́ fún.