intermediate Por Mathias Paulenko

Plantilla de Politica de Segmentacion de Red

Una plantilla para documentar zonas de seguridad de red, reglas de segmentacion y controles de trafico entre ambientes e inquilinos.

Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.

Descripcion General

Una Politica de Segmentacion de Red define como la red de una organizacion se divide en zonas aisladas segun niveles de confianza, sensibilidad de datos y requisitos funcionales. Esta plantilla documenta el proposito de cada zona, el trafico permitido entre zonas y los controles que hacen cumplir el aislamiento. Soporta la arquitectura de confianza cero y el cumplimiento con estandares como PCI-DSS, HIPAA y SOC 2.

Cuando Usar

  • For alternatives, see Zero Trust Architecture — Never Trust, Always Verify.

  • Definir la arquitectura de red para un nuevo entorno cloud o data center.

  • Prepararse para una auditoria de seguridad o certificacion de cumplimiento.

  • Incorporar un nuevo inquilino o unidad de negocio que necesita aislamiento.

  • Despues de un incidente de movimiento lateral o brecha de segmentacion.

  • Migrar desde una red plana a un modelo de confianza cero.

Prerequisitos

  • Un inventario de subnets, VPCs y redes virtuales actuales.
  • Un esquema de clasificacion de datos que identifique datos sensibles vs publicos.
  • Una lista de sistemas criticos y sus patrones de comunicacion.
  • Propiedad de los equipos de red, seguridad y plataforma.

Solucion

Plantilla

1. Declaracion de Politica

Todos los sistemas de produccion, datos sensibles y rutas de acceso privilegiado deben residir en segmentos de red separados de las redes publicas, de desarrollo e invitados. El trafico entre segmentos solo se permite a traves de rutas aprobadas, inspeccionado por firewalls y registrado para monitoreo.

2. Zonas de Red

ZonaNivel de ConfianzaPropositoEjemplos
PublicaNo confiablePuntos de entrada a internetBalanceadores, CDN, WAF
DMZBajoServicios que aceptan trafico publicoServidores web, API gateways
AplicacionMedioLogica interna de negocioServicios de aplicacion, microservicios
DatosAltoBases de datos y almacenamiento persistentePostgreSQL, S3, caches
GestionAltoInterfaces administrativasBastion, VPN, jump hosts
DesarrolloRestringidoCargas de trabajo de ingenieria y pruebaCI/CD runners, VMs de dev
InvitadaNo confiableAcceso de visitantes o contratistasWi-Fi invitado, VPN contratista

3. Matriz de Trafico Permitido

Zona OrigenZona DestinoPermitidoProtocolo / PuertoJustificacionControl
PublicaDMZSiHTTPS 443Trafico web publicoWAF + firewall
DMZAplicacionSiHTTPS 443Peticiones APIFirewall de aplicacion
AplicacionDatosSiEspecifico de BDConsultas de aplicacionFirewall de base de datos
DesarrolloProduccionNoCualquieraSeparacion de deberesNegacion por defecto
InvitadaGestionNoCualquieraProteger rutas adminNegacion por defecto

4. Controles de Segmentacion

ControlImplementacionDuenoFrecuencia
Reglas de firewallSecurity groups cloud / firewall on-premEquipo de redRevision trimestral
Tablas de ruteoRuteo a nivel de subnet impuestoEquipo de plataformaPor cambio
ACLs de redFiltrado stateless adicionalEquipo de seguridadRevision trimestral
MicrosegmentacionPoliticas a nivel de carga de trabajoEquipo de plataformaPor cambio
Filtrado DNSBloquear dominios maliciosos conocidosEquipo de seguridadContinuo
VPN / Confianza ceroAcceso remoto basado en identidadEquipo IAMPor cambio

5. Manejo de Excepciones

ID ExcepcionDescripcionRiesgoAprobado PorVencimientoMonitoreo
EX-001Acceso dev a staging DBMedioLider de seguridad2026-09-30Grabacion de sesion
EX-002Integracion de proveedor por VPNBajoOficial de cumplimiento2026-12-31Logs de trafico

