Tunneling FTP in Passive Mode
In passive mode, the FTP client sends the command PASV
to the server, which reacts
by opening a listener port for the data channel and sending the IP address and port
number of the listener as a reply to the client. The reply is of the form 227 Entering
Passive Mode (10,1,60,99,6,12)
.
When the Secure Shell client notices the reply to the PASV
command, it will
create a local port forwarding to the destination mentioned in the reply. After
this the client will rewrite the IP address and port in the reply to point to
the listener of the newly created local port forwarding (which exists always in
a localhost address, 127.0.0.1) and pass the reply to the FTP client. The FTP
client will open a data channel based on the reply, effectively tunneling the
data through the Secure Shell connection, to the listener the FTP server has opened. The
net effect is that the data channel is secure all the way except from the Secure
Shell server to the FTP server if they are on different machines. This sequence
of events takes place automatically for every data channel.
Since the tunnel is opened to a localhost address, the FTP client must run
on the same machine as the Secure Shell client if passive mode is used.