Servidor FTP ProFTPd para Linux: Instalación y configuración

Servidor FTP ProFTPd para Linux: Instalación y configuración

Sergio De Luz

Actualmente existen una gran cantidad de programas que actúan como servidores FTP. El protocolo FTP (File Transfer Protocol) nos permite transferir archivos de manera local y remota de forma fácil, y, sobre todo, muy rápida. El protocolo FTP por sí mismo no encripta ni los datos transmitidos ni tampoco la autenticación mediante usuario y contraseña, pero si hacemos uso de FTPES todo el tráfico va cifrado desde el cliente FTP hasta el servidor FTP. Hoy en RedesZone os vamos a enseñar cómo instalar y configurar de manera avanzada el servidor FTP proFTPd, uno de los software más completos y potentes que hay para sistemas operativos Linux. Este servidor FTP es el favorito de muchos administradores de sistemas por la configurabilidad que es capaz de proporcionarnos. En este artículo os vamos a enseñar cómo podemos instalarlo y configurarlo de forma completa en un sistema que esté ejecutando Ubuntu para que varios usuarios puedan acceder a él de forma remota.

Principales características de proFTPd

El servidor proFTPd es compatible con todos los sistemas operativos basados en Linux y Unix, por tanto, también es compatible con los populares sistemas operativos basados en FreeBSD que son ampliamente utilizados a gran escala para servidores. Este servidor FTP dispone de una grandísima cantidad de opciones de configuración, como, por ejemplo, crear usuarios virtuales que solamente se utilizan en el servidor FTP y que no forman parte del sistema operativo. También podremos definir rutas virtuales para cada uno de estos usuarios que hemos creado anteriormente, limitar el ancho de banda de los diferentes usuarios a nivel de aplicación, e incluso podremos también definir una MasqueradeAddress para que no tengamos ningún problema si utilizamos FTP PASV, el cual es lo más recomendable para no tener problemas en entornos de NAT. Otras opciones son la posibilidad de crear reglas avanzadas para que desde una determinada red tengamos una serie de «permisos», y desde otra red tengamos otros, ya que podremos subdividir el servidor FTP por clases.

Una opción muy importante hoy en día está en el cifrado, tanto a la hora de autenticar a los clientes que se conecten al servidor FTP, como a la hora de transmitir toda la información de manera local y remota. Este software proFTPd incorpora la posibilidad de levantar un servidor FTPES, por tanto, utilizará el protocolo TLS 1.2 o TLS 1.3 para que toda la información desde el origen (cliente FTP) hasta el destino (el propio servidor FTP) esté cifrada y autenticada. Para poder configurar el proFTPd con FTPES, será necesario crear unos certificados digitales, en este tutorial también os enseñaremos a crearlos y utilizarlos, para que todas vuestras comunicaciones con el servidor FTPES sean seguras.

Una vez que ya conocemos las principales características de proFTPd, vamos a ver cómo instalar este servidor en cualquier distribución de Linux o Unix.

Instalación de proFTPd

proFTPd es muy fácil de instalar porque se encuentra en los repositorios de software de todas las distribuciones Linux y Unix, no obstante, también podrías descargarlo desde la web oficial para posteriormente instalarlo de manera manual. Para instalarlo en cualquier distribución de Linux como Debian o Ubuntu, bastará con instalar el paquete «proftpd» desde un terminal con el siguiente comando:

sudo apt install proftpd

Durante la instalación nos preguntará sobre el tipo de instalación que queremos. En caso de hacer poco uso del servidor FTP podemos seleccionar la opción «inetd» para ahorrar recursos del sistema. Si vamos a hacer un uso considerable del servidor FTP con varios usuarios y bastante tiempo deberíamos instalarlo como «standalone» o «independientemente». Esta configuración se podría modificar posteriormente, pero os recomendamos seleccionar «standalone» porque se ejecutará como un servidor independiente, y en caso de tener un alto tráfico, te funcionará mejor.

proftpd_tuto_foto_2

Seleccionamos la opción que más se ajuste a nuestras necesidades y finalizamos la instalación del servidor. Tal y como ocurre con otros programas en Linux, no será necesario reiniciar el ordenador ni el servidor, podemos empezar a trabajar con él instantáneamente.

Iniciar, parar, reiniciar y recargar el proceso de proFTPd

Si necesitas iniciar, parar o reiniciar el proceso de proFTPd, y utilizas el sistema SysVinit típico, podrás ejecutar los siguientes comandos para realizar todas las acciones.

Para iniciar el servidor proFTPD:

/etc/init.d/proftpd start

o también puedes usar:

service proftpd start

Para parar el servidor proFTPD:

/etc/init.d/proftpd stop

o también puedes usar:

service proftpd stop

Si quieres reiniciar el servidor proFTPd puedes usar:

/etc/init.d/proftpd restart

o también puedes usar:

service proftpd restart

Si necesitas iniciar, parar o reiniciar el proceso de proFTPd, y utilizas el sistema systemd, podrás ejecutar los siguientes comandos para realizar todas las acciones.

Para iniciar el servidor proFTPD:

systemctl start proftpd

o también puedes usar:

systemctl start proftpd.service

Para parar el servidor proFTPD:

systemctl stop proftpd

o también puedes usar:

systemctl stop proftpd.service

Si quieres reiniciar el servidor proFTPd puedes usar:

systemctl restartproftpd

o también puedes usar:

systemctl restart proftpd.service

¿Cuándo necesitaríamos hacer un «reload» para recargar el servicio proFTPd? Cuando hagamos un cambio en la configuración, para que automáticamente la aplique. En el caso de utilizar SysVinit para hacer el «reload», deberás poner lo siguiente:

/etc/init.d/proftpd reload

o también puedes usar:

service proftpd reload

En el caso de utilizar Systemd, deberás poner lo siguiente:

systemctl reload proftpd

o también puedes usar:

systemctl reload proftpd.service

Finalmente, si quieres ver el estado actual del servidor proFTPd, puedes ejecutar los siguientes comandos, dependiendo de si utilizas SysVinit o Systemd, deberás utilizar los siguientes comandos. Si usas SysVinit tendrás que usar:

service proftpd status

ó

/etc/init.d/proftpd status

y si utilizas Systemd:

systemctl status proftpd

ó

systemctl status proftpd.service

Una vez que ya sabéis iniciar, parar, restaurar, recargar la configuración y ver el estado del software proFTPd, vamos a ver cómo podemos configurarlo con el arranque del sistema.

Configurar proFTPd al arranque del sistema

Cuando instalamos proFTPd, automáticamente lo tendremos puesto al inicio, es decir, cuando arranque el sistema arrancará el proceso de proFTPd para que podamos conectarnos. En caso de que esto no ocurra, siempre podremos activarlo de manera manual ejecutando los siguientes comandos:

Si utilizas SysVinit:

chkconfig proftpd on

Si utilizas systemd:

systemctl enable proftpd systemctl enable proftpd.service

Una vez que sabemos cómo arrancarlo con el sistema, vamos a ver todas y cada una de las configuraciones de proFTPd para que podáis configurarlo todo en detalle.

Configuración de proFTPd

El archivo de configuración principal de proFTPd se encuentra en /etc/proftpd/proftpd.conf. Desde aquí deberemos configurar la mayoría de los aspectos de nuestro servidor FTP. Lo primero que debemos hacer es establecer una carpeta como directorio principal para todos los usuarios del FTP. Para ello, abriremos con nuestro editor de texto preferido el archivo de configuración anterior:

sudo gedit /etc/proftpd/proftpd.conf

proftpd_tuto_foto_3

Una vez allí, buscaremos la línea comentada «DefaultRoot» y la descomentamos borrando la almohadilla #. Esto nos va a permitir que cuando cada usuario acceda a su cuenta del FTP, estos accederán directamente a su carpeta «home».

Si queremos que todos los usuarios que inicien sesión accedan por defecto a una misma carpeta, debemos cambiar el parámetro DefaultRoot y añadir la ruta a la que queramos que accedan. Por ejemplo, en nuestro caso hemos creado una carpeta llamada «proftpd» dentro de /home/ y queremos que todos los usuarios por defecto accedan a ella. El archivo de configuración quedará de la siguiente manera:

proftpd_tuto_foto_6

También podemos hacer que todos los usuarios accedan por defecto a una carpeta (como en el paso anterior) salvo un usuario que queremos que acceda a otra o, simplemente, tenga permiso de administrador y pueda acceder a todo el disco.

Para ello debemos modificar los siguientes aspectos:

El parámetro DefaultRoot tiene la siguiente estructura:

DefaultRoot [directorio] [grupo de usuarios que tendrán ese directorio por defecto] [Grupo de usuarios a los que no se les aplicará ese directorio]

Es decir, vamos a poner el ejemplo de tener 2 usuarios, A y B. A únicamente podrá acceder a su directorio mientras que B podrá acceder a todo el disco duro. Debemos añadir las siguientes líneas:

DefaultRoot /home/ftp A

DefaultRoot / B

De esta manera, cuando el usuario B acceder al servidor tendrá control completo sobre todos los archivos del disco, mientras que si es A quien accede, únicamente podrá gestionar su carpeta.

