Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

domingo, 2 de agosto de 2015

Cómo crear un servidor ftp en Linux

En esta ocasión hablaré sobre una utilidad indispensable para muchos sysadmins y programadores; se trata de nada más y nada menos que de un servidor ftp. El uso de este tipo de herramientas se pueden realizar en distintos ámbitos; desde un uso meramente casero hasta un contexto más empresarial, si bien cualquier uso que se le quiera dar tiene que tener presentes algunas medidas de seguridad, especialmente a nivel de permisos y de reglas de cortafuegos con el fin de evitar posibles agresores. Existen bastantes herramientas que nos pueden ayudar a construir un servidor ftp, pero hoy hablaré sobre una de ellas en concreto: proftpd.
Portada-ftp
Proftpd destaca especialmente por el hecho de ser realmente fácil de configurar, al mismo tiempo que robusto y aunque no está instalada por defecto en el sistema, su instalación es tan sencilla como escribir en la terminal:

  1. apt-get install proftpd-basic proftpd-doc

La instalación en cuestión es muy sencilla, ya que está todo automatizado, a excepción de un parámetro por el que eres preguntado por la herramienta. La pregunta realizada por la herramienta se trata de la especificación del tipo de servidor ftp: inetd o independiente. Lo más habitual suele ser escoger la segunda opción; es decir, independiente:

modo-independiente

Con esta pequeña incógnita resuelta, se podría pasar a la configuración del servicio en cuestión. La configuración por defecto es válida de por sí, pero hay un par de cosas que sí que son convenientes editar, especialmente a nivel de seguridad. Por ello nos dirigiríamos al fichero de configuración del servicio, el cual está alojado dentro de la carpeta /etc/proftpd/ y cuyo nombre es proftpd.conf. Dicho fichero tiene algunos parámetros que convendría modificar con el fin de tener un servidor ftp más eficiente y seguro; específicamente tres.

Por un lado estaría el parámetro UseIPv6; el cual consisten en tener habilitada la comunicación ipv6 para el uso del protocolo ftp... Por defecto dicho parámetro está activado (on) pero en caso de no tener sendos conocimientos de dicho protocolo de comunicación es mejor tenerlo desactivado; es decir establecer su valor en off.

Otra buena práctica que es muy recomendable realizar, es el establecimiento del directorio raíz por defecto para los usuarios que se vayan a conectar; gracias a dicho establecimiento tendríamos a los usuarios encerrados dentro de un directorio, fortaleciendo enormemente la seguridad de nuestro sistema. Habitualmente se encierran a los usuarios dentro de sus respectivos directorios "home", es por ello que nosotros realizaremos lo mismo descomentando (es decir eliminando el carácter #) la línea  DefaultRoot  ~. Con tan solo descomentarla valdría, ya que la línea de por sí ya está preparada para encerrar a cada usuario dentro de sus respectivos directorios.

Por último, pero no por ello menos importante, vamos a añadirle una capa de seguridad a nuestras comunicaciones, haciendo que habilite las comunicaciones FTPS, o lo que es lo mismo, ftp con SSL. Esto no es algo obligatorio, pero con los tiempos que corren y con lo sencillo que es añadir dicha capa de seguridad, sería un desperdicio no aprovechar sus ventajas. Es por ello que vamos a habilitar dicho tipo de comunicación descomentando la línea Include /etc/proftpd/tls.conf, la cual se encarga de incluir la configuración relacionada con SSL/TLS.

Sumando las tres modificaciones, nuestro directorio de configuración debería poseer estas líneas presentes en su interior:

  1. UseIPv6                         off
  2. DefaultRoot                    ~
  3. Include /etc/proftpd/tls.conf

Esto desgraciadamente no es suficiente; pues aunque hemos incluido la configuración para usar el módulo de SSL/TLS, éste no está configurado. Es por ello que en caso de haber habilitado el uso de esta medida de seguridad, habría que editar el fichero al que se ha hecho referencia en el Include, es decir, /etc/proftpd/tls.conf.

Si observais bien el contenido de éste fichero, veréis que todo el contenido del módulo está comentado, haciendo que éste quede inválido... Es por ello que habría que descomentar todos los parámetros uno por uno, a excepción de dos: TLSCACertificateFile (el cual no es imprescindible para hacer la comunicación) y TLSRenegotiate, que es recomendable tenerlo comentado para evitar que los clientes que no soporten renegociaciones se queden sin conexión.

Aún mediante dichas modificaciones, si tratásemos de reiniciar el servicio proftpd, no tendríamos éxito. Esto es debido a que las claves SSL/TLS que aparecen por defecto en el módulo no existe; por ello habría que crear los certificados SSL manualmente y modificar las líneas TLSRSACertificateFile y TLSRSACertificateKeyFile para que apunten a certificados que sí que existan. En mi caso por ejemplo, ya tengo certificados propios cuyos nombres son server.crt y server.key.ins; por ello, sumando el total de modificaciones del fichero, el contenido de éste sería algo parecido a esto:

  1. <IfModule mod_tls.c>
  2. TLSEngine                               on
  3. TLSLog                                  /var/log/proftpd/tls.log
  4. TLSProtocol                             SSLv23
  5. TLSRSACertificateFile                   /etc/ssl/certs/server.crt
  6. TLSRSACertificateKeyFile                /etc/ssl/private/server.key.ins
  7. #TLSCACertificateFile                    /etc/ssl/certs/CA.pem
  8. TLSOptions                      NoCertRequest EnableDiags
  9. TLSOptions                      NoCertRequest EnableDiags NoSessionReuseRequired
  10. TLSOptions                                                      AllowClientRenegotiations
  11. TLSVerifyClient                         off
  12. #TLSRenegotiate                          required off
  13. </IfModule>
Ahora podríamos reiniciar el servicio mediante el comando:

  1. /etc/init.d/proftpd restart

Con esto ya tendríamos nuestro servidor ftp preparado; solamente habría que usar un cliente ftp, como por ejemplo Filezilla, y conectarnos al servidor ftp usando la ip de nuestro servidor; un usuario y el puerto 21. El acceso por FTP para el usuario root, está deshabilitado, con lo que cualquier intento de conexión siempre se tendrá que hacer con un usuario "común".

FTP-conexión

Espero que os resulte útil.

Saludos.

2 comentarios :

  1. Gracias por el aporte! Aprovecho la oportunidad de reconocer tu blog, tienes info muy util y práctica.

    ResponderEliminar
    Respuestas
    1. Muchas gracias por tu comentario. Me alegro que te haya gustado y que además te haya resultado útil.

      Saludos.

      Eliminar