Kwa nini orodha za FTP huning’inia nyuma ya lango la VPN linalofanya NAT
Kuingia na PWD hufanikiwa wakati LIST na RETR vinasimama wakati NAT inapoandika upya vichwa pekee. Tazama msaidizi wa FTP anapaswa kuwepo na jinsi ya kurekebisha hali tulivu.
Kuingia kunafanya kazi, PWD inafanya kazi, kisha LIST huning’inia hadi mteja akate tamaa au ahamie hali nyingine ya data. Mgawanyiko huu ndio saini: muunganisho wa udhibiti kwenye lango la 21 uko mzima, wakati muunganisho wa data unajengwa kutoka anwani au lango ambalo upande wa pili hauwezi kufikia. Nyuma ya lango la VPN linalofanya pia NAT, mtuhumiwa wa kawaida ni amri ya FTP ambayo mzigo wake unataja anwani ya handaki kama 10.8.0.6. Utafsiri wa vichwa haugusi kamwe thamani hiyo.
Kinachofuata ni wapi thamani hiyo inatoka, na sanduku gani lina ruhusa ya kuibadilisha.
Kinachovunjika ni mzigo, si handaki
FTP huweka ncha ya data ndani ya mkondo wa udhibiti. Katika hali tendaji mteja hutuma PORT akiwa na anwani na lango lake mwenyewe, na seva hupiga simu tena kwenye jozi hiyo. Katika hali tulivu seva hujibu 227 ikiwa na jozi, na mteja hupiga simu jozi hiyo badala yake.
Aina zote mbili hubeba kauli ya aina moja: ungana na anwani hii, kwenye lango hili. Kifaa kinachoandika upya vichwa vya IP na TCP pekee huacha kauli kama ilivyo, kwa hiyo upande mmoja unaendelea kujaribu kufikia anwani ambayo ipo tu upande wa pili wa handaki. Muunganisho wa data husimama baada ya muunganisho wa udhibiti kutangazwa kuwa mzima.
Hali tatu, mizigo mitatu
Jedwali hapa chini linaonyesha upande gani unaombwa kupiga simu, na kile NAT inayoandika upya vichwa pekee inaweza kufanya kuhusu hilo.
Soma safu ya mwisho kama kitu kinachoshindikana kwanza. Katika hali tendaji seva ndiyo inayopiga simu anwani ya faragha, katika hali tulivu ni mteja, na kwa FTPS mzigo ni maandishi yaliyofichwa na sanduku la kati lina kidogo zaidi cha kufanyia kazi.
| 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 |
Weka msaidizi mahali ambapo utafsiri unatokea
Kwenye Linux uandikaji upya wa mzigo hufanywa na msaidizi nf_conntrack_ftp. Hufuatilia muunganisho wa udhibiti, hujifunza lango lililojadiliwa, huunda matarajio kwa mtiririko wa data, na kwenye sanduku la NAT huandika upya anwani na lango ndani ya mzigo. Husaidia tu kwenye kifaa kinachotafsiri anwani ya mteja. Kupakia kwenye mteja, au kwenye kipanga njia kinachopeleka mtiririko tu, hakubadilishi chochote kwenye kikao.
Amri hizi tatu zinaonyesha kama moduli ipo, kama imeunganishwa, na kama matarajio yapo wakati kikao kiko wazi:
modprobe nf_conntrack_ftp
lsmod | grep nf_conntrack_ftp
conntrack -L expect | grep ftp
Kupakia moduli si sawa na kuiunganisha. Kerneli kuanzia 4.7 huja na net.netfilter.nf_conntrack_helper=0, kwa hiyo msaidizi husubiri kanuni iliyo wazi, kwa mfano iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp. Ikiwa orodha ya matarajio inabaki tupu wakati uhamishaji unajaribiwa, kinachopaswa kukaguliwa ni muunganisho, si moduli.
Hali tulivu: mwambie seva itangaze nini
Hali tulivu ni rahisi kuifanya iwe ya uhakika kwa sababu seva inaweza kuambiwa nini cha kuweka kwenye jibu la 227. Katika vsftpd hiyo ni pasv_address, pamoja na pasv_min_port na pasv_max_port; ProFTPD hutumia MasqueradeAddress na PassivePorts. Weka hizo kwanza, kwa sababu anwani iliyotangazwa ipasavyo huondoa haja ya kuandika upya chochote upande huo.
Kisha ruhusu safu hiyo ya lango ipite kwenye lango kuu, kwa mfano -A FORWARD -i tun0 -p tcp --dport 30000:30100 -j ACCEPT, ili kanuni ilingane na kile seva inatangaza.
Mipangilio miwili lazima ikubaliane. Seva inayoambiwa itangaze 30000-30100 wakati lango linaruhusu 40000-40100 hushindikana kwa njia isiyosaidia kabisa: mazungumzo ya udhibiti yanaonekana mzima na kila muunganisho wa data hufa. Linganisha namba kabla ya kutatua kitu kingine chochote.
Dalili mbili za kushindikana, na kile FTPS huondoa
Kuning’inia kwenye LIST kunaonyesha muunganisho wa kwanza wa data wa kikao, ambapo uandikaji upya wa anwani na matarajio yote mawili lazima yafanye kazi. Kuning’inia kwenye RETR baada ya LIST inayofanya kazi kunaonyesha uhamishaji wenyewe, yaani safu tulivu au MTU ya handaki. Dalili hiyo ya pili si tatizo la mzigo, na mipangilio ya msaidizi haitarekebisha.
FTP juu ya TLS huondoa mzigo ambao msaidizi husoma. Sanduku la kati haliwezi kuandika upya thamani ya PORT au PASV ambayo haliwezi kuifungua, kwa hiyo kinachobaki ni proksi inayomaliza TLS, seva inayotangaza anwani inayofikika ndani ya safu yenye mipaka, au itifaki nyingine ya uhamishaji.
Mpangilio mfupi wa ukaguzi
Fanya kazi kutoka dalili kwenda nje. Thibitisha kwamba LIST inashindikana wakati PWD inafanikiwa, kamata anwani ndani ya mzigo wa PORT au 227, na uulize kifaa gani kinatafsiri anwani hiyo. Unganisha msaidizi hapo, angalia orodha ya matarajio wakati wa uhamishaji mmoja, kisha rekebisha hali tulivu kwenye seva na uakisi safu kwenye kanuni ya lango.
Tenganisha kushindikana kwa njia ya data na kushindikana kwa uhamishaji mkubwa, kwa sababu hupeleka kwenye mipangilio tofauti.