El File-Transfer-Protocol o protocolo de tra­n­s­fe­re­n­cia de archivos, conocido por sus siglas FTP, es una de las técnicas de tra­n­s­fe­re­n­cia de archivos más uti­li­za­das, es­pe­cia­l­me­n­te para subir y descargar archivos en espacios web. En este tutorial, apre­n­de­rás cómo co­n­fi­gu­rar un servidor FTP con cifrado TLS en Debian.

Instalar un servidor FTP en Debian

Antes de pasar a la in­s­ta­la­ción y co­n­fi­gu­ra­ción es necesario encontrar primero el software de servidor adecuado. Linux ofrece diversos se­r­vi­do­res FTP, en su mayoría open source y que no­r­ma­l­me­n­te se en­cue­n­tran di­s­po­ni­bles en los gestores de paquetes de las distintas di­s­tri­bu­cio­nes Linux.

Una de las apli­ca­cio­nes más conocidas es ProFTPD, con licencia GPL y que debido a su co­n­s­tru­c­ción modular es fá­ci­l­me­n­te escalable. El archivo de co­n­fi­gu­ra­ción principal funciona basándose en di­re­c­ti­vas o grupos de ellas con las que los ad­mi­ni­s­tra­do­res que ya hayan estado en contacto con el servidor de Apache deben estar fa­mi­lia­ri­za­dos. Aunque Debian ejecuta ProFTPD de forma pre­de­te­r­mi­na­da en el re­po­si­to­rio del software, la in­s­ta­la­ció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 au­to­má­ti­ca­me­n­te al reiniciar el sistema, ejecuta el siguiente comando:

sudo systemctl enable proftpd
bash
Consejo

¿Necesitas almacenar o tra­n­s­fe­rir datos? Alquila ahora un servidor Secure FTP con IONOS. Disfruta de una tra­n­s­fe­re­n­cia segura gracias a SSH y SSL/TLS, además de copias de seguridad diarias incluidas.

Para finalizar con la in­s­ta­la­ción es necesario decidir si se va a usar ProFTPD en modo servidor (sta­n­da­lo­ne) o en uno de los servicios co­n­tro­la­dos por inedt. En el primer caso el servidor FTP se ocupa de forma autónoma de las pe­ti­cio­nes entrantes. En la segunda variante el “su­pe­r­se­r­vi­dor” inetd/xinetd se encarga de las pe­ti­cio­nes y las dirige al servidor FTP, opción de interés solo en el caso de esperar poco tráfico en el FTP.

Se­r­vi­do­res virtuales (VPS)
VPS rentables en se­r­vi­do­res Dell En­te­r­pri­se
  • 1 Gb/s de ancho de banda y tráfico ilimitado
  • 99,99 % de tiempo de actividad y ce­r­ti­fi­ca­ción ISO
  • Soporte 24/7 ga­la­r­do­na­do y asesor personal

Servidor FTP en Debian: posibles es­ce­na­rios y la tarifa de IONOS adecuada

¿No sabes qué co­n­fi­gu­ra­ción de hardware y red necesitas para tu servidor FTP en Debian? En la siguiente tabla, se presentan tres es­ce­na­rios posibles para un servidor FTP junto con la tarifa de IONOS más adecuada para cada caso.

Escenario del servidor FTP Tarifa de IONOS re­co­me­n­da­da
Pequeño servidor web VPS Linux M
Servidor web más grande VPS Linux XL
Servidor FTP em­pre­sa­rial Servidor Dedicado AMD Ryzen XXL-128 NVMe

El servidor FTP en Debian: tutorial de co­n­fi­gu­ra­ción

