Apuntes DAM
Tema 5 de 7DAW · 2º DAW

Despliegue de Aplicaciones Web

FTP, DNS y Servicios de Directorio

FTP, FTPS y SFTP, modos activo y pasivo y vsftpd, DNS (resolución, registros, ficheros de zona de BIND, dig), LDAP para autenticación centralizada y un método para diagnosticar problemas de red.

55 min lecturaIntermedio

1. Transferir ficheros al servidor

Durante años, la forma habitual de publicar una web fue subir los ficheros por FTP, y todavía lo verás en muchos alojamientos compartidos. FTP es uno de los protocolos más antiguos de internet (1971) y tiene un problema grave: envía el usuario, la contraseña y los ficheros sin cifrar. Cualquiera que escuche la red puede leerlos.

FTP usa dos conexiones: una de control (puerto 21) para los comandos y otra de datos para cada transferencia. En el modo activo, es el servidor quien abre la conexión de datos hacia el cliente, algo que los cortafuegos y el NAT de casa suelen bloquear; en el modo pasivo, el cliente abre ambas, y por eso es el que se usa casi siempre (el servidor debe tener abierto un rango de puertos para ello).

ProtocoloCifradoPuertosCuándo usarlo
FTPNo21 y un rango para datosSolo en redes internas o si no hay alternativa
FTPSSí, FTP sobre TLS21 (o 990) y rango de datosCuando hay que mantener FTP por compatibilidad
SFTPSí, sobre SSH22La opción recomendada: un solo puerto y la seguridad de SSH
scp / rsyncSí, sobre SSH22Copias y sincronizaciones desde la terminal o scripts

Un servidor FTP con vsftpd

Si necesitas montar un servidor FTP, vsftpd (very secure FTP daemon) es el más usado en Linux. Lo esencial de su configuración es desactivar el acceso anónimo, encerrar a cada usuario en su carpeta (chroot), fijar el rango de puertos pasivos y, a ser posible, obligar a usar TLS.

/etc/vsftpd.conf
1anonymous_enable=NO
2local_enable=YES
3write_enable=YES
4chroot_local_user=YES          # cada usuario, encerrado en su carpeta
5allow_writeable_chroot=YES
6pasv_min_port=40000
7pasv_max_port=40100            # abre este rango en el cortafuegos
8ssl_enable=YES                 # FTPS
9force_local_logins_ssl=YES
10force_local_data_ssl=YES
11rsa_cert_file=/etc/ssl/certs/ftp.pem

Y hoy, ni FTP ni SFTP

En un flujo moderno los ficheros no se suben a mano: se hace git push y un sistema de integración continua construye y despliega la aplicación (lo verás en el último tema). SFTP queda para tareas puntuales, como subir un fichero de datos o descargar registros.

2. DNS: la agenda de internet

Los ordenadores se comunican con direcciones IP, pero las personas recordamos nombres. El DNS (Domain Name System) traduce unos en otras. Es una base de datos repartida por todo el mundo y organizada en árbol: los servidores raíz saben quién gestiona .es, los de .es saben quién gestiona tienda.es, y los servidores autoritativos de tienda.es tienen las respuestas definitivas.

Resolver un nombre es preguntar por una dirección

Tu ordenador pregunta
Pide la IP de www.tienda.es a un servidor DNS recursivo (el de tu operadora o 1.1.1.1).
El recursivo investiga
Pregunta a la raíz, luego a .es y por último al servidor de tienda.es, siguiendo las indicaciones.
Y lo recuerda
Guarda la respuesta el tiempo que marca su TTL, para no repetir el viaje con cada visita.
RegistroPara quéEjemplo
A / AAAANombre → dirección IPv4 / IPv6api IN A 203.0.113.20
CNAMEAlias de otro nombrewww IN CNAME @
MXServidores de correo, con prioridad@ IN MX 10 correo.tienda.es.
TXTTexto libre: verificaciones, SPF, DKIM@ IN TXT "v=spf1 mx -all"
NSServidores autoritativos de la zona@ IN NS ns1.tienda.es.
SOADatos de la zona: servidor principal, número de serie, tiemposUno por zona, al principio
/etc/bind/db.tienda.es
1$ORIGIN tienda.es.
2$TTL 3600
3@       IN  SOA ns1.tienda.es. admin.tienda.es. (2025093001 7200 3600 1209600 3600)
4@       IN  NS    ns1.tienda.es.
5@       IN  A     203.0.113.10
6www     IN  CNAME @
7api     IN  A     203.0.113.20
8@       IN  MX 10 correo.tienda.es.
9correo  IN  A     203.0.113.30

