Blog

  • Despliegue de Proxmox VE 8: ZFS Mirror, Almacenamiento y Primer Contenedor LXC

    Proxmox Virtual Environment (PVE) 8 es la plataforma hiperconvergente de código abierto por excelencia para laboratorios de sistemas y entornos de producción. En esta guía detallamos su despliegue con almacenamiento ZFS y el primer contenedor LXC.

    1. Configuración de Red VLAN-Aware en Proxmox

    Para permitir que las máquinas virtuales y contenedores puedan etiquetar tráfico en distintas VLANs a través de la tarjeta física, configuramos el puente de red vmbr0 como VLAN aware en /etc/network/interfaces:

    auto lo
    iface lo inet loopback
    
    iface eno1 inet manual
    
    auto vmbr0
    iface vmbr0 inet manual
            bridge-ports eno1
            bridge-stp off
            bridge-fd 0
            bridge-vlan-aware yes
            bridge-vids 2-4094
    
    # IP de gestión del nodo en la VLAN 10
    auto vmbr0.10
    iface vmbr0.10 inet static
            address 10.10.10.10/24
            gateway 10.10.10.1
            dns-nameservers 10.10.10.1

    2. Creación del Primer Contenedor LXC Ultraligero

    pct create 100 local:vztmpl/debian-12-standard_12.2-1_amd64.tar.zst   --hostname proxy01.danielsh.es   --cores 2   --memory 1024   --swap 512   --net0 name=eth0,bridge=vmbr0,tag=20,ip=10.10.20.100/24,gw=10.10.20.1   --storage tank-zfs   --onboot 1   --start 1
  • Guía de Subnetting VLSM y Cálculo de Máscaras en IPv4 con Ejemplos Reales

    El direccionamiento VLSM (Variable Length Subnet Masking) es una de las competencias centrales en el currículo de ASIR (Planificación y Administración de Redes). Permite optimizar el espacio de direcciones IPv4 asignando máscaras de longitud variable adaptadas exactamente a las necesidades de cada departamento o subred.

    1. Principio Fundamental de VLSM

    A diferencia del subnetting tradicional de longitud fija (FLSM), con VLSM ordenamos los requerimientos de mayor a menor número de hosts necesarios para evitar el solapamiento de rangos:

    • Fórmula de hosts: 2^h - 2 >= Hosts requeridos (restando Red y Broadcast).
    • Máscara resultante: /prefijo = 32 - h bits de host.

    2. Ejemplo de Cálculo Práctico

    Partiendo del bloque 192.168.10.0/24, necesitamos satisfacer tres departamentos:

    SubredHosts NecesariosBits de Host (h)Prefijo CIDRDirección de RedRango ÚtilBroadcast
    VLAN 10 (Servidores)50 hostsh=6 (2^6-2 = 62)/26 (255.255.255.192)192.168.10.0192.168.10.1 – 192.168.10.62192.168.10.63
    VLAN 20 (Oficina)25 hostsh=5 (2^5-2 = 30)/27 (255.255.255.224)192.168.10.64192.168.10.65 – 192.168.10.94192.168.10.95
    VLAN 30 (Gestión)10 hostsh=4 (2^4-2 = 14)/28 (255.255.255.240)192.168.10.96192.168.10.97 – 192.168.10.110192.168.10.111
  • Nginx Reverse Proxy con SSL y Docker Compose

    Un proxy inverso es una pieza clave en cualquier infraestructura de servidores: permite centralizar la terminación SSL, ocultar las IPs de los servicios internos y balancear la carga.

    1. Archivo docker-compose.yml

    version: '3.8'
    
    services:
      nginx-proxy:
        image: nginx:alpine
        container_name: nginx-proxy
        restart: unless-stopped
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./nginx.conf:/etc/nginx/nginx.conf:ro
          - ./conf.d:/etc/nginx/conf.d:ro
          - ./certs:/etc/nginx/certs:ro
        networks:
          - proxy-net
    
    networks:
      proxy-net:
        external: true

    2. Configuración de VirtualHost con Proxy Pass

    server {
        listen 80;
        server_name servicio.danielsh.es;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name servicio.danielsh.es;
    
        ssl_certificate /etc/nginx/certs/fullchain.pem;
        ssl_certificate_key /etc/nginx/certs/privkey.pem;
    
        location / {
            proxy_pass http://contenedor_servicio:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
  • Chuleta de Comandos Esenciales de Red en Linux (ip, ss, dig, tcpdump)

    En las distribuciones modernas de Linux, el paquete tradicional net-tools (ifconfig, netstat, route) ha sido sustituido por iproute2 y herramientas modernas de diagnóstico.

    1. Gestión de Interfaces e IPs con ‘ip’

    # Listar todas las interfaces y sus IPs con formato legible
    ip -br a
    
    # Ver la tabla de enrutamiento del kernel
    ip route show
    
    # Añadir una IP temporal a una interfaz
    sudo ip addr add 192.168.10.50/24 dev eth0

    2. Diagnóstico de Sockets y Puertos con ‘ss’

    # Ver todos los puertos TCP y UDP a la escucha con el proceso asociado
    sudo ss -tulpn
    
    # Filtrar sockets que estén escuchando en el puerto 80 o 443
    sudo ss -tlpn 'sport = :http or sport = :https'

    3. Captura de Tráfico con ‘tcpdump’

    # Capturar tráfico en la interfaz eth0 filtrando por puerto DNS (53)
    sudo tcpdump -i eth0 -n port 53
    
    # Capturar paquetes entre un host específico y guardarlos en fichero pcap
    sudo tcpdump -i eth0 host 10.10.10.1 -w captura_red.pcap
  • Guía de Securización Inicial de un Servidor Linux (Hardening)

    El proceso de securización inicial (o hardening) es el primer paso obligatorio al poner en marcha un nuevo servidor Linux en cualquier infraestructura, ya sea en un entorno de pruebas o en producción.

    1. Actualización Completa del Sistema

    sudo apt update && sudo apt upgrade -y
    sudo apt autoremove -y && sudo apt clean

    2. Creación de Usuario no privilegiado con sudo

    adduser sysadmin
    usermod -aG sudo sysadmin

    3. Securización de SSH con Claves ED25519

    Generamos un par de claves seguras en nuestro equipo cliente y deshabilitamos la autenticación por contraseña y el acceso directo de root en /etc/ssh/sshd_config:

    PermitRootLogin no
    PasswordAuthentication no
    PubkeyAuthentication yes
    X11Forwarding no
    MaxAuthTries 3

    4. Configuración del Cortafuegos UFW y Fail2ban

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    sudo ufw allow 22/tcp
    sudo ufw enable
    
    sudo apt install fail2ban -y
    sudo systemctl enable --now fail2ban