Why Teleport?

홈서버를 외부에서 안전하게 접속하기 위해 기존에는 VPN(Tailscale, WireGuard)이나 단순히 SSH 포트를 개방하는 방식을 사용했습니다. 하지만 다음과 같은 이유로 Teleport를 도입하게 되었습니다.

  1. Access plane: SSH, RDP, Kubernetes, Database, Web App 등 다양한 프로토콜을 단일 Gateway로 통합 관리
  2. Audit Log: 누가 언제 어디서 서버에 접속해서 어떤 명령어를 입력했는지 녹화 및 기록 (보안 감사)
  3. RBAC: 역할 기반 접근 통제
  4. No VPN: 별도의 VPN 클라이언트 없이 웹 브라우저만으로도 터미널 접속 가능

더 자세한 정보는 Teleport 공식 홈페이지공식 문서(Documentation)를 참고하세요.


Installation

우분투 서버에 Teleport를 설치합니다. 아래 명령어는 v18.4.0 버전을 설치하는 스크립트입니다. 최신 버전은 다운로드 페이지에서 확인할 수 있습니다.

# Teleport v18.4.0 설치
curl https://goteleport.com/static/install.sh | bash -s 18.4.0

설치가 완료되면 systemctl 서비스가 등록됩니다.


Configuration

Teleport 설정을 위해 구성 파일을 편집합니다.

파일 경로: /etc/teleport.yaml

version: v3
teleport:
  nodename: kiglo-home
  data_dir: /var/lib/teleport
  log:
    output: stderr
    severity: DEBUG
    format:
      output: text
  ca_pin: ""
  diag_addr: ""
auth_service:
  enabled: "yes"
  listen_addr: 0.0.0.0:3025
  cluster_name: kiglo-teleport
  # Proxy 리스너 모드를 multiplex로 설정하면 단일 포트(443)로 여러 서비스 처리 가능
  proxy_listener_mode: multiplex
  web_idle_timeout: 1h
ssh_service:
  enabled: "no"  # 이 노드 자체의 SSH 서비스 활성화 여부 (필요에 따라 yes/no)
proxy_service:
  enabled: "yes"
  # 외부에서 접속할 도메인 주소 (Cloudflare 등에서 연동한 도메인)
  public_addr: "{your-teleport-domain}:443"
  web_listen_addr: https://0.0.0.0:3080
  listen_addr: 0.0.0.0:80

주의: public_addr에는 본인이 소유한 도메인(예: teleport.domain.com:443)을 입력해야 합니다.

설정을 마친 후 서비스를 시작합니다.

sudo systemctl enable teleport
sudo systemctl start teleport

Domain Setup (with Cloudflare)

public_addr로 설정한 도메인을 통해 외부에서 접속하려면 DNS 설정이 필요합니다. 홈서버의 공인 IP가 유동 IP라면 DDNS 등을 활용하거나, Cloudflare Tunnel을 사용하는 것이 보안상 훨씬 안전합니다.

만약 Cloudflare Tunnel (cloudflared)을 사용한다면:

  1. Cloudflare Dashboard > Zero Trust > Networks > Tunnels
  2. Public Hostname 추가
  3. Service: HTTPS -> localhost:3080 (Teleport Proxy 주소)
  4. No TLS Verify: Enable (Teleport가 자체 인증서를 쓰므로)

이렇게 설정하면 443 포트를 공유기에 포트포워딩 하지 않고도 안전하게 도메인을 통해 Teleport 웹 UI에 접속할 수 있습니다.