{"id":489,"date":"2020-03-03T01:20:31","date_gmt":"2020-03-03T01:20:31","guid":{"rendered":"https:\/\/94r.es\/?p=489"},"modified":"2022-06-20T21:49:18","modified_gmt":"2022-06-20T19:49:18","slug":"ftps-en-centos-8","status":"publish","type":"post","link":"https:\/\/94r.es\/index.php\/2020\/03\/03\/ftps-en-centos-8\/","title":{"rendered":"FTPS en Centos 8"},"content":{"rendered":"\n<p>Ahora que est\u00e1 tan caro el almacenamiento en la nube (igual lo ha estado siempre, qu\u00e9 sabr\u00e9 yo) tener un servidor FTP propio es una opci\u00f3n a considerar si se nos quedan cortos los 6GB que ofrece Dropbox en su versi\u00f3n gratuita (o los 15GB de Google Drive, los 5GB de iCloud&#8230;). Bien sea por esto o porque recelamos de la privacidad de nuestros datos al guardarlos en servidores de multinacionales que han tenido problemas con la LOPD, al albur de sus espurios intereses, el siguiente texto pretende ser una gu\u00eda para configurar el servicio vsftpd en un servidor Centos 8 y securizarlo hasta donde uno sabe: aislando el espacio en un fs independiente, enjaulando a los usuarios con chroot e impidi\u00e9ndoles el acceso por SSH y aplicando certificados TLS\/SSL a fin de cifrar el proceso y evitar que la transferencia de datos se realice en texto plano.<\/p>\n\n\n\n<p>Vamos all\u00e1: en primer lugar instalamos el servicio (si no lo encontramos en el repositorio actualizamos con <em>yum -y update<\/em>), lo habilitamos y lo iniciamos.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-center\"><p>yum install -y vsftpd &amp;&amp; systemctl enable vsftpd &amp;&amp; systemctl start vsftpd<\/p><\/blockquote>\n\n\n\n<p>Hecho esto modificamos unos par\u00e1metros en el archivo de configuraci\u00f3n vsftpd.conf, que se ubica en \/etc\/vsftpd\/. A mi modo de verlo, estos archivos \u00fanicamente han de servir como referencia, no se deben aplicar las directivas directamente sobre ellos, ya que el gran n\u00famero de comentarios y pol\u00edticas desactivadas por defecto dificulta una lectura comprensiva de c\u00f3mo est\u00e1 configurado el servicio. Lo propio, pues, es renombrar el archivo de serie (por ejemplo, como vsftpd.conf.bak) para tenerlo como respaldo y que el archivo original no contenga m\u00e1s directivas de las que consideremos necesarias. Para quitar ruido al archivo .bak ejecutamos el siguiente comando: <\/p>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-center\"><p>grep -v \u00ab#\u00bb \/etc\/vsftpd\/vsftpd.conf.bak | sed -e &#8216;\/^$\/d&#8217; &gt;&gt; \/etc\/vsftpd\/vsftpd.conf<\/p><\/blockquote>\n\n\n\n<p>Las directivas que nos interesan son las siguientes. Todas son de serie salvo las dos \u00faltimas y log_ftp_protocol, que sustituye a xferlog_std_format=YES (este se debe comentar u omitir) y genera el archivo vsftpd.log en \/var\/log\/.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>anonymous_enable=NO<br>local_enable=YES<br>write_enable=YES<br>local_umask=022<br>dirmessage_enable=YES<br>xferlog_enable=YES<br>connect_from_port_20=YES<br>xferlog_std_format=YES<br>chroot_local_user=YES<br>allow_writeable_chroot=YES<br>listen=NO<br>listen_ipv6=YES<br>pam_service_name=vsftpd<br>userlist_enable=YES<\/p><\/blockquote>\n\n\n\n<p>De las opciones anteriores es esencial que figuren las de chroot_local_user, que enjaular\u00e1 al usuario en su directorio personal y le impedir\u00e1 navegar por el sistema de archivos, y la de allow_writeable_chroot, ya que de otro modo no podremos escribir ni ejecutar la carpeta ra\u00edz de dicho usuario: al intentar establecer la conexi\u00f3n nos aparecer\u00eda el error <em>500 OOPS: vsftpd: refusing to run with writable root inside chroot<\/em>. En aras de que nos quede una instalaci\u00f3n herm\u00e9tica, podr\u00eda ser una buena opci\u00f3n asegurarnos de que los usuarios que tengamos pensado crear para el uso exclusivo del FTP no puedan acceder por SSH declarando la variable DenyUsers en \/etc\/ssh\/sshd_config, seguida de sus nombres.<\/p>\n\n\n\n<p>Vamos con el TLS: creamos un directorio en el que almacenar los certificados, por ejemplo tls dentro del directorio ra\u00edz del vsftpd, y creamos el certificado y la clave privada mediante el siguiente comando:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-center\"><p>openssl req -newkey rsa:2048 -x509 -nodes -days 365 -keyout \/etc\/vsftpd\/tls\/nuestrakey.key -out \/etc\/vsftpd\/tls\/nuestrocerti.crt<\/p><\/blockquote>\n\n\n\n<p>En el archivo de confguraci\u00f3n a\u00f1adimos las siguientes tres directivas en aras de referenciar los archivos de autenticaci\u00f3n y habilitar este nuevo modo de transferencia de datos:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-center\"><p>ssl_enable=YES<br> rsa_cert_file=\/etc\/vsftpd\/tls\/nuestrocerti.crt<br> rsa_private_key_file=\/etc\/vsftpd\/tls\/nuestrakey.key<\/p><p>allow_anon_ssl=YES<br>force_local_data_ssl=YES<br>force_local_logins_ssl=YES<br>ssl_tlsv1=YES<br>ssl_sslv2=NO<br>ssl_sslv3=NO<br>require_ssl_reuse=NO<br>ssl_ciphers=HIGH<\/p><\/blockquote>\n\n\n\n<p>Por \u00faltimo, a\u00f1adimos otros tres par\u00e1metros, tambi\u00e9n al archivo de configuraci\u00f3n de vsftpd, que habilitar\u00e1n y definir\u00e1n los puertos usados en el modo pasivo (modo al que pasa el cliente FTP una vez creada la primera conexi\u00f3n). Podemos definir un abanico tan grande como queramos, dependiendo de las caracter\u00edsticas del servicio que pretendamos ofrecer.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-center\"><p>pasv_enable=YES<br> pasv_min_port=40000<br> pasv_max_port=40100<\/p><\/blockquote>\n\n\n\n<p>Finalizada la configuraci\u00f3n del servicio, s\u00f3lo nos queda habilitar la regla del ftp y los puertos anteriores en el firewall del sistema, haciendo uso de los siguientes comandos, que \u00fanicamente modificaremos con el rango de puertos que hayamos decidido:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-center\"><p>firewall-cmd &#8211;permanent &#8211;add-service=ftp<br> firewall-cmd &#8211;permanent &#8211;add-port=40000-40100\/tcp<br> firewall-cmd &#8211;reload<\/p><\/blockquote>\n\n\n\n<p>Por \u00faltimo, vamos con la configuraci\u00f3n del router. Esta parte s\u00f3lo aplica si queremos que nuestro servicio sea accesible desde fuera de nuestra red local. Abrir el puerto 21 ser\u00eda un suicidio por razones evidentes, de modo que abrimos otro puerto en el rango externo que en la LAN redirija a este. No encuentro razones para modificar los puertos definidos para el modo pasivo a la hora de hacer el port forwarding, ya que al haber sido escogidos de modo arbitrario, tanto da. Para el caso, quedar\u00eda as\u00ed:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" width=\"905\" height=\"382\" src=\"https:\/\/94r.es\/wp-content\/uploads\/2020\/03\/imagen.png\" alt=\"\" class=\"wp-image-492\" srcset=\"https:\/\/94r.es\/wp-content\/uploads\/2020\/03\/imagen.png 905w, https:\/\/94r.es\/wp-content\/uploads\/2020\/03\/imagen-300x127.png 300w, https:\/\/94r.es\/wp-content\/uploads\/2020\/03\/imagen-768x324.png 768w, https:\/\/94r.es\/wp-content\/uploads\/2020\/03\/imagen-830x350.png 830w, https:\/\/94r.es\/wp-content\/uploads\/2020\/03\/imagen-230x97.png 230w, https:\/\/94r.es\/wp-content\/uploads\/2020\/03\/imagen-350x148.png 350w, https:\/\/94r.es\/wp-content\/uploads\/2020\/03\/imagen-480x203.png 480w\" sizes=\"(max-width: 905px) 100vw, 905px\" \/><\/figure><\/div>\n\n\n\n<p>Hecho todo esto ya tendremos nuestro servidor FTPS instalado y configurado, con lo que podremos compartir nuestros archivos a nuestro antojo, facilitando el acceso del modo que consideremos oportuno.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ahora que est\u00e1 tan caro el almacenamiento en la nube (igual lo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[13,14,18,15,16,17],"_links":{"self":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts\/489"}],"collection":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/comments?post=489"}],"version-history":[{"count":5,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts\/489\/revisions"}],"predecessor-version":[{"id":630,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts\/489\/revisions\/630"}],"wp:attachment":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/media?parent=489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/categories?post=489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/tags?post=489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}