GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo configurar vsftpd para usar SSL/TLS (FTPS) en CentOS/Ubuntu

Proteger FTP

Vsftpd es un servidor ftp ampliamente utilizado, y si lo está configurando en su servidor para transferir archivos, tenga en cuenta los problemas de seguridad que surgen. El protocolo ftp tiene una seguridad débil inherente a su diseño. Transfiere todos los datos en texto sin formato (sin cifrar), y en una red pública/no segura esto es algo demasiado arriesgado.

Para solucionar el problema tenemos FTPS. Asegura la comunicación FTP cifrándola con SSL/TLS. Y esta publicación muestra cómo configurar el cifrado SSL con vsftpd.

Instalar vsftpd

Vsftpd está disponible en los repositorios predeterminados de todas las principales distribuciones, incluidas debian, ubuntu, centos y fedora, y se puede instalar sin problemas. Solo hay un archivo de configuración llamado vsftpd.conf que reside en el directorio /etc.

# ubuntu/debian
$ sudo apt-get install vsftpd
# centos/fedora
# sudo yum install vsftpd

El resto es configurar vsftpd para usar encriptación ssl para la comunicación ftp. Es solo un proceso de 2 pasos.

Generar un certificado SSL

El primer paso es crear un certificado SSL y un archivo de clave que vsftpd usará para el cifrado. El parámetro de configuración "rsa_cert_file" contendrá la ruta al archivo del certificado. Tiene un valor predeterminado que se puede encontrar en la página de manual.

$ man vsftpd.conf | grep rsa_cert_file -A 5
       rsa_cert_file
              This option specifies the location of the RSA certificate to
              use for SSL encrypted connections.
              Default: /usr/share/ssl/certs/vsftpd.pem

Es diferente en Ubuntu y CentOS. Podemos almacenarlo en cualquier lugar que queramos.
Cree un certificado SSL con el comando openssl. Estamos juntando el certificado y la clave en un solo archivo.

# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Responda las preguntas que siguen y en unos segundos el archivo del certificado debería estar listo. La salida se vería así

# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Generating a 1024 bit RSA private key
.............++++++
....++++++
writing new private key to '/etc/ssl/private/vsftpd.pem'
-----
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]:US
State or Province Name (full name) []:NY
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Configurar Vsftpd para SSL

La siguiente tarea es configurar vsftpd para usar este certificado SSL para el cifrado. El archivo vsftpd.conf se puede encontrar en la siguiente ubicación

# Ubuntu/Debian
/etc/vsftpd.conf 

# CentOS/Fedora
/etc/vsftpd/vsftpd.conf

Abra el archivo vsftpd.conf y edítelo como se muestra a continuación

Lo siguiente le indicará a vsftpd la ubicación del certificado/archivo de clave a utilizar.

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

Agregue las siguientes opciones para activar SSL. Habilitará SSL y forzará el cifrado para las transferencias de datos y los inicios de sesión.

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

Las siguientes líneas le dirán a vsftpd que use TLS cuando corresponda, que es más seguro que su predecesor SSL.

ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES

Se han añadido todas las directivas de configuración necesarias. Guarde el archivo y reinicie vsftpd

# service vsftpd restart
# or
# sudo /etc/init.d/vsftpd restart

Probar SSL en vsftpd

Ahora que nuestra configuración está completa, es hora de probarla.

Primero intente conectarse usando el comando ftp simple y debería fallar al solicitar el cifrado.

$ ftp 192.168.1.5
Connected to 192.168.1.5.
220 (vsFTPd 2.2.2)
Name (192.168.1.5:enlightened): pal
530 Non-anonymous sessions must use encryption.
Login failed.
ftp>

A continuación, verifique que el cifrado SSL funcione correctamente. Los clientes ftp de Gui como FileZilla pueden usar FTPS, pero por conveniencia, recurriremos a la herramienta de línea de comando llamada curl, y aquí está el comando muy simple que debería conectarse al servidor FTPS y listar los archivos

$ curl --ftp-ssl --insecure --ftp-port 192.168.1.2:6003 --user pal:pal ftp://192.168.1.5
-rw-r--r--    1 0        0               0 Jan 03 06:10 abcd.txt
-rw-r--r--    1 0        0               0 Jan 03 06:10 cdefg.txt

Esos archivos están en el directorio de inicio del usuario pal en el servidor ftp. Asegúrese de tener algunos archivos en el hogar del servidor para incluirlos en la lista y verificarlos. De lo contrario, curl simplemente regresaría en blanco.
Aquí hay una explicación rápida de las opciones de curl que usamos.

ftp-ssl : Tells curl to use ftps

insecure : Tells curl not to use any ssl certificate to authenticate and just connect right away.

ftp-port : Tells curl that we are in ACTIVE mode. In ACTIVE mode the client has to tell the server the hostname and port number to connect back to. If you have configured passive mode ftp, then do not use this.

user : Specifies the username and password joined with a colon.

The last thing is the ftp url.

Si no especifica el puerto ftp en las conexiones ftp en modo ACTIVO, obtendrá el error "Sin ruta al host
".

Si obtiene "bind() falló, ¡nos quedamos sin puertos!" error, simplemente cambie el número de puerto.

También puedes usar una URL como esta

$ curl ftps://192.168.1.5 ...

Pero luego curl intentaría conectarse al puerto 990 y, a menos que haya configurado vsftpd para servir en ese puerto, no funcionará.

Si curl no puede conectarse a vsftpd o enumerar los archivos correctamente, use la opción detallada (-v) y vea más detalles sobre lo que salió mal y luego corríjalo.

Notas adicionales

FTPS asegura FTP agregando encriptación SSL al canal de comunicación. Otra forma recomendada de establecer conexiones seguras es mediante SFTP (Protocolo de transferencia de archivos SSH). El popular paquete OpenSSH que proporciona el servicio ssh, también proporciona SFTP sin necesidad de ninguna instalación o configuración adicional. Sin embargo, no todos los clientes FTP y las herramientas de desarrollo web admiten SFTP.


Cent OS
  1. Cómo instalar y configurar un servidor FTP (vsftpd) con SSL/TLS en Ubuntu 20.04

  2. Cómo configurar PureFTPd para aceptar sesiones TLS en CentOS 6.2

  3. Cómo configurar el servidor DHCP en CentOS 7 / Ubuntu 18.04 / 16.04 / Debian 9

  4. Cómo configurar Autofs en CentOS 7 / Ubuntu 16.04 / Debian 9 / Fedora 27/26

  5. ¿Cómo configurar VSFTPD con conexión encriptada SSL/TLS?

Instale Vsftpd con SSL/TLS en Ubuntu 20.04

Cómo instalar y configurar el servidor FTP en CentOS

Cómo instalar y configurar Apache con Let's Encrypt TLS/SSL en Ubuntu 20.04

Cómo instalar y configurar VSFTPD en Ubuntu 14.04

Cómo configurar vsftpd para usar SSL/TLS en Ubuntu 20.04

Cómo configurar VSFTPD para usar SSL/TLS en un CentOS VPS