NET_ADMIN nínú kóńténíà VPN: kí ni ó lè yí padà àti ibo
Ìfọwọ́sí yìí ń gbà àwọn ìyípadà ìnterféèsì, ọ̀nà àti firewall láàárín ibi orúkọ nẹ́tíwọ́kì kan. Pẹ̀lú nẹ́tíwọ́kì agbàlejò, ibi yẹn ni àkójọpọ̀ agbàlejò fúnra rẹ̀.
NET_ADMIN ni agbára Linux tí ó ń gbà kí ìlànà kan ṣe ìṣàkóso nẹ́tíwọ́kì, àti nínú kóńténíà ó ń ṣe gbogbo rẹ̀ nínú ibi orúkọ nẹ́tíwọ́kì tí ìlànà náà ń ṣiṣẹ́. Kì í ṣe ìwé àṣẹ láti ṣí socket, kì í sì í ṣe àròpo fún ẹ̀rọ tàbí ọ̀nà. Ìbéèrè tí ó dùn mọ́ni kì í ṣe bóyá a ti fún ni ní agbára, bí kò ṣe ibi orúkọ wo ni ó gba ìyípadà náà.
Ohun tí agbára náà bo
Nínú ibi orúkọ rẹ̀, ìlànà tí ó di NET_ADMIN mú lè gbé àwọn ìnterféèsì sókè àti sílẹ̀, yan àwọn àdírẹ́sì, fi àwọn ọ̀nà kún àti yọ wọ́n kúrò, kí ó sì kọ àwọn òfin firewall, èyí ni àkójọ àwọn iṣẹ́ tí capabilities(7) ń kó jọ sábẹ́ agbára yìí. Ó tún lè ṣàtúnṣe àwọn ètò ní ìpele ìnterféèsì tí ó ń ṣàkóso bí kérnélì ṣe ń tò traffic sínú ìlà àti bí ó ṣe ń ṣe àyọkà rẹ̀. Kíláìọ́ńtì VPN sábà máa ń nílò díẹ̀ nínú wọn nígbà ìbẹ̀rẹ̀ àti kò nílò ohun mìíràn lẹ́yìn náà. Ìdí ni pé ọ̀pọ̀ àwọn image ń béèrè fún àyè tí ó tóbi ju èyí tí wọ́n ń lò lọ.
Àwọn iṣẹ́ níta ibi orúkọ yẹn kò ní ààbò, àwọn ẹ̀tọ́ tí ó wà lẹ́gbẹ̀ẹ́ sì yàtọ̀. Kíkà àti kíkọ àwọn pákétì àìdẹ́rù jẹ́ ti NET_RAW, àti dídá ẹ̀rọ tun kan nílò agbára àti àǹfààní sí node ẹ̀rọ méjèèjì. Ìlànà tí kò ní ẹ̀rọ náà yóò gba àṣìṣe ìyọ̀ǹda tí ó dà bí ìṣòro nẹ́tíwọ́kì ṣùgbọ́n tí kì í ṣe bẹ́ẹ̀.
Ibi orúkọ ni ó pinnu ìwọ̀n ìbàjẹ́
Kóńténíà kan lórí nẹ́tíwọ́kì afárá rẹ̀ ṣàdéhùn loopback rẹ̀, àwọn ìnterféèsì rẹ̀ àti tábìlì ọ̀nà rẹ̀. Fífún ni ní NET_ADMIN níbẹ̀ ń gbà kíláìọ́ńtì VPN láti kọ́ tunnel láìfi ọwọ́ kàn àwọn ìpinnu ọ̀nà agbàlejò, èyí ni ìṣètò tí ọ̀pọ̀ àwọn image kóńténíà ń gbà.
Yí kóńténíà yẹn padà sí nẹ́tíwọ́kì agbàlejò, ìyọ̀ǹda kan náà yóò sì ṣàtúnṣe àwọn ọ̀nà agbàlejò àti firewall agbàlejò, nítorí kò sí ibi orúkọ ọ̀tọ̀ kankan tí ó kù. Kíláìọ́ńtì tí ó yẹ kí ó ṣàkóso tunnel kan lè darí traffic gbogbo ẹ̀rọ náà, àṣìṣe kan nínú script ìtúká rẹ̀ sì ń fi àwọn òfin tí ẹnikẹ́ni kò kọ sílẹ̀ lórí agbàlejò. Kò sí ohun tí ó yí padà nínú agbára fúnra rẹ̀; ipò náà yí padà. Ìdí ni pé fáìlì compose kan náà ń hùwà yàtọ̀ lórí agbàlejò méjì.
Àwọn àìpé mẹ́ta tí wọ́n ń dàpọ̀ sí ọ̀kan
Àwọn ìkùnà ìbẹ̀rẹ̀ nínú àwọn kóńténíà VPN sábà kan ọ̀kan nínú àwọn ohun mẹ́ta ọ̀tọ̀: agbára, ẹ̀rọ tunnel àti àtìlẹ́yìn kérnélì fún protocol. Fífún ni ní gbogbo mẹ́tẹ̀ẹ̀ta ní ẹ̀ẹ̀kan ṣiṣẹ́, ó sì tún jẹ́ kí ó ṣòro láti dá ìkùnà tí ó tẹ̀le mọ́ ẹnìkan. Fragment compose tí ó kéré jùlọ ń fún ni ní agbára, ó sì ń gbé node ẹ̀rọ náà kọjá ní kedere:
services:
vpn:
image: example/vpn-client:latest
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
sysctls:
- net.ipv4.conf.all.src_valid_mark=1Ka ìwé ìtọ́ni image fúnra rẹ̀ fún àwọn sysctl tí ó nílò, nítorí sysctl nínú kóńténíà lè nílò ẹ̀tọ́ àfikún tàbí ètò ní ìpele agbàlejò. Níbi tí image náà kò ti ṣe àtìlẹ́yìn fún ipò àyè olùṣe nìkan, a kò nílò ẹ̀rọ rárá, àkójọ àwọn agbára yóò sì dín kù ní ìbámu pẹ̀lú.
Fún ni ní iṣẹ́ tóóró, kì í ṣe ipò
Ipò àṣẹ ń fi gbogbo agbára léni, ó sì ń gbòòrò àǹfààní ẹ̀rọ ní ẹ̀ẹ̀kan náà, nítorí náà ó ń fi ibi tí ọ̀kan nínú àwọn àìpé mẹ́ta kù pamọ́. Ó tún ń jẹ́ kí àwọn ọ̀nà ìkùnà kóńténíà náà dà bí àwọn ìyípadà agbàlejò tí kò ṣeé yàtọ̀. Yàn àkọ́lé tí ó kedere kódà tí ó bá gùn láti kọ.
Àwọn ìgbékalẹ̀ àìníroot àti àwọn nínú ibi orúkọ olùṣe ń yí ohun tí agbára túmọ̀ sí nínú ìṣe padà, nítorí ìlànà lè gbà á ní àárín ibi orúkọ tí a ti ya àwòrán nìkan. Dídà àkójọ àwọn agbára kọ̀ọ̀kan láti àpẹẹrẹ tí ó ní root sí àyíká ṣíṣe tí kò ní root àti retí àyè kan náà jẹ́ ọ̀nà tí ó wọ́pọ̀ láti pàdánù ọ̀sán kan.
Àwọn àṣírí jẹ́ ti ìpinnu ọ̀tọ̀. Dídi NET_ADMIN mú kò sọ ohunkóhun nípa ìdánimọ̀ ẹlẹgbẹ́ tí kíláìọ́ńtì ń gbé jáde, àwọn ẹ̀rí tí ó ń gbé wọlé tàbí bí wọ́n ṣe ń yí padà. Ìṣàkóso nẹ́tíwọ́kì kò pèsè ìgbẹ́kẹ̀lé.
Ṣàyẹ̀wò ìyípadà náà kí o sì kọ ìdí tí ìyọ̀ǹda náà fi wà
Jẹ́rìí ohun tí kóńténíà gbà gan-an kí o tó ṣe àtúnṣe tunnel. Ìṣàyẹ̀wò tí ó wà nísàlẹ̀ ń ròyìn àwọn agbára tí a fi kún àti ipò nẹ́tíwọ́kì, lẹ́yìn náà ó ń fi bí àkójọ ìnterféèsì ṣe rí láti inú:
docker inspect --format '{{.HostConfig.CapAdd}} {{.HostConfig.NetworkMode}} {{.HostConfig.Privileged}}' vpn
docker exec vpn sh -c 'grep CapEff /proc/self/status'
docker exec vpn ip -br addr
docker exec vpn ip routeBí agbára bá wà tí àkójọ ìnterféèsì kò sì tíì kún, kíláìọ́ńtì ti kùnà kí ó tó lè dá ohunkóhun, ibi tí ó tẹ̀le láti wò ni àwọn àkọsílẹ̀ kóńténíà. Bí tunnel bá wà ṣùgbọ́n tí traffic kò bá ń ṣàn, tábìlì ọ̀nà nínú kóńténíà yóò dá ìbéèrè tí ó tẹ̀le lóhùn.
Ṣe àdánwò ọ̀nà ìtúká pẹ̀lú, nítorí kíláìọ́ńtì tí ó ń kọ àwọn òfin firewall lè fi wọ́n sílẹ̀ lẹ́yìn. Dá kóńténíà dúró kí o sì tún ṣàyẹ̀wò àkójọ òfin agbàlejò bí nẹ́tíwọ́kì agbàlejò bá ń lò. Ìyọ̀ǹda tí a kò nílò fún ìṣẹ́jú àáyá méjì péré ní ìbẹ̀rẹ̀ kò yẹ kí a ṣe àpèjúwe rẹ̀ nínú fáìlì compose gẹ́gẹ́ bí ohun tí ó pọn dandan láìsí àkọsílẹ̀ tí ó ṣàlàyé ìyẹn.
Kọ ìdí lẹ́gbẹ̀ẹ́ agbára kọ̀ọ̀kan: iṣẹ́ wo ni ó nílò rẹ̀ àti ohun tí ó kùnà láìsí rẹ̀. Àkọsílẹ̀ yẹn ń wà lẹ́yìn àwọn ìmúdójúìwọ̀n image, ìyàtọ̀ láàárín àkójọ ẹ̀tọ́ tí a ti ṣàyẹ̀wò àti ọ̀kan tí ó dàgbà nípasẹ̀ dídà àti lílẹ̀mọ́ náà sì ni.