6. Roles y Responsabilidades

RolResponsabilidad
CISOPosee la politica y acepta riesgos
Equipo de redImplementa reglas de firewall y ruteo
Equipo de seguridadRevisa excepciones y valida controles
Equipo de plataformaAplica microsegmentacion y politicas cloud
Equipo de cumplimientoMapea la politica a marcos y audita evidencia

Explicacion

La segmentacion limita el radio de explosion de una brecha al impedir que los atacantes se muevan lateralmente entre zonas. La politica convierte una arquitectura de red abstracta en reglas aplicables, justificaciones documentadas y duenos responsables. Combinar segmentacion gruesa con microsegmentacion provee defensa en profundidad.

Variantes

  • Politica de segmentacion cloud-native: Usa VPCs, security groups y controles de red basados en IAM en AWS, Azure o GCP.
  • Politica de red de contenedores: Se enfoca en NetworkPolicy de Kubernetes, service meshes y aislamiento por namespaces.
  • Segmentacion multi-inquilino: Define aislamiento entre clientes, unidades de negocio o ambientes en una plataforma compartida.
  • Segmentacion critica air-gap: Documenta segmentos completamente aislados para sistemas de control industrial o alta sensibilidad.

Lo que funciona

  • Comienza con una postura de negacion por defecto y permite explicitamente el trafico requerido.
  • Documenta la justificacion de negocio para cada flujo entre zonas.
  • Evita reglas demasiado amplias que abarquen multiples zonas.
  • Automatiza la validacion de reglas usando pruebas de alcance de red.
  • Revisa las reglas de firewall trimestralmente y despues de cambios de arquitectura.
  • Registra y monitorea el trafico denegado por indicadores de ataque.
  • Mapea los requisitos de la politica a controles de cumplimiento.

Errores Comunes

  • Dejar produccion y desarrollo en el mismo segmento de red.
  • Crear reglas de firewall sin documentar su proposito.
  • Permitir rangos IP amplios en lugar de cargas de trabajo especificas.
  • No revisar excepciones y dejarlas vencer.
  • Ignorar el trafico este-oeste entre servicios de aplicacion.
  • Depender solo de firewalls perimetrales sin segmentacion interna.

Soluciones Avanzadas

Pruebas automatizadas de alcance de red con AWS

Verifica que las reglas de segmentacion se cumplan realmente probando el alcance entre zonas:

import boto3
from dataclasses import dataclass
from typing import List, Tuple

@dataclass
class ReachabilityTest:
    source_instance: str
    destination_ip: str
    destination_port: int
    expected_result: str  # "allow" or "deny"
    zone_pair: str  # e.g., "DMZ -> Application"

class NetworkReachabilityValidator:
    def __init__(self, region: str = "us-east-1"):
        self.ssm = boto3.client("ssm", region_name=region)
        self.ec2 = boto3.client("ec2", region_name=region)

    def run_test(self, test: ReachabilityTest) -> Tuple[bool, str]:
        """Run a single reachability test via SSM."""
        try:
            response = self.ssm.send_command(
                InstanceIds=[test.source_instance],
                DocumentName="AWS-RunShellScript",
                Parameters={
                    "commands": [
                        f"timeout 5 bash -c 'echo > /dev/tcp/{test.destination_ip}/{test.destination_port}' "
                        f"2>/dev/null && echo 'REACHABLE' || echo 'UNREACHABLE'"
                    ]
                },
            )
            command_id = response["Command"]["CommandId"]

            import time
            time.sleep(5)

            output = self.ssm.get_command_invocation(
                CommandId=command_id,
                InstanceId=test.source_instance,
            )

            actual = "allow" if "REACHABLE" in output.get("StandardOutputContent", "") else "deny"
            passed = actual == test.expected_result
            status = "PASS" if passed else "FAIL"
            message = f"{status}: {test.zone_pair} - Expected {test.expected_result}, got {actual}"
            return passed, message
        except Exception as e:
            return False, f"ERROR: {test.zone_pair} - {str(e)}"

    def validate_segmentation(self, tests: List[ReachabilityTest]) -> None:
        """Run all reachability tests and report results."""
        passed = 0
        failed = 0
        for test in tests:
            ok, msg = self.run_test(test)
            print(msg)
            if ok:
                passed += 1
            else:
                failed += 1
        print(f"\nResults: {passed} passed, {failed} failed out of {len(tests)} tests")

