UNIDAD 4
SERVICIO FTP
(TEORÍA)
Unidad 4 Servicio FTP 2
Indice
1.- ESTRUCTURA DEL PROTOCOLO FTP..................................................................................3
1.1.- Servidor FTP........................................................................................................................ 3
1.2.- Cliente FTP.......................................................................................................................... 3
2.- INSTALACIÓN DEL CLIENTE FTP.....................................................................................4
3.- INSTALACIÓN DEL SERVICIO FTP...................................................................................4
3.1.- Conexión desde el cliente................................................................................................. 5
4.- CONFIGURACIÓN DEL SERVICIO FTP.............................................................................8
4.1.- Opciones del usuario local................................................................................................ 8
4.2.- Opciones de transferencia de archivos........................................................................9
4.3.- Creación de un nuevo usuarios del servicio FTP.......................................................10
5.- MODOS DE CONEXIÓN DEL CLIENTE FTP...................................................................12
5.1.- Modo Activo....................................................................................................................... 12
5.2.- Modo Pasivo....................................................................................................................... 13
5.3.- Modo Pasivo y Activo en Filezilla.................................................................................14
6.- TIPOS DE USUARIOS........................................................................................................... 15
6.1.- Crear un servidor FTP anónimo.....................................................................................16
7.- AÑADIMOS SEGURIDAD AL SERVICIO FTP................................................................19
7.1.- Configuramos el cortafuegos del servidor: ufw........................................................19
7.1.1- Configuramos los puertos........................................................................................ 24
7.2.- Seguridad con los usuarios locales..............................................................................26
7.2.1.- Permitir sólo el acceso al servicio FTP...............................................................26
7.2.2.- Enjaulamos al usuario............................................................................................. 28
7.3.- Configuramos VSFTPD con un certificado SSL/TLS.............................................30
7.3.1.- ¿Cómo es el cifrado SSL/TTL?............................................................................30
7.3.2.- Generamos el certificado SSL/TTL...................................................................32
8.- AÑADIMOS NUESTRO SITIO EN FILEZILLA............................................................37
Unidad 4 Servicio FTP 3
1.- ESTRUCTURA DEL PROTOCOLO FTP
El protocolo FTP utiliza una arquitectura cliente/servidor.
1.1.- Servidor FTP
• El servidor FTP, es un servicio que está instalado en un ordenador que hace
funciones de servidor, y que tiene como objetivo permitir el acceso para el
intercambio de los archivos que estén dentro de él, con otro equipo que se
conecte al servicio. El servidor FTP usa el puerto 20 y 21
• Es decir, el servidor FTP tiene la responsabilidad de procesar las peticiones
para descargar archivos.
1.2.- Cliente FTP
• Un cliente FTP es un software que el usuario de un protocolo FTP deberá
instalar en su equipo para poder acceder al servidor FTP para poder descargar
y cargar archivos.
• Es decir, el cliente FTP es el programa que los usuarios deben tener instalado
en su equipo para poder subir y bajar archivos. Se le llama “cliente” porque es el
cliente (usuario) que se conecta al servidor, aplicando el modelo cliente-servidor
de Internet.
• Pero no sólo puede realizar operaciones de transferencia de archivos, también
puede (si tiene los permisos necesarios) gestionar el espacio donde se
encuentran esos archivos compartidos, creando, renombrando o eliminando
directorios.
Unidad 4 Servicio FTP 4
• Los clientes que transfieren los archivos pueden estar dentro de la misma red
donde está configurado el servidor FTP, o fuera de ella (a través de Internet).
FTP utiliza dos puertos, uno para conexión y otro para envío de datos.
2.- INSTALACIÓN DEL CLIENTE FTP
• Actualizamos la máquina cliente
• Instalamos el paquete filezilla para disponer del cliente FTP Filezilla.
• Ejecutamos en la terminal el comando filezilla y comprobamos que se nos abre y
que ha quedado correctamente instalado.
• Al abrirse por primera vez nos pregunta si queremos que Filezilla almacene
nuestras contraseñas. Elegimos la opción “No guardar contraseñas”
3.- INSTALACIÓN DEL SERVICIO FTP
• Los protocolos empleados para la carga y descarga de archivos desde un
servidor FTP remoto requieren un software específico que debe instalarse en la
máquina. De este modo, cualquier cliente que lo solicite tendrá acceso remoto a
los archivos, tanto para cargarlos como para descargarlos.
• Para Ubuntu GNU/Linux se ha seleccionado la herramienta vsftpd (very secure
FTP) como servidor FTP. La elección se justifica por los motivos siguientes:
1. Se instala con facilidad y se puede configurar en modo consola.
2. Posee un módulo para Webmin.
3. Resulta muy eficiente como servidor anónimo. De hecho, este servidor
FTP lo utilizan sitios que deben soportar una gran cantidad de conexiones
anónimas simultáneas, como Debian (ftp.debian.org), el proyecto GNU
(ftp.gnu.org) o la empresa Red Hat (ftp.redhat.com) entre otros.
Unidad 4 Servicio FTP 5
Vamos a suponer que no tenemos acceso físico a nuestro servidor, por lo que
tendremos que trabajar la práctica en todo momento conectándonos desde el cliente
y accediendo de manera remota al servidor a través de la terminal
• Nos conectamos de manera remota al servidor usando protocolo SSH.
• Actualizamos el servidor
• Instalamos el paquete vsftpd
• Los comandos para detener, iniciar, reiniciar y ver el estado del servicio son
respectivamente:
service
service vsftpd
vsftpd stop
stop // service
service vsftpd
vsftpd start
start
service
service vsftpd
vsftpd restart
restart // service
service vsftpd
vsftpd status
status
• Comprueba el estado del servicio, páralo, inícialo y reinicialo
3.1.- Conexión desde el cliente
• Una vez instalado, ya podremos acceder al servidor FTP desde el cliente. Lo
haremos de tres maneras posibles:
1. A través de Nautilus: ftp://[IP del Servidor]
Unidad 4 Servicio FTP 6
2. A través de la terminal, con el comando: ftp [IP del Servidor]
• Para salir del servicio ejecutamos el comando exit
3. A través de FilezillaLo abrimos, y nos dirigimos a la barra superior
donde colocaremos la IP de nuestro servidor, el nombre de usuario y
password que tengamos configurado en el servidor.
• Pulsamos el botón “conexión rápida”
• Una vez que pulsamos sobre “conexión rápida”, vemos en la parte “registro de
mensajes” como nuestro cliente inicia la conexión con el servidor FTP que le
hemos indicado:
Unidad 4 Servicio FTP 7
• El programa Filezilla se divide en dos entornos, a la izquierda podemos ver los
directorios de nuestro sitio local (el ordenador desde donde nos conectamos) y
a la derecha los directorios remotos de nuestro servidor.
Ahora podemos pasar archivos de un sitio a otro, simplemente arrastrándolos
desde nuestro sitio local al directorio remoto.
• Intenta arrastrar un archivo desde algún directorio local a un directorio
remoto. ¿Has podido hacerlo Muestra una captura del mensaje que te da
Filezilla.
Unidad 4 Servicio FTP 8
4.- CONFIGURACIÓN DEL SERVICIO FTP
• El archivo de configuración de este servicio se denomina vsftpd.conf y se
encuentra en la ruta /etc.
4.1.- Opciones del usuario local
a) chroot_local_user Limitar el acceso a los usuarios locales
Esto permite “enjaular” a los usuarios locales (o del sistema) dentro de su
propio directorio personal. Si, queremos que cada usuario tenga acceso a su
propio directorio personal y no pueda salir de él, entonces tendríamos que
descomentar el parámetro “chroot_local_user” y cambiamos el valor de “NO” a
“YES”. De esta forma, los usuarios locales tendrán bloqueado el acceso a todos
los directorios, salvo al directorio personal, es más , su directorio personal será
el directorio raíz en su conexión al servidor FTP. . A esto se le conoce como
“enjaular al usuario local”.
De esta manera mantenemos la privacidad entre el resto de los usuarios.
En caso de que establezcamos chroot_local_user=YES, tendremos que darle al
usuario FTP permisos de escritura. Para ellos introducimos una nueva etiqueta:
allow_writeable_chroot=YES, que hará que el usuario tenga permisos de
escritura sobre el directorio donde lo hemos enjaulado.
b) chroot_list_enable y chroot_list_file
b1.- Si la etiqueta chroot_local_user tiene valor a “YES”
Con la etiqueta chroot_list_enable indicamos los usuarios no se les va a
“enjaular”. Es decir, aquellos que son la excepción y no serán enjaulados.
Estos usuarios deberán darse de alta manualmente en el archivo que
crearemos en la ruta /etc/vsftpd.chroot_list y esa ruta se le asignará a la
Unidad 4 Servicio FTP 9
etiqueta chroot_list_file. En este fichero se pondrán a los usuarios
“enjaulados” separados por líneas.
b2.- Si la etiqueta chroot_local_user está descomentada y tiene valor a “NO”
Con la etiqueta chroot_lis_enable indicamos que a los usuarios se les va a
“enjaular”. Aquellos usuarios que queramos que lo estén, deberán darse de
alta manualmente en el archivo que crearemos en la ruta por defecto
/etc/vsftpd.chroot_list y esa ruta se le asignará a la etiqueta
chroot_list_file. En este fichero se pondrán a los usuarios “enjaulados”
separados por líneas.
c) chmod_enable Permitir que el usuario cambie permisos en los archivos
Cuando está activada, se permite el comando FTP SITE CHMOD para los
usuarios locales. Este comando permite que los usuarios cambien los permisos en
los archivos.
4.2.- Opciones de transferencia de archivos
a) write_enable Permitir cambios en el sistema de archivos
Por defecto se tiene que ni los usuarios locales ni los anónimos pueden utilizar
los comandos FTP para subir o bajar archivos, o ejecutar comandos FTP para
modificar directorios, por eso la línea “#write_enable=YES” está comentada.
Si se quiere permitir al usuario usar comandos FTP, es necesario descomentarla.
b) download_enable Permitir descarga de archivos
Cuando está activada, se permiten las descargas de archivos.
Unidad 4 Servicio FTP 10
c) chown_uploads
Si está activada, todos los archivos cargados por los usuarios anónimos
pertenecen al usuario especificado en la directriz chown_username.
d) chown_username
Especifica la propiedad de los archivos cargados anónimamente si está activada
la directriz chown_uploads.
4.3.- Creación de un nuevo usuarios del servicio FTP
• Hasta ahora, nos hemos autentificado con las credenciales del usuario que
habíamos creado al instalar Ubuntu en nuestra máquina virtual y hemos
accedido al directorio de ese usuario.
• En esta práctica queremos que otro usuario use FTP con su propia cuenta y
directorio de ficheros, y para ellos sería interesante crear un usuario. Por
tanto, crearemos en el servidor un usuario llamado “user_ftp1”.
• Editamos el archivo /etc/passwd y verificamos que se ha creado el usuario en
nuestro sistema.
• Modifica el archivo de configuración para indicar que los usuarios van a estar
enjaulados.
• Accede a través de Filezilla con cada uno de los usuarios y verifica que los dos
usuarios sólo pueden acceder a sus directorios personales en el servidor.
Ejercicio.-
a) Vamos a modificar el archivo de configuración del servicio FTP, por tanto,
realizamos una copia del archivo por seguridad. En caso de que tengamos algún
problema, tenemos un respaldo con el archivo que acabamos de copiar.
Unidad 4 Servicio FTP 11
b) En ese archivo haremos una modificación para permitir que el usuario que
acabamos de crear tenga permisos de ejecución de comandos FTP, y pueda
crear directorios y subir y bajar archivos.
c) Reiniciamos el servicio FTP para que se apliquen los cambios.
d) Vemos el estado del servicio, el cual debe estar corriendo sin ningún error.
e) Nos salimos del servidor y volvemos al cliente
f) Desde el cliente abrimos Filezilla y desde esa aplicación haremos los siguiente:
▪ Crea en el servidor una carpeta dentro de /home/tu_usuario denominada
“Carpeta2”
▪ Dentro de ella, crea un archivo llamado “Archivo1”
▪ Crea en tu directorio local “Documentos” una carpeta denominada
“Carpeta1”
▪ Arrastra el “Archivo1” a la “Carpeta1”
▪ Renombra el “Archivo1” como “Archivo2”
▪ Sube el “Archivo2” a la “Carpeta2”
▪ Sube la “Carpeta1” al mismo directorio que “Carpeta2”
▪ Entra de manera remota por SSH al servidor y muestra que se ha creado
la “Carpeta1”, la “Carpeta2” con los diferentes archivos en su interior.
▪ Vuelve a Filezilla y elimina en tu máquina cliente el “Archivo1” y luego la
“Carpeta1”
▪ Borra la “Carpeta1” y “Carpeta2” del servidor
▪ Entra de nuevo de manera remota al servidor vía SSH y comprueba que
en el servidor no está ni la “Carpeta1” ni la “Carpeta2”.
Unidad 4 Servicio FTP 12
5.- MODOS DE CONEXIÓN DEL CLIENTE FTP
• FTP admite dos modos de conexión del cliente. Estos modos se denominan
Activo (o Estándar, o PORT, debido a que el cliente envía comandos tipo PORT
al servidor por el canal de control al establecer la conexión) y Pasivo (o PASV,
porque en este caso envía comandos tipo PASV). Tanto en el modo Activo como
en el modo Pasivo, el cliente establece una conexión con el servidor mediante el
puerto 21, que establece el canal de control.
5.1.- Modo Activo
• Este modo funciona cuando el cliente inicia la comunicación enviando un comando
PORT, a través de un puerto aleatorio mayor que el 1024, con un paquete
dirigido al puerto 21 del servidor. Esta conexión será la canal de control, ya
que es por donde el cliente enviará los comandos FTP. Una vez establecida la
conexión, el servidor inicia otra comunicación, pero esta vez en sentido inverso.
• El servidor, a través del puerto 20, se pone en contacto inmediatamente con el
puerto siguiente del cliente, es decir, imaginemos que el puerto utilizado en la
primera conexión por el cliente fue el 1035, entonces, el servidor FTP se pone
en contacto con el cliente por el puerto 1036 del cliente. Esta última conexión
será el canal de datos, ya que es por donde se enviarán los archivos.
• Una vez establecida la conexión, todas las transferencias de archivos se
realizan a través de los mismos puertos entre el cliente y el servidor. Por lo
tanto, es el cliente quien establece el canal de control, pero será el servidor
quien establece el canal de datos.
Unidad 4 Servicio FTP 13
• Lo anterior tiene un grave problema de seguridad, y es que la máquina cliente
debe estar dispuesta a aceptar cualquier conexión de entrada en un puerto
superior al 1024, con los problemas que ello implica debido a que los
cortafuegos que se instalen en el equipo cliente es seguro que rechacen la
conexión para evitar ataques a esas conexiones aleatorias de puerto. Para
solucionar esto se desarrolló el modo Pasivo.
5.2.- Modo Pasivo
• En el modo pasivo, el cliente también se pone en contacto con el puerto 21 del
servidor FTP a través de un comando PASV. El servidor, en lugar de iniciar una
segunda conexión de inmediato, responderá al cliente que sólo puede ponerse en
contacto con un segundo puerto diferente a la primera. Se realiza una segunda
conexión desde el cliente al servidor para la transferencia de datos.
• En este caso el firewall no bloquea el intento de comunicación entre el servidor
y el cliente, ya que ha sido el cliente quien inició la conexión ambas veces.
Unidad 4 Servicio FTP 14
5.3.- Modo Pasivo y Activo en Filezilla
• Abre Filezilla y pica sobre el menú Edición/Opciones
• En la ventana que se te abre selecciona el item FTP y cambia el modo de
transferencia de Activo a Pasivo y pulsa en aceptar.
• Reconectate a Filezilla y pasa desde el cliente al servidor un archivo de más de
10MB. Repite la misma operación y comprueba que operación de las dos se ha
realizado más rápido. Da una explicación.
Unidad 4 Servicio FTP 15
6.- TIPOS DE USUARIOS
• Para acceder a un servidor FTP, primero debemos iniciar sesión. El servidor FTP
admite tres tipos de cuentas de inicio de sesión de usuarios: usuarios reales,
invitados y anónimos.
▪ Anónimos: Este tipo de usuario se utiliza generalmente cuando el servidor
FTP se usa para distribuir cualquier tipo de archivos a un número muy
elevado de usuarios en una situación en la que la identificación no es muy
importante. Si por ejemplo hemos realizado una aplicación de software
libre y queremos distribuirla es una buena opción.
En este tipo de conexión solo se le pide al cliente un nombre de usuario
anónimo (generalemente por defecto es anonymous) y, si acaso (no
siempre), una contraseña que se refiere a cualquier dirección de correo
electrónico válida. Una vez nos hemos conectado al servidor tendremos
acceso al directorio anónimo y sus subdirectorios.
▪ Usuarios del sistema: En este caso los usuarios de FTP son los que
existen en la máquina en la que instalamos el servidor. Estos usuarios
podrán leer de y copiar a su directorio personal archivos remotamente.
Las mismas credenciales que tienen en la máquina serán las que necesiten
para conectarse a mediante FTP, es decir, se conectan al servidor FTP
con el usuario y contraseña de sistema.
▪ Usuarios invitados: son usuarios que no tienen cuentas de usuario en el
sistema servidor pero que pueden acceder al servicio FTP. Lo que lo
diferencia de los últimos dos tipos de usuarios (anónimos y locales) es que
este tipo de usuario solo podrá trabajar en un directorio de trabajo
destinado exclusivamente para él, evitando así que el este tenga acceso a
otras partes del sistema operativo. (Pero sin restringir los privilegios que
tiene sobre su propio directorio de trabajo).
Unidad 4 Servicio FTP 16
6.1.- Crear un servidor FTP anónimo.
• Un servidor FTP anónimo es un servidor que proporciona a los usuarios acceso a
los archivos sin necesidad de proporcionar identificación al usuario.
• Para permitir que usuarios anónimos se conecten a nuestro servidor utilizamos
la opción de configuración anonymous_enable,
anonymous_enable estableciendo el valor yes.
• Una vez encontrado el parámetro lo configuramos como queremos, en este caso
con el valor YES y descomentándolo si estuviera comentado. Guardamos los
cambios y para que el servidor los tenga en cuenta debemos reiniciar el servicio
FTP.
• Para acceder como usuario anónimo al servidor hay que poner:
Usuario: anonymous, ftp, o simplemente dejarlo en blanco.
Constraseña: en blanco.
• Si se activa el acceso anónimo el directorio por defecto se encuentra en
/srv/ftp.
• Por defecto está configurado para que los usuarios anónimos sólo puedan
descargarse ficheros de ese directorio. Además el usuario anónimo se
encuentra “enjaulado”, es decir, no pueden salir del directorio por defecto
/srv/ftp.
• De manera remota crea un directorio llamado “Carpeta_Anonimo” dentro de la
ruta /srv/ftp del servidor y crea en él un archivo llamado “Archivo_Anonimo”.
Conéctate por Filezilla como usuario anónimo y comprueba que tienes acceso al
directorio y archivo que acabas de crear y que la única operación que puedes
Unidad 4 Servicio FTP 17
hacer es la de descarga´(No puedes eliminar, ni subir, ni renombrar, etc). Tras
comprobarlo, elimina de manera remota el directorio y archivo.
• Como hemos visto, el directorio raíz para los usuarios anónimos es srv/ftp. Si
queremos configurar un directorio raíz diferente para este tipo de usuarios,
debemos crear la etiqueta anon_root asignándole el directorio que sea el
directorio raíz d este tipo de usuarios: anon_root=otro_directorio_distinto.
Por ejemplo:
✔ Creamos el directorio de nombre “publico” dentro de srv/ftp
✔ Creamos la etiqueta anon_root=/pub, que hará que el directorio raíz para
los usuarios anónimos sea /srv/ftp/pub
✔ Guardamos los cambios y reiniciamos el servicio. Es importante poner un comentario con
lo que hace la etiqueta, el creador y la
Fecha de creación
• Comprueba que se ha modificado el directorio raíz para el usuario anónimo. Para
ello crea la carpeta “Carpeta_Anónimo” dentro del directorio srv/ftp/pub y
conectate desde Filezillla como usuario anónimo.
• Si queremos limitar la tasa máxima de descarga (en bytes por segundo) para las
conexiones de los usuarios anónimos, hemos de crear la etiqueta
anon_max_rate y asignarle los bits por segundo como máximo en la descarga.
Por ejemplo, si escribo en el archivo de configuración anon_max_rate=1048576,
estaremos limitando la tasa máxima de descarga a 1GB/s. Esto tiene como
utilidad evitar que las conexiones de usuarios anónimos nos dejen sin velocidad
de subida. En caso de que comentemos la etiqueta o le asignemos el valor 0,
estaremos indicando que no existe límite de velocidad de descarga.
Unidad 4 Servicio FTP 18
• Si queremos que el servidor sea un servicio FTP anónimo, es decir, que sólo
atienda a usuarios anónimos, en este caso hemos de modificar las etiquetas
local_enable y anonymous_enable, estableciendo el valor de la primera a “NO” y
de la segunda a “YES”, es decir, local_enable=NO y anonymous_enable=YES, es
decir, que no se permiten usuarios locales sino sólo usuarios anónimos. Un
ejemplo de servidor FTP anónimo es https://ftp.uv.es/pub/
• Si queremos que el usuario anónimo pueda subir archivos al directorio que le
hemos asignado y en el que está enjaulado, tenemos que descomentar la
etiqueta anon_upload_enable=YES,
anon_upload_enable=YES siempre y cuando esté habilitada la opción
general de permitir subir ficheros (write_enable).
✔ Establece srv/ftp/pub como directorio raíz del usuario anónimo
✔ Crea la carpeta “Prueba” dentro del directorio pub
✔ Le damos los permisos RWX al directorio Prueba:
chmod 757 srv/ftp/pub/Prueba
✔ Desde Filezilla sube como usuario anónimo un archivo a la carpeta Prueba.
• Si queremos que los usuarios anónimos puedan crear directorios o archivos, se
debe descomentar la etiqueta anon_mkdir_write_enable=YES.
anon_mkdir_write_enable=YES Accede como
usuario anónimo y crea la carpeta “Prueba2” dentro de la carpeta prueba. Crea
también el archivo “Archivo1”. Intenta ahora renombrar o borrar la carpeta o el
archivo.
• Para que los usuarios anónimos tengan acceso de escritura (puedan borrar o
renombrar una carpeta o archivo), debemos de crear una etiqueta nueva:
anon_other_write_enable=YES. Créala en el archivo de configuración y prueba a
renombrar y luego borrar la carpeta “Prueba2” que creaste antes.
Unidad 4 Servicio FTP 19
• Restituye el archivo de configuración con el que tienes de seguridad para poder
continuar.
7.- AÑADIMOS SEGURIDAD AL SERVICIO FTP
En este apartado vamos a ver varios aspectos a tener en cuenta al configurar nuestro
servidor FTP para mejorar la seguridad del mismo.
7.1.- Configuramos el cortafuegos del servidor: ufw
• ufw es un cortafuegos para establecer reglas en "iptables", las tablas de
firewall nativas en Linux. Puesto que iptables tiene una
sintaxis relativamente compleja, es aconsejable como
alternativa utilizar UFW para realizar su configuración.
• Primero veamos si el ufw está activado en el servidor o no. Ejecuta el siguiente
comando para ver el estado: sudo ufw status. Esto puede devolver dos posibles
salidas:
a) ufw: command not found: Esto significa que no tenemos instalado el
cortafuegos en el servidor. Lo instalaremos con el siguiente comando:
sudo ap-get install ufw
a continuación lo activamos:
sudo ufw enable
b) status: inactive: Esto significa que lo tenemos instalado, pero no está
activo.
• Activa ufw en tu sistema
Unidad 4 Servicio FTP 20
Comandos en línea usados en ufwl
Función Comando
Enciende el firewall sudo ufw enable
Apaga el firewall sudo ufw disable
Recarga el firewall sudo ufw reload
Muestra estatus sudo ufw status
Muestra estatus detallado sudo ufw status verbose
Muestra Lista de Reglas
sudo ufw status numbered
Numerada
Bloquea todo el tráfico de
sudo ufw default deny incoming
entrada
Permite todo el tráfico de
sudo ufw default allow incoming
entrada
Bloquea todo el tráfico saliente sudo ufw default deny outgoing
Permite todo el tráfico saliente sudo ufw default allow outgoing
Bloquea el puerto X en el TCP sudo ufw deny X/tcp
Permite el puerto X en el TCP sudo ufw allow X/tcp
Bloquea el puerto X solo para una
sudo ufw deny from 192.60.90.55 to any port X
persona específica
Permite el puerto X solo para una
sudo ufw allow from 192.60.90.55 to any port X
persona específica
Bloquea el puerto X solo para una
sudo ufw deny from 192.60.90.0/24 to any port X
red específica
Permite el puerto X solo para una
sudo ufw allow from 192.60.90.0/24 to any port X
red específica
Permite un rango de puertos TCP sudo ufw allow 2500:5000/tcp
Elimina un número de regla sudo ufw delete n
• Seguramente, una vez que hemos activado ufw en el servidor, si nos vamos
ahora al cliente y reiniciamos la configuración de red, nos hayamos quedado sin
acceso a Internet. Vamos a configurar el firewall. Esta operación es muy
parecida a la que hicimos en la primera práctica y la haremos desde el servidor,
ya que no podemos acceder a él de manera remota.
Unidad 4 Servicio FTP 21
PASO 1 [Habilitamos el reenvío o enrutamiento]
• ¿Que es el reenvío de IP?
Se trata del envío de paquetes de red desde una interfaz de red a otra en el
mismo dispositivo. Debemos habilitar el reenvío en caso de que queramos que
nuestro sistema actúe como un enrutador que transfiere paquetes IP de una
red a otra. En nuestro caso el reenvío es desde la interfaz enp0s3 a la interfaz
enp0s8
Reenvío
Internet
Internet
enp0s3 enp0s8
• ¿Cómo habilitar el reenvío?
En los sistemas Linux, el reenvío se controla mediante la variable del kernel
llamada ip_forward. Los posibles valores de esta variable son:
a) Si ip_forward es 0, significa que el reenvío no está disponible
b) Si ip_forward es 1, entonces el reenvío sí está disponible.
Por tanto, para permitir el reenvío, establecemos el valor de dicha variable a 1.
Por defecto su valor es 0.
Unidad 4 Servicio FTP 22
Para ello, editamos el archivo sysctl.conf que se encuentra en el directorio
/etc/ufw y descomentamos la línea net/ipv4/ip_forward = 1.
• Ahora editamos el archivo ufw del directorio /etc/default y veamos si el
parámetro “DEFAULT_FORWARD_POLICY” tiene el valor “ACCEPT”. En caso
de tener el valor “DROP” tendríamos que modificarlo a “ACCEPT”.
PASO 2 [Habilitamos el enmascaramiento]
• ¿En qué consiste enmascarar una red?
El enmascaramiento de red es una función de NAT que permite traducir todas
las direcciones IPs privadas de una red a una sola dirección IP pública. Esto
hace posible que los usuarios de una red privada puedan salir a internet con una
sola dirección IP pública ya que esta dirección Pública es la que forma parte de
la red de Internet.
Unidad 4 Servicio FTP 23
Enmascaramiento
192.168.1.5 •
enp0s3 enp0s8
Internet
Internet
172.114.55.33
192.168.1.9
192.168.1.12
¿Cómo hacemos el enmascaramiento?
• Vamos a modificar un archivo de configuración, por lo que hacemos una copia y
modificamos el original. Luego borramos la copia.
• Para habilitar el enmascaramiento, será necesario configurar la tabla nat,
agregando las reglas al archivo /etc/ufw/before.rules. Editamos el archivo y
pegamos las siguientes líneas justo al final del fichero:
Unidad 4 Servicio FTP 24
• Cerramos el archivo guardando los cambios.
• Recargamos ufw y a continuación vemos su estado.
7.1.1- Configuramos los puertos
• Si nos vamos al cliente, comprueba que aun no tienes acceso ni a Internet, ni
acceso al servidor FTP, ni acceso al servidor por SSH.
• Vamos a ver los puertos que debemos abrir para permitir las conexiones que nos
interesan.
Unidad 4 Servicio FTP 25
• Abre los siguientes puertos:
Puerto con el que te conectes al servidor por SSH.
Mira el estado de ufw y verifica que el puerto se ha añadido. Comprueba
que ya puedes acceder al servidor de manera remota.
A partir de ahora, sigue el tema de manera remota de nuevo desde
el cliente.
Puertos para la conexión al servidor FTP
Mira el estado de ufw y verifica que los puertos se han añadido.
Comprueba desde el cliente que te puedes conectar al servidor FTP.
Puerto para el servicio DNS
Mira el estado de ufw y verifica que los puertos se han añadido.
Comprueba desde el cliente que te puedes conectar al servidor FTP.
Puerto 990 que utilizaremos cuando se active el TLS
Mira el estado de ufw y verifica que el puerto se han añadido. Esto nos
servirá cuando creemos nuestro sertificado TTL/SSL
Los puertos del 40000 al 50000, que se reservarán para el rango de
puertos pasivos que se establecerá en el archivo de configuración
• Muestra la lista de reglas numerada. Tiene que quedarte de esta manera:
Unidad 4 Servicio FTP 26
7.2.- Seguridad con los usuarios locales
7.2.1.- Permitir sólo el acceso al servicio FTP
• Ya tenemos dos usuarios creados con cuenta local en el sistema, uno que se creó
cuando instalamos el servidor y otro que has creado en esta práctica:
user_ftp1.
• Un paso más en la seguridad de nuestro servidor FTP es evitar que este usuario
que hemos creado, inicie sesión en el servidor desde la terminal o incluso se
logen si tienen una GUI instalada para el acceso. Para evitar esto y que sólo
tengan acceso al servicio FTP, debemos cambiar en el servidor el valor de la
shell para este usuario.
• Creamos el archivo solo_FTP en el directorio /bin y escribimos en él:
#!/bin/bash
echo “********************************************”
echo “* ¡¡ATENCIÓN!!! *”
echo “* "ESTA CUENTA SÓLO TIENE ACCESO FTP. *"
echo “* *”
echo “********************************************”
Unidad 4 Servicio FTP 27
• En ese archivo ponemos el mensaje “”¡¡¡ATENCIÓN!!!” “ESTA CUENTA SÓLO
TIENE ACCESO FTP” por si por ejemplo intenta acceder al servidor a un
servicio que no sea FTP.
• Damos permiso de ejecución: sudo chmod a+x /bin/solo_FTP
• Creamos la nueva shell: sudo nano /etc/shells y escribimos al final
/bin/solo_FTP
• Le asignamos la nueva shell que hemos establecido al usuario FTP que creamos:
sudo usermod user_ftp1 -s /bin/solo_FTP
• Con esto tenemos que el usuario tan sólo va a tener acceso FTP al servidor.
• Intenta acceder de manera remota al servidor por SSH desde el cliente y
comprueba que no tienes acceso y que te salta el mensaje de alarma que has
creado.
• Ahora, desde el servidor, cierra la sesión (no reinicies) e intenta logarte de
nuevo como user_ftp1. ¿Qué ocurre?
• De esta forma, el usuario user_ftp1 no tiene acceso al servidor, tan sólo tiene
acceso mediante FTP. Conéctate con ese usuario con Filezilla. ¿Tiene acceso?
Unidad 4 Servicio FTP 28
7.2.2.- Enjaulamos al usuario
• Para dar mayor seguridad, además de negarle el acceso al servidor, vamos a
enjaularlo en su directorio asignado en el servidor FTP.
• Vamos a dar permisos de lectura y escritura al usuario enjaulados. Para ello en
el archivo de configuración deben estar descomentadas las siguientes
etiquetas:
a) local_enable=YES
Con esto estamos indicando que se permiten usuario locales
b) write_enable=YES
Con esto estamos indicando que tienen permiso de lectura y escritura
c) chroot_local_user=YES
Con esto estamos indicando que los usuarios están enjaulados
• Añadimos manualmente la siguiente línea que no existe en el archivo de
configuración: allow_writeable_chroot=YES.
Con esta línea estamos indicando que los usuarios enjaulados tienen permiso de
lectura y escritura en el directorio en el que se encuentran enjaulados. Fuera
de ese directorio no tienen permiso ya que ni siquiera van a tener acceso.
• Por último, para nuestros dos usuarios enjaulados, vamos a indicar cual será su
directorio donde van a poder trabajar en el servidor FTP y vamos a dotarlos de
permisos suficientes. Fuera de ese directorio, nuestros usuarios no van a poder
moverse.
Ejecutamos los siguientes comandos:
➢ Creamos la carpeta /FTP/Archivos dentro de su directorio de inicio
sudo mkdir -p /home/user_ftp1/FTP/Archivos
Unidad 4 Servicio FTP 29
➢ Le quitamos todos los permisos de la carpeta /FTP
sudo chmod 550 /home/user_ftp1/FTP
➢ Le otorgamos todos los permisos en la carpeta /archivos
sudo chmod 750 /home/user_ftp1/FTP/Archivos
➢ Hacemos que el usuario user_ftp1 sea propietario del directorio FTP y
de todo lo que se encuentre debajo de ese directorio.
sudo chown -R user_ftp1: /home/user_ftp1/ftp
• Repetimos los anteriores 4 comandos para el usuario con el que instalaste el
servidor Ubuntu
• Añadimos las siguientes tres líneas con las que configuramos el modo pasivo de
conexión:
a) pasv_enable=YES
b) pasv_min_port=41000
c) pasv_max_port=42000.
Con estas tres líneas estamos configurando el modo pasivo de conexión. El
servidor FTP utiliza por defecto en modo Activo los puertos 20 y 21 en TCP, en
este tema vamos a usar las dos opciones Activo y Pasivo.
Para el modo Pasivo es necesario declarar un grupo de puertos que por supuesto
no puede contener ningún puerto que pueda estar comprometido por otro
servicio. Para este caso escogemos del 41000 al 42000 que ya sabemos que
están dentro de grupo de puertos que abrimos al configurar el firewall del
servidor.
• Con esto ya hemos terminado la configuración de seguridad para los usuarios
que se conecten. Por un lado no pueden conectarse al servidor, y por otro están
enjaulados en sus directorios de trabajo.
Unidad 4 Servicio FTP 30
7.3.- Configuramos VSFTPD con un certificado SSL/TLS
• Por defecto, FTP no hace ninguna encriptación de datos, por lo que el usuario y
la contraseña viajan sin cifrar, con el riesgo que ello supone. Para evitar eso,
utilizaremos SSL/TTL para garantizar la seguridad.
• SSL/TLS es un protocolo o regla de comunicación que permite a los sistemas
informáticos comunicarse entre sí en Internet de forma segura.
7.3.1.- ¿Cómo es el cifrado SSL/TTL?
• Cifrar un mensaje significa codificar el mensaje original para que
solo pueda ser descifrado por el destinatario que queramos. Por
ejemplo, podemos cambiar la palabra “HOLA” a “KRÑD” al mover
cada letra del alfabeto dos lugares hacia adelante. El destinatario conoce la
regla (o clave) e invierte cada letra en dos lugares para leer la palabra real.
• El cifrado SSL/TLS se basa en este concepto con dos claves diferentes para
cifrar y descifrar un mensaje.
• Los dos tipos de claves son:
1. Clave pública
El navegador y el servidor web se comunican codificando y decodificando
información mediante pares de claves públicas y privadas. La clave
pública es una clave criptográfica que el servidor FTP proporciona al
cliente FTP en el certificado SSL/TLS. El cliente FTP utiliza la clave
para cifrar la información antes de enviarla al servidor FTP.
2. Clave privada
Solo el servidor FTP tiene la clave privada. Un archivo cifrado con la
clave privada solo se puede descifrar con la clave pública y viceversa.
Unidad 4 Servicio FTP 31
• Por tanto, el servidor FTP cifra sus mensajes con su clave privada, y el cliente
FTP los descifra con la clave pública del servidor.
Por otro lado, el cliente FTP cifra sus mensajes con la clave pública del servidor
FTP y este los descifrará con su clave privada.
Servidor FTP Cliente FTP
Servidor FTP
Cliente FTP
Unidad 4 Servicio FTP 32
• Autenticación: El servidor FTP envía la clave pública del certificado SSL/TLS al
cliente FTP. El cliente FTP verifica el certificado , por lo tanto puede verificar
que el servidor FTP es quien dice ser.
7.3.2.- Generamos el certificado SSL/TTL
• Como hemos visto, TLS/SSL funciona mediante el uso de una combinación de un
certificado público o clave pública y una clave privada. La clave SSL se
mantiene secreta en el servidor. Se utiliza para cifrar el contenido enviado a
los clientes. El certificado SSL se comparte públicamente con cualquiera que
solicite el contenido.
• Usa el siguiente comando y asegúrate de estar conectado de manera remota al
servidor para instalar allí el certificado:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
• Veamos al detalle qué significa ese comando:
openssl: Esta es la herramienta básica de línea de comandos para crear y
administrar certificados, claves y otros archivos OpenSSL.
req: Especifica el uso del estándar X.509 para la creación de
certificados. Para crear un nuevo certificado X.509, utilizamos req.
-x509: Indicamos que vamos a crear un certificado autofirmado en lugar
de generar una solicitud de firma de certificado, como sucedería
normalmente. Un certificado autofirmado es un certificado SSL que no
ha sido validado por una Autoridad de certificación (CA). Eso es lo que
significa que está firmado por uno mismo
Unidad 4 Servicio FTP 33
Un certificado autofirmado contiene:
a) Una clave púbica,
b) Información acerca del propietario del certificado y la firma del
propietario.
c) Y una clave privada asociada
-nodes: Esto le indica a OpenSSL que omita la opción de proteger el
certificado con una frase de contraseña. Se necesita poder leer el
archivo sin intervención del usuario cuando se inicia el servidor. Una
frase de contraseña evitaría que esto suceda porque los usuarios
tendrían que ingresarla después de cada reinicio.
-days 365: Esta opción establece el período de tiempo que el certificado
se considerará válido. En este caso, está fijado por un año.
-newkey rsa:2048: Esto especifica que queremos generar un nuevo
certificado y una nueva clave al mismo tiempo. La clave será necesaria
para firmar el certificado, por lo que debe crearse junto con el
certificado. Con rsa:2048 indicamos que vamos a crear una clave RSA de
2048 bits.
-keyout: Esta línea le dice a OpenSSL dónde colocar el archivo de clave
privada generado que se está creando.
-out: Esto le indica a OpenSSL dónde colocar el certificado que se está
creando
• Ahora nos va a pedir de manera opcional que ingresemos una serie de datos
personales correspondientes en cada campo que nos aparece. Rellenamos todos
los datos para comprobarlos posteriormente cuando nos conectemos desde el
cliente.
Unidad 4 Servicio FTP 34
• Durante la creación del certificado, hay que estar pendientes, porque nos indica
la ruta donde nos va a crear el certificado. La línea en concreto pondrá:
writing new private key to ‘ruta_donde_lo_crea’
• Cuando termines de crear el certificado, abre el archivo de configuración del
servicio FTP y comenta las últimas dos líneas del archivo que empiezan por
“rsa_”:
Ponemos las dos siguientes líneas:
Con esto, lo que estamos haciendo es apuntar el archivo de configuración a la
dirección del certificado que acabamos de crear. Es decir, vamos a indicar que
utilice el certificado que hemos creado diciéndole la ruta dónde se encuentra
tanto el certificado público (rsa_cert_file) como nuestra clave privada
(rsa_private_key_file)
El archivo de configuración debe quedarnos así:
Unidad 4 Servicio FTP 35
Ahora comprobaremos que tenemos habilitado SSL viendo que la etiqueta
ssl_enable tiene el valor YES. Esta opción habilita el soporte SSL para vsftpd
Debajo escriberemos las siguientes líneas:
allow_anon_ssl=NO
Con esa línea evitamos el inicio de sesión cifrado SSL/TLS
anónimo, es decir, evitamos a los usuarios invitados.
force_local_data_ssl=YES
force_local_logins_ssl=YES
Con estas dos líneas anteriores vamos a forzar el cifrado
SSL/TLS tanto del nombre de usuario/contraseña como de sus
datos para mantenerlos seguros.
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
Unidad 4 Servicio FTP 36
Ahora vamos a insertar las tres líneas anteriores, de las cuales,
la primera nos va a forzar a utilizar el cifrado mejor y más
potente que ofrece TLS y las dos últimas va a deshabilitar el
cifrado SSL que es menos seguro:
require_ssl_reuse=YES
En esta línea indicamos que no es necesario reutilizar SSL, lo que
hará que la conexión sea más segura. Es posible que esto no sea
compatible con algunos clientes FTP más antiguos. Si tienes
problemas de conexión, configurar esta opción en "NO".
ssl_ciphers=HIGH
Continuando con nuestras mejoras de seguridad, en esta línea
agregaremos protección adicional contra ataques Man In The
Middle (MITM) ya que indicamos que utilizaremos suites de
encriptación de alto cifrado, lo que significa que las longitudes
de claves son iguales o superiores a 128 bits, es decir, requerirá
que el servidor utilice conjuntos de cifrado más potentes .
• Ya hemos configurado el servidor FTP para que funcione con el protocolo
SSL/TLS. Cierra el archivo de configuración guardando los cambios.
• Reinicia el servicio FTP y comprueba el estado viendo que está cargado (loaded)
y activo (active)
• Ahora en el siguiente apartado vamos a configurar nuestro sitio en el cliente
para probar la seguridad que acabamos de implementar en nuestro servidor
FTP.
Unidad 4 Servicio FTP 37
8.- AÑADIMOS NUESTRO SITIO EN FILEZILLA
• La mayoría de los clientes de FTP admiten configuraciones de cifrado TLS, por
lo que vamos a comprobar si nuestro servidor FTP de Ubuntu funciona con ese
cifrado.
• Vamos a crear nuestro sitio.
Para ello, desde Filezilla
pulsamos sobre el icono de
gestor de sitios.
• En la ventana que se abre, vamos a comenzar a ingresar los detalles del servidor
FTP de Ubuntu. Le damos el nombre del sitio: Server2SMR y pulsamos aceptar
Unidad 4 Servicio FTP 38
• Ahora podemos meter los datos de nuestro sitio
• Luego haz clic en el botón “Nuevo sitio” y en la ventana que aparece
comenzamos a ingresar los detalles del servidor FTP de Ubuntu.
• Completa todos los detalles requeridos con la información del servidor FTP de
Ubuntu recién creada. Como lo configuramos para usar TLS, también podemos
marcar el cifrado para que sea explícitamente FTP sobre TLS. La configuración
final debería verse así:
• Conéctate ahora desde el cliente Fitezilla para comprobar que la conexión
funciona sobre TLS y mira el certificado si los datos son los que introdujiste al
crearlo.