Administración del servidor

Instalar, configurar y proteger el servidor FTP en Linux

FTP o Protocolo de transferencia de archivos es comúnmente utilizado para la transferencia de archivos entre computadoras, uno actuando como cliente y el otro como servidor. En esta publicación, hablaremos sobre el servidor FTP en sistemas Linux, específicamente el demonio Very Secure FTP ( vsftpd ).

El programa vsftpd es un servidor FTP muy popular que muchos servidores utilizan actualmente.


 

 

Cómo funciona el servidor FTP

El servidor FTP funciona con la arquitectura cliente-servidor para comunicarse y transferir archivos.

FTP es un protocolo con estado lo que significa que las conexiones entre clientes y servidores permanecen abiertas durante una sesión de FTP.

Para enviar o recibir archivos desde un servidor FTP, puedes utilizar comandos FTP, estos comandos se ejecutan de forma consecutiva. Es como una cola, uno por uno.

Hay dos tipos de conexiones FTP que se pueden iniciar:

  • La conexión de control también se denomina conexión de comando.
  • Conexión de datos.

Cuando estableces una conexión FTP, el puerto TCP 21 se abre para enviar sus credenciales de inicio de sesión, esta conexión se denomina conexión de control.

Cuando transfieres un archivo, se inicia una conexión de datos.

Hay dos tipos de conexión de datos:

  • Modo pasivo.
  • Modo activo

Las conexiones activas son iniciadas por el servidor remoto, y el cliente espera las solicitudes del servidor.

Las conexiones pasivas son iniciadas por el cliente al servidor remoto y el servidor espera solicitudes.

Cuando el cliente FTP inicia una transferencia, hay una opción en su cliente FTP que controla si desea usar una conexión FTP activa o pasiva.

Modo activo

El cliente se conecta de un puerto aleatorio efímero al puerto de control FTP 21.

Puedes verificar tu rango de puertos efímeros usando este comando:

$ cat /proc/sys/net/ipv4/ip_local_port_range

Cuando necesite transferir un archivo, el servidor FTP remoto abrirá el puerto 20 para conectarse al cliente FTP.

Las conexiones de modo activo generalmente tienen problemas con los firewalls, los puertos TCP 20 y 21 deben estar abiertos en tu firewall.

Debido a estos problemas con los firewalls del modo activo, se introdujo el modo pasivo.

Si estás usando el firewall de iptables, te recomiendo que revise la publicación firewall de Linux iptables para saber cómo permitir puertos específicos.

Modo pasivo

En modo pasivo, el cliente inicia la conexión de control desde un puerto aleatorio al puerto de destino 21 en el servidor remoto.

si el cliente FTP solicita un archivo, emitirá el comando PASV FTP. El servidor abrirá un puerto aleatorio y le dará este número de puerto al cliente.

Es por eso que el FTP es un protocolo que requiere mucha conexión porque cada vez que hace una conexión de datos (como transferir un archivo) el servidor hará el proceso anterior y esto se hace con todos los clientes conectados al servidor.

En modo pasivo, las conexiones de control y datos se iniciaron por el cliente FTP.

 



Características del servidor FTP Vsftpd

Hay varios servidores FTP disponibles para utilizar, comerciales y de código abierto.

Vsftpd tiene algunas características de seguridad que lo hacen superior a los demás como:

  • Se puede ejecutar como un usuario normal con separación de privilegios.
  • Admite conexiones FTP SSL / TLS.
  • Puede encarcelar usuarios en sus directorios personales.

 


Configuración del servidor FTP

Algunas distribuciones de Linux incluyen vsftpd, de todos modos, si deseas instalarlo en sistemas basados ​​en Red Hat, puede utilizar el siguiente comando:

$ sudo dnf -y vsftpd

En distribuciones basadas en Debian como Ubuntu, puedes instalarlo así:

$ sudo apt-get install vsftpd

Una vez que haya instalado el paquete, puede ejecutar el servicio y habilitarlo para que se ejecute al iniciar el sistema.

El archivo de configuración para el servidor FTP vsftpd es  /etc/vsftpd/vsftpd.conf  o en las distribuciones basadas en Debian, puedes encontrarlo en  /etc/vsftpd.conf.

En realidad, el servidor FTP en Linux es uno de los servidores más fáciles con los que puede trabajar.

Hay dos tipos de acceso al servidor FTP:

  • Acceso FTP anónimo: cualquiera puede iniciar sesión con el nombre de usuario anónimo sin una contraseña.
  • Inicio de sesión local: todos los usuarios válidos en /etc/passwdpueden acceder al servidor FTP.

Puedes permitir el acceso anónimo al servidor FTP desde la configuración, en /etc/vsftpd/vsftpd.conf habilitando anonymous_enable = SÍ si no estás habilitado por ultimo debes recargar tu servicio.

Ahora puedes intentar conectarte al servidor FTP utilizando cualquier cliente FTP. Utilizaré un comando FTP simple.

Puede instalarlo si no está en tu sistema:

$ dnf -y install ftp

Ahora puede acceder a tu servidor FTP de esta manera:

$ ftp localhost

Luego escribe el nombre de usuario anónimo y sin contraseña, solo presiona enter.

Verás el prompt de FTP.

