Configuración y Despliegue de Servidores Web LAMP y FTP en Linux

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 9,23 KB

Arquitectura del Stack LAMP

El stack LAMP es el conjunto de tecnologías de código abierto más utilizado para el despliegue de aplicaciones web dinámicas:

  • Linux: Sistema Operativo (SO).
  • Apache2: Servidor web para protocolos HTTP/HTTPS.
  • MariaDB/MySQL: Sistema de gestión de Bases de Datos (BBDD).
  • PHP: Lenguaje de programación para la lógica del servidor.

Flujo de Funcionamiento

  • Contenido Dinámico: Navegador → Apache → PHP → BBDD → PHP → Apache → Navegador.
  • Contenido Estático: Apache sirve directamente archivos HTML, CSS y JS desde el DocumentRoot.

Instalación y Gestión de Servicios

Para preparar el entorno, ejecutamos los siguientes comandos:

  • Actualización: sudo apt update
  • Instalación: sudo apt install apache2 mariadb-server php php-mysql
  • Verificación: systemctl status apache2 y apache2ctl -v

Gestión de Servicios con systemctl

  • systemctl start/stop/restart/reload apache2
  • reload: Recarga la configuración sin interrumpir las conexiones.
  • restart: Reinicia completamente el servicio.

Rutas y Configuración de Apache

  • /etc/apache2: Directorio principal de configuración.
  • apache2.conf: Configuración global del servidor.
  • ports.conf: Definición de los puertos de escucha.
  • sites-available: Archivos de configuración de sitios disponibles.
  • sites-enabled: Enlaces simbólicos a los sitios activos.
  • /var/www/html: Directorio raíz por defecto para la web.
  • /var/log/apache2/error.log: Registro de errores.
  • access.log: Registro de accesos.

Idea clave: En sites-available creo el archivo .conf; en sites-enabled es donde Apache los carga. El comando a2ensite activa el sitio creando el enlace correspondiente.

Configuración de Virtual Hosts

Permiten alojar varios dominios bajo una misma dirección IP. Apache identifica el dominio mediante la cabecera Host y sirve el DocumentRoot correspondiente.

Archivo de Configuración

Ruta: /etc/apache2/sites-available/misitio.conf

Ejemplo de Configuración

<VirtualHost *:80>
    ServerName midominio.com
    ServerAlias <a href="http://www.midominio.com/">www.midominio.com</a>
    DocumentRoot /var/www/misitio
    ErrorLog ${APACHE_LOG_DIR}/misitio-error.log
    CustomLog ${APACHE_LOG_DIR}/misitio-access.log combined
</VirtualHost>

Activación del Sitio

  1. sudo a2ensite misitio.conf
  2. sudo apache2ctl configtest (Verifica la sintaxis).
  3. sudo systemctl reload apache2

Directivas Principales

  • *:80: Escucha peticiones HTTP en el puerto 80.
  • ServerName: Dominio principal.
  • ServerAlias: Nombres de dominio alternativos.
  • DocumentRoot: Carpeta donde reside la web.
  • ErrorLog: Archivo de registro de errores.
  • CustomLog: Archivo de registro de accesos.

Configuración de DNS

El sistema DNS traduce nombres de dominio a direcciones IP:

  • Registro A: Apunta a una dirección IPv4.
  • CNAME: Crea un alias para otro nombre de dominio.
  • AAAA: Apunta a una dirección IPv6.

Para Virtual Hosts: El DNS debe apuntar a la IP del servidor. Si el ServerName no coincide con el DNS, Apache o Certbot fallarán.

Seguridad con HTTPS y Certbot

  • HTTP: Puerto 80 (sin cifrar).
  • HTTPS: Puerto 443 (cifrado mediante TLS).
  • TLS: Protocolo que cifra la comunicación.
  • Certificado: Vincula un dominio con una clave pública.
  • Let’s Encrypt: Autoridad de Certificación (CA) gratuita.
  • Certbot: Herramienta para automatizar certificados en Apache.