Otros parámetros interesantes para configurar son:

  • ServerName: nos permite establecer un nombre al servidor.
  • AccessGrantMsg: Mensaje de bienvenida. (Hay que añadirlo manualmente al final del archivo).
  • AccessDenyMsg: Mensaje de error al iniciar. (Hay que añadirlo manualmente al final del archivo).

A continuación, reiniciaremos el servidor para que se apliquen los cambios realizados tecleando:

sudo /etc/init.d/proftpd restart

Vamos a comprobar que el servidor nos funciona. Para ello utilizaremos un cliente como FileZilla y nos conectaremos a nuestra cuenta.

proftpd_tuto_foto_4

Crear usuarios y contraseñas para el FTP

El proceso para crear usuarios es el mismo que para crearlos en el sistema ya que proftpd utiliza los usuarios del sistema por defecto. Debemos teclear los siguientes parámetros en un terminal:

sudo adduser usuario

(creamos el usuario)

A continuación, estableceremos la contraseña para el mismo:

sudo passwd usuario

(creamos la contraseña para el usuario «usuario»)

A partir de ahora, «usuario» podrá conectarse al FTP y accederá, por defecto, a la carpeta especificada en DefaultRoot.

Permitir y denegar usuarios

Podemos controlar los usuarios que pueden y no pueden iniciar sesión en nuestro servidor de una forma muy sencilla. Para ello, abrimos el archivo de configuración y añadiremos lo siguiente al final de este:

<Limit LOGIN>

AllowUser ruvelro

DenyAll

</Limit>

Otros parámetros que podemos utilizar aquí son:

  • AllowUser: Nos permite permitir un usuario específico.
  • DenyUser: Bloqueamos el acceso a un usuario específico.
  • DenyAll: Bloqueamos el acceso a todos los usuarios salvo a los que especifiquemos con AllowUser.
  • AllowAll: Permite que los usuarios como «anonymous» se conecten al FTP.

Por ejemplo, si queremos permitir las conexiones anónimas a nuestro FTP debemos añadir dentro del grupo anterior el parámetro AllowAll, quedando de la siguiente manera:

<Limit LOGIN>

AllowUser ruvelro

AllowAll

</Limit>

proftpd_tuto_foto_5

Para añadir un usuario nuevo debemos crear a este una cuenta de usuario en nuestro Ubuntu y accederá al servidor FTP con las credenciales de su cuenta.

Otros comandos de utilidad para proFTPd

Podemos consultar un registro de inicio de sesión y actividad con el siguiente parámetro:

sudo cat /var/log/proftpd/proftpd.log

Podemos consultar los usuarios que están conectados a nuestro servidor FTP en tiempo real con los siguientes comandos:

ftpwho ftptop

Configurar FTPES en el servidor proFTPd para tener seguridad

FTPES se conoce como FTP Explícito, este protocolo nos permite conectanors al puerto TCP 21 del servidor FTP, y antes de autenticarnos y empezar a transferir información, se le añade una capa TLS 1.2 o TLS 1.3 para proteger toda la información. Por tanto, con FTPES seguiremos haciendo uso del popular puerto 21, o el puerto que vosotros queráis utilizar. También tenemos la posibilidad de solo permitir conexiones FTPES, y dejar las conexiones FTP de lado, para que tanto la autenticación como la transferencia de ficheros sean seguros. Debido a la utilización del protocolo TLS/SSL, deberemos configurar en el servidor un certificado RSA o similar, con su clave pública y su clave privada, para poder levantar correctamente el servicio de FTP.

Lo primero que debemos hacer es activar la directiva en el fichero de configuración principal de proFTPd, descomentando la parte de «Include /etc/proftpd/tls.conf», tal y como podéis ver a continuación:

Ahora vamos a crear el certificado digital RSA, necesitaremos tanto la clave pública como la clave privada que genera, para que los clientes se puedan conectar correctamente al servidor proFTPd con FTPES. El propio proFTPd incorpora una herramienta que automatiza mucho el proceso de crear certificados, esta herramienta se llama proftpd-gencert, y es muy fácil de utilizar:

root@debian-vm:/home/bron# proftpd-gencert
Generating a RSA private key
.............................................................................................................+++++
...............+++++
writing new private key to '/etc/ssl/private/proftpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:RedesZone
Locality Name (eg, city) []:RedesZone
Organization Name (eg, company) [Internet Widgits Pty Ltd]:RZ
Organizational Unit Name (eg, section) []:RZ
Common Name (e.g. server FQDN or YOUR name) []:RedesZone.NET
Email Address []:webmaster

