Why Teleport?
홈서버를 외부에서 안전하게 접속하기 위해 기존에는 VPN(Tailscale, WireGuard)이나 단순히 SSH 포트를 개방하는 방식을 사용했습니다. 하지만 다음과 같은 이유로 Teleport를 도입하게 되었습니다.
- Access plane: SSH, RDP, Kubernetes, Database, Web App 등 다양한 프로토콜을 단일 Gateway로 통합 관리
- Audit Log: 누가 언제 어디서 서버에 접속해서 어떤 명령어를 입력했는지 녹화 및 기록 (보안 감사)
- RBAC: 역할 기반 접근 통제
- 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)을 사용한다면:
- Cloudflare Dashboard > Zero Trust > Networks > Tunnels
- Public Hostname 추가
- Service:
HTTPS->localhost:3080(Teleport Proxy 주소) - No TLS Verify: Enable (Teleport가 자체 인증서를 쓰므로)
이렇게 설정하면 443 포트를 공유기에 포트포워딩 하지 않고도 안전하게 도메인을 통해 Teleport 웹 UI에 접속할 수 있습니다.