Comandos de Certbot

  • sudo apt install certbot python3-certbot-apache
  • sudo certbot --apache (Instalación automática).
  • sudo certbot renew --dry-run (Prueba de renovación).

Importante: Certbot requiere que el DNS sea correcto y que el puerto 80 esté abierto para la validación.

Flujo de Despliegue Completo

  1. Ejecutar apt update.
  2. Instalar Apache, MariaDB y PHP.
  3. Crear el directorio /var/www/misitio.
  4. Subir el archivo index.
  5. Crear el archivo de Virtual Host (VH).
  6. Configurar ServerName y DocumentRoot.
  7. Activar el sitio con a2ensite.
  8. Realizar un configtest.
  9. Recargar el servicio (reload).
  10. Configurar el registro DNS tipo A.
  11. Probar el acceso vía HTTP.
  12. Ejecutar certbot --apache.
  13. Probar el acceso final vía HTTPS.

Diagnóstico y Resolución de Errores

  • Apache no arranca: Error de sintaxis en .conf. Usar apache2ctl configtest.
  • Puerto 80 ocupado: Verificar con ss -tlnp | grep :80.
  • Error 403: Problemas de permisos o directiva Directory.
  • Error 404: DocumentRoot incorrecto o falta el archivo index.
  • Error 500: Error en PHP o en la aplicación. Revisar con tail -f error.log.
  • Fallo en Certbot: DNS mal configurado o puerto 80 cerrado.

Comandos de Diagnóstico

  • sudo systemctl status apache2
  • sudo journalctl -xe
  • sudo apache2ctl configtest
  • sudo tail -f /var/log/apache2/error.log
  • sudo ss -tlnp | grep :80

Servidor de Archivos FTP con VSFTPD

El protocolo FTP se utiliza para la transferencia de archivos:

  • Puerto de control: 21.
  • Puertos pasivos: 4000-4100.
  • Servidor: vsftpd.
  • Cliente: FileZilla.

Instalación y Configuración

  • sudo apt update && sudo apt install vsftpd -y
  • systemctl status vsftpd
  • Copia de seguridad: sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
  • Edición: sudo nano /etc/vsftpd.conf

Directivas de vsftpd.conf

  • anonymous_enable=NO: Deshabilita accesos anónimos.
  • local_enable=YES: Permite usuarios locales.
  • write_enable=YES: Permite la subida de archivos.
  • chroot_local_user=YES: Enjaula al usuario en su directorio.
  • pasv_enable=YES: Activa el modo pasivo.
  • pasv_min_port=4000 y pasv_max_port=4100.
  • ssl_enable=YES: Activa TLS/FTPS para mayor seguridad.

Reiniciar tras cambios: sudo systemctl restart vsftpd

Seguridad con Firewall (UFW)

  • sudo ufw allow ssh/http/https
  • sudo ufw allow 21/tcp
  • sudo ufw allow 4000:4100/tcp
  • sudo ufw status
  • sudo ufw enable

Comandos Básicos de Administración

  • pwd: Muestra la ruta actual.
  • ls -lah: Lista archivos con detalles y ocultos.
  • cd: Cambia de directorio.
  • mkdir -p: Crea directorios (incluyendo padres).
  • nano: Editor de texto sencillo.
  • cat: Visualiza el contenido de un archivo.
  • cp: Copia archivos o directorios.
  • mv: Mueve o renombra archivos.
  • rm: Borra archivos.
  • rm -rf: ¡Peligro! Borra carpetas de forma recursiva y forzada.

Metodología para Respuestas de Examen

  1. Qué hago: Explicar el objetivo.
  2. Ruta/Fichero: Indicar dónde se trabaja.
  3. Comando/Configuración: Escribir la acción técnica.
  4. Recargo/Reinicio: Aplicar los cambios.
  5. Comprobación: Verificar mediante status, configtest o logs.

Frase resumen: Cliente → DNS → Servidor Linux → Apache/FTP → VirtualHost/PHP/BBDD/archivos → Respuesta.

Entradas relacionadas: