Cifrar los datos en una conexión FTP si es posible utilizando TLS. Las comunicaciones y los datos en una conexión estándar de FTP van si cifrar, por tanto, cualquier persona podría conocer los datos de acceso e incluso interceptar los ficheros que transferimos. Por eso, es necesario otorgar al protocolo FTP de una capa extra de seguridad que evite estos problemas. Gracias a TLS la información va cifrada y nuestros datos viajarán de forma segura a través de la red.
Seguid leyendo y aprenderéis como configurar y activar TLS en ProFTPD...
¿QUÉ ES TLS?
SSL son las siglas en inglés de Secure Socket Layer (en español capa de conexión segura). Es un protocolo criptográfico (un conjunto de reglas a seguir relacionadas a seguridad, aplicando criptografía) empleado para realizar conexiones seguras entre un cliente (como por ejemplo un navegador Web de Internet) y un servidor (como lo son las computadoras que despachan páginas web).
Este protocolo ha sido relevado por TLS, que son las siglas en inglés de Transport Layer Security (en español seguridad de la capa de transporte). Versiones de TLS tienen un equivalente en SSL, por ejemplo TLS 1.2 corresponde a SSL 3.3; de ahí que aún sea común que se refiera al protocolo TLS como SSL y que en un contexto informal se utilicen estos términos de forma intercambiable.
TLS ofrece la capa de seguridad al FTP que no ofrece por sí mismo.
1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL
- Un equipo con GNU/Linux + ProFTPD instalado
- Conexión a Internet (por si necesitamos instalar algún programa)
- Cliente FTP (Por ejemplo Filezilla)
2.- CONFIGURACIÓN INICIAL
Siguiendo la serie de tutoriales de ProFTPD, este tutorial se basa en la configuración final del anterior tutorial. Por tanto, os recomiendo tener claro primero los anteriores tutoriales si queréis entender perfectamente el por qué de cada una de las líneas. La configuración en la que nos vamos a basar, es la que generamos en el anterior tutorial Cómo configurar VirtualHosts en ProFTPD, y es la siguiente:
Include /etc/proftpd/modules.conf
Include /etc/proftpd/virtuals.conf
ServerName "Debian"
ServerType standalone
DefaultServer on
UseIPv6 off
DefaultRoot ~
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
<IfModule mod_quotatab.c>
QuotaEngine on
QuotaLog /var/log/proftpd/quota.log
<IfModule mod_quotatab_file.c>
QuotaLimitTable file:/etc/proftpd/ftpquota.limittab
QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab
</IfModule>
</IfModule>
<Anonymous ~ftp>
User ftp
Group nogroup
UserAlias anonymous ftp
RequireValidShell off
<Directory *>
<Limit WRITE>
Deny All
</Limit>
</Directory>
<Directory upload>
<Limit STOR,MKD>
Allow all
</Limit>
</Directory>
</Anonymous>
Es necesario realizar las operaciones con usuario root o con sudo.
3.- CONFIGURAR Y ACTIVAR TLS
En el fichero de configuración principal /etc/proftpd/proftpd.conf tenemos que añadir la siguiente línea para importar la configuración de TLS:
Include /etc/proftpd/tls.conf
Y el fichero tls.conf debemos configurarlo para que tenga las siguientes opciones:
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
TLSRequired on
</IfModule>
4.- GENERACIÓN DE CERTIFICADOS
Para la generación delos certificados, tanto el público como el privado, lo mejor es utilizar la propia herramienta que trae ProFTPD llamada proftpd-gencert. Tan solo debemos ejecutar el comando y un asistente muy sencillo nos irá preguntando los datos con los que queremos que se generen los certificados:
raul@ns1:~$ sudo 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 <--- INTRODUCIMOS VALOR
State or Province Name (full name) [Some-State]:ESPAÑA <--- INTRODUCIMOS VALOR
Locality Name (eg, city) []:LEÓN <--- INTRODUCIMOS VALOR
Organization Name (eg, company) [Internet Widgits Pty Ltd]:RPF <--- INTRODUCIMOS VALOR
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.raulprietofernandez.net <--- INTRODUCIMOS VALOR
Email Address []:Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. <--- INTRODUCIMOS VALOR
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.
Debemos asegurarnos que los ficheros generados en el paso anterior proftpd.crt y proftpd.key, están ubicados en el mismo sitio que tenemos configurado en el fichero tls.conf. El siguiente paso será reiniciar el servidor ProFTPD para aplicar los cambios:
raul@ns1:~$ sudo /etc/init.d/proftpd restart
[ ok ] Restarting proftpd (via systemctl): proftpd.service.
5.- PROBANDO LA CONEXIÓN TLS
Para poder utilizar TLS; debemos crear en nuestro cliente FTP una nueva conexión y forzaremos a que use TLS:
Nuevo perfil de conexión
En la primera conexión, se podrá ver que el servidor envía un certificado a nuestro cliente con los datos que configuramos en los pasos anteriores:
Aceptar certificado
Conexión FTP con TLS correcta
6.- CONFIGURACIÓN FINAL
A continuación pongo el contenido completo del fichero proftpd.conf descrito en este tutorial junto con la configuración realizada en tutoriales anteriores. Tened en cuenta que para TLS no son necesarias todas las configuraciones que hay en el fichero abajo descrito, ya que es la acumulación de la configuración de todos los tutoriales anteriores. El fichero principal proftpd.conf es el siguiente:
Include /etc/proftpd/modules.conf
Include /etc/proftpd/virtuals.conf
Include /etc/proftpd/tls.conf
ServerName "Debian"
ServerType standalone
DefaultServer on
UseIPv6 off
DefaultRoot ~
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
<IfModule mod_quotatab.c>
QuotaEngine on
QuotaLog /var/log/proftpd/quota.log
<IfModule mod_quotatab_file.c>
QuotaLimitTable file:/etc/proftpd/ftpquota.limittab
QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab
</IfModule>
</IfModule>
<Anonymous ~ftp>
User ftp
Group nogroup
UserAlias anonymous ftp
RequireValidShell off
<Directory *>
<Limit WRITE>
Deny All
</Limit>
</Directory>
<Directory upload>
<Limit STOR,MKD>
Allow all
</Limit>
</Directory>
</Anonymous>
Y el fichero de tls.conf es el siguiente:
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
TLSRequired on
</IfModule>
ENJOY!
Comentarios
Seguramente se te olvidase hacer alguno de los pasos, ya que lo he revisado varias veces y funciona correctamente.
Un saludo!
He conseguido hacerlo funcionar sin problemas, pero en las pruebas (LAN) he notado que la velocidad de transferencia cuando activo el TLS es de 16Mbps (2MBps) por segundo, en cambio si lo deshabilito la velocidad de transferencia me sube a 800 Mbps.
¿Sabéis cómo puedo solucionarlo?
Lo normal al usar TLS es que la velocidad se vea afectada, ya que se tienen que cifrar todos los paquetes de la conexión. Lo que no pe parece normal es esa reducción tan drástica en tu velocidad. Lo único que se me ocurre es que el servidor FTP tenga poca capacidad de procesamiento y no sea capaz de cifrar a esa velocidad.
He estado revisando un poco por Internet, y la verdad que no he encontrado nada al respecto :(
Siento no poder ayudarte en este punto.
Muchas gracias por la respuesta, no había relacionado lo que comentas.
No me extraña tampoco (a raíz de tu respuesta) que haya esa diferencia tran drástica ya que lo que estoy haciéndo es en una NAS (buffalo) en la que me he metido y he hecho algunos cambios.
Un saludo y muchas, muchísimas gracias por la ayuda que prestas
Me imaginaba que lo estabas probando en una Raspberry, NAS o algo así con "poco" procesamiento :)
Prueba de todas formas a usar SFTP (ftp a través de ssh) también va cifrado, pero quizás obtengas mejor rendimiento.
Saludos
Error al recuperar el listado del directorio
Que puede ser? Ayudame por favor
Pues no me suena ese error, pero tiene pinta que no es capaz de acceder al directorio $HOME del FTP?
¿Has probado que todo te funciona bien sin TLS?
Lo primero es montar el FTP sin TLS; y una vez que ves que lo básico funciona, montar el TLS.
Con la poca información que medas no sé que puede fallarte :(
Saludos
Include /etc/proftpd/tls.conf"
En mi caso, como le puede suceder a cualquier otra persona, agregué dicho Include, en la parte superior del archivo de configuración "proftpd.conf". Esto generó que al intentar conectarme el Filezilla respondiera "AUTH TLS 500 AUTH not understood".
Lugo de renegar un poco y analizando el archivo de configuración noté que mas abajo (casi al final) esta linea estaba comentada, o sea, según mi interpretación, no habría que "añadir el include" como indica el tutorial, si no "quitar el # comentario" del include, para que sea insertado donde FTPd lo necesita tomar. Caso contrario dará un error como el que le describí.
Espero que si a alguien mas le sucedió esto, pueda configurarlo.
Agradecido por compartir tus conocimientos, un saludo desde La Rioja, Argentina.
Me alegra que te sirviese el tutorial. Respecto a la configuración, gracias por comentar tu solución.
Posiblemente en tu caso usaste los ficheros de configuración que vienen por defecto y por eso tenías un Include en otra parte del fichero :) Si no recuerdo mal, yo generé todos los ficheros desde 0 y por eso en mi caso no tuve ese problema.
Saludos y gracias por visitar mi web.