Problemas con «passive mode»

Problemas con «passive mode»

Uno de los términos que se suelen oír cuando se habla de problemas con el ftp es el de passive mode. Aquí vamos a ver de que se trata, y por que es la solución a muchos problemas de conectividad

Como sabemos en toda transferencia ftp interviene un programa servidor y un programa cliente. El programa servidor se ejecuta donde están almacenados los ficheros que se quieren bajar (o donde se almacenarán los que deseamos subir) y el programa cliente es el programa ftp que usamos desde la maquina local, para subir o bajar los ficheros.

En este proceso de comunicación entre cliente y servidor, el cliente puede actuar en modo activo o en modo pasivo.

Una conexión ftp usa dos puertos, abre dos canales: Uno será el puerto de comandos, command port o control port (normalmente puerto 21) por donde se transfieren las órdenes. El otro es el puerto de datos (data port) que es por donde circulan los datos que integran los ficheros (normalmente el puerto 20, pero puede ser cualquiera por debajo del 1024)

modo activo

Cuando usamos ftp en modo activo, tambien considerado modo normal, se establecen dos conexiones distintas. El primer lugar se establece una conexión para la transmisión de comandos (desde cualquier puerto de nuestro ordenador inferior a 1024 hacia el puerto 21 del server) y por esa misma conexión, mediante un comando PORT se indica al server cual es el puerto (distinto) de nuestro ordenador que está a la escucha de los datos.

Entonces, si bajamos algún archivo, es el servidor el que inicia la transmisión de datos, desde su puerto 20 al puerto que le hemos indicado. Se llama modo activo porque la transmisión de datos es iniciada como proceso distinto desde el servidor, hacia el puerto que le hemos indicado.

modo pasivo

En modo pasivo es siempre el programa cliente el que inicia la conexión con el servidor. Al abrir una conexión ftp se abre primero una conexión de control (desde un puerto superior a 1024 de la maquina local al puerto 21 del server). Al pasar a modo pasivo (comando PASV), el cliente pide un puerto abierto al servidor (será otro puerto superior al 1024 del server) y recibida la contestación, será el cliente el que establezca la conexión de datos al server a través de ese puerto.

A modo de resumen podemos decir que en modo pasivo las conexiones son siempre abiertas por el pc cliente, mientras que en modo activo se abren por el que envía los datos (el server si se trata de bajar archivos al pc local, el cliente si se trata de subir archivos al server).

¿por qué supone un problema el modo activo ?

Como hemos visto, en el modo activo se abre una conexión para datos desde el server a la maquina cliente, esto es, una conexión de fuera a dentro.

Entonces, si la maquina cliente está protegida por un firewall, este filtra o bloquea la conexión entrante, al serle un proceso desconocido.

En modo pasivo es el cliente el que inicia ambas conexiones, de control y de datos, con lo cual el firewall no tiene ninguna conexión entrante que filtrar

Passive mode y la linea de comandos

Lamentablemente la utilidad de ftp que viene por defecto con windows 95/98 y que puedes usar en línea de comandos, no dispone de modo pasivo.

Por ello si tienes problemas de conexión y sospechas que es por un firewall, deberás buscar un programa cliente ftp que disponga de esta posibilidad (la inmensa mayoría).

Para terminar con el modo pasivo, parte de un log de conexión:

FTP > PASV
FTP < 227 Entering Passive Mode (222,222,222,22,196,39).
FTP > LIST

Como ves el server reacciona al comando PASV entrando en modo pasivo e indicando una serie de números (entre paréntesis la segunda linea). Los cuatro primeros bloques de números se corresponden con la IP del servidor. Los dos números restantes son el puerto que el server abre a la escucha para el canal de datos
El puerto esta indicado mediante dos números de 8 bits; traducido a número de 16 bits obtenemos el numero «real».

 

Esperando haber aclarado algo, animo a compartir y a darle like 😉

Copia desde Windows de un directorio remoto ftp.

Necesito copiar una base de datos de una aplicación, esta reside en una máquina Linux. La máquina Linux tiene una carpeta en la que guarda toda la base de datos/información que necesito salvar por si esta máquina sufriera algún percance. Voy a realizar la copia a mediante el servicio de ftp que tiene corriendo el servidor Linux.

El Problema

Hasta ahora hacia la copia «a mano» mediante un programa de FTP, el problema es que quiero automatizarlo desde Windows y no se como hacer esa tarea.  Hay programas gratuitos pero necesito que sea lo mas simple posible y al poder ser sin instalar nada.

La Solución

Se realizará una copia de seguridad mediante una tarea programada que ejecutara un Script. El origen de la copia sera el servidor linux, el destino de la copia se ubicara en una unidad local y el programa que copiará los archivos sera el PSCP

Script

Para realizar el script nos basamos en una aplicación de copia por SSH. El PSCP (freeware) permite copiar archivos de una maquina remota (no Windows) sin tener que hacer un FTP o un SFTP.

Automatización

La automatización la realizaremos mediante el comando AT de o el programador de tareas de Windows

Notas

El PSCP que usamos es un cliente de SCP (Secure Copy), pero podríamos usar cualquier otro.

El software se puede bajar desde la página de putty