Teleport: Acceso Seguro a Infraestructura

Teleport es una plataforma de acceso unificado que implementa el modelo zero-trust para SSH, Kubernetes, bases de datos y aplicaciones web. Con Teleport puedes eliminar las claves SSH estáticas, centralizar los registros de auditoría y aplicar políticas de acceso basadas en roles en toda tu infraestructura de forma sencilla y segura.

Requisitos Previos

  • Ubuntu 22.04/20.04, Debian 11, o CentOS/Rocky Linux 8+
  • Al menos 2 vCPUs y 4 GB de RAM para el servidor Auth/Proxy
  • Un dominio público con DNS configurable (para el certificado TLS)
  • Puertos 443 y 3025 accesibles en el servidor principal
  • Acceso root o sudo en todos los servidores

Instalación de Teleport

Teleport proporciona un repositorio oficial para las principales distribuciones Linux.

# Agregar el repositorio de Teleport (Ubuntu/Debian)
curl https://apt.releases.teleport.dev/gpg -o /usr/share/keyrings/teleport-archive-keyring.asc
echo "deb [signed-by=/usr/share/keyrings/teleport-archive-keyring.asc] https://apt.releases.teleport.dev/ubuntu $(lsb_release -cs) stable/v14" \
  | tee /etc/apt/sources.list.d/teleport.list

apt update && apt install teleport -y

# Verificar la instalación
teleport version
# Para CentOS/Rocky Linux
yum install -y yum-utils
yum-config-manager --add-repo https://rpm.releases.teleport.dev/teleport.repo
yum install teleport -y

Configuración del Auth Server y Proxy

El Auth Server es el corazón de Teleport: gestiona certificados, usuarios y políticas de acceso.

# Generar configuración inicial del servidor
teleport configure \
  --cluster-name=mi-empresa.teleport.sh \
  --public-addr=teleport.midominio.com:443 \
  --cert-file=/etc/teleport/certs/teleport.crt \
  --key-file=/etc/teleport/certs/teleport.key \
  > /etc/teleport.yaml

Editar /etc/teleport.yaml para una configuración completa:

teleport:
  nodename: teleport-auth
  data_dir: /var/lib/teleport
  log:
    output: stderr
    severity: INFO

auth_service:
  enabled: yes
  cluster_name: "mi-empresa"
  listen_addr: 0.0.0.0:3025
  tokens:
    # Token para agregar nuevos nodos (cambiar en producción)
    - "node:secreto-del-token-nodo"
    - "kube:secreto-del-token-kube"
    - "db:secreto-del-token-db"
  session_recording: "node"

proxy_service:
  enabled: yes
  listen_addr: 0.0.0.0:3080
  web_listen_addr: 0.0.0.0:443
  public_addr: teleport.midominio.com:443
  https_cert_file: /etc/teleport/certs/teleport.crt
  https_key_file: /etc/teleport/certs/teleport.key

ssh_service:
  enabled: yes
  listen_addr: 0.0.0.0:3022
# Habilitar e iniciar el servicio
systemctl enable teleport
systemctl start teleport

# Crear el primer usuario administrador
tctl users add admin --roles=editor,access --logins=root,ubuntu

# Seguir el enlace generado para establecer la contraseña

Agregar Nodos SSH

Cada servidor que quieras gestionar mediante Teleport debe ejecutar el agente de nodo.

# En el servidor que quieres agregar, instalar Teleport
# Luego configurarlo como nodo SSH

cat > /etc/teleport.yaml << 'EOF'
teleport:
  nodename: servidor-web-01
  data_dir: /var/lib/teleport
  auth_token: "secreto-del-token-nodo"
  auth_servers:
    - teleport.midominio.com:3025

ssh_service:
  enabled: yes
  listen_addr: 0.0.0.0:3022
  labels:
    env: produccion
    role: webserver

auth_service:
  enabled: no

proxy_service:
  enabled: no
EOF

systemctl enable teleport && systemctl start teleport
# Verificar que el nodo aparece en el clúster (desde el servidor Auth)
tctl nodes ls

# Conectarse al nodo mediante tsh (cliente de Teleport)
tsh login --proxy=teleport.midominio.com
tsh ssh ubuntu@servidor-web-01

Acceso a Kubernetes

Teleport puede actuar como proxy para clústeres de Kubernetes, integrando el acceso en el mismo sistema de auditoría.

# En el clúster Kubernetes, crear el rol y cuenta de servicio
kubectl apply -f - << 'EOF'
apiVersion: v1
kind: ServiceAccount
metadata:
  name: teleport-kube-agent
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: teleport-kube-agent
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: teleport-kube-agent
    namespace: kube-system
