jueves, 1 de diciembre de 2011

Cómo funciona realmente el servicio FTP


Supongo que a estas alturas, todo usuario habitual de internet habrá usado varias veces un servicio FTP para descargarse algún archivo, aunque muchas personas no sabrán ni que lo han usado.

FTP (File Transfer Protocol) es un servicio de la capa de aplicación que nos permite descargarnos archivos y subirlos a un servidor remoto. Actualmente existen infinidad de aplicaciones para todos los S.O. que nos permiten realizar el papel de cliente y conectarnos a los servidores que queramos.

Como ocurre en la mayoría de los servicios ofrecidos por internet, los clientes son tan gráficos que no nos permiten ver las entrañas de cómo funciona de verdad FTP.

Tenemos que tener claro que en el intercambio de paquetes FTP entran en juego dos conexiones. La primera es sobre el puerto 21, la conexión de control, por donde se envían los diferentes comandos hacia el servidor y sus respectivas contestaciones. La segunda conexión es la de datos y tal y como su nombre indica, es por donde se envían y se reciben los datos pedidos.



Dentro de la comunicación existen dos formas de realizar el establecimiento de la conexión de datos. La más usada por casi todos los clientes FTP de forma predefinida es la pasiva.

En la forma pasiva, es el propio servidor el que elige el puerto al que se le va enviar la información.


220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 42 of 3000 allowed.
220-<< 220- Bienvenido al FTP an..nimo de ... 220-Welcome to the ... anonymous FTP server. 220->>
220-Local time is now 00:23. Server port: 21.
220-Only anonymous FTP is allowed here
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 5 minutes of inactivity.
USER anonymous
...
PASV
227 Entering Passive Mode (130,106,1,101,159,194)
MLSD
150 Accepted data connection
226-Options: -a -l
226 13 matches total

Este código, es la comunicación realizada por el cliente y el servidor en la conexión de control. Se puede ver cómo el cliente se logea como usuario anonymous. Después de varios comandos intercambiados entre el cliente y el servidor de forma automática, el cliente envía un PASV señalando que quiere realizar una conexión de datos de forma pasiva, respondiendole el servidor que acepta y señalando que la comunicacion se realizara hacia la IP 
130.106.1.101 (IP del servidor) y el puerto 159x256+194=40898. El ultimo comando realizado por el cliente es una orden MLSD con la que se solicita la impresión del contenido de la carpeta compartida.
Como ya empezamos explicando en la primera parte de este tema, en la comunicación FTP existen dos formas de realizar el establecimiento de la conexión de datos. En esta ocasión desarrollaremos el uso de la segunda opción que tiene unas pocas diferencias con la primera, ya explicada en el anterior post.




La segunda opción es la de realizar la conexión de datos al abrirla de forma activa, siendo el cliente quien señale al servidor qué IP debe enviar los archivos y porque puerto. Si queremos usar esta opción es muy normal que no podamos realizar la conexión. Esto es debido a que en la gran mayoría de los hogares tenemos un servidor NAT entre el router y nuestro equipo proporcionando el servicio de poder conectar varios equipos desde la misma IP publica.

Esto se traduce en que nuestro PC, al crear el paquete donde se asignará la IP del cliente y el puerto donde el servidor envía los datos, marcará como IP del cliente, la privada asignada a nuestro equipo en la red local. Con lo cual el servidor no sabrá hacia qué IP tiene que realizar la conexión, cerrando por defecto la conexión de control por el puerto 21 ya establecida.


220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 52 of 3000 allowed.
220-<< 220- Bienvenido al FTP an..nimo de ... 220-Welcome to the ... anonymous FTP server. 220->>
220-Local time is now 00:53. Server port: 21.
220-Only anonymous FTP is allowed here
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 5 minutes of inactivity.
USER anonymous
...
PORT 192,168,2,103,133,248
200 PORT command successful
MLSD
150 Connecting to port 55000
226-Options: -a -l
226 13 matches total

En esta ocasión hemos usado la opción FTP activo con lo cual se ve que es el propio cliente el que envía la IP a la que se debe realizar el envío de paquetes desde el servidor y a que puerto. Como podemos apreciar la IP 
192.168.2.103 es privada. Aun realizando una conexión activa el servidor nos contesta que se ha realizado el establecimiento de la comunicación. Esto sucede gracias a los nuevos modelos de router disponibles en el mercado, que tienen la funcionalidad de detectar los paquetes FTP de establecimiento de conexión de datos de la forma activa cambiando la IP privada del equipo por la IP publica que es accesible desde cualquier parte del planeta.

Espero que está pequeña explicación os haya dado una idea de cómo funciona este servicio tan usado en la actualidad. Si estáis interesados en profundizar en este tema, podéis realizar vuestras propias pruebas gracias al software wireshark


Fuente: nosolounix

No hay comentarios:

Publicar un comentario