Ìwọlé ń ṣiṣẹ́, PWD ń ṣiṣẹ́, lẹ́yìn náà LIST máa ń dìroro títí tí olùlò yóò fi juwọ́ sílẹ̀ tàbí yóò fi lọ sí ipò dátà mìíràn. Ìpínyà yẹn ni àmì: ìsopọ̀ ìṣàkóso sí ẹnu-ọ̀nà 21 wà ní àlàáfíà, nígbà tí ìsopọ̀ dátà ń jẹ́ kíkọ́ láti àdírẹ́sì tàbí ẹnu-ọ̀nà tí ẹ̀gbẹ́ kejì kò lè dé. Lẹ́yìn ẹnu-ọ̀nà VPN tí ó ń ṣe NAT pẹ̀lú, ẹni tí ó máa ń jẹ̀bi ni àṣẹ FTP tí ẹrù rẹ̀ ń dárúkọ àdírẹ́sì ọ̀nà-ìmọ̀ bí 10.8.0.6. Ìtumọ̀ àwọn àkọlé kò fi ọwọ́ kan iye yẹn rárá.

Èyí tí ó tẹ̀lé ni ibi tí iye yẹn ti wá, àti àpótí wo ni ó ní àṣẹ láti yí i padà.

Ẹrù ni ó ń bàjẹ́, kì í ṣe ọ̀nà-ìmọ̀

FTP ń gbé ìparí dátà sínú ṣíṣan ìṣàkóso. Nínú ipò aṣáájú, olùlò ń fi PORT ránṣẹ́ pẹ̀lú àdírẹ́sì àti ẹnu-ọ̀nà tirẹ̀, server sì ń pè padà sí oríṣa yẹn. Nínú ipò àìṣiṣẹ́, server ń dáhùn 227 pẹ̀lú oríṣa kan, olùlò sì ń pe oríṣa yẹn dípò.

Àwọn ọ̀nà méjèèjì ń gbé irú ọ̀rọ̀ kan náà: so mọ́ àdírẹ́sì yìí, ní ẹnu-ọ̀nà yìí. Ẹ̀rọ tí ó kọ àwọn àkọlé IP àti TCP tuntun nìkan ń fi ọ̀rọ̀ náà sílẹ̀ bí ó ti wà, nítorí náà ẹ̀gbẹ́ kan ń tẹ̀síwájú láti gbìyànjú dé àdírẹ́sì tí ó wà ní ẹ̀gbẹ́ kejì ọ̀nà-ìmọ̀ nìkan. Ìsopọ̀ dátà ń dúró lẹ́yìn tí a ti polongo ìsopọ̀ ìṣàkóso ní àlàáfíà.

Ipò mẹ́ta, ẹrù mẹ́ta

Tábìlì tí ó wà nísàlẹ̀ ń fi hàn ẹ̀gbẹ́ wo ni a ń sọ fún láti pe, àti ohun tí NAT tí ó kọ àkọlé tuntun nìkan lè ṣe nípa rẹ̀.

Ka ìlà tí ó kẹ́yìn gẹ́gẹ́ bí ohun tí ó kùnà kọ́kọ́. Nínú ipò aṣáájú, server ni ó ń pe àdírẹ́sì àdánidá; nínú ipò àìṣiṣẹ́, olùlò ni; ní FTPS ẹrù ni ọ̀rọ̀ àkọ̀wé, àpótí àárín sì ní ohun tí ó kéré sí i láti fi ṣiṣẹ́.

ModeValue in the control streamWho dials whomHeader-only NAT leaves
Active (PORT)client address and portserver dials the clienta server dialing an unreachable tunnel address
Passive (227)server address and portclient dials the servera client dialing an address it cannot route to
FTPSthe same values, inside TLSas aboveciphertext, so no rewrite happens at all

Fi olùrànlọ́wọ́ sí ibi tí ìtumọ̀ ti ń ṣẹlẹ̀

Lórí Linux, olùrànlọ́wọ́ nf_conntrack_ftp ni ó ń kọ ẹrù náà tuntun. Ó ń ṣọ́ ìsopọ̀ ìṣàkóso, ó ń kọ́ ẹnu-ọ̀nà tí a ti fohùn ṣọ̀kan lé, ó ń dá ìfojúsọ́nà fún ṣíṣan dátà, àti lórí àpótí NAT ó ń kọ àdírẹ́sì àti ẹnu-ọ̀nà tuntun nínú ẹrù. Ó ń rànwọ́ lórí ẹ̀rọ tí ó ń tumọ̀ àdírẹ́sì olùlò nìkan. Kíkó rẹ̀ sórí olùlò, tàbí sórí olùtọ́jú tí ó kàn ń gbé ṣíṣan lọ, kò yí ohunkóhun padà nínú ìpàdé.

Àwọn àṣẹ mẹ́ta wọ̀nyí ń fi hàn bóyá modulu wà, bóyá ó so mọ́ra, àti bóyá ìfojúsọ́nà wà nígbà tí ìpàdé wà ní ṣíṣí:

modprobe nf_conntrack_ftp
lsmod | grep nf_conntrack_ftp
conntrack -L expect | grep ftp

Kíkó modulu kì í ṣe bí kò ṣe sísopọ̀ mọ́ ọn. Àwọn kérnẹ́lì láti 4.7 síwájú ń wá pẹ̀lú net.netfilter.nf_conntrack_helper=0, nítorí náà olùrànlọ́wọ́ ń dúró de ìlànà tí ó ṣe kedere, bí iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp. Tí àkójọ ìfojúsọ́nà bá wà ní òfìfo nígbà tí a ń gbìyànjú gbígbé, ohun tí a gbọdọ̀ yẹ̀wò ni ìsopọ̀, kì í ṣe modulu.

Ipò àìṣiṣẹ́: sọ fún server ohun tí ó gbọdọ̀ kéde

Ipò àìṣiṣẹ́ rọrùn láti sọ di ìdánilójú nítorí a lè sọ fún server ohun tí ó gbọdọ̀ fi sínú ìdáhùn 227. Nínú vsftpd, ìyẹn ni pasv_address, pẹ̀lú pasv_min_port àti pasv_max_port; ProFTPD ń lò MasqueradeAddress àti PassivePorts. Ṣètò àwọn yẹn kọ́kọ́, nítorí àdírẹ́sì tí a kéde dáadáa yóò mú kùnà ohunkóhun tí a bá ní láti kọ tuntun ní ẹ̀gbẹ́ yẹn kúrò.

Lẹ́yìn náà jẹ́ kí ìwọ̀n ẹnu-ọ̀nà yẹn gbá ẹnu-ọ̀nà náà kọjá, bí -A FORWARD -i tun0 -p tcp --dport 30000:30100 -j ACCEPT, kí ìlànà lè bá ohun tí server ń kéde mu.

Ìṣètò méjèèjì gbọdọ̀ bá ara wọn mu. Server tí a sọ fún láti kéde 30000-30100 nígbà tí ẹnu-ọ̀nà ń gba 40000-40100 yóò kùnà ní ọ̀nà tí kò rànwọ́ rárá: ìjíròrò ìṣàkóso yóò dàbí alàáfíà, gbogbo ìsopọ̀ dátà yóò sì kú. Fi àwọn nọ́mbà wé ara wọn kí o tó ṣàtúnṣe ohunkóhun mìíràn.

Àmì ìkùnà méjì, àti ohun tí FTPS ń mú kúrò

Dídìroro lórí LIST ń tọ́ka sí ìsopọ̀ dátà àkọ́kọ́ ti ìpàdé, níbi tí kíkọ àdírẹ́sì tuntun àti ìfojúsọ́nà gbọdọ̀ ṣiṣẹ́ papọ̀. Dídìroro lórí RETR lẹ́yìn LIST tí ó ń ṣiṣẹ́ ń tọ́ka sí gbígbé náà fúnra rẹ̀, ìyẹn ìwọ̀n àìṣiṣẹ́ tàbí MTU ọ̀nà-ìmọ̀. Àmì kejì yẹn kì í ṣe ìṣòro ẹrù, àwọn ìṣètò olùrànlọ́wọ́ kò sì ní tún un ṣe.

FTP lórí TLS ń mú ẹrù tí olùrànlọ́wọ́ ń kà kúrò. Àpótí àárín kò lè kọ iye PORT tàbí PASV tuntun tí ó kò lè túmọ̀, nítorí náà àwọn àṣàyàn tí ó kù ni aṣojú tí ó ń parí TLS, server tí ó ń kéde àdírẹ́sì tí a lè dé nínú ìwọ̀n tí ó ní ààlà, tàbí ìlànà gbígbé mìíràn.

Ìtò àwọn àyẹ̀wò kúkúrú

Ṣiṣẹ́ láti àmì náà sí ìta. Jẹ́rìí sí i pé LIST kùnà nígbà tí PWD ń yọrísí, mú àdírẹ́sì tí ó wà nínú ẹrù PORT tàbí 227, kí o sì béèrè ẹ̀rọ wo ni ó ń tumọ̀ àdírẹ́sì yẹn. So olùrànlọ́wọ́ mọ́ ibẹ̀, wo àkójọ ìfojúsọ́nà nígbà gbígbé kan, lẹ́yìn náà tún ipò àìṣiṣẹ́ ṣe lórí server kí o sì fi ìwọ̀n náà hàn nínú ìlànà ẹnu-ọ̀nà.

Ya ìkùnà ojú-ọ̀nà dátà sọ́tọ̀ kúrò nínú ìkùnà gbígbé púpọ̀, nítorí wọ́n ń mú ọ lọ sí ìṣètò àtọ̀ọ̀tọ̀.

Àwọn àpilẹ̀kọ tó jọra