Use the following information in your ProFTPD configuration:

TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key

See /etc/proftpd/tls.conf for suggested TLS related configuration
items and include that file in your /etc/proftpd/proftpd.conf file.

root@debian-vm:/home/bron#

Pero nosotros os vamos a enseñar cómo hacerlo «manualmente» para seleccionar la longitud de clave RSA que vosotros queráis. Para hacer esto mismo, tendremos que ejecutar el siguiente comando:

openssl genrsa -out /etc/ssl/private/proftpd.key 4096

Este comando genera la clave privada con 4096 bits RSA, posteriormente tendremos que generar el certificado digital público que se compartirá con los clientes:

openssl req -new -x509 -days 1460 -key /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt

Indicamos que queremos que caduque en 1460 días, y aquí tendremos que importar la clave privada y posteriormente exportar el certificado proftpd.crt a ese directorio. El proceso que hemos seguido es el siguiente, tal y como podéis ver en este registro:

root@debian-vm:/home/bron# openssl genrsa -out /etc/ssl/private/proftpd.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
...................................................................................................................................................................++++
..................................................++++
e is 65537 (0x010001)
root@debian-vm:/home/bron# openssl req -new -x509 -days 1460 -key /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:RedesZone
Locality Name (eg, city) []:RZ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:RZ
Organizational Unit Name (eg, section) []:RZ
Common Name (e.g. server FQDN or YOUR name) []:RZ
Email Address []:webmaster
root@debian-vm:/home/bron#

Una vez que lo hayamos hecho, podremos editar el fichero de configuración «etc/proftpd/tls.conf», el cual tiene esta configuración de manera predeterminada:

# Proftpd sample configuration for FTPS connections.
#
# Note that FTPS impose some limitations in NAT traversing.
# See http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-TLS.html
# for more information.
##TLSEngine on
#TLSLog /var/log/proftpd/tls.log
#TLSProtocol SSLv23
#
# Server SSL certificate. You can generate a self-signed certificate using
# a command like:
#
# openssl req -x509 -newkey rsa:1024
# -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt
# -nodes -days 365
#
# The proftpd.key file must be readable by root only. The other file can be
# readable by anyone.
#
# chmod 0600 /etc/ssl/private/proftpd.key
# chmod 0640 /etc/ssl/private/proftpd.key
#
#TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
#TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
#
# CA the server trusts...
#TLSCACertificateFile /etc/ssl/certs/CA.pem
# ...or avoid CA cert and be verbose
#TLSOptions NoCertRequest EnableDiags
# ... or the same with relaxed session use for some clients (e.g. FireFtp)
#TLSOptions NoCertRequest EnableDiags NoSessionReuseRequired
#
#
# Per default drop connection if client tries to start a renegotiate
# This is a fix for CVE-2009-3555 but could break some clients.
#
#TLSOptions AllowClientRenegotiations
#
# Authenticate clients that want to use FTP over TLS?
#
#TLSVerifyClient off
#
# Are clients required to use FTP over TLS when talking to this server?
#
#TLSRequired on
#
# Allow SSL/TLS renegotiations when the client requests them, but
# do not force the renegotations. Some clients do not support
# SSL/TLS renegotiations; when mod_tls forces a renegotiation, these
# clients will close the data connection, or there will be a timeout
# on an idle data connection.
#
#TLSRenegotiate required off

El fichero de configuración que debemos tener nosotros en /etc/proftpd/tls.conf es el siguiente:

TLSEngine on
TLSLog /var/ftpd/tls.log

TLSProtocol TLSv1.2 TLSv1.3

TLSRequired off

TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/certs/proftpd.key

TLSVerifyClient off

TLSRenegotiate none

Guardamos el archivo, y procedemos a reiniciar el servicio de proFTPd con lo que hemos aprendido anteriormente. Cuando nos vayamos a conectar, veremos que efectivamente nos estamos conectando con TLS 1.3 con un intercambio de claves seguro, y con un cifrado AES-256-GCM que nos proporcionará la mejor seguridad y rendimiento.

También podréis crear certificados basados en ECC, ya que proFTPd incorpora directivas «TLSECCertificateFile» y también «TLSECCertificateKeyFile» para ello. Podéis ver todas las opciones disponibles sobre FTPES y TLS en proFTPd en la web oficial del mod_tls.

Como podemos ver, proFTPd es un servidor FTP muy potente y sencillo de configurar. Con ProFTPd no tendremos problemas, por ejemplo, a la hora de tener que usar el servidor con muchos usuarios a la vez ni al tener que compartir archivos con muchos usuarios al mismo tiempo.