FTP on üpris vastik protokoll.
Port 21/TCP on FTP command port - see, mille kaudu edastatakse käske ning 20/TCP on FTP data port - see, mille kaudu edastatakse datat. Esmapilgul tundub lihtne, kuid...
FTP saab töötada kahel moel - active FTP ja passive FTP.
Active FTP puhul ühendub klient FTP serveri 21/TCP pordile, klient ja server vahetavad tervitussõnad ning klient hakkab kuulama suvalisel privilegeerimata pordil (< 1023), teatab selle pordi numbri serverile ning server loob oma 20'ndast TCP pordist ühenduse tagasi kliendini sellesse porti, mille klient talle teatas. Edasi järgneb juba failide saatmine.
Me näeme, et kui dreambox on server ning asub mingi NAT'iva tulemüüri taga ja saab vabalt väljapoole luua ühendusi, pole tarvis active FTP töötamiseks väljast sisse suunata rohkem kui port 21/TCP.
Passive FTP puhul ühendub klient kõigepealt serveri 21/TCP porti ning annab käsu PASV, mille peale server hakkab kuulama suvalisel privilegeerimata TCP pordil ning teatab kliendile, millisel pordil ta kuulab. Klient loob teise (data) ühenduse sellele pordile ning kui kõik hästi läheb, saab edastada faile.
Me näeme, et passive FTP on hea kasutada juhul, kui klient on NAT'iva tulemüüri taga, kuid server mitte. Olukorras, kus dreambox on FTP server ning asub NAT'iva tulemüüri taga, passive FTP ühendus niisama lihtsalt ei õnnestu.
Selleks, et mõlemad FTP meetodid üle NAT'i töötaks, on moekamates paketifiltrites (näiteks Linuxi Netfilter jpt.) vastav moodul, mis kuulab pealt FTP käsusessiooni (ühendus, mis on loodud kliendi poolt FTP serverisse pordile 21/TCP) ning avab või suunab vastavad pordid, mis kliendi ja serveri vahel kokku lepiti.
Veelgi keerulisemaks läheb olukord siis, kui nii klient kui ka server on NAT'iva tulemüüri taga. Et niisuguses olukorras FTP toimiks, peab active FTP puhul vähemalt kliendipoolne tulemüür suutma FTP käsusessiooni pealt kuulata ja porte avada/suunata, passive FTP puhul peab see oskus olema serveripoolsel tulemüüril.
Mitte ühelgi juhul ei ole vaja FTP serveri ees olevast NAT'ivast tulemüürist suunata 20/TCP porti.
Kasulik lugemisvara:
http://slacksite.com/other/ftp.html
P.S.
sniff01 kirjutas:Endal konf järgmine: elioni kodutöö, ja seda jagab Linksys WRT54G ruuter.
Kui see Linksysi purk jooksutab Linuxit (hw. rev. vanem kui 5.0), on seal FTP sessiooni pealtkuulamise ja portide avamise/suunamise moodul vaikimisi laetud ning piisab 21/TCP pordi suunamisest.
Kui selle purgi sees on VxWorks (hw. rev. 5.0 ja uuemad), siis noh... loodetavasti on ka selles sarnane moodul olemas, kuid 100% kindel ma ei ole - pole olnud põhjust ühtegi VxWorks'iga WRT'd näppida.
Kui nii klient kui ka server asuvad NAT'iva tulemüüri taga, millel ei ole FTP jaoks vajalikku pealtkuulamise moodulit, siis FTP abil failide edastamine ei õnnestu - suuna porte palju tahad, ikkagi ei saa.