En un fichero de zona de BIND, @ representa el propio dominio, y un nombre sin punto final es relativo: api significa api.tienda.es.. Olvidar el punto final en un nombre completo es un error clásico: correo.tienda.es sin punto se convierte en correo.tienda.es.tienda.es.. Cada vez que cambies la zona hay que aumentar el número de serie del SOA para que los servidores secundarios se actualicen.

Comprobar el DNS

bash
1dig www.tienda.es                 # respuesta completa, con TTL
2dig +short tienda.es MX           # solo los servidores de correo
3dig @ns1.tienda.es tienda.es SOA  # preguntar directamente al autoritativo
4nslookup api.tienda.es            # alternativa disponible también en Windows

En la práctica, la mayoría de proyectos no montan su propio BIND: el registrador donde compras el dominio (o servicios como Cloudflare) ofrece un panel donde creas esos mismos registros. Lo que sí es imprescindible es entenderlos, porque un despliegue que «no funciona» muchas veces es un registro DNS mal puesto o un TTL que todavía no ha caducado.

¿Qué es el DNS? Para qué sirve un servidor DNS? Tutorial BÁSICO — Enreta Sistemas

3. Servicios de directorio: LDAP

En una empresa con cientos de empleados, no tiene sentido que cada aplicación guarde sus propios usuarios y contraseñas. Un servicio de directorio centraliza las cuentas, los grupos y sus datos, y las aplicaciones le preguntan. LDAP es el protocolo para consultarlo; OpenLDAP y el Active Directory de Microsoft son las implementaciones más habituales.

Los datos de un directorio se organizan en árbol, y cada entrada se identifica por su nombre distinguido (DN), que recorre el árbol desde la hoja: uid=ana,ou=personas,dc=tienda,dc=es. Las aplicaciones web pueden autenticar contra él: el servidor web o la aplicación comprueba el usuario y la contraseña haciendo un bind contra el directorio, y consulta los grupos para autorizar.

Proteger una zona con el directorio de la empresa
1<Location /intranet>
2    AuthType Basic
3    AuthName "Intranet"
4    AuthBasicProvider ldap
5    AuthLDAPURL "ldaps://ldap.tienda.es/ou=personas,dc=tienda,dc=es?uid"
6    Require ldap-group cn=empleados,ou=grupos,dc=tienda,dc=es
7</Location>

4. Cuando la aplicación «no carga»: diagnosticar la red

Un método ordenado ahorra mucho tiempo. Ve de abajo arriba, comprobando cada capa antes de pasar a la siguiente:

  1. DNS: ¿resuelve el nombre a la IP correcta? dig +short dominio.
  2. Conectividad: ¿se llega a la máquina? ping (si no está filtrado) o traceroute.
  3. Puerto: ¿está abierto y escuchando? nc -zv dominio 443 desde fuera y ss -tlnp en el servidor.
  4. TLS: ¿el certificado es válido para ese nombre y no ha caducado? curl -vI https://dominio.
  5. Servidor web: ¿qué código devuelve y qué dice el registro de errores?
  6. Aplicación: ¿está en marcha? systemctl status o docker ps, y sus registros.

5. Retos

El primer reto interpreta un fichero de zona como lo haría un servidor DNS, resolviendo los nombres relativos; el segundo vigila la caducidad de los certificados, una de las causas más tontas (y más frecuentes) de caída de una web.

Retos de Bash en el IDE

Escribe el script y pulsa Ejecutar tests: se ejecuta en un Linux real con Bash y se prueba con varios casos, algunos ocultos.

🖥️BashLeer una zona DNSMedio

La entrada es un fichero de zona de BIND con una directiva $ORIGIN. Muestra los registros A, AAAA, CNAME y MX, en su orden, con el nombre completo: «www.tienda.com. CNAME tienda.com.». «@» es el propio origen; un nombre que no termina en punto es relativo y se le añade el origen (también en el destino de un CNAME). En los MX muestra la prioridad y el servidor: «tienda.com. MX 10 correo.tienda.com.». Ignora comentarios (;), directivas y otros tipos. Termina con «Registros: N».

⏳
Zona de la tienda
⏳
Test oculto #2
0/2 tests pasados
🖥️BashCertificados a punto de caducarMedio

La primera línea es la fecha de hoy (AAAA-MM-DD) y las siguientes, «dominio fecha_de_caducidad». Por cada certificado caducado escribe «CADUCADO dominio»; por cada uno que caduque en 30 días o menos, «RENOVAR dominio (N días)»; los demás no se muestran. Termina con «Revisados: N».

⏳
Varios dominios
⏳
Test oculto #2
0/2 tests pasados

¿Has terminado este tema?

Crea una cuenta gratis para guardar qué temas has terminado, subir de nivel y ganar medallas.

Guardar mi progreso