Estructura del directorio del proyecto local
Servidor_Byte_Path/
├── articulos_html
├── articulos_md
│ ├── cap01_preparacion_entorno.md
│ ├── cap02_seguridad_basica.md
│ ├── cap03_servidor_web_apache.md
│ ├── cap04_contenido_web_estatico.md
│ ├── cap05_organizacion_y_multimedia.md
│ ├── cap06_automatizacion_basica.md
│ ├── cap07_seguridad_y_logs.md
│ ├── cap08_despliegue_en_la_nube.md
│ └── cap09_mantenimiento_y_respaldo.md
├── control
│ └── control_imagenes.ods
├── documentacion
│ ├── bitacora.md
│ └── emojis.md
├── herramientas
├── imagenes
│ ├── optimizadas
│ └── originales
│ └── bit-01.png
├── logs
└── portada
Nota: En principio preparé esta estructura para organizarme mejor ya que se usan capturas de pantalla que hay que redimensionar y optimizar a webp, algunos scripts para automatizar algunas tareas y pensando en que segun aumentasen los articulos y archivos podría ser dificil encontrar muchas cosas. Esta estructura la usé al principio en mi entorno local, luego hice algunas pruebas en un servidor web Apache2 en Debian 12, instalados en un mini pc con bajos recursos con el que cuento en casa, así iba ensayando y probando el despliegue de la web en ese servidor. En este servidor ya no usé algunas carpetas, me centré en las que se utilizaban exclusivamente para la web. Más adelante me atreví con un servidor privado virtual en OVHCloud. En este punto había decidido optimizar el rendimiento de la web usando muy pocas imágenes, exclusivamente las portadas de cada capítulo, alguna miniatura y logo con lo que se simplificó aun más la estructura del directorio en /var/www/bytepath . Simplemente colgaban del directorio raiz los archivos html y css con una carpeta para imágenes de portadas (con sus dimensiones para diseño responsivo).
bytepath
│ ├── README.md
│ ├── apache2-seg.html
│ ├── apache2.html
│ ├── bitacora.html
│ ├── estilos.css
│ ├── imagenes
│ │ ├── portadas
│ │ │ ├── A1C0N00-background-1200px.webp
│ │ │ ├── A1C0N00-background-1800px.webp
............
│ │ │ ├── portada_index_800px.webp
│ │ │ └── redimensionar_portadas.sh
│ │ └── varios
│ │ ├── candado_verde.svg
│ │ ├── cuadrado_verde.svg
│ │ ├── escudo_azul.ico
│ │ └── escudo_azul.svg
│ ├── index.html
│ ├── instalacion_servidor.html
│ ├── intro.html
│ ├── proyecto.html
│ └── seguridad_basica.html
├── bytepath_chronicles_backup_20250618.tar.gz
├── bytepath_chronicles_backup_20250619.tar.gz
├── bytepath_chronicles_backup_20250621.tar.gz
├── crear_copia_seguridad.sh
......
Nota: Cuento con un script para redimensionar y convertir las portadas y otro para realizar copias comprimidas manualmente. Trabajar con SSHFS, montando este directorio en un directorio local y poder usar cualquier herramienta gráfica para editar archivos que están en un servidor web remoto sin entorno de escritorio me ha facilitado mucho el trabajo. En el momento de editar esta parte estoy descubriendo Github y seguramente termine adaptándome a otros flujos de trabajo más abiertos a colaboraciones y trabajo en equipo.
Instalación de Debian 12
Usaré un mini-PC para el entorno de pruebas, una vez todo funciones correctamente se migrará a una instancia virtual en la nube, GCP o AWS.
La instalación del sistema se realizó desde un USB, con Debian 12 sin entorno de escritorio. Una vez completada, lo primero fue poner el entorno en marcha:
- Actualización inicial del sistema.
root@1-bytepath:~# apt update
root@1-bytepath:~# apt upgrade
- Instalación de sudo y adición del usuario rubenrv al grupo de administradores:
root@1-bytepath:~# apt install sudo
root@1-bytepath:~# usermod -aG sudo rubenrv
- Tras reiniciar, verifiqué con id rubenrv que el cambio se aplicó correctamente.
root@1-bytepath:~# id rubenrv
uid=1000(rubenrv) gid=1000(rubenrv) grupos=1000(rubenrv),24(cdrom),25(floppy),27(sudo)...
- Luego instalé el servidor SSH (openssh-server) y comprobé que estuviera activo y funcionando.
rubenrv@1-bytepath:~$ sudo apt install ssh-server
rubenrv@1-bytepath:~$ sudo systemctl status ssh
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-06-25 23:25:44 CEST; 14min ago
......
Todo listo para administrar el sistema de forma remota.
Usuario, hostname y red
Hostname: 1-bytepath Usuario: rubenrv IP: 192.168.8.150/24 Red Local 192.168.8.0/24
Acceso remoto con SSH
Una vez verificado que el servicio SSH está activo y permite conexiones, es momento de reforzar la seguridad del sistema. Para ello, configuraremos el acceso únicamente mediante clave pública y desactivaremos el acceso por contraseña.
- Generar clave SSH (desde el cliente)
rubenrv@debian:~$ ssh-keygen -t ed25519 -C "rubenrv@bytepath"
-t ed25519: indica que se usará el algoritmo de clave ed25519. -C “rubenrv@bytepath”: es un comentario opcional para ayudar a identificar la clave. Este comando creará dos archivos, la clave privada que no se compartirá nunca y la pública que copiaremos en el servidor.
- Copiar la clave pública en el servidor
rubenrv@debian:~$ ssh-copy-id [email protected]
Esto creará el archivo ~/.ssh/authorized_keys en el servidor (si no existe) y añadirá la clave pública.
- Comprobar el acceso con la clave y sin pass.
rubenrv@debian:~$ ssh [email protected]
Linux 1-bytepath 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Jun 25 23:38:34 2025 from 192.168.8.149
rubenrv@1-bytepath:~$
- Eliminar acceso al servidor con contraseña.
rubenrv@1-bytepath:~$ sudo nano /etc/ssh/sshd_config
# CONTENIDO DEL ARCHIVO /etc/ssh/sshd_config (solo las partes relevantes)
# [...] otras configuraciones [...]
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no # <-- CAMBIAR DE 'yes' A 'no', O AÑADIR ESTA LÍNEA
#PermitEmptyPasswords no
# [...] más configuraciones [...]
Con esta configuración evitamos que se nadie pueda intentar conectarse con una pass. La única opción válida es usar el equipo qeu tenga la clave privada.
Por último reiniciamos el servicio ssh y comprobamos el estado del servicio.
rubenrv@1-bytepath:~$ sudo systemctl restart ssh
rubenrv@1-bytepath:~$ sudo systemctl status ssh
[sudo] contraseña para rubenrv:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-06-25 23:25:44 CEST; 32min ago
Docs: man:sshd(8)
.....
Nota: En Debian y derivados, el servicio del servidor SSH se llama
ssh. Sin embargo,sshdtambién funciona como alias y ambos comandos reinician el servicio correctamente:
rubenrv@1-bytepath:~$ sudo systemctl restart ssh
rubenrv@1-bytepath:~$ sudo systemctl restart sshd
Esto puede variar en otras distribuciones, donde
sshdsuele ser el nombre más común del servicio.
Paquetes básicos
Una vez completada la instalación de Debian 12 y configurado el usuario principal, se procede a instalar una serie de herramientas esenciales que facilitarán la administración del servidor y prepararán el entorno para tareas futuras. Algunas herramientas ya se han utilizado antes como sudo u openssh-server.
Actualización del sistema
rubenrv@1-bytepath:~$ sudo apt update && sudo apt upgrade -y
Paquetes de administración
rubenrv@1-bytepath:~$ sudo apt install sudo net-tools curl wget htop bash-completion
sudo: para otorgar permisos administrativos. net-tools: utilidades como ifconfig. curl y wget: herramientas para descargar archivos desde la terminal. htop: monitor interactivo de procesos. bash-completion: autocompletado útil en terminal. lm-sensors: útil para monitorear la salud del equipo. fancontrol: permite controlar la velocidad de los ventiladores. strace: rastrea las llamadas al sistema realizadas por un proceso.
Acceso remoto por SSH
rubenrv@1-bytepath:~$sudo apt install openssh-server
rubenrv@1-bytepath:~$sudo systemctl enable ssh
rubenrv@1-bytepath:~$sudo systemctl start ssh
rubenrv@1-bytepath:~$sudo systemctl status ssh
Servidor web Apache (instalación)
rubenrv@1-bytepath:~$sudo apt install apache2
La configuración del servidor web se tratará en el **Capitulo 03-Servidor Web Apache.
Cierre del capítulo
Resumen rápido
- Instalación mínima de Debian 12 sin entorno gráfico.
- Configuración de acceso remoto vía SSH con autenticación con clave.
- Estructuración del entorno de trabajo y directorios del proyecto.
- Instalación de herramientas administrativas básicas para monitorización y gestión del sistema.
Estado actual del entorno El servidor local está operativo, accesible por SSH, con un entorno organizado y preparado para comenzar con la configuración de seguridad.
¿Y ahora qué? En el próximo capítulo se abordarán las medidas básicas de protección como configurar cortafuegos.