Arquitectura VPC Segura & Bastion Host
Documentación técnica del despliegue de red aislada en AWS: segmentación de subredes públicas y privadas, host de salto seguro, servidor Nginx y emisión de certificados SSL válidos ante autoridades certificadoras.
Topología de Red y Flujo de Tráfico
Segmentación estricta entre la capa de acceso perimetral (DMZ / Bastion) y la capa de cómputo privado sin salida directa a la WAN.
| IP Pública | 3.128.255.97 |
| IP Interna | 10.0.1.49 |
| Servicios | HTTPS (443), SSH (22) |
| Salida WAN | Internet Gateway (0.0.0.0/0) |
| IP Pública | Ninguna |
| IP Interna | 10.0.2.x |
| Acceso | Solo vía red local interna |
| Entrada Ingress | Referencia a sec-publica |
Flujo Técnico de Despliegue
Resumen de las fases ejecutadas mediante AWS CLI y scripts de inicialización automatizada.
Red & Enrutamiento
Aislamiento de la infraestructura con VPC segmentada y enrutamiento perimetral.
- VPC creada con bloque
10.0.0.0/16. - Subred pública
10.0.1.0/24con asignación de IP pública. - Subred privada
10.0.2.0/24aislada. - Internet Gateway vinculado con tabla de ruteo
0.0.0.0/0 -> IGW.
Firewalls & Acceso
Seguridad basada en el principio de mínimo privilegio y referencias de grupo dinámicas.
- Par de llaves SSH (
mi-llave.pem). sec-publica: Ingress abierto para 443 (HTTPS), 80 (HTTP), 22 (SSH) e ICMP.sec-privada: Ingress restringido a--source-group sec-publica.
Aprovisionamiento EC2
Instancias t3.micro bajo Amazon Linux 2023 con arranque desatendido.
- Script
user_data.shpara instalación automática de Nginx. - Instancia pública configurada como Web Server + Bastion Host.
- Instancia privada lista para servicios internos sin exposición.
Certificados SSL & Resolución de Advertencias
Análisis del error de certificado en navegadores al usar IPs directas y solución mediante ACME / Let's Encrypt.
https://3.128.255.97), el navegador no puede validar la cadena de confianza y muestra una alerta de seguridad preventiva.
3-128-255-97.sslip.io, el cual resuelve directamente a tu IP pública. Mediante Certbot con el método --webroot, Let's Encrypt validó el desafío HTTP-01 y emitió un certificado TLS/SSL oficial reconocido globalmente con renovación desatendida.
# Redirección automática HTTP a HTTPS server { listen 80 default_server; server_name _; location /.well-known/acme-challenge/ { allow all; } location / { return 301 https://$host$request_uri; } } # Servidor HTTPS con Certificado Oficial Let's Encrypt server { listen 443 ssl default_server; http2 on; server_name 3-128-255-97.sslip.io 3.128.255.97; root /usr/share/nginx/html; ssl_certificate "/etc/letsencrypt/live/3-128-255-97.sslip.io/fullchain.pem"; ssl_certificate_key "/etc/letsencrypt/live/3-128-255-97.sslip.io/privkey.pem"; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384; }
Comandos de Acceso SSH
Guía de comandos para conectarse a la instancia pública y saltar de forma segura a la instancia privada.
# 1. Iniciar el servicio ssh-agent en Windows (PowerShell) Start-Service ssh-agent # 2. Cargar tu llave privada a la memoria de tu PC (sin copiarla al servidor) ssh-add .\mi-llave.pem # 3. Conectarte a la pública reenviando credenciales (-A) ssh -A ec2-user@3.128.255.97 # 4. Desde la sesión de la pública, saltar directamente a la privada ssh ec2-user@<IP_PRIVADA>
# Conexión en un solo paso usando la pública como host de salto (-J) ssh -i .\mi-llave.pem -J ec2-user@3.128.255.97 ec2-user@<IP_PRIVADA>
# Conexión directa a la instancia pública / Bastion ssh -i .\mi-llave.pem ec2-user@3.128.255.97
# Solución al error "UNPROTECTED PRIVATE KEY FILE" en Windows icacls "mi-llave.pem" /inheritance:r /grant:r "$($env:USERNAME):(R)"
Buenas Prácticas & Conceptos Clave
Fundamentos aplicados para evitar errores de arquitectura, seguridad y costos.
ICMP opera en Capa 3 (Red), no en TCP. Para habilitar ping en AWS Security Groups se debe autorizar el protocolo icmp con puerto -1.
AWS rechaza el prefijo sg- en el parámetro --group-name ya que está reservado para los identificadores automáticos generados por el sistema.
En sec-privada se usó --source-group sec-publica, permitiendo comunicación dinámica entre instancias sin acoplamiento a IPs fijas.
Al concluir las pruebas de laboratorio, terminar las instancias con aws ec2 terminate-instances para evitar consumos de cómputo e IPs públicas.