EOF
# Instalar el agente de Kubernetes con Helm
helm repo add teleport https://charts.releases.teleport.dev
helm install teleport-kube-agent teleport/teleport-kube-agent \
  --namespace kube-system \
  --set proxyAddr=teleport.midominio.com:443 \
  --set authToken=secreto-del-token-kube \
  --set kubeClusterName=mi-cluster-produccion

# Acceder al clúster mediante tsh
tsh kube login mi-cluster-produccion
kubectl get nodes

Proxy de Bases de Datos

Teleport puede intermediar el acceso a PostgreSQL, MySQL, MongoDB y otras bases de datos sin exponer credenciales directamente.

# Configurar el servicio de base de datos en teleport.yaml
cat >> /etc/teleport.yaml << 'EOF'

db_service:
  enabled: yes
  databases:
    - name: "postgres-produccion"
      description: "Base de datos PostgreSQL principal"
      protocol: "postgres"
      uri: "postgres-interno.miempresa.local:5432"
      static_labels:
        env: produccion
EOF

systemctl restart teleport
# Conectarse a la base de datos mediante Teleport
tsh db login postgres-produccion
tsh db connect postgres-produccion --db-user=appuser --db-name=miapp

# También con psql directamente
tsh proxy db postgres-produccion --port 15432 &
psql -h localhost -p 15432 -U appuser miapp

Control de Acceso Basado en Roles (RBAC)

Teleport usa roles para definir quién puede acceder a qué recursos y con qué permisos.

# Crear un rol para desarrolladores con acceso limitado
cat > rol-desarrolladores.yaml << 'EOF'
kind: role
version: v6
metadata:
  name: desarrollador
spec:
  allow:
    logins: ["ubuntu", "developer"]
    node_labels:
      env: ["desarrollo", "staging"]
    kubernetes_groups: ["developers"]
    kubernetes_labels:
      env: ["desarrollo"]
    db_users: ["readonly"]
    db_names: ["*"]
    db_labels:
      env: ["desarrollo"]
  deny:
    node_labels:
      env: ["produccion"]
  options:
    max_session_ttl: 8h
    forward_agent: true
    port_forwarding: true
EOF

tctl create rol-desarrolladores.yaml

# Asignar el rol a un usuario
tctl users update nombre.usuario --set-roles=desarrollador

Grabación de Sesiones y Auditoría

Teleport registra automáticamente todas las sesiones SSH y las consultas a bases de datos.

# Ver el registro de eventos de auditoría
tctl events search --query='event="session.start"' --format=json | jq .

# Reproducir una sesión grabada
tsh play <session-id>

# Listar sesiones activas
tsh ls --format=json

# Configurar almacenamiento de sesiones en S3 (en teleport.yaml)
# auth_service:
#   session_recording: "proxy"
#   audit_sessions_uri: "s3://mi-bucket-teleport/sessions"
#   audit_events_uri: "s3://mi-bucket-teleport/events"

Integración con SSO

Teleport soporta GitHub, Google Workspace, Okta, y cualquier proveedor OIDC/SAML.

# Configurar autenticación con GitHub
cat > github-connector.yaml << 'EOF'
kind: github
version: v3
metadata:
  name: github
spec:
  client_id: "tu-github-client-id"
  client_secret: "tu-github-client-secret"
  redirect_url: "https://teleport.midominio.com/v1/webapi/github/callback"
  display: "GitHub"
  teams_to_roles:
    - organization: "mi-organizacion"
      team: "sre-team"
      roles: ["editor", "access"]
    - organization: "mi-organizacion"
      team: "developers"
      roles: ["desarrollador"]
EOF

tctl create github-connector.yaml

# Iniciar sesión mediante GitHub
tsh login --proxy=teleport.midominio.com --auth=github

Solución de Problemas

El nodo no aparece en el clúster:

# Verificar conectividad desde el nodo al servidor Auth
telnet teleport.midominio.com 3025

# Revisar logs del servicio
journalctl -u teleport -f

# Verificar que el token es correcto
tctl tokens ls

Error de certificado TLS:

# Verificar fechas del certificado
openssl x509 -in /etc/teleport/certs/teleport.crt -noout -dates

# Teleport también puede gestionar certificados con Let's Encrypt automáticamente
# En teleport.yaml:
# proxy_service:
#   acme:
#     enabled: yes
#     email: [email protected]

Problemas de acceso a Kubernetes:

# Verificar estado del agente
kubectl get pods -n kube-system | grep teleport

# Ver logs del agente
kubectl logs -n kube-system -l app=teleport-kube-agent

Conclusión

Teleport proporciona una solución completa de acceso zero-trust que elimina la gestión de claves SSH estáticas y centraliza el control de acceso en toda tu infraestructura. Con su sistema de certificados de corta duración, grabación de sesiones y RBAC granular, cumples fácilmente con los requisitos de auditoría y seguridad en entornos de producción.