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.


