El File-Transfer-Protocol o protocolo de transferencia de archivos, conocido por sus siglas FTP, es una de las técnicas de transferencia de archivos más utilizadas, especialmente para subir y descargar archivos en espacios web. En este tutorial, aprenderás cómo configurar un servidor FTP con cifrado TLS en Debian.

Instalar un servidor FTP en Debian

Antes de pasar a la instalación y configuración es necesario encontrar primero el software de servidor adecuado. Linux ofrece diversos servidores FTP, en su mayoría open source y que normalmente se encuentran disponibles en los gestores de paquetes de las distintas distribuciones Linux.

Una de las aplicaciones más conocidas es ProFTPD, con licencia GPL y que debido a su construcción modular es fácilmente escalable. El archivo de configuración principal funciona basándose en directivas o grupos de ellas con las que los administradores que ya hayan estado en contacto con el servidor de Apache deben estar familiarizados. Aunque Debian ejecuta ProFTPD de forma predeterminada en el repositorio del software, la instalación se lleva a cabo en el terminal, como es usual, a través del siguiente comando:

sudo apt update 
sudo apt install proftpd 
sudo apt install proftpd-mod-crypto
bash

Si deseas que el servidor FTP se inicie automáticamente al reiniciar el sistema, ejecuta el siguiente comando:

sudo systemctl enable proftpd
bash
Consejo

¿Necesitas almacenar o transferir datos? Alquila ahora un servidor Secure FTP con IONOS. Disfruta de una transferencia segura gracias a SSH y SSL/TLS, además de copias de seguridad diarias incluidas.

Para finalizar con la instalación es necesario decidir si se va a usar ProFTPD en modo servidor (standalone) o en uno de los servicios controlados por inedt. En el primer caso el servidor FTP se ocupa de forma autónoma de las peticiones entrantes. En la segunda variante el “superservidor” inetd/xinetd se encarga de las peticiones y las dirige al servidor FTP, opción de interés solo en el caso de esperar poco tráfico en el FTP.

Servidores virtuales VPS
Virtualización completa con acceso root
  • Ancho de banda de hasta 1 Gb/s y tráfico ilimitado
  • Almacenamiento SSD NVMe ultrarrápido
  • Incluye: edición Plesk Web Host

Servidor FTP en Debian: posibles escenarios y la tarifa de IONOS adecuada

¿No sabes qué configuración de hardware y red necesitas para tu servidor FTP en Debian? En la siguiente tabla, se presentan tres escenarios posibles para un servidor FTP junto con la tarifa de IONOS más adecuada para cada caso.

Escenario del servidor FTP Tarifa de IONOS recomendada
Pequeño servidor web VPS Linux M
Servidor web más grande VPS Linux XL
Servidor FTP empresarial Servidor Dedicado AMD Ryzen XXL-128 NVMe

El servidor FTP en Debian: tutorial de configuración

Tras la instalación se puede empezar a configurar ProFTPD. En el directorio /etc/proftpd/ se encuentra el archivo de configuración proftpd.conf que puede abrirse con un editor de tu elección, como, por ejemplo, el programa estándar nano de Debian, al que se accede a través del siguiente comando:

sudo nano /etc/proftpd/proftpd.conf
bash

En las siguientes líneas del editor se encuentran las funciones y opciones de configuración más importantes. Cada componente tiene su línea propia y requiere valores predefinidos. Si, por ejemplo, se quiere indicar si se puede usar una función, se dispone del valor “on” (función activada) y “off” (función desactivada). Además, existe la opción de anteponer una almohadilla (#) a una línea para prescindir de ella, de modo que el servidor ProFTPD ignora la línea completa, es decir, la almohadilla se considera como alternativa a “off” para desactivar funciones.

Consejo

En vez de un archivo proftpd.conf puedes usar también tu propio archivo de configuración y almacenarlo en el directorio /etc/proftpd/conf.d/. Este directorio permanece intacto cuando el software FTP se actualiza, de tal modo que se consigue reducir el riesgo de perder las configuraciones. Con las directivas include, las especificaciones del servidor guardadas en el directorio conf.d pueden integrarse sin mayor problema en el archivo principal (tiene lugar automáticamente con la configuración estándar).

Configuraciones básicas: hostname y directorio FTP

Antes de proceder a la configuración del servidor FTP en Debian hay que prestar atención a la instalación base, es decir, a los ajustes esenciales: asignar un hostname al servidor o determinar el directorio que se va a usar para subir o descargar datos. Además, existen diferentes posibilidades de configuración relacionadas con los usuarios de FTP potenciales, como se puede ver en la configuración a modo de ejemplo que aparece a continuación:

# Indicación de hostname y mensaje de bienvenida
ServerName    "hostname/ip-address"
DisplayLogin    "El inicio de sesión en el servidor FTP en Debian se ha realizado con éxito”    
# Directivas generales de inicio de sesión
<Global>
    # Solo permite el acceso con shells definidos en /etc/shells
    RequireValidShell    on
    # No aceptar Root-Log-in 
    RootLogin    off
    # Indicación del directorio FTP al que debe acceder el usuario
    DefaultRoot    Directorio
</Global>
# Definir usuario/grupo de usuarios autorizados al inicio de sesión en FTP 
<Limit LOGIN>
    # El inicio de sesión solo se permite a los usuarios del grupo ftpuser 
    # En vez de una larga lista se ignora al grupo con (!)
    DenyGroup    !ftpuser
</Limit>

Con esta configuración básica se les permite el acceso a un directorio concreto a los usuarios. Esto es muy útil, entre otras cosas, si estos se encargan del mantenimiento de la web, dado que requieren extensos derechos de acceso. Si, por el contrario, la función del servidor FTP de Linux pretende ofrecer al usuario un espacio de almacenamiento para los archivos, hay que configurar ProFTPD de modo que el acceso se limite al directorio inicial:

# Permitir a los usuarios solamente el acceso al directorio inicial 
DefaultRoot ~

Crear usuarios en FTP

Si lo que quieres es crear un nuevo usuario ProFTPD debes definir siempre /bin/false como shell de inicio de sesión. De esta forma se consigue que el nuevo usuario solo tenga acceso a este servidor y no al sistema en su conjunto. Primero inserta /bin/false con el siguiente comando de terminal en el shell del archivo dado:

sudo sh -c 'echo "/bin/false" >> /etc/shells'
bash

A continuación, creas un primer usuario:

sudo adduser user1 --shell /bin/false --home /home/user1
bash

En este ejemplo se crea la cuenta de usuario con el nombre “user 1” y se indica también el directorio de entrada. Hay que establecer también una contraseña para la nueva cuenta de usuario y confirmar el nuevo perfil. No obstante, para que este nuevo usuario pueda conectarse realmente al servidor FTP en Debian y le sea posible subir y descargar los datos en su propio directorio, es necesario introducir el directorio de entrada en proftpd.conf:

<Directory /home /user1>
    Umask 022 
    AllowOverwrite off
    <Limit LOGIN>
        AllowUser user1
        DenyAll
    </Limit>
    <Limit ALL>
        AllowUser user1
        DenyAll
    </Limit>
</Directory>

Este ejemplo de código limita el directorio de diferentes formas para convertirlo en un lugar de almacenamiento privado de los archivos del user1 y con el comando Umask (022) se asignan todos los derechos al propietario del directorio. Otros usuarios, por el contrario, podrán leer los archivos, pero solo se les permitirá exportarlos cuando el propietario les conceda los derechos necesarios. La directiva desactivada AllowOverwrite evita que al subir nuevos datos se reescriban los ya almacenados. Finalmente, el FTP log in (Limit LOGIN) y la implementación del comando (Limit ALL) están bloqueados para todos los usuarios, excepto para el user1.

Consejo

En vez de prohibir la implementación de todos los comandos de FTP, es posible impedir operaciones únicas y de este modo tener la posibilidad de crear, por ejemplo, un directorio al que los usuarios solo tengan permitido subir archivos. Una vista previa guiada sobre las diferentes posibilidades de configuración se puede encontrar en los siguientes manuales online.

Permitir el acceso anónimo

Si deseas que tu servidor FTP en Debian se configure de manera que sirva como servidor de descarga público, en la mayoría de los casos también se espera que los usuarios puedan acceder anónimamente a los archivos facilitados. Para ello, hay que definir primero los derechos de acceso a través de chmod para el directorio de descarga posterior, denominado en este caso /home/ftpdownload:

sudo chmod 755 -R /home/ftpdownload
bash

El propietario del directorio posee todos los derechos (7 = leer, escribir y ejecutar) mientras que los usuarios del grupo y el resto de los usuarios solo pueden leer y ejecutar (5). Una vez se han definido los derechos, se puede configurar el acceso anónimo en el archivo proftpd.conf:

<Anonymous ~ftp>
User    ftp
Group    ftpgroup
# Posibles perfiles de login para clientes
UserAlias    anonymous    ftp
# Número máximo de clientes y ocultar las propiedades de usuario y de grupo 
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell    off
MaxClients    10
<Directory *>
    <Limit WRITE>
        DenyAll
    </Limit>
</Directory>
</Anonymous>

Para que el inicio de sesión en el servidor FTP en Debian funcione con el perfil ftp primero hay que añadir el grupo ftpuser:

sudo adduser ftp ftpgroup
bash

Configurar encriptación SSL/TLS

El protocolo FTP transfiere en texto plano tanto la información de registro como los datos enviados. Por ello, si quieres configurar ProFTPD en modo privado para que no sea accesible a todo el mundo, se recomienda encriptar el acceso. Esto se puede llevar a cabo mediante el software OpenSSL. El administrador de paquetes de Debian contiene esta herramienta de encriptación de forma estándar, aunque la instalación se puede llevar a cabo también de forma alternativa como prosigue:

sudo apt install openssl
bash

Paso 1: generar el certificado y la clave

Utiliza OpenSSL para crear un certificado. Para poder guardarlo, crea una carpeta en el directorio ProFTPD con el siguiente comando:

sudo mkdir /etc/proftpd/ssl
bash

Tanto el certificado (proftpd.cert.pem) como la clave (proftpd.key.pem) tienen una validez anual. En servidores FTP en Linux estos se generan una vez se ha insertado el directorio de almacenamiento con el siguiente comando:

openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
bash

Además, es necesario que indiques tu información para que el certificado se registre de forma adecuada:

  • Country Name (2 letter code): código de país, por ejemplo, “US” para Estados Unidos
  • State or Province Name (full name): estado o provincia, por ejemplo, “California
  • Locality Name (eg, city): ciudad, por ejemplo, “Los Ángeles
  • Organization Name (eg, company): nombre de la compañía o tu propio nombre
  • Organizational Unit Name (eg, company): departamento (si hay), por ejemplo, “TI
  • Common Name (eg, YOUR name): nombre del dominio que debe protegerse, por ejemplo, “ftp.example.com.
  • Email Address: dirección de correo electrónico
Servidores dedicados
Rendimiento a través de innovación

Tu propio servidor en un hardware dedicado, con integración en el cloud y facturación por minuto. Respaldados por procesadores Intel® Xeon® y AMD.

Paso 2: activar SSL/TLS en ProFTPD

Tras haber creado tu propio certificado junto a una clave privada debes activar la técnica de encriptación para el servidor ProFTPD. Para ello el software del servidor FTP en Debian dispone del módulo mod_tls. Para su activación se requiere llevar a cabo una serie de ajustes en tls.conf. Abre la configuración de datos y busca la siguiente entrada:

<IfModule mod_tls.c> 
    TLSEngine    off

Asigna a la directiva TLSEngine al valor “on” y amplía el párrafo como sigue:

<IfModule mod_tls.c>
    TLSEngine            on
    TLSLog                /var/log/proftpd/tls.log
    TLSProtocol            TLSv1 TLSv1.1 TLSv1.2
    TLSRSACertificateFile        /etc/proftpd/ssl/proftpd.cert.pem
    TLSRSACertificateKeyFile    /etc/proftpd/ssl/proftpd.key.pem
    TLSVerifyClient            off
    TLSRequired            on
</IfModule>

De esta forma no solo has habilitado la encriptación SSL/TLS para tu servidor FTP en Debian, sino que en el mismo paso has realizado las configuraciones más importantes al definir el archivo de acceso para el registro de las conexiones FTP (TLSLog), así como las rutas al certificado (TLSRSACertificateFile) y la clave (TLSRSACertificateKeyFile), además de introducir las versiones de protocolo posibles (TLSProtocol). Las dos últimas líneas hacen que el módulo no verifique el certificado presentado por el cliente (TLSVerifyClient) y que la encriptación sea un requisito previo para establecer la conexión (TLSRequired). Tras reiniciar el servidor ProFTPD se hacen efectivos los ajustes:

sudo /etc/init.d/proftpd restart
bash

Paso 3: registrarse a través de SSL/TLS en el servidor ProFTPD

Si ya has habilitado SSL/TLS para ProFTPD, como se ha recomendado en este tutorial, los usuarios necesitan un cliente FTP compatible con la creación de la conexión encriptada. Uno de los agentes más importantes es FileZilla, no solo disponible para Debian y otras distribuciones de Linux, sino también para macOS y Windows. El programa de código abierto se presenta como la mejor solución para acceder desde diferentes plataformas al servidor FTP.

En el administrador del servidor de FileZilla, al elegir el tipo de servidor, introduce la variante segura FTPS (“FTP a través de TLS/SSL explícito”) en vez de FTP. También es necesario que se acepte el certificado en la primera creación de conexión con el servidor.

Si no puedes establecer una conexión TLS en FileZilla, puede ser necesario cargar manualmente el módulo mod_tls. Para ello, añade la siguiente línea al inicio del archivo proftpd.conf:

LoadModule mod_tls.c

Para que este cambio se lleve a cabo, reinicia el servidor con el siguiente comando:

sudo systemctl restart proftpd
bash
Consejo

El File Transfer Protocol (SSH) utiliza SSH en lugar de TLS/SSL y es una alternativa sencilla y fácil de usar frente a FTPS.

Configurar ProFTPD: consejos y trucos

Las opciones de configuración anteriores constituyen solo una pequeña selección, pues el polifacético software FTP permite escenarios muchos más específicos y complejos para la configuración de un servidor. La página web oficial de ProFTPD ofrece una cantidad ilimitada de información útil. La documentación online gratuita contiene, entre otras cosas, configuraciones de ejemplo, instrucciones detalladas, peguntas frecuentes y explicaciones de directivas individuales. Además, hay información sobre los diferentes módulos estándares y adicionales.

Posibles errores en la configuración del servidor

En algunos casos, al reiniciar el servidor ProFTPD se pueden mostrar los siguientes mensajes de error:

„mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled“

En este caso concreto el problema reside en que el módulo caché mod_tls_memcache en la compilación de ProFTPD se ha activado automáticamente como componente de SSL/TLS. En la configuración de la encriptación SSL/TLS el módulo se ocupa, en teoría y si así se desea, del almacenamiento temporal de las sesiones FTP encriptadas. Dado que no se requiere la caché de sesión de forma predeterminada, tampoco se han realizado los ajustes necesarios para que el módulo funcione, lo que ha provocado el aviso de error. La solución a este problema es simple: puedes comentar el módulo o el proceso de carga en los archivos de configuración.

# LoadModule mod_tls_memcache.c

Además del error antes descrito, también puede producirse una conexión defectuosa tras instalar un servidor FTP en Debian. Para erradicar este problema se puede acceder a diferentes opciones de análisis:

1. Comprobar si funciona el servidor ProFTPD:

sudo service proftpd status
bash

2. Comprobar si el servidor ProFTPD está escuchando en el puerto TCP 21 para registrar las solicitudes FTP entrantes:

sudo netstat -tlp|grep proftpd
bash

3. Comprobar avisos de error en el acceso a ProFTPD:

sudo tail -20 /var/log/proftpd/proftpd.log
bash

4. Comprobar avisos de error en el acceso a TLS:

sudo tail -20 /var/log/proftpd/tls.log
bash

5. Pruebas de conectividad en el puerto 21 con telnet:

sudo telnet [IP-Address] 21
bash

6. Pruebas de conectividad en el puerto 21 con TLS:

sudo openssl s_client -connect [IP-Address]:21 -stattls ftp
bash
¿Le ha resultado útil este artículo?
Ir al menú principal