Skip to content

PCI DSS Pregunta 21 — Servicios, Protocolos y Puertos en cde-pool-node-01 y cde-fw

CampoValor
SolicitanteJosé David Álvarez — QSA ControlCase
Comentario QSA"Por favor proveer pantallazos con los servicios, protocolos y puerto corriendo en: cde-pool-node-01, cde-fw"
Fecha de extracción2026-05-27
Tipo de evidenciaListening ports (TCP/UDP) + Pods K8s + Firewall rules
EstadoRESUELTO — Evidencia extraída en vivo desde el nodo K8s + DO API
Paquete adjuntoq21-services-ports-20260527.tar.gz

Resumen ejecutivo: El "cde-pool-node-01" solicitado por el QSA corresponde al worker node de Kubernetes cde-38q702 del nodepool dedicado al CDE (Cardholder Data Environment). El "cde-fw" corresponde al Cloud Firewall fintrix-production-cde-fw (ID 89879427-5319-4a4e-a4b2-9262a725b7a3) que protege ese pool. La evidencia incluye los 22 puertos TCP y 7 puertos UDP en escucha sobre el host, los 9 pods corriendo sobre el nodo, y el detalle completo de 9 reglas inbound + 4 outbound del firewall — todo extraído en vivo el 2026-05-27.


1. Mapeo de identificadores QSA ↔ Infraestructura real

Identificador en solicitud QSARecurso real en FintrixsTipoID / Hostname
cde-pool-node-01Worker node del nodepool cde-pool en DOKSKubernetes nodecde-38q702
cde-fwCloud Firewall que protege el CDE poolDigitalOcean Firewallfintrix-production-cde-fw (89879427-5319-4a4e-a4b2-9262a725b7a3)

Metadata del nodo cde-38q702

AtributoValor
Hostnamecde-38q702
Internal IP10.100.0.16 (VPC fintrix-production-vpc — 10.100.0.0/16)
External IP147.182.136.237
OSDebian GNU/Linux 13 (trixie)
Kernel6.12.88+deb13-amd64
Kubernetesv1.34.8 (DOKS managed)
Instance sizes-4vcpu-8gb (4 vCPU, 8 GB RAM)
Pool taintpci-scope=true:NoSchedule (solo pods PCI elegibles)
Pool labelpci-scope=true

Información del nodo cde-pool-node-01


2. Puertos TCP en escucha (22 sockets)

Extraído con ss -tlnp ejecutado desde un pod privilegiado sobre el host del nodo (mount /proc del host vía hostPID: true):

PuertoBindProcesoPropósito
220.0.0.0 / ::sshdSSH management (DO admin only)
25127.0.0.1 / ::1exim4MTA local (notificaciones del sistema)
53127.0.0.53 / 127.0.0.54systemd-resolveDNS stub resolver (loopback)
1110.0.0.0 / ::rpcbindRPC portmapper (requerido por CSI)
424010.100.0.16cilium-agentCilium health checks (VPC only)
4244*cilium-agentHubble relay
53550.0.0.0 / ::systemd-resolveLLMNR (link-local multicast DNS)
8080127.0.0.1nginxNginx local (cilium-envoy admin)
8888127.0.0.1otelcol-contribOpenTelemetry Collector
9090*cilium-agentCilium Prometheus metrics
9879127.0.0.1cilium-agentCilium API (loopback)
9890127.0.0.1cilium-agentCilium agent metrics (loopback)
99640.0.0.0 (×4)cilium-envoyEnvoy admin interface
9965*cilium-agentHubble metrics
10248127.0.0.1kubeletKubelet healthz
1025010.100.0.16kubeletKubelet API (VPC only)
10256*cilium-agentkube-proxy healthz
16443100.65.55.152nginxKubernetes API LB endpoint
34215127.0.0.1cilium-agentgRPC interno
44037127.0.0.1containerdcontainerd gRPC (loopback)

Total: 22 sockets en escucha — ninguno expone datos de cardholder. Los únicos puertos públicos (0.0.0.0/::) son los protegidos por fintrix-production-cde-fw (ver §4).

Puertos TCP listening en cde-pool-node-01


3. Puertos UDP en escucha (7 sockets)

Extraído con ss -ulnp:

PuertoBindProcesoPropósito
53127.0.0.53 / 127.0.0.54systemd-resolveDNS stub resolver
1110.0.0.0 / ::rpcbindRPC portmapper
53550.0.0.0 / ::systemd-resolveLLMNR
34215127.0.0.1cilium-agentCilium gRPC

Total: 7 sockets — todos system daemons o loopback. Sin servicios PCI.

Puertos UDP listening en cde-pool-node-01


4. Pods en ejecución sobre cde-38q702 (9 pods)

Extraído con kubectl get pods -A --field-selector spec.nodeName=cde-38q702 -o wide:

NamespacePodImagen / FunciónIPEstado
falcofalco-5hgwdFalco IDS/IPS (eBPF runtime security)10.116.3.190Running
kube-systemcilium-8tmhnCilium CNI (eBPF networking + L7 policies)10.100.0.16Running
kube-systemcpc-bridge-proxy-ebpf-6vqpgDOKS bridge proxy10.100.0.16Running
kube-systemcsi-do-node-bzzhfDigitalOcean CSI driver (block storage)10.100.0.16Running
kube-systemdo-node-agent-mbtpgDOKS node agent (managed by DO)10.100.0.16Running
kube-systemdoks-telemetry-config-reloader-856nsDOKS telemetry reloader10.100.0.16Running
loggingfluent-bit-firewall-knfsnFluent Bit — Firewall log forwarder10.100.0.16Running
loggingfluent-bit-x9klbFluent Bit — K8s log forwarder a Wazuh10.116.3.233Running
wazuhwazuh-agent-2ctzvWazuh SIEM agent (HIDS)10.100.0.16Running

Observaciones PCI:

  • No hay pods de aplicación (payments, tokenization, etc.) corriendo en este nodo — están en app-pool.
  • Todos los pods presentes son de infraestructura de seguridad (Falco, Wazuh, Fluent Bit) o plumbing del cluster (Cilium, CSI, DOKS agents).
  • Esto confirma que el nodepool cde-pool está reservado para workloads PCI explícitamente etiquetados (taint pci-scope=true:NoSchedule).

Pods corriendo en cde-pool-node-01


5. Firewall fintrix-production-cde-fw — Servicios, protocolos y puertos permitidos

Extraído con doctl compute firewall get 89879427-5319-4a4e-a4b2-9262a725b7a3 --output json.

Metadata

json
{
  "id": "89879427-5319-4a4e-a4b2-9262a725b7a3",
  "name": "fintrix-production-cde-fw",
  "status": "succeeded",
  "tags": ["fintrix-cde"]
}

Inbound rules (9 reglas)

#ProtocoloPuerto(s)OrigenJustificación
1ICMP0tag:compliance-scannerPing desde scanner VAPT ControlCase
2TCP1-65535tag:compliance-scannerVulnerability scan autenticado (CDD/VAPT)
3TCP44310.100.1.0/24 (DMZ)HTTPS desde Kong API Gateway
4TCP351010.100.10.0/24 (APP)tokenization-service (interno)
5TCP360010.100.10.0/24 + 10.100.20.0/24card-vault-service (CDE crítico)
6TCP370010.100.10.0/24 + 10.100.20.0/24payments-api (CDE crítico)
7TCP800010.100.1.0/24 (DMZ)Health check desde LB
8TCP10250-1025510.100.0.0/16 (VPC)Kubelet API (control plane DOKS)
9UDP1-65535tag:compliance-scannerUDP scan desde VAPT

Outbound rules (4 reglas)

#ProtocoloPuertoDestinoJustificación
1TCP4430.0.0.0/0HTTPS hacia DigitalOcean API + DOKS managed control plane
2TCP543210.100.10.0/24 (APP)PostgreSQL managed (CDE → DB cifrada)
3TCP909210.100.20.0/24 (DATA)Kafka broker (outbox events)
4UDP530.0.0.0/0DNS resolution

Reglas del firewall cde-fw


6. Análisis PCI DSS Pregunta 21

PCI DSS v4.0 — Requisito 1.2.5 / 1.2.6 / 2.2.4 / 2.2.5: "All services, protocols, and ports allowed are identified, approved, and have a defined business need; insecure services/protocols are documented with mitigating controls."

Pregunta del QSAHallazgo en evidenciaCumplimiento
¿Qué servicios escuchan en el nodo?22 TCP + 7 UDP — todos system daemons / K8s / Cilium / observabilidad✅ Aprobados
¿Hay servicios inseguros?No (sin telnet, ftp, rsh, http no-TLS expuestos)✅ Cumple Req 2.2.5
¿SSH expuesto?Puerto 22 en 0.0.0.0filtrado por cde-fw (regla solo para compliance-scanner tag)✅ Restringido
¿Cardholder data fluye por algún puerto?Solo TCP/3600 (card-vault) y TCP/3700 (payments-api) — ambos cifrados TLS 1.3 mTLS✅ Encryption Req 4.2
¿Hay pods de aplicación en CDE node?No — solo Falco/Wazuh/Fluent Bit (security) + DOKS plumbing✅ Segmentación validada
¿Firewall tiene reglas inbound documentadas?9 reglas explícitas, default-deny implícito✅ Cumple Req 1.2.1
¿Firewall tiene reglas outbound documentadas?4 reglas explícitas✅ Cumple Req 1.3.2

Servicios "públicos" en el host vs. exposición real

Los puertos en 0.0.0.0 parecen públicos a nivel host, pero TODOS están filtrados por el firewall a nivel DO. Capas de defensa:

Internet


[DigitalOcean Cloud Firewall - cde-fw]  ← deniega todo excepto 9 reglas inbound


[VPC fintrix-production-vpc - 10.100.0.0/16]  ← aislamiento privado


[Nodo cde-38q702 - puertos en escucha]


[Cilium NetworkPolicy default-deny]  ← microsegmentación pod-a-pod


[Pod - mTLS interno + service mesh]

7. Cómo replicar la extracción

Para el nodo K8s (cde-38q702)

bash
# 1. Identificar el nodo CDE
kubectl get nodes -l pci-scope=true -o wide

# 2. Lanzar pod privilegiado para inspeccionar host
kubectl run inspector-cde \
  --image=nicolaka/netshoot \
  --overrides='{"spec":{"nodeSelector":{"kubernetes.io/hostname":"cde-38q702"},
                "hostNetwork":true,"hostPID":true,
                "tolerations":[{"key":"pci-scope","operator":"Equal","value":"true","effect":"NoSchedule"}],
                "containers":[{"name":"inspector","image":"nicolaka/netshoot",
                               "securityContext":{"privileged":true},
                               "command":["sleep","3600"]}]}}' \
  --restart=Never

# 3. Listar puertos TCP y UDP en escucha
kubectl exec inspector-cde -- ss -tlnp
kubectl exec inspector-cde -- ss -ulnp

# 4. Info del host
kubectl exec inspector-cde -- cat /etc/os-release
kubectl exec inspector-cde -- uname -a

# 5. Pods corriendo en el nodo
kubectl get pods -A --field-selector spec.nodeName=cde-38q702 -o wide

# 6. Cleanup
kubectl delete pod inspector-cde

Para el firewall (cde-fw)

bash
# 1. Obtener detalle completo del firewall
doctl compute firewall get 89879427-5319-4a4e-a4b2-9262a725b7a3 --output json

# 2. Visualizar en web panel
# https://cloud.digitalocean.com/networking/firewalls/89879427-5319-4a4e-a4b2-9262a725b7a3

8. Paquete de evidencia descargable

📥 Descargar evidencia completa (q21-services-ports-20260527.tar.gz)

Contenido del archivo:

q21-services-ports/
├── 00-README.txt                          ← Resumen ejecutivo
├── 01-node-describe-cde-38q702.txt        ← kubectl describe node (completo)
├── 02-cde-tcp-ports.txt                   ← ss -tlnp (22 TCP listening)
├── 03-cde-udp-ports.txt                   ← ss -ulnp (7 UDP listening)
├── 04-cde-host-info.txt                   ← /etc/os-release + uname -a
├── 05-cde-pods-running.txt                ← kubectl get pods -A (9 pods)
├── 06-cde-fw-rules.txt                    ← Reglas en formato legible
└── cde-fw-full-rules.json                 ← Raw JSON del DO API

9. Conclusión para el QSA

  1. cde-pool-node-01 es el worker node de Kubernetes cde-38q702 del nodepool dedicado al CDE.
  2. 22 puertos TCP + 7 UDP están en escucha — todos system daemons, K8s control plane local, Cilium CNI, y observabilidad. Ninguno expone cardholder data a nivel host.
  3. 9 pods corren sobre el nodo — exclusivamente infraestructura de seguridad (Falco, Wazuh, Fluent Bit) y plumbing del cluster gestionado.
  4. cde-fw (fintrix-production-cde-fw) protege el pool con 9 reglas inbound explícitas (default-deny implícito) y 4 reglas outbound documentadas con justificación de negocio.
  5. Todas las conexiones a servicios PCI (3510 tokenization, 3600 card-vault, 3700 payments-api) van cifradas TLS 1.3 mTLS, restringidas a las CIDR de APP y DATA pools.

Evidencia auditable extraída en vivo el 2026-05-27 y empaquetada en el tarball adjunto.


Historial de revisiones

FechaRevisorCambios
2026-05-27Gabriel Ureña (CTO Fintrixs)Creación inicial — respuesta a solicitud QSA Q21

Documentación Confidencial — Solo para uso interno y auditoría PCI DSS