Contenido
Introducción
Este tutorial te mostrará cómo configurar un servidor FTP en Ubuntu VPS. Usaremos un servidor vsftpd el cual es ampliamente considerado como el servidor FTP más rápido y seguro para los sistemas tipo UNIX.
FTP o File Transfer Protocol, por sus siglas en inglés, es un medio para enviar y recibir archivos a través de una conexión de red. Utilizando un marco de referencia de cliente/servidor y seguridad SSL/TLS, FTP le permite a los usuarios compartir archivos con (y recibir desde) computadoras remotas a través de una transferencia de datos segura, eficiente y confiable (usando los protocolos TCP/IP).
FTP funciona de la misma manera que HTTP o SMTP; obviamente la única diferencia es que es responsable del transporte seguro de archivos de un remitente a un receptor en lugar de páginas web desde un servidor a un usuario o correo electrónico a través de Internet. Este tutorial se enfocará en orientar a los usuarios con respecto a la configuración del servidor FTP en Ubuntu 16.04.
Nota: El siguiente tutorial se basa en Ubuntu 16.04. Pero puedes aplicar los mismos pasos al crear un servidor FTP en Ubuntu 14.04
Paso 1 – Instalar Vsftpd
Primero lo primero, obtengamos las actualizaciones de nuestros paquetes antes de continuar con la instalación del daemon vsftpd. Para comenzar, ejecuta el siguiente comando:
sudo apt-get update
Espera a que se completen todos los procesos y verás una confirmación tan pronto como finalice la actualización.
Cuando termines con esto, instala el daemon vsftpd usando el siguiente comando:
sudo apt-get install vsftpd
Ahora verás un mensaje de confirmación en el que tendrás que escribir Y y presionar Enter para continuar con la instalación.
Una vez completada la instalación, haz una copia de seguridad del archivo original para que podamos comenzar nuestro trabajo con un archivo de configuración en blanco:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original
Ahora estamos listos para dar el siguiente paso y configurar el firewall.
Paso 2 – Permitir el tráfico FTP desde el firewall
Para permitir que el servidor FTP de Ubuntu se comunique con el mundo exterior, tiene que abrirse paso a través del firewall. Primero veamos si el firewall está habilitado en la máquina o no. Ejecuta el siguiente comando para verificar el estado:
sudo ufw status
Si ves el siguiente mensaje:
ufw: command not found
Significa que el firewall no está instalado y puedes continuar con el siguiente paso.
Sin embargo, si el resultado muestra algunas reglas definidas o un mensaje de que el estado del firewall es activo, deberás verificar si el tráfico FTP funcionará. Avancemos y abramos los puertos 20 y 21 para el tráfico FTP; los puertos 40000-50000 serán los reservados para el rango de puertos pasivos que eventualmente se establecerán en el archivo de configuración y el puerto 990 se usará cuando se habilite el TLS. Ejecuta los siguientes comandos para hacerlo:
sudo ufw allow 20/tcp sudo ufw allow 21/tcp sudo ufw allow 990/tcp sudo ufw allow 40000:50000/tcp
Ahora veamos el estado de nuevo:
sudo ufw status
El resultado debería ser algo así:
Output Status: active To Action From -- ------ ---- 990/tcp ALLOW Anywhere 20/tcp ALLOW Anywhere 21/tcp ALLOW Anywhere 40000:50000/tcp ALLOW Anywhere 20/tcp (v6) ALLOW Anywhere (v6) 21/tcp (v6) ALLOW Anywhere (v6) 990/tcp (v6) ALLOW Anywhere (v6) 40000:50000/tcp (v6) ALLOW Anywhere (v6)
Ahora que tenemos todos los puertos necesarios abiertos y disponibles para nosotros, podemos pasar al siguiente paso.
Paso 3 – Crear el directorio de usuarios
En el tercer paso para crear un servidor FTP de Ubuntu, tendremos que seleccionar el usuario que va a utilizar el acceso FTP. Solo para mostrar cómo se hace, agregaremos un nuevo usuario. Para crearlo, usa el siguiente comando:
sudo adduser alex
Cuando el sistema te pregunte, ingresa una contraseña para el usuario y completa todos los demás detalles. Lo ideal es que el FTP se restrinja a un directorio específico por motivos de seguridad. Vsftpd usa jaulas chroot para lograr esto. Con chroot habilitado, un usuario local está restringido a su directorio de inicio (por defecto). Sin embargo, es posible que debido a la seguridad de vsftpd, un usuario no pueda escribir en el directorio. No eliminaremos los privilegios de escritura de la carpeta de inicio; en su lugar, crearemos un directorio ftp que actuará como chroot junto con un directorio de archivos modificables que será responsable de mantener los archivos pertinentes. Usa el siguiente comando para crear la carpeta FTP:
sudo mkdir /home/alex/ftp
Establece la propiedad usando:
sudo chown nobody:nogroup /home/alex/ftp
Finalmente, elimina los permisos de escritura:
sudo chmod a-w /home/alex/ftp
Ahora, usa el siguiente comando para verificar los permisos:
sudo ls -la /home/alex/ftp
El resultado debería ser algo así:
total 8 dr-xr-xr-x 2 nobody nogroup 4096 Jun 29 11:32 . drwxr-xr-x 3 alex alex 4096 Jun 29 11:32 ..
Como paso siguiente, crearemos el directorio contenedor de archivos y asignaremos la propiedad:
sudo mkdir /home/alex/ftp/files sudo chown alex:alex /home/alex/ftp/files
Finalmente, agrega un archivo de prueba al directorio el cual se usará cuando probemos todo más adelante:
echo "vsftpd sample file" | sudo tee /home/alex/ftp/files/sample.txt
Paso 4 – Configurar vsftpd
El siguiente paso en nuestra apuesta por configurar un servidor FTP en Ubuntu VPS, es configurar vsftpd y nuestro acceso FTP. En este tutorial, permitiremos que un solo usuario se conecte con FTP utilizando una cuenta shell local. Las dos configuraciones clave requeridas para esto ya están establecidas en el archivo de configuración (vsftpd.conf). En primer lugar, verifica que el archivo de configuración tenga una configuración que coincida con las mencionadas a continuación utilizando el comando nano:
sudo nano /etc/vsftpd.conf
. . . # Allow anonymous FTP? (Disabled by default). anonymous_enable=NO # # Uncomment this to allow local users to log in. local_enable=YES . . .
En el mismo archivo, procederemos a eliminar # y a habilitar el write_enable:
. . . write_enable=YES . . ..
Chroot tampoco se comentará para garantizar que el usuario conectado a través de FTP solo acceda a los archivos dentro del directorio permitido:
. . . chroot_local_user=YES . . .
También se deben agregar manualmente algunos valores nuevos. Simplemente puedes pegarlos en la parte inferior del archivo. En primer lugar, se agregará un user_sub_token en la ruta del directorio local_root. Esto permitirá que la configuración funcione con el usuario actual y con cualquier otro usuario que se agregue posteriormente:
user_sub_token=$USER local_root=/home/$USER/ftp
Para garantizar que haya una cantidad considerable de conexiones disponibles, limitaremos la cantidad de puertos utilizados en el archivo de configuración:
pasv_min_port = 40000 pasv_max_port = 50000
En este tutorial, planeamos permitir el acceso caso por caso, así que ajustemos la configuración de forma tal que el acceso solo se otorgue a los usuarios que se hayan agregado explícitamente a una lista:
userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO
El flag userlist_deny es el responsable de alternar la lógica; cuando se establece en “NO”, solo se permitirá el acceso a los usuarios especificados en la lista. Una vez hecho esto, haz clic en CTRL+X y confirma los cambios del archivo.
Por último, procederemos con la creación y adición de nuestro usuario al archivo:
echo "alex" | sudo tee -a /etc/vsftpd.userlist
Verifica que el usuario esté realmente activo ejecutando el siguiente comando:
cat /etc/vsftpd.userlist
El resultado debe ser “alex” como se muestra en esta captura de pantalla:
Reinicia el daemon utilizando el siguiente comando para cargar los cambios de configuración:
sudo systemctl restart vsftpd
Paso 5: Hacer que el FTP sea seguro
Por defecto, FTP no hace ninguna encriptación de datos, por eso utilizaremos TTL/SSL para garantizar la seguridad. En primer lugar, debemos crear el certificado SSL y usarlo para proteger el servidor FTP de Ubuntu. Para comenzar, usa el siguiente comando:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
El flag -days hace que el certificado sea válido por un año y hemos incluido una clave privada RSA de 2048 bits en el mismo comando. Una vez sean solicitados, ingresa los datos personales correspondientes en el campo provisto.
Cuando termines de crear el certificado, abre nuevamente el archivo de configuración:
sudo nano /etc/vsftpd.conf
El final del archivo debe contener dos líneas que comiencen con “_rsa“. Comenta ambas líneas así:
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem # rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
En lugar de eso, apuntemos el archivo de configuración al certificado que acabamos de crear. Agrega las siguientes líneas:
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
Ahora habilitaremos SSL y nos aseguraremos de que solo los clientes que tengan SSL habilitados nos puedan contactar. Cambia el valor de ssl_enable a YES:
ssl_enable=YES
Ahora agrega las siguientes líneas para mayor protección: (Esto no permitirá conexiones anónimas a través de SSL)
allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES
Configura el servidor para usar TLS usando:
ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
Aquí agregaremos 2 opciones más. En primer lugar, no será necesario reutilizar SSL porque puede ocasionar que muchos clientes de FTP se averíen. En segundo lugar, utilizaremos suites de encriptación de alto cifrado, lo que significa que las longitudes de claves son iguales o superiores a 128 bits.
require_ssl_reuse=NO ssl_ciphers=HIGH
Comencemos una vez más para aplicar las nuevas configuraciones:
sudo systemctl restart vsftpd
¡Buen trabajo! Has configurado el servidor FTP en tu VPS de Ubuntu para que funcione con el protocolo SSL/TLS.
Paso 6 – Prueba de conexiones con FileZilla
Hoy en día, la mayoría de los clientes de FTP admiten configuraciones de cifrado TLS, por lo que es una excelente manera de comprobar si tu servidor FTP de Ubuntu funciona según lo previsto. Para probar la conexión, utilizaremos un cliente FTP de FileZilla. Para comenzar inicia FileZilla y haz clic en el icono de Site Manager.
Haz clic en el botón New Site en la ventana que aparece para comenzar a ingresar los detalles del servidor FTP de Ubuntu.
Completa todos los detalles requeridos con tu información del servidor FTP de Ubuntu recién creada. Como lo configuramos para usar TLS, también podemos marcar el cifrado para que sea explícitamente FTP sobre TLS. La configuración final debería verse así:
Cuando esté listo, haz clic en Connect y aparecerá una pantalla que te pedirá ingresar la contraseña del usuario de FTP.
Finalmente, tendrás que verificar el certificado SSL de tu servidor FTP en Ubuntu VPS.
Después de confirmar, el directorio raíz con el archivo de prueba debería aparecer en tu pantalla.
¡Eso es todo! Ahora puedes realizar transferencias de archivos desde tu computadora al servidor FTP de Ubuntu y viceversa.
Conclusión
En este tutorial, hemos hecho un recorrido paso a paso para crear un camino que permite a un usuario local transferir archivos de manera segura a través de FTP con SSL/TLS en el servidor FTP de Ubuntu. También hemos probado la conexión utilizando FileZilla para asegurarnos de que todo esté funcionando bien.
Como puedo conectarme desde windows al servidor ftp?
ya intenté desde Filezilla, con el explorador de archivos (Escribiendo ftp://la_ip_del_server)
pero nada, no he podido 🙁
espero que puedan ayudarme
Necesitamos revisar exactamente lo que está ocurriendo. Por favor añade una captura de pantalla del error que arroja FileZilla para poder ayudarte de mejor manera.
Mientras tanto, puedes revisar esta guía de configuración de FileZilla: https://www.hostinger.es/tutoriales/configurar-filezilla. Espero puedas revisar paso a paso y puedas descartar algún problema de configuración.
Buenas tardes si has colocado esto asi tal cual estas en un error te falta exponer el puerto que usas si es el por defecto es el 21
tu colocaste asi : ftp://la_ip_del_server
y debria ser asi: ftp://la_ip_del_server:21
Saludos espero te ayude…
gerardonicolato.com
TENGO EL MISMO PROBLEMA.. ALGUNA SOLUCION??
Hola, gracias por el manual.
Instale un Ubuntu 16.04 con un Lamp. Lo quiero usar como Servidor Web, Lo que necesito es tener acceso por ftp a la carpeta www/html esa carpeta ya se encuentra creada.
Ahora las preguntas son:
Es necesario realizar todo el procedimiento?
El firewall no esta activo.
Solo necesito ingresa a esa carpeta con el usuario creado y por ftp. Como seria?
Gracias
Hola Edgardo,
te invito a contactar a nuestro equipo de soporte vía chat, ya que estás pidiendo una dirección FTP pero no podemos darte una por este medio sin conocer tu usuario/sitio.
Buenas tardes, tengo el siguiente error
Estado: Falló intento de conexión con “ECONNREFUSED – Conexión rechazada por el servidor”.
Error: No se pudo conectar al servidor
use el mismo usuario e hice todo en el blog
Hola Alejandro, es posible que estés usando el puerto incorrecto. Otro problema podría ser tu firewall local. Por favor revisa tus firewalls locales. Otra solución podría ser añadir “ftp” a tu nombre de host (hostname).
Buenas, tengo un problema con vsftpd.
Conecto perfectamente sin el TLS, pero cunado configuro el TLS en el filezilla entro pero en el explorador de archivo de windows y por el navegador, no.
No se si tengo que hacer algo en la configuración del FTP o si es cosa del windows que no soporta el TLS.
Hola Carolina, el explorador de archivos de Windows no podrá conectarse a FTPS (FTP con SSL/TLS). En cuanto al navegador que estás usando, es posible que no sea compatible con la versión de TLS.
Para aquellos que les genere algún error probablemente sea en esta parte:
pasv_min_port = 40000
pasv_max_port = 50000
solo quiten los espacios que quede de esta forma:
pasv_enable=Yes
pasv_min_port=40000
pasv_max_port=50000