ftp>

Ahora puedes escribir cualquier comando FTP para interactuar con el servidor FTP.

Conéctate como usuario local

Hay una opción en la configuración para permitir que los usuarios locales accedan al servidor FTP, la cual es local_enable = YES, ahora intentemos acceder al servidor FTP utilizando un usuario local:

$ ftp localhost

Escriba tu nombre de usuario local y la contraseña para ese usuario y verás un mensaje de inicio de sesión exitoso.

 

Configura el servidor FTP como solo anónimo

Este tipo de servidor FTP es útil si tus archivos deben estar disponibles para los usuarios sin credenciales de inicio de sesión.

Necesitas configurar vsftpd para que solo permita usuarios anónimos.

Abre el archivo /etc/vsftpd/vsftpd.conf, y cambia las siguientes opciones con los valores correspondientes.

Luego, debes crear una cuenta del sistema sin privilegios para utilizarla en el acceso anónimo de tipo FTP.

$ useradd -c " FTP User" -d /var/ftp -r -s /sbin/nologin ftp

Este usuario no tiene privilegios en el sistema, por lo que es más seguro usarlo cuando se accede a un servidor FTP.

No olvides reiniciar tu servidor FTP después de modificar el archivo de configuración.

Puedes acceder al servidor FTP desde el navegador, simplemente escribe ftp: //youdomain/

Seguridad del servidor FTP

Podemos configurar vsftpd para usar TLS, de manera que los archivos transferidos a través de la red estén un poco más seguros.

Primero, generamos una solicitud de certificado usando el comando openssl:

$ openssl genrsa -des3 -out FTP.key

Luego generamos una solicitud de certificado:

$ openssl req -new -key FTP.key -out certificate.csr

Ahora eliminamos la contraseña del keyfile:

Finalmente, generamos nuestro certificado:

$ openssl x509 -req -days 365 -in certificate.csr -signkey ftp.key -out mycertificate.crt

Ahora copiamos el archivo de certificado y la clave y /etc/pki/tls/certs:

Por ultimo todo lo que tenemos que hacer es configurar vsftpd para admitir conexiones seguras.

Abre el archivo /etc/vsftpd/vsftpd.conf y agrega las siguientes líneas:

Reinicia tu servicio para reflejar estos cambios. Y listo.

Intenta conectarte a tu servidor FTP desde cualquier cliente en cualquier sistema como Windows y elije la conexión segura o FTPS, y verás con éxito tus carpetas.

 


SFTP vs. FTPS

En el último ejemplo, nosotros vimos el FTP sobre la capa SSL (FTPS) y nos hemos conectado con éxito al servidor FTP, sin embargo, con el firewall, es difícil gestionar este tipo de conexión ya que FTPS usa múltiples números de puerto.

La mejor solución, en este caso, es usar SFTP (FTP sobre SSH). SFTP usa el puerto 22 solamente.

Este puerto se usa para todas las conexiones durante las sesiones de FTP.

Si estás utilizando un firewall, se recomienda elegir SFTP, ya que solo necesita un puerto.

 


Jailing a los usuarios de FTP

Puedes proteger tu servidor FTP encarcelando a tus usuarios de FTP en sus directorios de inicio y permitiendo que solo usuarios específicos accedan al servicio.

Abre el archivo /etc/vsftpd/vsftpd.conf y descomenta las siguientes opciones:

El archivo /etc/vsftpd.chroot_list contiene la lista de usuarios encarcelados uno por línea.

Guarda los archivos y reinicia tu servicio.

$ systemctl restart vsftpd

 

Comandos del servidor FTP de Linux

Puede usar cualquier cliente GUI para cargar y descargar sus archivos, pero también necesitas conocer algunos comandos utilizando el servidor FTP.

Puedes imprimir tu directorio de trabajo actual usando el comando pwd:

ftp> pwd

Puedes listar archivos usando el comando ls:

ftp> ls

Además, puedes usar el comando cd para cambiar de directorio de trabajo:

ftp> cd /

Si deseas salir de tu sesión FTP, utiliza el comando bye:

ftp> bye

El comando lcd se usa para mostrar la carpeta local, no la carpeta FTP: Puede cambiar el directorio local usando el comando lcd:

ftp> lcd

puede cambiar el directorio local usando el comando lcd:

ftp> lcd /home

Puedes descargar un archivo usando el comando get:

ftp> get myfile

Además, puedes descargar múltiples archivos usando el comando mget:

ftp> mget file1 file2

Usa el comando delete para eliminar un archivo del servidor:

ftp> delete filename

Utiliza el comando put para subir un archivo al servidor:

ftp> put filename

Para cargar varios archivos, usa el comando mput:

ftp> mput file1 file2

Puedes crear un directorio usando el comando mkdir:

ftp> mkdir dirName

O puedes eliminar un directorio del servidor utilizando el comando rmdir.

ftp> rmdir dirName

Hay dos modos para la transferencia de archivos cuando se usa un servidor FTP, el modo ASCII y el modo binario; puede cambiar el modo de esta manera:

El servidor FTP es uno de los servidores más sencillos de Linux para configurar y trabajar.

Espero que la publicación te haya sido útil e interesante. Vuelve pronto

Gracias.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *