Kí ni ìdí tí àwọn àkójọ FTP fi dìroro lẹ́yìn ẹnu-ọ̀nà VPN tí ó ń ṣe NAT
Ìwọlé àti PWD máa ń yọrísí, ṣùgbọ́n LIST àti RETR máa ń dúró nígbà tí NAT bá kọ àwọn àkọlé tuntun nìkan. Wo ibi tí olùrànlọ́wọ́ FTP gbọdọ̀ wà àti bí a ṣe lè tún ipò àìṣiṣẹ́ ṣe.
Ì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ṣẹ́.
| Mode | Value in the control stream | Who dials whom | Header-only NAT leaves |
|---|---|---|---|
| Active (PORT) | client address and port | server dials the client | a server dialing an unreachable tunnel address |
| Passive (227) | server address and port | client dials the server | a client dialing an address it cannot route to |
| FTPS | the same values, inside TLS | as above | ciphertext, 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ọ̀.