Cómo instalar el servidor FTP vsftpd con SSL/TLS en CentOS 8

FTP es un protocolo ampliamente utilizado para transferir archivos entre servidor y cliente. Hoy en día existen muchos servidores FTP de código abierto, como FTPD, VSFTPD, PROFTPD y pureftpd. Entre ellos, VSFTPD es un protocolo seguro, rápido y el más utilizado en todo el mundo. También se llama «Demonio del Protocolo de Transferencia de Archivos Muy Seguro». También soporta SSL, IPv6, FTPS explícito e implícito.

En este tutorial, te mostraremos cómo instalar VSFTPD en un servidor CentOS 8 y protegerlo con SSL/TLS.

Requisitos previos

  • Un servidor que ejecute CentOS 8.
  • Una contraseña de root configurada en tu servidor.

Instalar VSFTPD

Por defecto, VSFTPD está disponible en el repositorio por defecto de CentOS 8. Puedes instalarlo ejecutando el siguiente comando:

dnf install vsftpd -y

Una vez completada la instalación, inicia el servicio VSFTPD y habilítalo para que se inicie tras el reinicio del sistema con el siguiente comando:

systemctl start vsftpd
 systemctl enable vsftpd

En este punto, tu servidor VSFTPD está instalado y funcionando. Ya puedes pasar al siguiente paso.

Crear un usuario para VSFTPD

A continuación, tendrás que crear un nuevo usuario para VSFTPD. Así podrás acceder a tu servidor FTP utilizando este usuario.

Ejecuta el siguiente comando para crear un nuevo usuario llamado vyom, como se muestra a continuación:

adduser vyom

A continuación, establece la contraseña para el usuario vyom con el siguiente comando:

passwd vyom

Una vez que hayas terminado, puedes pasar al siguiente paso.

Configurar VSFTPD

A continuación, abre el archivo de configuración por defecto de VSFTPD situado en el directorio /etc/vsftpd como se muestra a continuación:

nano /etc/vsftpd/vsftpd.conf

Cambia las siguientes líneas:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=NO

Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia el servicio VSFTPD y comprueba el estado del servicio con el siguiente comando:

systemctl restart vsftpd
 systemctl status vsftpd

Deberías ver la siguiente salida:

? vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-02-21 00:43:57 EST; 6s ago
  Process: 2698 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 2699 (vsftpd)
    Tasks: 1 (limit: 6102)
   Memory: 1020.0K
   CGroup: /system.slice/vsftpd.service
           ??2699 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Feb 21 00:43:57 centos8 systemd[1]: Stopped Vsftpd ftp daemon.
Feb 21 00:43:57 centos8 systemd[1]: Starting Vsftpd ftp daemon...
Feb 21 00:43:57 centos8 systemd[1]: Started Vsftpd ftp daemon.

En este punto, tu servidor VSFTPD está configurado. Ahora puedes proceder a todo el VSFTPD a través de SELinux y el cortafuegos.

Configurar el Cortafuegos y SELInux

Por defecto, SELinux está activado en CentOS 8. Así que tendrás que configurar SELinux para VSFTPD.

Puedes configurar SELinux para permitir el acceso FTP con el siguiente comando:

setsebool -P allow_ftpd_full_access=1

A continuación, tendrás que permitir el servicio FTP a través de firewalld. Puedes permitirlo con el siguiente comando

firewall-cmd --zone=public --permanent --add-service=ftp

A continuación, recarga el servicio firewalld para aplicar los cambios de configuración del cortafuegos:

firewall-cmd --reload

En este punto, tu cortafuegos y SELinux están configurados para permitir la conexión FTP entrante desde el sistema remoto. Ahora puedes proceder a probar la conexión FTP.

Conéctate al servidor VSFTPD

Tu servidor VSFTPD ya está instalado y configurado. Ahora, es el momento de conectar el servidor FTP desde el sistema cliente.

Para ello, ve al sistema Cliente y ejecuta el siguiente comando para conectar tu servidor FTP:

ftp 172.20.10.3

Se te pedirá que proporciones tu usuario FTP y la contraseña, como se muestra a continuación:

Connected to 172.20.10.3.
220 (vsFTPd 3.0.3)
Name (172.20.10.3:root): vyom
331 Please specify the password.
Password:
230 Login successful.

Una vez que la conexión se haya establecido correctamente, deberías ver la siguiente salida:

Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Ahora, escribe exit y pulsa el botón Intro para salir de las sesiones FTP.

Configurar VSFTPD con soporte TLS

Por razones de seguridad, es una buena idea encriptar las transmisiones FTP con SSL/TLS. Para ello, tendrás que generar un certificado SSL y configurar el servidor VSFTPD para que lo utilice.

En primer lugar, tendrás que instalar el paquete OpenSSL en tu sistema. Puedes instalarlo con el siguiente comando:

dnf install openssl -y

Una vez instalado, crea un nuevo directorio para almacenar el certificado SSL:

mkdir /etc/ssl/private

A continuación, genera un certificado autofirmado con el siguiente comando:

openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/vsftpd.key -x509 -days 365 -out /etc/ssl/private/vsftpd.crt

Proporciona toda la información requerida como se muestra a continuación:

Generating a RSA private key
...+++++
...........+++++
writing new private key to '/etc/ssl/private/vsftpd.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) [XX]:IN
State or Province Name (full name) []:GUJ
Locality Name (eg, city) [Default City]:JUN
Organization Name (eg, company) [Default Company Ltd]:IT
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:ftpserver
Email Address []:[email protected]

Después de generar el certificado SSL, tendrás que configurar VSFTPD para que utilice este certificado.

Abre el archivo de configuración por defecto de VSFTPD como se muestra a continuación:

nano /etc/vsftpd/vsftpd.conf

Añade las siguientes líneas al final del archivo:

#Path of the SSL certificate
rsa_cert_file=/etc/ssl/private/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
#Enable the SSL
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
#TSL is more secure than SSL so enable ssl_tlsv1_2.
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
#Enable SSL debugging to store all VSFTPD log.
debug_ssl=YES

Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia el servicio VSFTPD para aplicar los cambios:

systemctl restart vsftpd

En este punto, tu servidor VSFTPD está configurado para utilizar un certificado SSL. Ahora puedes pasar al siguiente paso.

Verificar la conexión TLS de VSFTPD

Tu servidor VSFTPD está ahora protegido con soporte SSL/TLS. A continuación, intenta conectar tu servidor FTP desde la línea de comandos como se muestra a continuación:

ftp 172.20.10.3

Deberías ver el error en la siguiente salida:

Connected to 172.20.10.3.
220 (vsFTPd 3.0.2)
Name (172.20.10.3:root): vyom
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp> 

No puedes conectarte a tu servidor VSFTP desde el cliente de línea de comandos. Porque no es compatible con SSL/TLS.

Así que tendrás que descargar y probar la conexión VSFTPD utilizando un cliente FTP que admita conexiones TLS.

Para ello, ve al sistema Cliente e instala el paquete cliente FileZilla.

Tras instalar FileZilla, abre el software FileZilla como se muestra a continuación:

Cliente FTP FileZilla

A continuación, abre el Gestor de Sitios como se muestra a continuación:

Director de obra

Haz clic en el botón Nuevo Sitio para añadir una nueva conexión FTP como se muestra a continuación:

Añadir detalles del servidor FTP

Proporciona la IP de tu servidor FTP, Selecciona el protocolo FTP, Selecciona «Usar FTP explícito sobre TLS», Selecciona pedir contraseña, proporciona el nombre de usuario de tu servidor FTP y haz clic en el botón Conectar. Se te pedirá que proporciones la contraseña del usuario FTP como se muestra a continuación:

Introduce la contraseña

Proporciona tu contraseña FTP y pulsa el botón Aceptar. Se te pedirá que verifiques el certificado utilizado para la conexión SSL/TLS como se muestra a continuación:

Aceptar certificado SSL

Pulsa el botón Aceptar para verificar el certificado. Una vez que la conexión se haya establecido correctamente, deberías ver la siguiente pantalla:

Conectado correctamente al servidor FTP

Conclusión

En la guía anterior, hemos instalado el servidor VSFTPD en CentOS 8. También hemos configurado el servidor VSFTPD para que utilice el certificado SSL/TLS. Ahora tu servidor FTP está protegido. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...