# Example usage
tests = [
    ReachabilityTest("i-dmz001", "10.0.2.10", 443, "allow", "DMZ -> Application"),
    ReachabilityTest("i-dmz001", "10.0.3.10", 5432, "deny", "DMZ -> Data"),
    ReachabilityTest("i-app001", "10.0.3.10", 5432, "allow", "Application -> Data"),
    ReachabilityTest("i-dev001", "10.0.3.10", 5432, "deny", "Development -> Data"),
]

validator = NetworkReachabilityValidator(region="us-east-1")
validator.validate_segmentation(tests)

Microsegmentacion de Kubernetes con politicas de red Calico

Define controles detallados de trafico este-oeste entre workloads de Kubernetes:

# calico-default-deny.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all-namespaces
  namespace: kube-system
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress
---
# calico-allow-payment-flow.yaml
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-payment-to-database
  namespace: payment
spec:
  selector: app == "payment-service"
  types:
    - Egress
  egress:
    - action: Allow
      destination:
        selector: app == "postgres"
        namespaceSelector: name == "database"
      protocol: TCP
      destinationPorts:
        - 5432
    - action: Deny
      destination:
        selector: all()

Terraform para hacer cumplir la segmentacion como codigo

Define y aplica la segmentacion de red usando infraestructura como codigo:

# modules/segmentation/main.tf

variable "environment" {
  type        = string
  description = "Environment name (prod, staging, dev)"
}

variable "allowed_ingress" {
  type = list(object({
    source_cidr = string
    port        = number
    description = string
  }))
  default = []
}

resource "aws_security_group" "segment" {
  name        = "${var.environment}-segment-sg"
  description = "Security group for ${var.environment} network segment"
  vpc_id      = var.vpc_id

  # Default deny all ingress
  ingress {
    description = "Default deny"
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = []
  }

  # Explicit allow rules from variable
  dynamic "ingress" {
    for_each = var.allowed_ingress
    content {
      description = ingress.value.description
      from_port   = ingress.value.port
      to_port     = ingress.value.port
      protocol    = "tcp"
      cidr_blocks = [ingress.value.source_cidr]
    }
  }

  # Default deny all egress (override with specific rules)
  egress {
    description = "Default deny"
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = []
  }

  tags = {
    Environment = var.environment
    ManagedBy   = "terraform"
    Policy      = "segmentation"
  }
}

# Example usage for production segment
module "prod_segment" {
  source = "./modules/segmentation"

  environment = "prod"
  vpc_id      = aws_vpc.main.id

  allowed_ingress = [
    { source_cidr = "10.0.1.0/24", port = 443, description = "DMZ to Application" },
    { source_cidr = "10.0.4.0/24", port = 22, description = "Management SSH" },
  ]
}

Preguntas frecuentes

Cual es la diferencia entre una VLAN y la microsegmentacion?
Una VLAN es un limite de capa 2, tipicamente grueso y basado en subnet. La microsegmentacion aplica politicas a cargas de trabajo o identidades individuales, a menudo usando redes definidas por...
La segmentacion reemplaza un firewall?
No. La segmentacion define la arquitectura; los firewalls, ACLs y politicas de red son los controles que la hacen cumplir. Trabajan juntos.
Como probamos la segmentacion ante un auditor?
Provee diagramas de red, inventarios de reglas de firewall, matrices de trafico, logs de excepciones y evidencia de revisiones periodicas. Las pruebas automaticas de alcance agregan evidencia tecnica...