Tras la in­s­ta­la­ción se puede empezar a co­n­fi­gu­rar ProFTPD. En el di­re­c­to­rio /etc/proftpd/ se encuentra el archivo de co­n­fi­gu­ra­ció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 si­guie­n­tes líneas del editor se en­cue­n­tran las funciones y opciones de co­n­fi­gu­ra­ción más im­po­r­ta­n­tes. Cada co­m­po­ne­n­te tiene su línea propia y requiere valores pre­de­fi­ni­dos. 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 des­ac­ti­va­da). Además, existe la opción de anteponer una al­moha­di­lla (#) a una línea para pre­s­ci­n­dir de ella, de modo que el servidor ProFTPD ignora la línea completa, es decir, la al­moha­di­lla se considera como al­te­r­na­ti­va a “off” para des­ac­ti­var funciones.

Consejo

En vez de un archivo proftpd.conf puedes usar también tu propio archivo de co­n­fi­gu­ra­ción y al­ma­ce­nar­lo en el di­re­c­to­rio /etc/proftpd/conf.d/. Este di­re­c­to­rio permanece intacto cuando el software FTP se actualiza, de tal modo que se consigue reducir el riesgo de perder las co­n­fi­gu­ra­cio­nes. Con las di­re­c­ti­vas include, las es­pe­ci­fi­ca­cio­nes del servidor guardadas en el di­re­c­to­rio conf.d pueden in­te­grar­se sin mayor problema en el archivo principal (tiene lugar au­to­má­ti­ca­me­n­te con la co­n­fi­gu­ra­ción estándar).

Co­n­fi­gu­ra­cio­nes básicas: hostname y di­re­c­to­rio FTP

Antes de proceder a la co­n­fi­gu­ra­ción del servidor FTP en Debian hay que prestar atención a la in­s­ta­la­ción base, es decir, a los ajustes ese­n­cia­les: asignar un hostname al servidor o de­te­r­mi­nar el di­re­c­to­rio que se va a usar para subir o descargar datos. Además, existen di­fe­re­n­tes po­si­bi­li­da­des de co­n­fi­gu­ra­ción re­la­cio­na­das con los usuarios de FTP po­te­n­cia­les, como se puede ver en la co­n­fi­gu­ra­ción a modo de ejemplo que aparece a co­n­ti­nua­ció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 co­n­fi­gu­ra­ción básica se les permite el acceso a un di­re­c­to­rio concreto a los usuarios. Esto es muy útil, entre otras cosas, si estos se encargan del ma­n­te­ni­mie­n­to 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 al­ma­ce­na­mie­n­to para los archivos, hay que co­n­fi­gu­rar ProFTPD de modo que el acceso se limite al di­re­c­to­rio 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 co­n­ti­nua­ció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 di­re­c­to­rio de entrada. Hay que es­ta­ble­cer también una co­n­tra­se­ña para la nueva cuenta de usuario y confirmar el nuevo perfil. No obstante, para que este nuevo usuario pueda co­ne­c­tar­se realmente al servidor FTP en Debian y le sea posible subir y descargar los datos en su propio di­re­c­to­rio, es necesario in­tro­du­cir el di­re­c­to­rio 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 di­re­c­to­rio de di­fe­re­n­tes formas para co­n­ve­r­ti­r­lo en un lugar de al­ma­ce­na­mie­n­to privado de los archivos del user1 y con el comando Umask (022) se asignan todos los derechos al pro­pie­ta­rio del di­re­c­to­rio. Otros usuarios, por el contrario, podrán leer los archivos, pero solo se les permitirá ex­po­r­tar­los cuando el pro­pie­ta­rio les conceda los derechos ne­ce­sa­rios. La directiva des­ac­ti­va­da Allo­wO­ve­r­w­ri­te evita que al subir nuevos datos se re­es­cri­ban los ya al­ma­ce­na­dos. Fi­na­l­me­n­te, el FTP log in (Limit LOGIN) y la im­ple­me­n­ta­ción del comando (Limit ALL) están blo­quea­dos para todos los usuarios, excepto para el user1.

Consejo

En vez de prohibir la im­ple­me­n­ta­ción de todos los comandos de FTP, es posible impedir ope­ra­cio­nes únicas y de este modo tener la po­si­bi­li­dad de crear, por ejemplo, un di­re­c­to­rio al que los usuarios solo tengan permitido subir archivos. Una vista previa guiada sobre las di­fe­re­n­tes po­si­bi­li­da­des de co­n­fi­gu­ra­ción se puede encontrar en los si­guie­n­tes 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ó­ni­ma­me­n­te a los archivos fa­ci­li­ta­dos. Para ello, hay que definir primero los derechos de acceso a través de chmod para el di­re­c­to­rio de descarga posterior, de­no­mi­na­do en este caso /home/ft­p­do­w­n­load:

sudo chmod 755 -R /home/ftpdownload
bash

El pro­pie­ta­rio del di­re­c­to­rio 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 co­n­fi­gu­rar 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

Co­n­fi­gu­rar en­cri­p­ta­ción SSL/TLS

El protocolo FTP tra­n­s­fie­re en texto plano tanto la in­fo­r­ma­ción de registro como los datos enviados. Por ello, si quieres co­n­fi­gu­rar ProFTPD en modo privado para que no sea accesible a todo el mundo, se re­co­mie­n­da encriptar el acceso. Esto se puede llevar a cabo mediante el software OpenSSL. El ad­mi­ni­s­tra­dor de paquetes de Debian contiene esta he­rra­mie­n­ta de en­cri­p­ta­ción de forma estándar, aunque la in­s­ta­la­ción se puede llevar a cabo también de forma al­te­r­na­ti­va como prosigue:

sudo apt install openssl
bash

Paso 1: generar el ce­r­ti­fi­ca­do y la clave

Utiliza OpenSSL para crear un ce­r­ti­fi­ca­do. Para poder guardarlo, crea una carpeta en el di­re­c­to­rio ProFTPD con el siguiente comando:

sudo mkdir /etc/proftpd/ssl
bash

Tanto el ce­r­ti­fi­ca­do (proftpd.cert.pem) como la clave (proftpd.key.pem) tienen una validez anual. En se­r­vi­do­res FTP en Linux estos se generan una vez se ha insertado el di­re­c­to­rio de al­ma­ce­na­mie­n­to 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 in­fo­r­ma­ción para que el ce­r­ti­fi­ca­do 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, “Ca­li­fo­r­nia
  • Locality Name (eg, city): ciudad, por ejemplo, “Los Ángeles
  • Or­ga­ni­za­tion Name (eg, company): nombre de la compañía o tu propio nombre
  • Or­ga­ni­za­tio­nal Unit Name (eg, company): de­pa­r­ta­me­n­to (si hay), por ejemplo, “TI
  • Common Name (eg, YOUR name): nombre del dominio que debe pro­te­ge­r­se, por ejemplo, “ftp.example.com.
  • Email Address: dirección de correo ele­c­tró­ni­co
Se­r­vi­do­res dedicados
Re­n­di­mie­n­to e in­no­va­ción
  • Pro­ce­sa­do­res de última ge­ne­ra­ción
  • Hardware dedicado de alto re­n­di­mie­n­to
  • Seguridad de primer nivel

Paso 2: activar SSL/TLS en ProFTPD

Tras haber creado tu propio ce­r­ti­fi­ca­do junto a una clave privada debes activar la técnica de en­cri­p­ta­ción para el servidor ProFTPD. Para ello el software del servidor FTP en Debian dispone del módulo mod_tls. Para su ac­ti­va­ción se requiere llevar a cabo una serie de ajustes en tls.conf. Abre la co­n­fi­gu­ra­ció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 ha­bi­li­ta­do la en­cri­p­ta­ción SSL/TLS para tu servidor FTP en Debian, sino que en el mismo paso has realizado las co­n­fi­gu­ra­cio­nes más im­po­r­ta­n­tes al definir el archivo de acceso para el registro de las co­ne­xio­nes FTP (TLSLog), así como las rutas al ce­r­ti­fi­ca­do (TL­S­R­SA­Ce­r­ti­fi­ca­te­Fi­le) y la clave (TL­S­R­SA­Ce­r­ti­fi­ca­te­Ke­y­Fi­le), además de in­tro­du­cir las versiones de protocolo posibles (TL­S­Pro­to­col). Las dos últimas líneas hacen que el módulo no verifique el ce­r­ti­fi­ca­do pre­se­n­ta­do por el cliente (TL­S­Ve­ri­f­y­Clie­nt) y que la en­cri­p­ta­ción sea un requisito previo para es­ta­ble­cer la conexión (TL­S­Re­qui­red). Tras reiniciar el servidor ProFTPD se hacen efectivos los ajustes:

sudo /etc/init.d/proftpd restart
bash

Paso 3: re­gi­s­trar­se a través de SSL/TLS en el servidor ProFTPD

Si ya has ha­bi­li­ta­do SSL/TLS para ProFTPD, como se ha re­co­me­n­da­do en este tutorial, los usuarios necesitan un cliente FTP co­m­pa­ti­ble con la creación de la conexión en­cri­p­ta­da. Uno de los agentes más im­po­r­ta­n­tes es FileZilla, no solo di­s­po­ni­ble para Debian y otras di­s­tri­bu­cio­nes 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 di­fe­re­n­tes pla­ta­fo­r­mas al servidor FTP.

En el ad­mi­ni­s­tra­dor 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 ce­r­ti­fi­ca­do en la primera creación de conexión con el servidor.

Si no puedes es­ta­ble­cer una conexión TLS en FileZilla, puede ser necesario cargar ma­nua­l­me­n­te 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 al­te­r­na­ti­va sencilla y fácil de usar frente a FTPS.

Co­n­fi­gu­rar ProFTPD: consejos y trucos

Las opciones de co­n­fi­gu­ra­ción an­te­rio­res co­n­s­ti­tu­yen solo una pequeña selección, pues el po­li­fa­cé­ti­co software FTP permite es­ce­na­rios muchos más es­pe­cí­fi­cos y complejos para la co­n­fi­gu­ra­ción de un servidor. La página web oficial de ProFTPD ofrece una cantidad ilimitada de in­fo­r­ma­ción útil. La do­cu­me­n­ta­ción online gratuita contiene, entre otras cosas, co­n­fi­gu­ra­cio­nes de ejemplo, in­s­tru­c­cio­nes de­ta­lla­das, peguntas fre­cue­n­tes y ex­pli­ca­cio­nes de di­re­c­ti­vas in­di­vi­dua­les. Además, hay in­fo­r­ma­ción sobre los di­fe­re­n­tes módulos es­tá­n­da­res y adi­cio­na­les.

Posibles errores en la co­n­fi­gu­ra­ción del servidor

En algunos casos, al reiniciar el servidor ProFTPD se pueden mostrar los si­guie­n­tes 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 co­m­pi­la­ción de ProFTPD se ha activado au­to­má­ti­ca­me­n­te como co­m­po­ne­n­te de SSL/TLS. En la co­n­fi­gu­ra­ción de la en­cri­p­ta­ción SSL/TLS el módulo se ocupa, en teoría y si así se desea, del al­ma­ce­na­mie­n­to temporal de las sesiones FTP en­cri­p­ta­das. Dado que no se requiere la caché de sesión de forma pre­de­te­r­mi­na­da, tampoco se han realizado los ajustes ne­ce­sa­rios 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 co­n­fi­gu­ra­ción.

# LoadModule mod_tls_memcache.c

Además del error antes descrito, también puede pro­du­ci­r­se una conexión de­fe­c­tuo­sa tras instalar un servidor FTP en Debian. Para erradicar este problema se puede acceder a di­fe­re­n­tes opciones de análisis:

1. Comprobar si funciona el servidor ProFTPD:

sudo service proftpd status
bash

2. Comprobar si el servidor ProFTPD está es­cu­cha­n­do en el puerto TCP 21 para registrar las so­li­ci­tu­des 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 co­ne­c­ti­vi­dad en el puerto 21 con telnet:

sudo telnet [IP-Address] 21
bash

6. Pruebas de co­ne­c­ti­vi­dad en el puerto 21 con TLS:

sudo openssl s_client -connect [IP-Address]:21 -stattls ftp
bash
Ir al menú principal