« Atrás

¿Problemas con el FTP de Alfresco y los firewalls de tu red? ¡Utiliza el FTP Pasivo!

En este pequeño post intentaré exponeros rápidamente una solución a la mayoría de los problemas que nos encontramos a la hora de configurar el servicio de FTP en Alfresco. Por defecto, Alfresco utiliza el modo FTP Activo, lo que conlleva algunos problemas con clientes que tienen el firewall activado.

Active FTP VS Passive FTP

El protocolo FTP tiene dos métodos : activo y pasivo. Alfresco a día de hoy utiliza por defecto el modo activo, tanto en la versión Community como la Enterprise. Este modo funciona correctamente en redes poco protegidas. Sin embargo cuando existen firewalls en la red, el modo FTP activo es muy conflictivo. La razón fundamental es que cuando utilizamos este modo el servidor FTP trata de conectarse a los clientes (¡sí! has leído bien, es el servidor el que hace una conexión contra el cliente) a través de un puerto no privilegiado. Muchos firewalls detectan esta actividad y la bloquean. Los detalles de la interacción y cliente en los modos de FTP están extraordinariamente bien explicadas en Active FTP vs. Passive FTP, a Definitive Explanation por lo que os invito a que leáis el artículo si queréis entender los detalles.

Configurando el modo FTP Pasivo en Alfresco

[Esta configuración ha sido testeada en Alfresco Enterprise/Community 3.4.2]

Para activar el modo pasivo basta con añadir las siguientes claves de configuración en el alfresco-global.properties (en una instalación sobre tomcat lo encontraréis sobre /shared/classes).

  • ftp.port: Indicamos el puerto en el que va a escuchar nuestro servidor FTP. Si estamos ejecutando Alfresco con un usuario no privilegiado (que es lo recomendado), no podremos configurar aquí puertos privilegiados (<1023). Normalmente yo utilizo el 8021.
  • ftp.enabled: Sirve para habilitar o deshabilitar el servicio. Estará a true
  • ftp.dataPortFrom: Inicio del rango de puertos de datos que vamos a utilizar para transferir la información con los clientes. Podemos utilizar cualquier número de puerto, respetando el mismo comentario que en ftp.port con respecto a los puertos privilegiados.
  • ftp.dataPortTo: Final del rango de puertos de datos que vamos a utilizar para transferir la información con los clientes. Debe ser mayor que el número especificado en ftp.dataPortFrom. Podemos utilizar cualquier número de puerto, respetando el mismo comentario que en ftp.port con respecto a los puertos privilegiados.

Ejemplo de configuración

ftp.port=8021
ftp.enabled=true
ftp.dataPortFrom=62000
ftp.dataPortTo=62010

NOTA: En esta configuración hemos habilitado 10 puertos para el intercambio de datos con clientes. Por tanto, estamos limitando a 10 el número de conexiones simultáneas que tendrá nuestro servicio de FTP.

Abrir los puertos en el firewall del servidor

Esta configuración funciona con clientes que están sometidos a controles estrictos. Sin embargo, es necesario que abramos los puertos especificados en ftp.dataPortFrom y ftp.dataFromTo en el firewall del servidor. Si tenemos un sistema Linux con iptables, deberíamos añadir las reglas que permitieran todas las conexiones TCP al puerto ftp.port y al rango [ftp.dataPortFrom, ftp.dataPortTo] . Con los valores de mi ejemplo, serían las siguientes :

ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:8021
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62000
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62001
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62002
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62003
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62004
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62005
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62006
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62007
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62008
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62009
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:62010


Por último tan sólo nos queda arrancar de nuevo Alfresco (en versiones Community) o reiniciar el subsistema de FileServer a través de la consola JMX de Alfresco Enterprise y listo. Podéis probar a hacer una conexión a vuestro servidor desde un cliente con el firewall activado hasta el puerto especificado en ftp.port del servidor. Esto debería resultar en una conexión exitosa. Si hacéis un netstat en el servidor, veréis que el cliente se habrá conectado a uno de los puertos de datos que estará en el rango [ftp.dataPortFrom, ftp.dataPortTo].

FTPS en Alfresco

Alfresco soporta SSL para el servicio de FTP. Para ello bastaría configurar las claves ftp.keyStore, ftp.trustStore, ftp.passphrase y ftp.requireSecureSession.

Toda la documentación oficial sobre la configuración del servicio FTP sobre la última versión la puedes encontrar en este enlace.

¡Espero comentarios!

Comentarios
URL de Trackback:

comments powered by Disqus